Token EVERBURN

Overview ERC20

Price
$0.00 @ 0.000000 AVAX
Fully Diluted Market Cap
Total Supply:
1,000,000,000 EVB

Holders:
532 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Everburn is a hyper-deflationary reflection token.


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EVB

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-05
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * SAFEMATH LIBRARY
 */
library SafeMath {
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IBEP20 {
    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);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WAVAX() external pure returns (address);

    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 addLiquidityAVAX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountAVAX, uint liquidity);

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

    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;// excluded dividend
        uint256 totalRealised;
    }

    IBEP20 Token1 = IBEP20(0xc7198437980c041c805A1EDcbA50c1Ce5db95118);
    address WAVAX = 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;// to be shown in UI
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
    uint256 public Token1Decimals = 6;
    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 10 * (10 ** Token1Decimals);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
        ? IDEXRouter(_router)
        : IDEXRouter(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        _token = msg.sender;
    }

    function getMinPeriod() external view  returns (uint256) {
        return minPeriod ;
    }


    function GetDistribution() external view  returns (uint256) {
        return minDistribution ;
    }
    
     
    function setPrintToken(address _printToken, uint256 _printTokenDecimals)
        external
        onlyToken
    {
        Token1 = IBEP20( _printToken);
        Token1Decimals = _printTokenDecimals;
        minDistribution = 10 * (10 ** Token1Decimals);
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore =Token1.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WAVAX;
        path[1] = address(Token1);

        router.swapExactAVAXForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = Token1.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
        && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            Token1.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }
/*
returns the  unpaid earnings
*/
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract EVB is IBEP20, Auth {
    using SafeMath for uint256;

    uint256 public constant MASK = type(uint128).max;

    address public Token1 = 0xc7198437980c041c805A1EDcbA50c1Ce5db95118; 
    address public WAVAX = 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD;

    address DexPoolAddress1 = 0x0000000000000000000000000000000000000000;
    address DexPoolAddress2 = 0x0000000000000000000000000000000000000000;

    address public DexPair = 0x0000000000000000000000000000000000000000;
    
    // Pangolian 0x2D99ABD9008Dc933ff5c0CD271B88309593aB921
    //TJ 0x60aE616a2155Ee3d9A68541Ba4544862310933d4
    
    address ROUTERADDR = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4;

    string constant _name = "EVERBURN";
    string constant _symbol = "EVB";
    uint8 constant _decimals = 6;

    uint256 public _totalSupply = 1_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply.div(500); // 2m 
    uint256 public _maxWallet = _totalSupply.div(500); // 2m

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) public _isFree;
  
    bool public TransferEnabled = true;
 
    //Sell taxes
    uint256  public burnFee = 500;
    uint256  public SellReflectionFee = 1000;
    uint256  public marketingFee = 300;
    uint256  public liquidityFee = 200;
    uint256  public totalFee = 1500; // Burn not included

    //BUY Taxes
    uint256  public burnFeeBuy = 300;
    uint256  public BuyReflectionFee = 0;
    uint256  public BuyMarketingFee = 0;
    uint256  public BuyliquidityFee = 0;
    uint256  public totalBuyFee = 0; // Burn not included
   
   //Transfer Taxes
    uint256  public TransferReflectionFee = 0;
    uint256  public TransferBurnFee = 1500;
    uint256  public TransferMarketingFee = 0;
    uint256  public TransferLiquidityFee = 0;
    uint256  public totalTransferFee = 0; // Burn not included

    uint256  feeDenominator = 10000;

    address public autoLiquidityReceiver=0x0326c36672B3Bfb8c3aee1Ee128816Bc52c255C6;
    address public marketingFeeReceiver=0x0326c36672B3Bfb8c3aee1Ee128816Bc52c255C6;


    uint256 targetLiquidity = 10;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;

    DividendDistributor distributor;
    address public distributorAddress;

    uint256 distributorGas = 600000;

    bool public swapEnabled = true;

    uint256 public swapPercentMax = 100; // % of amount swap
    uint256 public swapThresholdMax = _totalSupply / 50; // 2%

  
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        
        router = IDEXRouter(ROUTERADDR);
        pair = IDEXFactory(router.factory()).createPair(WAVAX, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WAVAX = router.WAVAX();
        distributor = new DividendDistributor(ROUTERADDR);
        distributorAddress = address(distributor);

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
      

        autoLiquidityReceiver = msg.sender;

        approve(ROUTERADDR, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
    

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    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 balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
                
        if(_allowances[sender][msg.sender] != _totalSupply){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        
       require( TransferEnabled || isAuthorized(msg.sender) || isAuthorized(sender),"Transfers are Disabled");
        
        uint256 currentFeeAmount = 0;
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
         
        // Max  tx check
        address routerAddress = ROUTERADDR;
        //bool isBuy=sender== pair|| sender == routerAddress;
        bool isSell=recipient== pair|| recipient == routerAddress ||  recipient == DexPoolAddress1 ||  recipient == DexPoolAddress2;
        
        checkTxLimit(sender, amount);
        
        // Max wallet check excluding pair and router
        if (!isSell && !_isFree[recipient]){
            require((_balances[recipient] + amount) < _maxWallet, "Max wallet has been triggered");
        }
                
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, recipient, amount) : amount;
        currentFeeAmount = amount - amountReceived;
        // No swapping on buy and tx
        if (isSell) {
            if(currentFeeAmount > 0){ if(shouldSwapBack(currentFeeAmount)){ swapBack(currentFeeAmount); }}
        }
      
        _balances[recipient] = _balances[recipient].add(amountReceived);

        if(!isDividendExempt[sender]){ try distributor.setShare(sender, _balances[sender]) {} catch {} }
        if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, _balances[recipient]) {} catch {} }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
//        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return totalFee; }
        if(selling){ return totalFee; }
        return totalFee;
    }



    function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount;
        
        uint256 burnAmountSell = amount.mul(burnFee).div(feeDenominator);
        uint256 burnAmountBuy = amount.mul(burnFeeBuy).div(feeDenominator);
        uint256 burnAmountTrans = amount.mul(TransferBurnFee).div(feeDenominator);
    
        bool isSell = receiver == DexPoolAddress1 || receiver == DexPoolAddress2 || receiver == pair || receiver == ROUTERADDR ;
        bool isBuy = sender == DexPoolAddress1 || sender == DexPoolAddress2 || sender == pair || sender == ROUTERADDR ; 

        setFindDexPair(sender);  //debug

        if (isBuy){  //BUY TAX

            feeAmount = amount.mul(totalBuyFee).div(feeDenominator);
                
            _balances[DEAD] = _balances[DEAD].add(burnAmountBuy);
            emit Transfer(sender, DEAD, burnAmountBuy);

            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);


            return amount.sub(feeAmount).sub(burnAmountBuy);
        
        } 
        else if (isSell){  //SELL TAX
            feeAmount = amount.mul(totalFee).div(feeDenominator);
            
            _balances[DEAD] = _balances[DEAD].add(burnAmountSell);
            emit Transfer(sender, DEAD, burnAmountSell);

            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
            
            
            return amount.sub(feeAmount).sub(burnAmountSell); 
        
        }
        else {  //Transfer TAX - 
            feeAmount = amount.mul(totalTransferFee).div(feeDenominator);

            _balances[DEAD] = _balances[DEAD].add(burnAmountTrans);
            emit Transfer(sender, DEAD, burnAmountTrans);


            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);

                   
            return amount.sub(feeAmount).sub(burnAmountTrans);
        }
    

    }

    function shouldSwapBack(uint256 _amount) internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= _amount;
    }

    function swapBack(uint256 _amount) internal swapping {
        uint256 swapAmount = getSwapAmount(_amount);

        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WAVAX;
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForAVAXSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountAVAX = address(this).balance.sub(balanceBefore);

        uint256 totalAVAXFee = totalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountAVAXLiquidity = amountAVAX.mul(dynamicLiquidityFee).div(totalAVAXFee).div(2);
        uint256 amountAVAXReflection = amountAVAX.mul(SellReflectionFee).div(totalAVAXFee);
        uint256 amountAVAXMarketing = amountAVAX.mul(marketingFee).div(totalAVAXFee);

        try distributor.deposit{value: amountAVAXReflection}() {} catch {}
        payable(marketingFeeReceiver).transfer(amountAVAXMarketing);
   
        if(amountToLiquify > 0){
            router.addLiquidityAVAX{value: amountAVAXLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
        emit AutoLiquify(amountAVAXLiquidity, amountToLiquify);
        }
    }



    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WAVAX;
        path[1] = address(this);

        router.swapExactAVAXForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }
    
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public authorized {
        require(launchedAt == 0, "Already launched Ser");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
    }
    
    function setMaxWallet(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxWallet = amount;
    }

    function setTxLimit(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxTxAmount = amount;
    }

    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setFree(address holder) public onlyOwner {
        _isFree[holder] = true;
    }

    

    function setTransferEnabled(bool _enabled) public onlyOwner {
        TransferEnabled = _enabled;
    }
    
    function unSetFree(address holder) public onlyOwner {
        _isFree[holder] = false;
    }
    
    function checkFree(address holder) public view onlyOwner returns(bool){
        return _isFree[holder];
    }

    function setSellFees(
      
        uint256 _burnFee,
        uint256 _SellReflectionFee,
        uint256 _marketingFee,
        uint256 _liquidityFee

    ) external authorized {
        burnFee = _burnFee;
        SellReflectionFee = _SellReflectionFee;
        marketingFee = _marketingFee;
        liquidityFee = _liquidityFee;
        totalFee = _liquidityFee.add(_SellReflectionFee).add(_marketingFee);
        require(totalFee < feeDenominator / 3);

    }


    function setBuyFees(
        
        uint256 _burnFeeBuy,
        uint256 _BuyReflectionFee,
        uint256 _BuyMarketingFee,
        uint256 _BuyliquidityFee

    ) external authorized {
        burnFeeBuy = _burnFeeBuy;
        BuyReflectionFee = _BuyReflectionFee;
        BuyMarketingFee = _BuyMarketingFee;
        BuyliquidityFee =_BuyliquidityFee;
        totalBuyFee = _BuyliquidityFee.add(_BuyReflectionFee).add(_BuyMarketingFee);
        require(totalBuyFee < feeDenominator / 3);
        
    }
    function setTransFees(
      
        uint256 _TransferReflectionFee,
        uint256 _TransferBurnFee,
        uint256 _TransferMarketingFee,
        uint256 _TransferLiquidityFee

    ) external authorized {

        TransferReflectionFee = _TransferReflectionFee;
        TransferBurnFee = _TransferBurnFee;
        TransferMarketingFee = _TransferMarketingFee;
        TransferLiquidityFee = _TransferLiquidityFee;
        totalTransferFee = _TransferLiquidityFee.add(_TransferReflectionFee).add(_TransferMarketingFee);
        require(totalTransferFee < feeDenominator / 3);
  }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _maxPercTransfer,
        uint256 _max
    ) external authorized {
        swapEnabled = _enabled;
        swapPercentMax = _maxPercTransfer;
        swapThresholdMax = _max;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 850000);
        distributorGas = gas;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function setPrintTokens(address _PrintToken1, uint256 _PrintTokenDecimals) external authorized {
        Token1 = address(_PrintToken1);
        distributor.setPrintToken(Token1, _PrintTokenDecimals);
        
    }

    function setDexPoolAddress1(address _DexPoolAddress) external authorized {
        DexPoolAddress1 = address(_DexPoolAddress);
    }

    function setDexPoolAddress2(address _DexPoolAddress) external authorized {
        DexPoolAddress2 = address(_DexPoolAddress);
    }

    function setFindDexPair(address _PairPoolAddress) internal {
        DexPair  = _PairPoolAddress;
    } 
    
    function setdistributorAddress(address _distributorAddress) external authorized{
        distributorAddress  = address(_distributorAddress);
    } 

    function createNewDistributor() external authorized{
        distributor = new DividendDistributor(ROUTERADDR);
        distributorAddress = address(distributor);
    } 

  
    function getDexPoolAddress1() external view returns (address) {
        return DexPoolAddress1 ;
    }

    function getDexPoolAddress2() external view returns (address) {
        return DexPoolAddress2 ;
    }

    function getPrintToken() external view returns (address) {
        return Token1 ;
    }

    function getFindDexPair() external view returns (address) {
        return DexPair ;
    } 
    function getMinPeriod() external view  returns (uint256) {
        return distributor.getMinPeriod() ;
    }
    function getSwapAmount(uint256 _transferAmount)
        public
        view
        returns (uint256)
    {
        uint256 amountFromTxnPercMax = _transferAmount.mul(swapPercentMax).div(100);
        return
        amountFromTxnPercMax > swapThresholdMax
            ? swapThresholdMax
            : amountFromTxnPercMax;
    }

    function GetDistribution() external view  returns (uint256) {
        return distributor.GetDistribution() ;
    }

    function SwapBackManual(uint256 _amount)  external authorized{
        if (_balances[address(this)] >= _amount){
        
            uint256 swapAmount = _amount;  

            uint256 balanceBefore = address(this).balance;

            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = WAVAX;
                
            router.swapExactTokensForAVAXSupportingFeeOnTransferTokens(
                    swapAmount,
                    0,
                    path,
                    address(this),
                    block.timestamp
            );

            uint256 amountAVAX = address(this).balance.sub(balanceBefore);

            try distributor.deposit{value: amountAVAX}() {} catch {}
        }
    }
       



    event AutoLiquify(uint256 amountAVAX, uint256 amountBOG);
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountAVAX","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","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":"BuyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyliquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"SwapBackManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransferBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransferEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransferReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WAVAX","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createNewDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDexPoolAddress1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDexPoolAddress2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFindDexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrintToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferAmount","type":"uint256"}],"name":"getSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_BuyReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_BuyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_BuyliquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_DexPoolAddress","type":"address"}],"name":"setDexPoolAddress1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_DexPoolAddress","type":"address"}],"name":"setDexPoolAddress2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"setFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_PrintToken1","type":"address"},{"internalType":"uint256","name":"_PrintTokenDecimals","type":"uint256"}],"name":"setPrintTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_SellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_maxPercTransfer","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_TransferReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_TransferBurnFee","type":"uint256"},{"internalType":"uint256","name":"_TransferMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_TransferLiquidityFee","type":"uint256"}],"name":"setTransFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTransferEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distributorAddress","type":"address"}],"name":"setdistributorAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapPercentMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThresholdMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"unSetFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673c7198437980c041c805a1edcba50c1ce5db951181790915560038054821673b31f66aa3c1e785363f0875a1b74e27b85fd66c717905560048054821661dead90811790915560058054831690556006805483169091178155600780548316905560088054831690556009805483169055600a80549092167360ae616a2155ee3d9a68541ba4544862310933d4178255620000af9162000690565b620000bf90633b9aca006200074f565b600b55620000e06101f4600b546200056060201b6200205a1790919060201c565b600c55620001016101f4600b546200056060201b6200205a1790919060201c565b600d5560148054600160ff1991821681179092556101f46015556103e860165561012c601781905560c86018556105dc6019819055601a919091556000601b819055601c819055601d819055601e819055601f8190556020919091556021819055602281905560235561271060245560258054730326c36672b3bfb8c3aee1ee128816bc52c255c66001600160a01b03199182168117909255602680549091169091179055600a60275560646028819055620927c0602f55603080549092169092179055603155600b54620001d99060329062000624565b603255348015620001e957600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155600a54602980546001600160a01b03909216919093168117909255825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b1580156200026757600080fd5b505afa1580156200027c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a29190620005f2565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620002ef57600080fd5b505af115801562000304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032a9190620005f2565b602a80546001600160a01b0319166001600160a01b03928316179055600b54306000908152600f6020908152604080832060298054871685529083529281902093909355905482516339d94ae160e11b815292519316926373b295c2926004808201939291829003018186803b158015620003a457600080fd5b505afa158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df9190620005f2565b600380546001600160a01b0319166001600160a01b03928316179055600a546040519116906200040f90620005e4565b6001600160a01b039091168152602001604051809103906000f0801580156200043c573d6000803e3d6000fd5b50602d80546001600160a01b039283166001600160a01b03199182168117909255602e80548216909217909155336000818152601060209081526040808320805460ff199081166001908117909255601184528285208054821683179055602a54881685526012909352818420805484168217905530845281842080548416821790556004548716845292208054909116909117905560258054909216179055600a54600b54620004f292919091169062000577565b50602a54600b546200050e916001600160a01b03169062000577565b50600b54336000818152600e6020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000787565b60006200056e828462000624565b90505b92915050565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620005d39086815260200190565b60405180910390a350600192915050565b6111888062004c5b83390190565b6000602082840312156200060557600080fd5b81516001600160a01b03811681146200061d57600080fd5b9392505050565b6000826200064257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620006885781600019048211156200066c576200066c62000771565b808516156200067a57918102915b93841c93908002906200064c565b509250929050565b60006200056e60ff841683600082620006ac5750600162000571565b81620006bb5750600062000571565b8160018114620006d45760028114620006df57620006ff565b600191505062000571565b60ff841115620006f357620006f362000771565b50506001821b62000571565b5060208310610133831016604e8410600b841016171562000724575081810a62000571565b62000730838362000647565b806000190482111562000747576200074762000771565b029392505050565b60008160001904831182151516156200076c576200076c62000771565b500290565b634e487b7160e01b600052601160045260246000fd5b6144c480620007976000396000f3fe6080604052600436106200051f5760003560e01c806386360fa1116200029f578063bd446daf116200016b578063ea9f4d6f11620000d1578063f708a64f1162000090578063f708a64f1462000fc5578063f84ba65d1462000fea578063f887ea40146200100f578063f97b2da01462001031578063fce589d81462001051578063fe9fbb80146200106957600080fd5b8063ea9f4d6f1462000f0c578063f0b37c041462000f31578063f1f3bca31462000f56578063f2fde38b1462000f7b578063f30479451462000fa057600080fd5b8063d0889358116200012a578063d08893581462000e18578063d51ed1c81462000e3d578063dd62ed3e1462000e62578063e91f214e1462000eac578063e96fada21462000ed2578063ea19e4a81462000ef457600080fd5b8063bd446daf1462000d89578063bf56b3711462000dae578063c6d2577d1462000dc6578063c9e8a11e1462000dde578063ca33e64c1462000df657600080fd5b806398118cb41162000211578063a8aa1b3111620001d0578063a8aa1b311462000cd5578063a9059cbb1462000cf7578063ad5a25891462000d1c578063b22cead31462000d34578063b6a5d7de1462000d4c578063b8fcaa5c1462000d7157600080fd5b806398118cb41462000c2c5780639d1944f51462000c445780639fe9f6231462000c69578063a4b45c001462000c8e578063a51af4c51462000cb357600080fd5b806391446c40116200025e57806391446c401462000b7257806394055caf1462000b92578063954e70211462000bb757806395d89b411462000bdc57806396a8797e1462000c0a57600080fd5b806386360fa11462000ad0578063893d20e81462000af057806389ef69f61462000b105780638e0b9ea31462000b355780638fabfda91462000b5a57600080fd5b806336393da311620003eb5780636b67c4df116200035157806372460e7f116200031057806372460e7f1462000a2857806373b295c21462000a4a57806375fce0151462000a6c5780637d1db4a51462000a885780637ea3c73c1462000aa057806382247ec01462000ab857600080fd5b80636b67c4df146200097d5780636c5b285514620009955780636ddd171314620009ba5780637088fb7f14620009d657806370a0823114620009ee57600080fd5b8063571ac8b011620003aa578063571ac8b014620008b957806359b107b914620008de5780635c85974f14620008f65780635d0044ca146200091b578063610d62831462000940578063658d4b7f146200095857600080fd5b806336393da314620008185780633c997e2514620008305780633eaaf86b146200085557806342fcef56146200086d5780635555521014620008a157600080fd5b80631df4ccfc11620004915780632b112e4911620004505780632b112e49146200074d5780632d48e89614620007655780632f54bf6e146200078a5780632fb83e9f14620007bd578063313ce56714620007d55780633425c00114620007f357600080fd5b80631df4ccfc146200069f5780631e15df0914620006b7578063201e799114620006cf57806323b872dd14620006f4578063296020e7146200071957600080fd5b80631161ae3911620004de5780631161ae39146200060e57806315674e8e1462000633578063178d9b8e146200064b57806318160ddd14620006705780631afc2b3a146200068757600080fd5b806301339c21146200052c57806306fdde03146200054657806307c89fe8146200058c578063095ea7b314620005c25780630e22493214620005e757600080fd5b366200052757005b600080fd5b3480156200053957600080fd5b50620005446200108e565b005b3480156200055357600080fd5b5060408051808201909152600881526722ab22a9212aa92760c11b60208201525b6040516200058391906200311a565b60405180910390f35b3480156200059957600080fd5b50620005b1620005ab36600462002f00565b62001114565b604051901515815260200162000583565b348015620005cf57600080fd5b50620005b1620005e136600462002fde565b62001165565b348015620005f457600080fd5b50620005ff60235481565b60405190815260200162000583565b3480156200061b57600080fd5b50620005b16200062d36600462003095565b620011d2565b3480156200064057600080fd5b50620005ff601a5481565b3480156200065857600080fd5b50620005446200066a366004620030e7565b620011e8565b3480156200067d57600080fd5b50600b54620005ff565b3480156200069457600080fd5b50620005ff60325481565b348015620006ac57600080fd5b50620005ff60195481565b348015620006c457600080fd5b50620005ff62001266565b348015620006dc57600080fd5b5062000544620006ee36600462003095565b620012ec565b3480156200070157600080fd5b50620005b16200071336600462002f5e565b62001321565b3480156200072657600080fd5b50620005b16200073836600462002f00565b60136020526000908152604090205460ff1681565b3480156200075a57600080fd5b50620005ff620013ea565b3480156200077257600080fd5b50620005446200078436600462003095565b6200143b565b3480156200079757600080fd5b50620005b1620007a936600462002f00565b6000546001600160a01b0391821691161490565b348015620007ca57600080fd5b50620005ff60165481565b348015620007e257600080fd5b506040516006815260200162000583565b3480156200080057600080fd5b50620005446200081236600462002f00565b620014d1565b3480156200082557600080fd5b50620005446200151f565b3480156200083d57600080fd5b50620005ff6200084f36600462003061565b620015c1565b3480156200086257600080fd5b50620005ff600b5481565b3480156200087a57600080fd5b506009546001600160a01b03165b6040516001600160a01b03909116815260200162000583565b348015620008ae57600080fd5b50620005ff60215481565b348015620008c657600080fd5b50620005b1620008d836600462002f00565b62001605565b348015620008eb57600080fd5b50620005ff601e5481565b3480156200090357600080fd5b50620005446200091536600462003061565b6200161b565b3480156200092857600080fd5b50620005446200093a36600462003061565b62001669565b3480156200094d57600080fd5b50620005ff60225481565b3480156200096557600080fd5b50620005446200097736600462002fa4565b620016b7565b3480156200098a57600080fd5b50620005ff60175481565b348015620009a257600080fd5b5062000544620009b4366004620030e7565b6200170c565b348015620009c757600080fd5b50603054620005b19060ff1681565b348015620009e357600080fd5b50620005446200177d565b348015620009fb57600080fd5b50620005ff62000a0d36600462002f00565b6001600160a01b03166000908152600e602052604090205490565b34801562000a3557600080fd5b5060095462000888906001600160a01b031681565b34801562000a5757600080fd5b5060035462000888906001600160a01b031681565b34801562000a7957600080fd5b50601454620005b19060ff1681565b34801562000a9557600080fd5b50620005ff600c5481565b34801562000aad57600080fd5b50620005ff601f5481565b34801562000ac557600080fd5b50620005ff600d5481565b34801562000add57600080fd5b506002546001600160a01b031662000888565b34801562000afd57600080fd5b506000546001600160a01b031662000888565b34801562000b1d57600080fd5b506200054462000b2f36600462002f00565b620017de565b34801562000b4257600080fd5b506200054462000b5436600462002f00565b6200182f565b34801562000b6757600080fd5b50620005ff601c5481565b34801562000b7f57600080fd5b506007546001600160a01b031662000888565b34801562000b9f57600080fd5b506200054462000bb136600462002f00565b6200187b565b34801562000bc457600080fd5b506200054462000bd636600462002fde565b620018c7565b34801562000be957600080fd5b5060408051808201909152600381526222ab2160e91b602082015262000574565b34801562000c1757600080fd5b5060025462000888906001600160a01b031681565b34801562000c3957600080fd5b50620005ff60185481565b34801562000c5157600080fd5b506200054462000c6336600462003061565b62001942565b34801562000c7657600080fd5b506200054462000c883660046200300d565b62001981565b34801562000c9b57600080fd5b506200054462000cad36600462002f20565b620019c1565b34801562000cc057600080fd5b50602e5462000888906001600160a01b031681565b34801562000ce257600080fd5b50602a5462000888906001600160a01b031681565b34801562000d0457600080fd5b50620005b162000d1636600462002fde565b62001a19565b34801562000d2957600080fd5b50620005ff62001a28565b34801562000d4157600080fd5b50620005ff601b5481565b34801562000d5957600080fd5b506200054462000d6b36600462002f00565b62001a6e565b34801562000d7e57600080fd5b50620005ff60205481565b34801562000d9657600080fd5b506200054462000da836600462003061565b62001ac2565b34801562000dbb57600080fd5b50620005ff602b5481565b34801562000dd357600080fd5b50620005ff602c5481565b34801562000deb57600080fd5b50620005ff60315481565b34801562000e0357600080fd5b5060255462000888906001600160a01b031681565b34801562000e2557600080fd5b506200054462000e373660046200302b565b62001c73565b34801562000e4a57600080fd5b50620005ff62000e5c36600462003061565b62001cb7565b34801562000e6f57600080fd5b50620005ff62000e8136600462002f20565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b34801562000eb957600080fd5b50620005ff6fffffffffffffffffffffffffffffffff81565b34801562000edf57600080fd5b5060265462000888906001600160a01b031681565b34801562000f0157600080fd5b50620005ff601d5481565b34801562000f1957600080fd5b506200054462000f2b36600462002f00565b62001cfc565b34801562000f3e57600080fd5b506200054462000f5036600462002f00565b62001d48565b34801562000f6357600080fd5b50620005ff62000f753660046200300d565b62001d96565b34801562000f8857600080fd5b506200054462000f9a36600462002f00565b62001dcf565b34801562000fad57600080fd5b506200054462000fbf366004620030e7565b62001e68565b34801562000fd257600080fd5b506200054462000fe436600462002fa4565b62001ed9565b34801562000ff757600080fd5b50620005446200100936600462002fa4565b62001fe7565b3480156200101c57600080fd5b5060295462000888906001600160a01b031681565b3480156200103e57600080fd5b506008546001600160a01b031662000888565b3480156200105e57600080fd5b50620005ff60155481565b3480156200107657600080fd5b50620005b16200108836600462002f00565b6200203c565b62001099336200203c565b620010c15760405162461bcd60e51b8152600401620010b89062003192565b60405180910390fd5b602b54156200110a5760405162461bcd60e51b815260206004820152601460248201527320b63932b0b23c903630bab731b432b21029b2b960611b6044820152606401620010b8565b43602b5542602c55565b600080546001600160a01b03163314620011425760405162461bcd60e51b8152600401620010b89062003172565b506001600160a01b03811660009081526013602052604090205460ff165b919050565b336000818152600f602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620011c19086815260200190565b60405180910390a350600192915050565b600082620011e08362001cb7565b119392505050565b620011f3336200203c565b620012125760405162461bcd60e51b8152600401620010b89062003192565b601a849055601b839055601c829055601d8190556200123e8262001237838662002068565b9062002068565b601e55602454620012529060039062003245565b601e54106200126057600080fd5b50505050565b602d5460408051631e15df0960e01b815290516000926001600160a01b031691631e15df09916004808301926020929190829003018186803b158015620012ac57600080fd5b505afa158015620012c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012e791906200307b565b905090565b620012f7336200203c565b620013165760405162461bcd60e51b8152600401620010b89062003192565b602791909155602855565b600b546001600160a01b0384166000908152600f60209081526040808320338452909152812054909114620013d3576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600f82528381203382529091529190912054620013ae91849062002076565b6001600160a01b0385166000908152600f602090815260408083203384529091529020555b620013e0848484620020a5565b90505b9392505050565b6005546001600160a01b03166000908152600e6020526040812054620012e7906004546001600160a01b03166000908152600e60205260409020546200143490600b549062002540565b9062002540565b62001446336200203c565b620014655760405162461bcd60e51b8152600401620010b89062003192565b602d546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015620014b457600080fd5b505af1158015620014c9573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314620014fe5760405162461bcd60e51b8152600401620010b89062003172565b6001600160a01b03166000908152601360205260409020805460ff19169055565b6200152a336200203c565b620015495760405162461bcd60e51b8152600401620010b89062003192565b600a546040516001600160a01b0390911690620015669062002ee1565b6001600160a01b039091168152602001604051809103906000f08015801562001593573d6000803e3d6000fd5b50602d80546001600160a01b03929092166001600160a01b03199283168117909155602e8054909216179055565b600080620015e86064620015e1603154866200254e90919063ffffffff16565b906200205a565b90506032548111620015fb5780620013e3565b6032549392505050565b60006200161582600b5462001165565b92915050565b62001626336200203c565b620016455760405162461bcd60e51b8152600401620010b89062003192565b6103e8600b5462001657919062003245565b8110156200166457600080fd5b600c55565b62001674336200203c565b620016935760405162461bcd60e51b8152600401620010b89062003192565b6103e8600b54620016a5919062003245565b811015620016b257600080fd5b600d55565b620016c2336200203c565b620016e15760405162461bcd60e51b8152600401620010b89062003192565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b62001717336200203c565b620017365760405162461bcd60e51b8152600401620010b89062003192565b60158490556016839055601782905560188190556200175b8262001237838662002068565b6019556024546200176f9060039062003245565b601954106200126057600080fd5b6000546001600160a01b03163314620017aa5760405162461bcd60e51b8152600401620010b89062003172565b6040514790339082156108fc029083906000818181858888f19350505050158015620017da573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146200180b5760405162461bcd60e51b8152600401620010b89062003172565b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b6200183a336200203c565b620018595760405162461bcd60e51b8152600401620010b89062003192565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b62001886336200203c565b620018a55760405162461bcd60e51b8152600401620010b89062003192565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b620018d2336200203c565b620018f15760405162461bcd60e51b8152600401620010b89062003192565b600280546001600160a01b0319166001600160a01b03848116918217909255602d5460405163af3154ab60e01b81526004810192909252602482018490529091169063af3154ab9060440162001499565b6200194d336200203c565b6200196c5760405162461bcd60e51b8152600401620010b89062003192565b620cf85081106200197c57600080fd5b602f55565b6000546001600160a01b03163314620019ae5760405162461bcd60e51b8152600401620010b89062003172565b6014805460ff1916911515919091179055565b620019cc336200203c565b620019eb5760405162461bcd60e51b8152600401620010b89062003192565b602580546001600160a01b039384166001600160a01b03199182161790915560268054929093169116179055565b6000620013e3338484620020a5565b602d546040805163ad5a258960e01b815290516000926001600160a01b03169163ad5a2589916004808301926020929190829003018186803b158015620012ac57600080fd5b6000546001600160a01b0316331462001a9b5760405162461bcd60e51b8152600401620010b89062003172565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b62001acd336200203c565b62001aec5760405162461bcd60e51b8152600401620010b89062003192565b306000908152600e6020526040902054811162001c7057604080516002808252606082018352839247926000929091602083019080368337019050509050308160008151811062001b415762001b41620032ba565b6001600160a01b03928316602091820292909201015260035482519116908290600190811062001b755762001b75620032ba565b6001600160a01b039283166020918202929092010152602954604051633b158ab160e11b815291169063762b15629062001bbd908690600090869030904290600401620031b7565b600060405180830381600087803b15801562001bd857600080fd5b505af115801562001bed573d6000803e3d6000fd5b50505050600062001c0883476200254090919063ffffffff16565b9050602d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562001c5b57600080fd5b505af193505050508015620014c95750505050505b50565b62001c7e336200203c565b62001c9d5760405162461bcd60e51b8152600401620010b89062003192565b6030805460ff191693151593909317909255603155603255565b60006200161562001cc7620013ea565b602a546001600160a01b03166000908152600e6020526040902054620015e19062001cf49060026200254e565b85906200254e565b62001d07336200203c565b62001d265760405162461bcd60e51b8152600401620010b89062003192565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001d755760405162461bcd60e51b8152600401620010b89062003172565b6001600160a01b03166000908152600160205260409020805460ff19169055565b600043602b54600162001daa91906200322a565b1062001db857505060195490565b811562001dc757505060195490565b505060195490565b6000546001600160a01b0316331462001dfc5760405162461bcd60e51b8152600401620010b89062003172565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b62001e73336200203c565b62001e925760405162461bcd60e51b8152600401620010b89062003192565b601f84905560208390556021829055602281905562001eb78262001237838762002068565b60235560245462001ecb9060039062003245565b602354106200126057600080fd5b62001ee4336200203c565b62001f035760405162461bcd60e51b8152600401620010b89062003192565b6001600160a01b038216301480159062001f2b5750602a546001600160a01b03838116911614155b62001f3557600080fd5b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915562001f9d57602d54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca969060440162001499565b602d546001600160a01b038381166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca969060440162001499565b62001ff2336200203c565b620020115760405162461bcd60e51b8152600401620010b89062003192565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000620013e3828462003245565b6000620013e382846200322a565b600081848411156200209d5760405162461bcd60e51b8152600401620010b891906200311a565b505050900390565b60145460009060ff1680620020c05750620020c0336200203c565b80620020d25750620020d2846200203c565b620021195760405162461bcd60e51b8152602060048201526016602482015275151c985b9cd9995c9cc8185c9948111a5cd8589b195960521b6044820152606401620010b8565b60335460009060ff16156200213e57620021358585856200255c565b915050620013e3565b600a54602a546001600160a01b039182169160009187821691161480620021765750816001600160a01b0316866001600160a01b0316145b806200218f57506007546001600160a01b038781169116145b80620021a857506008546001600160a01b038781169116145b9050620021b6878662002603565b80158015620021de57506001600160a01b03861660009081526013602052604090205460ff16155b156200225c57600d546001600160a01b0387166000908152600e60205260409020546200220d9087906200322a565b106200225c5760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e207472696767657265640000006044820152606401620010b8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038a166000908152600e9091529190912054620022b091879062002076565b6001600160a01b0388166000908152600e6020908152604080832093909355601090529081205460ff1615620022e75785620022f4565b620022f48888886200266f565b90506200230281876200328a565b935081156200232e5783156200232e576200231d8462002af7565b156200232e576200232e8462002b46565b6001600160a01b0387166000908152600e602052604090205462002353908262002068565b6001600160a01b038089166000908152600e6020908152604080832094909455918b1681526012909152205460ff16620023fa57602d546001600160a01b038981166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015620023e657600080fd5b505af1925050508015620023f8575060015b505b6001600160a01b03871660009081526012602052604090205460ff166200248e57602d546001600160a01b038881166000818152600e602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200247a57600080fd5b505af19250505080156200248c575060015b505b602d54602f546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991620024c79160040190815260200190565b600060405180830381600087803b158015620024e257600080fd5b505af1925050508015620024f4575060015b50866001600160a01b0316886001600160a01b03166000805160206200446f833981519152836040516200252a91815260200190565b60405180910390a3506001979650505050505050565b6000620013e382846200328a565b6000620013e3828462003268565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600e90915291822054620025af91849062002076565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054620025e0908362002068565b6001600160a01b0384166000908152600e60205260409020555060019392505050565b600c54811115806200262d57506001600160a01b03821660009081526011602052604090205460ff165b620017da5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401620010b8565b600080600062002692602454620015e1601554876200254e90919063ffffffff16565b90506000620026b4602454620015e1601a54886200254e90919063ffffffff16565b90506000620026d6602454620015e1602054896200254e90919063ffffffff16565b6007549091506000906001600160a01b03898116911614806200270657506008546001600160a01b038981169116145b806200271f5750602a546001600160a01b038981169116145b80620027385750600a546001600160a01b038981169116145b6007549091506000906001600160a01b038b8116911614806200276857506008546001600160a01b038b81169116145b80620027815750602a546001600160a01b038b81169116145b806200279a5750600a546001600160a01b038b81169116145b600980546001600160a01b0319166001600160a01b038d1617905590508015620028d857620027dc602454620015e1601e548b6200254e90919063ffffffff16565b6004546001600160a01b03166000908152600e602052604090205490965062002806908562002068565b600480546001600160a01b039081166000908152600e6020908152604091829020949094559154915187815291811692908d16916000805160206200446f833981519152910160405180910390a3306000908152600e602052604090205462002870908762002068565b306000818152600e6020526040908190209290925590516001600160a01b038c16906000805160206200446f83398151915290620028b1908a815260200190565b60405180910390a3620028ca84620014348a8962002540565b9650505050505050620013e3565b8115620029eb57620028fd602454620015e16019548b6200254e90919063ffffffff16565b6004546001600160a01b03166000908152600e602052604090205490965062002927908662002068565b600480546001600160a01b039081166000908152600e6020908152604091829020949094559154915188815291811692908d16916000805160206200446f833981519152910160405180910390a3306000908152600e602052604090205462002991908762002068565b306000818152600e6020526040908190209290925590516001600160a01b038c16906000805160206200446f83398151915290620029d2908a815260200190565b60405180910390a3620028ca85620014348a8962002540565b62002a09602454620015e16023548b6200254e90919063ffffffff16565b6004546001600160a01b03166000908152600e602052604090205490965062002a33908462002068565b600480546001600160a01b039081166000908152600e6020908152604091829020949094559154915186815291811692908d16916000805160206200446f833981519152910160405180910390a3306000908152600e602052604090205462002a9d908762002068565b306000818152600e6020526040908190209290925590516001600160a01b038c16906000805160206200446f8339815191529062002ade908a815260200190565b60405180910390a3620028ca83620014348a8962002540565b602a546000906001600160a01b0316331480159062002b19575060335460ff16155b801562002b28575060305460ff165b801562001615575050306000908152600e6020526040902054101590565b6033805460ff19166001179055600062002b6082620015c1565b9050600062002b74602754602854620011d2565b62002b825760185462002b85565b60005b9050600062002bab6002620015e1601954620015e186886200254e90919063ffffffff16565b9050600062002bbb848362002540565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811062002bf85762002bf8620032ba565b6001600160a01b03928316602091820292909201015260035482519116908290600190811062002c2c5762002c2c620032ba565b6001600160a01b039283166020918202929092010152602954604051633b158ab160e11b81524792919091169063762b15629062002c78908690600090879030904290600401620031b7565b600060405180830381600087803b15801562002c9357600080fd5b505af115801562002ca8573d6000803e3d6000fd5b50505050600062002cc382476200254090919063ffffffff16565b9050600062002ce262002cd88860026200205a565b6019549062002540565b9050600062002cfa6002620015e18481878d6200254e565b9050600062002d1a83620015e1601654876200254e90919063ffffffff16565b9050600062002d3a84620015e1601754886200254e90919063ffffffff16565b9050602d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801562002d8d57600080fd5b505af19350505050801562002da0575060015b506026546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801562002ddc573d6000803e3d6000fd5b50881562002ec957602954602554604051637c8d9fb960e11b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f91b3f7290859060c4016060604051808303818588803b15801562002e5057600080fd5b505af115801562002e65573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062002e8c9190620030b8565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506033805460ff1916905550505050505050505050565b61118880620032e783390190565b803580151581146200116057600080fd5b60006020828403121562002f1357600080fd5b8135620013e381620032d0565b6000806040838503121562002f3457600080fd5b823562002f4181620032d0565b9150602083013562002f5381620032d0565b809150509250929050565b60008060006060848603121562002f7457600080fd5b833562002f8181620032d0565b9250602084013562002f9381620032d0565b929592945050506040919091013590565b6000806040838503121562002fb857600080fd5b823562002fc581620032d0565b915062002fd56020840162002eef565b90509250929050565b6000806040838503121562002ff257600080fd5b823562002fff81620032d0565b946020939093013593505050565b6000602082840312156200302057600080fd5b620013e38262002eef565b6000806000606084860312156200304157600080fd5b6200304c8462002eef565b95602085013595506040909401359392505050565b6000602082840312156200307457600080fd5b5035919050565b6000602082840312156200308e57600080fd5b5051919050565b60008060408385031215620030a957600080fd5b50508035926020909101359150565b600080600060608486031215620030ce57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215620030fe57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b8181101562003149578581018301518582016040015282016200312b565b818111156200315c576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015620032095784516001600160a01b031683529383019391830191600101620031e2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115620032405762003240620032a4565b500190565b6000826200326357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620032855762003285620032a4565b500290565b6000828210156200329f576200329f620032a4565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811462001c7057600080fdfe6080604052600180546001600160a01b031990811673c7198437980c041c805a1edcba50c1ce5db95118179091556002805490911673b31f66aa3c1e785363f0875a1b74e27b85fd66c71790556ec097ce7bc90715b34b9f1000000000600c556006600d819055610e10600e556200007990600a62000191565b6200008690600a6200024f565b600f553480156200009657600080fd5b506040516200118838038062001188833981016040819052620000b99162000116565b6001600160a01b038116620000e3577360ae616a2155ee3d9a68541ba4544862310933d4620000e5565b805b600380546001600160a01b03929092166001600160a01b031992831617905560008054909116331790555062000287565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b600181815b80851115620001895781600019048211156200016d576200016d62000271565b808516156200017b57918102915b93841c93908002906200014d565b509250929050565b6000620001418383600082620001aa5750600162000249565b81620001b95750600062000249565b8160018114620001d25760028114620001dd57620001fd565b600191505062000249565b60ff841115620001f157620001f162000271565b50506001821b62000249565b5060208310610133831016604e8410600b841016171562000222575081810a62000249565b6200022e838362000148565b806000190482111562000245576200024562000271565b0290505b92915050565b60008160001904831182151516156200026c576200026c62000271565b500290565b634e487b7160e01b600052601160045260246000fd5b610ef180620002976000396000f3fe6080604052600436106101095760003560e01c8063ad5a258911610095578063e2d2e21911610064578063e2d2e2191461029a578063efca2eed146102b0578063f0fc6bca146102c6578063ffb2c479146102db578063ffd49c84146102fb57600080fd5b8063ad5a258914610206578063af3154ab1461021b578063ce7c2ac21461023b578063d0e30db01461029257600080fd5b80632d48e896116100dc5780632d48e8961461018e5780633a98ef39146101ae5780634fab0ae8146101c4578063986b50be146101da578063997664d7146101f057600080fd5b806311ce023d1461010e57806314b6ca96146101375780631e15df091461015957806328fd31981461016e575b600080fd5b34801561011a57600080fd5b50610124600c5481565b6040519081526020015b60405180910390f35b34801561014357600080fd5b50610157610152366004610bf2565b610311565b005b34801561016557600080fd5b50600f54610124565b34801561017a57600080fd5b50610124610189366004610bd7565b610489565b34801561019a57600080fd5b506101576101a9366004610c77565b610512565b3480156101ba57600080fd5b5061012460085481565b3480156101d057600080fd5b50610124600f5481565b3480156101e657600080fd5b50610124600d5481565b3480156101fc57600080fd5b5061012460095481565b34801561021257600080fd5b50600e54610124565b34801561022757600080fd5b50610157610236366004610bf2565b610534565b34801561024757600080fd5b50610277610256366004610bd7565b60076020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161012e565b610157610588565b3480156102a657600080fd5b50610124600b5481565b3480156102bc57600080fd5b50610124600a5481565b3480156102d257600080fd5b506101576107d5565b3480156102e757600080fd5b506101576102f6366004610c45565b6107e0565b34801561030757600080fd5b50610124600e5481565b6000546001600160a01b0316331461032857600080fd5b6001600160a01b0382166000908152600760205260409020541561034f5761034f826108e0565b60008111801561037557506001600160a01b038216600090815260076020526040902054155b156103db57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b031916909117905561040e565b8015801561040057506001600160a01b03821660009081526007602052604090205415155b1561040e5761040e82610a0b565b6001600160a01b03821660009081526007602052604090205460085461043f91839161043991610b20565b90610b35565b6008556001600160a01b038216600090815260076020526040902081905561046681610b41565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b0381166000908152600760205260408120546104ae57506000919050565b6001600160a01b0382166000908152600760205260408120546104d090610b41565b6001600160a01b038416600090815260076020526040902060010154909150808211610500575060009392505050565b61050a8282610b20565b949350505050565b6000546001600160a01b0316331461052957600080fd5b600e91909155600f55565b6000546001600160a01b0316331461054b57600080fd5b600180546001600160a01b0319166001600160a01b038416179055600d81905561057681600a610d80565b61058190600a610e28565b600f555050565b6000546001600160a01b0316331461059f57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156105e357600080fd5b505afa1580156105f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061b9190610c5e565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061066157610661610ea5565b6001600160a01b039283166020918202929092010152600180548351921691839190811061069157610691610ea5565b6001600160a01b03928316602091820292909201015260035460405163c57559dd60e01b815291169063c57559dd9034906106d790600090869030904290600401610c99565b6000604051808303818588803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061079393508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561075557600080fd5b505afa158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190610c5e565b90610b20565b6009549091506107a39082610b35565b600955600854600c546107cd916107c4916107be9085610b5e565b90610b6a565b600b5490610b35565b600b55505050565b6107de336108e0565b565b6000546001600160a01b031633146107f757600080fd5b60045480610803575050565b6000805a905060005b848310801561081a57508381105b156108d957836010541061082e5760006010555b61086060046010548154811061084657610846610ea5565b6000918252602090912001546001600160a01b0316610b76565b156108975761089760046010548154811061087d5761087d610ea5565b6000918252602090912001546001600160a01b03166108e0565b6108ac6108a55a8490610b20565b8490610b35565b92505a6010805491935060006108c183610e5e565b919050555080806108d190610e5e565b91505061080c565b5050505050565b6001600160a01b0381166000908152600760205260409020546109005750565b600061090b82610489565b90508015610a0757600a546109209082610b35565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561097157600080fd5b505af1158015610985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a99190610c1c565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109dd9082610b35565b6001600160a01b038316600090815260076020526040902060028101919091555461046690610b41565b5050565b60048054610a1b90600190610e47565b81548110610a2b57610a2b610ea5565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a6957610a69610ea5565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610ab590600190610e47565b81548110610ac557610ac5610ea5565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610afb57610afb610e8f565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b2c8284610e47565b90505b92915050565b6000610b2c8284610d03565b6000610b2f600c546107be600b5485610b5e90919063ffffffff16565b6000610b2c8284610e28565b6000610b2c8284610d1b565b600e546001600160a01b03821660009081526006602052604081205490914291610ba09190610d03565b108015610b2f5750600f54610bb483610489565b1192915050565b80356001600160a01b0381168114610bd257600080fd5b919050565b600060208284031215610be957600080fd5b610b2c82610bbb565b60008060408385031215610c0557600080fd5b610c0e83610bbb565b946020939093013593505050565b600060208284031215610c2e57600080fd5b81518015158114610c3e57600080fd5b9392505050565b600060208284031215610c5757600080fd5b5035919050565b600060208284031215610c7057600080fd5b5051919050565b60008060408385031215610c8a57600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610ce35784516001600160a01b031683529383019391830191600101610cbe565b50506001600160a01b039690961660408501525050506060015292915050565b60008219821115610d1657610d16610e79565b500190565b600082610d3857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115610d78578160001904821115610d5e57610d5e610e79565b80851615610d6b57918102915b93841c9390800290610d42565b509250929050565b6000610b2c8383600082610d9657506001610b2f565b81610da357506000610b2f565b8160018114610db95760028114610dc357610ddf565b6001915050610b2f565b60ff841115610dd457610dd4610e79565b50506001821b610b2f565b5060208310610133831016604e8410600b8410161715610e02575081810a610b2f565b610e0c8383610d3d565b8060001904821115610e2057610e20610e79565b029392505050565b6000816000190483118215151615610e4257610e42610e79565b500290565b600082821015610e5957610e59610e79565b500390565b6000600019821415610e7257610e72610e79565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea264697066735822122000f0301934233f7f03a2b088e9f7a4e6fb82ce4ec2e869382aa2e8b5c0c7702c64736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122096dd6de771188569342dddd145523dd313cb920e5d5b7e812b701ba1019056a264736f6c634300080700336080604052600180546001600160a01b031990811673c7198437980c041c805a1edcba50c1ce5db95118179091556002805490911673b31f66aa3c1e785363f0875a1b74e27b85fd66c71790556ec097ce7bc90715b34b9f1000000000600c556006600d819055610e10600e556200007990600a62000191565b6200008690600a6200024f565b600f553480156200009657600080fd5b506040516200118838038062001188833981016040819052620000b99162000116565b6001600160a01b038116620000e3577360ae616a2155ee3d9a68541ba4544862310933d4620000e5565b805b600380546001600160a01b03929092166001600160a01b031992831617905560008054909116331790555062000287565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b600181815b80851115620001895781600019048211156200016d576200016d62000271565b808516156200017b57918102915b93841c93908002906200014d565b509250929050565b6000620001418383600082620001aa5750600162000249565b81620001b95750600062000249565b8160018114620001d25760028114620001dd57620001fd565b600191505062000249565b60ff841115620001f157620001f162000271565b50506001821b62000249565b5060208310610133831016604e8410600b841016171562000222575081810a62000249565b6200022e838362000148565b806000190482111562000245576200024562000271565b0290505b92915050565b60008160001904831182151516156200026c576200026c62000271565b500290565b634e487b7160e01b600052601160045260246000fd5b610ef180620002976000396000f3fe6080604052600436106101095760003560e01c8063ad5a258911610095578063e2d2e21911610064578063e2d2e2191461029a578063efca2eed146102b0578063f0fc6bca146102c6578063ffb2c479146102db578063ffd49c84146102fb57600080fd5b8063ad5a258914610206578063af3154ab1461021b578063ce7c2ac21461023b578063d0e30db01461029257600080fd5b80632d48e896116100dc5780632d48e8961461018e5780633a98ef39146101ae5780634fab0ae8146101c4578063986b50be146101da578063997664d7146101f057600080fd5b806311ce023d1461010e57806314b6ca96146101375780631e15df091461015957806328fd31981461016e575b600080fd5b34801561011a57600080fd5b50610124600c5481565b6040519081526020015b60405180910390f35b34801561014357600080fd5b50610157610152366004610bf2565b610311565b005b34801561016557600080fd5b50600f54610124565b34801561017a57600080fd5b50610124610189366004610bd7565b610489565b34801561019a57600080fd5b506101576101a9366004610c77565b610512565b3480156101ba57600080fd5b5061012460085481565b3480156101d057600080fd5b50610124600f5481565b3480156101e657600080fd5b50610124600d5481565b3480156101fc57600080fd5b5061012460095481565b34801561021257600080fd5b50600e54610124565b34801561022757600080fd5b50610157610236366004610bf2565b610534565b34801561024757600080fd5b50610277610256366004610bd7565b60076020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161012e565b610157610588565b3480156102a657600080fd5b50610124600b5481565b3480156102bc57600080fd5b50610124600a5481565b3480156102d257600080fd5b506101576107d5565b3480156102e757600080fd5b506101576102f6366004610c45565b6107e0565b34801561030757600080fd5b50610124600e5481565b6000546001600160a01b0316331461032857600080fd5b6001600160a01b0382166000908152600760205260409020541561034f5761034f826108e0565b60008111801561037557506001600160a01b038216600090815260076020526040902054155b156103db57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b031916909117905561040e565b8015801561040057506001600160a01b03821660009081526007602052604090205415155b1561040e5761040e82610a0b565b6001600160a01b03821660009081526007602052604090205460085461043f91839161043991610b20565b90610b35565b6008556001600160a01b038216600090815260076020526040902081905561046681610b41565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b0381166000908152600760205260408120546104ae57506000919050565b6001600160a01b0382166000908152600760205260408120546104d090610b41565b6001600160a01b038416600090815260076020526040902060010154909150808211610500575060009392505050565b61050a8282610b20565b949350505050565b6000546001600160a01b0316331461052957600080fd5b600e91909155600f55565b6000546001600160a01b0316331461054b57600080fd5b600180546001600160a01b0319166001600160a01b038416179055600d81905561057681600a610d80565b61058190600a610e28565b600f555050565b6000546001600160a01b0316331461059f57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156105e357600080fd5b505afa1580156105f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061b9190610c5e565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061066157610661610ea5565b6001600160a01b039283166020918202929092010152600180548351921691839190811061069157610691610ea5565b6001600160a01b03928316602091820292909201015260035460405163c57559dd60e01b815291169063c57559dd9034906106d790600090869030904290600401610c99565b6000604051808303818588803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061079393508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561075557600080fd5b505afa158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190610c5e565b90610b20565b6009549091506107a39082610b35565b600955600854600c546107cd916107c4916107be9085610b5e565b90610b6a565b600b5490610b35565b600b55505050565b6107de336108e0565b565b6000546001600160a01b031633146107f757600080fd5b60045480610803575050565b6000805a905060005b848310801561081a57508381105b156108d957836010541061082e5760006010555b61086060046010548154811061084657610846610ea5565b6000918252602090912001546001600160a01b0316610b76565b156108975761089760046010548154811061087d5761087d610ea5565b6000918252602090912001546001600160a01b03166108e0565b6108ac6108a55a8490610b20565b8490610b35565b92505a6010805491935060006108c183610e5e565b919050555080806108d190610e5e565b91505061080c565b5050505050565b6001600160a01b0381166000908152600760205260409020546109005750565b600061090b82610489565b90508015610a0757600a546109209082610b35565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561097157600080fd5b505af1158015610985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a99190610c1c565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109dd9082610b35565b6001600160a01b038316600090815260076020526040902060028101919091555461046690610b41565b5050565b60048054610a1b90600190610e47565b81548110610a2b57610a2b610ea5565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a6957610a69610ea5565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610ab590600190610e47565b81548110610ac557610ac5610ea5565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610afb57610afb610e8f565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b2c8284610e47565b90505b92915050565b6000610b2c8284610d03565b6000610b2f600c546107be600b5485610b5e90919063ffffffff16565b6000610b2c8284610e28565b6000610b2c8284610d1b565b600e546001600160a01b03821660009081526006602052604081205490914291610ba09190610d03565b108015610b2f5750600f54610bb483610489565b1192915050565b80356001600160a01b0381168114610bd257600080fd5b919050565b600060208284031215610be957600080fd5b610b2c82610bbb565b60008060408385031215610c0557600080fd5b610c0e83610bbb565b946020939093013593505050565b600060208284031215610c2e57600080fd5b81518015158114610c3e57600080fd5b9392505050565b600060208284031215610c5757600080fd5b5035919050565b600060208284031215610c7057600080fd5b5051919050565b60008060408385031215610c8a57600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610ce35784516001600160a01b031683529383019391830191600101610cbe565b50506001600160a01b039690961660408501525050506060015292915050565b60008219821115610d1657610d16610e79565b500190565b600082610d3857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115610d78578160001904821115610d5e57610d5e610e79565b80851615610d6b57918102915b93841c9390800290610d42565b509250929050565b6000610b2c8383600082610d9657506001610b2f565b81610da357506000610b2f565b8160018114610db95760028114610dc357610ddf565b6001915050610b2f565b60ff841115610dd457610dd4610e79565b50506001821b610b2f565b5060208310610133831016604e8410600b8410161715610e02575081810a610b2f565b610e0c8383610d3d565b8060001904821115610e2057610e20610e79565b029392505050565b6000816000190483118215151615610e4257610e42610e79565b500290565b600082821015610e5957610e59610e79565b500390565b6000600019821415610e7257610e72610e79565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea264697066735822122000f0301934233f7f03a2b088e9f7a4e6fb82ce4ec2e869382aa2e8b5c0c7702c64736f6c63430008070033

Deployed ByteCode Sourcemap

13262:20618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26319:187;;;;;;;;;;;;;:::i;:::-;;17593:80;;;;;;;;;;-1:-1:-1;17665:5:0;;;;;;;;;;;;-1:-1:-1;;;17665:5:0;;;;17593:80;;;;;;;:::i;:::-;;;;;;;;27777:111;;;;;;;;;;-1:-1:-1;27777:111:0;;;;;:::i;:::-;;:::i;:::-;;;5786:14:1;;5779:22;5761:41;;5749:2;5734:18;27777:111:0;5621:187:1;18019:216:0;;;;;;;;;;-1:-1:-1;18019:216:0;;;;;:::i;:::-;;:::i;15538:36::-;;;;;;;;;;;;;;;;;;;8865:25:1;;;8853:2;8838:18;15538:36:0;8719:177:1;30871:150:0;;;;;;;;;;-1:-1:-1;30871:150:0;;;;;:::i;:::-;;:::i;15100:32::-;;;;;;;;;;;;;;;;28385:522;;;;;;;;;;-1:-1:-1;28385:522:0;;;;;:::i;:::-;;:::i;17323:88::-;;;;;;;;;;-1:-1:-1;17396:12:0;;17323:88;;16258:51;;;;;;;;;;;;;;;;15022:31;;;;;;;;;;;;;;;;32882:116;;;;;;;;;;;;;:::i;30020:183::-;;;;;;;;;;-1:-1:-1;30020:183:0;;;;;:::i;:::-;;:::i;18532:383::-;;;;;;;;;;-1:-1:-1;18532:383:0;;;;;:::i;:::-;;:::i;14744:40::-;;;;;;;;;;-1:-1:-1;14744:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30546:142;;;;;;;;;;;;;:::i;30211:183::-;;;;;;;;;;-1:-1:-1;30211:183:0;;;;;:::i;:::-;;:::i;4515:103::-;;;;;;;;;;-1:-1:-1;4515:103:0;;;;;:::i;:::-;4570:4;4605:5;-1:-1:-1;;;;;4594:16:0;;;4605:5;;4594:16;;4515:103;14893:40;;;;;;;;;;;;;;;;17417:80;;;;;;;;;;-1:-1:-1;17417:80:0;;14279:1;10281:36:1;;10269:2;10254:18;17417:80:0;10139:184:1;27671:94:0;;;;;;;;;;-1:-1:-1;27671:94:0;;;;;:::i;:::-;;:::i;31815:171::-;;;;;;;;;;;;;:::i;32536:338::-;;;;;;;;;;-1:-1:-1;32536:338:0;;;;;:::i;:::-;;:::i;14289:63::-;;;;;;;;;;;;;;;;32321:92;;;;;;;;;;-1:-1:-1;32397:7:0;;-1:-1:-1;;;;;32397:7:0;32321:92;;;-1:-1:-1;;;;;4183:32:1;;;4165:51;;4153:2;4138:18;32321:92:0;4019:203:1;15444:40:0;;;;;;;;;;;;;;;;18243:117;;;;;;;;;;-1:-1:-1;18243:117:0;;;;;:::i;:::-;;:::i;15266:31::-;;;;;;;;;;;;;;;;26671:145;;;;;;;;;;-1:-1:-1;26671:145:0;;;;;:::i;:::-;;:::i;26518:::-;;;;;;;;;;-1:-1:-1;26518:145:0;;;;;:::i;:::-;;:::i;15491:40::-;;;;;;;;;;;;;;;;27179:120;;;;;;;;;;-1:-1:-1;27179:120:0;;;;;:::i;:::-;;:::i;14940:34::-;;;;;;;;;;;;;;;;27896:479;;;;;;;;;;-1:-1:-1;27896:479:0;;;;;:::i;:::-;;:::i;16157:30::-;;;;;;;;;;-1:-1:-1;16157:30:0;;;;;;;;26071:142;;;;;;;;;;;;;:::i;17767:105::-;;;;;;;;;;-1:-1:-1;17767:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17851:18:0;17833:7;17851:18;;;:9;:18;;;;;;;17767:105;13901:67;;;;;;;;;;-1:-1:-1;13901:67:0;;;;-1:-1:-1;;;;;13901:67:0;;;13464:65;;;;;;;;;;-1:-1:-1;13464:65:0;;;;-1:-1:-1;;;;;13464:65:0;;;14795:34;;;;;;;;;;-1:-1:-1;14795:34:0;;;;;;;;14359:51;;;;;;;;;;;;;;;;15351:41;;;;;;;;;;;;;;;;14424:49;;;;;;;;;;;;;;;;32223:90;;;;;;;;;;-1:-1:-1;32298:6:0;;-1:-1:-1;;;;;32298:6:0;32223:90;;17679:78;;;;;;;;;;-1:-1:-1;17731:7:0;17749:5;-1:-1:-1;;;;;17749:5:0;17679:78;;27447:91;;;;;;;;;;-1:-1:-1;27447:91:0;;;;;:::i;:::-;;:::i;31256:134::-;;;;;;;;;;-1:-1:-1;31256:134:0;;;;;:::i;:::-;;:::i;15182:35::-;;;;;;;;;;;;;;;;31999:104;;;;;;;;;;-1:-1:-1;32079:15:0;;-1:-1:-1;;;;;32079:15:0;31999:104;;31658:148;;;;;;;;;;-1:-1:-1;31658:148:0;;;;;:::i;:::-;;:::i;31029:219::-;;;;;;;;;;-1:-1:-1;31029:219:0;;;;;:::i;:::-;;:::i;17503:84::-;;;;;;;;;;-1:-1:-1;17577:7:0;;;;;;;;;;;;-1:-1:-1;;;17577:7:0;;;;17503:84;;13390:66;;;;;;;;;;-1:-1:-1;13390:66:0;;;;-1:-1:-1;;;;;13390:66:0;;;14981:34;;;;;;;;;;;;;;;;30402:136;;;;;;;;;;-1:-1:-1;30402:136:0;;;;;:::i;:::-;;:::i;27554:105::-;;;;;;;;;;-1:-1:-1;27554:105:0;;;;;:::i;:::-;;:::i;29519:228::-;;;;;;;;;;-1:-1:-1;29519:228:0;;;;;:::i;:::-;;:::i;16075:33::-;;;;;;;;;;-1:-1:-1;16075:33:0;;;;-1:-1:-1;;;;;16075:33:0;;;15934:19;;;;;;;;;;-1:-1:-1;15934:19:0;;;;-1:-1:-1;;;;;15934:19:0;;;18368:156;;;;;;;;;;-1:-1:-1;18368:156:0;;;;;:::i;:::-;;:::i;32420:110::-;;;;;;;;;;;;;:::i;15139:36::-;;;;;;;;;;;;;;;;4188:94;;;;;;;;;;-1:-1:-1;4188:94:0;;;;;:::i;:::-;;:::i;15399:38::-;;;;;;;;;;;;;;;;33006:787;;;;;;;;;;-1:-1:-1;33006:787:0;;;;;:::i;:::-;;:::i;15962:25::-;;;;;;;;;;;;;;;;15994:34;;;;;;;;;;;;;;;;16196:35;;;;;;;;;;;;;;;;15644:79;;;;;;;;;;-1:-1:-1;15644:79:0;;;;-1:-1:-1;;;;;15644:79:0;;;29755:257;;;;;;;;;;-1:-1:-1;29755:257:0;;;;;:::i;:::-;;:::i;30696:167::-;;;;;;;;;;-1:-1:-1;30696:167:0;;;;;:::i;:::-;;:::i;17878:133::-;;;;;;;;;;-1:-1:-1;17878:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17980:19:0;;;17962:7;17980:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17878:133;13333:48;;;;;;;;;;-1:-1:-1;13333:48:0;13364:17;13333:48;;15730:78;;;;;;;;;;-1:-1:-1;15730:78:0;;;;-1:-1:-1;;;;;15730:78:0;;;15224:35;;;;;;;;;;;;;;;;31398:134;;;;;;;;;;-1:-1:-1;31398:134:0;;;;;:::i;:::-;;:::i;4358:97::-;;;;;;;;;;-1:-1:-1;4358:97:0;;;;;:::i;:::-;;:::i;21359:204::-;;;;;;;;;;-1:-1:-1;21359:204:0;;;;;:::i;:::-;;:::i;4915:173::-;;;;;;;;;;-1:-1:-1;4915:173:0;;;;;:::i;:::-;;:::i;28913:598::-;;;;;;;;;;-1:-1:-1;28913:598:0;;;;;:::i;:::-;;:::i;26824:347::-;;;;;;;;;;-1:-1:-1;26824:347:0;;;;;:::i;:::-;;:::i;27307:128::-;;;;;;;;;;-1:-1:-1;27307:128:0;;;;;:::i;:::-;;:::i;15903:24::-;;;;;;;;;;-1:-1:-1;15903:24:0;;;;-1:-1:-1;;;;;15903:24:0;;;32111:104;;;;;;;;;;-1:-1:-1;32191:15:0;;-1:-1:-1;;;;;32191:15:0;32111:104;;14857:29;;;;;;;;;;;;;;;;4689:107;;;;;;;;;;-1:-1:-1;4689:107:0;;;;;:::i;:::-;;:::i;26319:187::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;;;;;;;;;26374:10:::1;::::0;:15;26366:48:::1;;;::::0;-1:-1:-1;;;26366:48:0;;8232:2:1;26366:48:0::1;::::0;::::1;8214:21:1::0;8271:2;8251:18;;;8244:30;-1:-1:-1;;;8290:18:1;;;8283:50;8350:18;;26366:48:0::1;8030:344:1::0;26366:48:0::1;26438:12;26425:10;:25:::0;26483:15:::1;26461:19;:37:::0;26319:187::o;27777:111::-;27842:4;4605:5;;-1:-1:-1;;;;;4605:5:0;3912:10;4594:16;3896:38;;;;-1:-1:-1;;;3896:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;27865:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;3936:1;27777:111:::0;;;:::o;18019:216::-;18123:10;18094:4;18111:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18111:32:0;;;;;;;;;;:41;;;18168:37;18094:4;;18111:32;;18168:37;;;;18146:6;8865:25:1;;8853:2;8838:18;;8719:177;18168:37:0;;;;;;;;-1:-1:-1;18223:4:0;18019:216;;;;:::o;30871:150::-;30951:4;31007:6;30975:29;30995:8;30975:19;:29::i;:::-;:38;;30871:150;-1:-1:-1;;;30871:150:0:o;28385:522::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;28591:10:::1;:24:::0;;;28626:16:::1;:36:::0;;;28673:15:::1;:34:::0;;;28718:15:::1;:33:::0;;;28776:61:::1;28691:16:::0;28776:39:::1;28735:16:::0;28645:17;28776:20:::1;:39::i;:::-;:43:::0;::::1;:61::i;:::-;28762:11;:75:::0;28870:14:::1;::::0;:18:::1;::::0;28887:1:::1;::::0;28870:18:::1;:::i;:::-;28856:11;;:32;28848:41;;;::::0;::::1;;28385:522:::0;;;;:::o;32882:116::-;32960:11;;:29;;;-1:-1:-1;;;32960:29:0;;;;32933:7;;-1:-1:-1;;;;;32960:11:0;;:27;;:29;;;;;;;;;;;;;;:11;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32953:36;;32882:116;:::o;30020:183::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;30118:15:::1;:25:::0;;;;30154:26:::1;:41:::0;30020:183::o;18532:383::-;18705:12;;-1:-1:-1;;;;;18670:19:0;;18632:4;18670:19;;;:11;:19;;;;;;;;18690:10;18670:31;;;;;;;;18632:4;;18670:47;18667:181;;18767:69;;;;;;;;;;;-1:-1:-1;;;18767:69:0;;;;;;;;-1:-1:-1;;;;;18767:19:0;;-1:-1:-1;18767:19:0;;;:11;:19;;;;;18787:10;18767:31;;;;;;;;;;:69;;18803:6;;18767:35;:69::i;:::-;-1:-1:-1;;;;;18733:19:0;;;;;;:11;:19;;;;;;;;18753:10;18733:31;;;;;;;:103;18667:181;18867:40;18881:6;18889:9;18900:6;18867:13;:40::i;:::-;18860:47;;18532:383;;;;;;:::o;30546:142::-;30674:4;;-1:-1:-1;;;;;30674:4:0;30599:7;17851:18;;;:9;:18;;;;;;30626:54;;30653:4;;-1:-1:-1;;;;;30653:4:0;17833:7;17851:18;;;:9;:18;;;;;;30626:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;30211:183::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;30321:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;30321:65:0;;::::1;::::0;::::1;10060:25:1::0;;;10101:18;;;10094:34;;;-1:-1:-1;;;;;30321:11:0;;::::1;::::0;:35:::1;::::0;10033:18:1;;30321:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30211:183:::0;;:::o;27671:94::-;4570:4;4605:5;-1:-1:-1;;;;;4605:5:0;3912:10;4594:16;3896:38;;;;-1:-1:-1;;;3896:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27734:15:0::1;27752:5;27734:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;27734:23:0::1;::::0;;27671:94::o;31815:171::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;31915:10:::1;::::0;31891:35:::1;::::0;-1:-1:-1;;;;;31915:10:0;;::::1;::::0;31891:35:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;4183:32:1;;;4165:51;;4153:2;4138:18;31891:35:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31877:11:0::1;:49:::0;;-1:-1:-1;;;;;31877:49:0;;;::::1;-1:-1:-1::0;;;;;;31877:49:0;;::::1;::::0;::::1;::::0;;;31937:18:::1;:41:::0;;;;::::1;;::::0;;31815:171::o;32536:338::-;32632:7;32657:28;32688:44;32728:3;32688:35;32708:14;;32688:15;:19;;:35;;;;:::i;:::-;:39;;:44::i;:::-;32657:75;;32782:16;;32759:20;:39;:107;;32846:20;32759:107;;;32814:16;;32743:123;32536:338;-1:-1:-1;;;32536:338:0:o;18243:117::-;18298:4;18322:30;18330:7;18339:12;;18322:7;:30::i;:::-;18315:37;18243:117;-1:-1:-1;;18243:117:0:o;26671:145::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;26771:4:::1;26756:12;;:19;;;;:::i;:::-;26746:6;:29;;26738:38;;;::::0;::::1;;26787:12;:21:::0;26671:145::o;26518:::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;26620:4:::1;26605:12;;:19;;;;:::i;:::-;26595:6;:29;;26587:38;;;::::0;::::1;;26636:10;:19:::0;26518:145::o;27179:120::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27263:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;27263:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27179:120::o;27896:479::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;28093:7:::1;:18:::0;;;28122:17:::1;:38:::0;;;28171:12:::1;:28:::0;;;28210:12:::1;:28:::0;;;28260:56:::1;28186:13:::0;28260:37:::1;28225:13:::0;28142:18;28260:17:::1;:37::i;:56::-;28249:8;:67:::0;28346:14:::1;::::0;:18:::1;::::0;28363:1:::1;::::0;28346:18:::1;:::i;:::-;28335:8;;:29;28327:38;;;::::0;::::1;26071:142:::0;4570:4;4605:5;-1:-1:-1;;;;;4605:5:0;3912:10;4594:16;3896:38;;;;-1:-1:-1;;;3896:38:0;;;;;;;:::i;:::-;26168:37:::1;::::0;26136:21:::1;::::0;26176:10:::1;::::0;26168:37;::::1;;;::::0;26136:21;;26118:15:::1;26168:37:::0;26118:15;26168:37;26136:21;26176:10;26168:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26107:106;26071:142::o:0;27447:91::-;4570:4;4605:5;-1:-1:-1;;;;;4605:5:0;3912:10;4594:16;3896:38;;;;-1:-1:-1;;;3896:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27508:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;27508:22:0::1;27526:4;27508:22;::::0;;27447:91::o;31256:134::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;31340:15:::1;:42:::0;;-1:-1:-1;;;;;;31340:42:0::1;-1:-1:-1::0;;;;;31340:42:0;;;::::1;::::0;;;::::1;::::0;;31256:134::o;31658:148::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;31748:18:::1;:50:::0;;-1:-1:-1;;;;;;31748:50:0::1;-1:-1:-1::0;;;;;31748:50:0;;;::::1;::::0;;;::::1;::::0;;31658:148::o;31029:219::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;31135:6:::1;:30:::0;;-1:-1:-1;;;;;;31135:30:0::1;-1:-1:-1::0;;;;;31135:30:0;;::::1;::::0;;::::1;::::0;;;31176:11:::1;::::0;:54:::1;::::0;-1:-1:-1;;;31176:54:0;;::::1;::::0;::::1;4625:51:1::0;;;;4692:18;;;4685:34;;;31176:11:0;;::::1;::::0;:25:::1;::::0;4598:18:1;;31176:54:0::1;4443:282:1::0;30402:136:0;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;30492:6:::1;30486:3;:12;30478:21;;;::::0;::::1;;30510:14;:20:::0;30402:136::o;27554:105::-;4570:4;4605:5;-1:-1:-1;;;;;4605:5:0;3912:10;4594:16;3896:38;;;;-1:-1:-1;;;3896:38:0;;;;;;;:::i;:::-;27625:15:::1;:26:::0;;-1:-1:-1;;27625:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27554:105::o;29519:228::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;29638:21:::1;:46:::0;;-1:-1:-1;;;;;29638:46:0;;::::1;-1:-1:-1::0;;;;;;29638:46:0;;::::1;;::::0;;;29695:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;29519:228::o;18368:156::-;18448:4;18472:44;18486:10;18498:9;18509:6;18472:13;:44::i;32420:110::-;32495:11;;:26;;;-1:-1:-1;;;32495:26:0;;;;32468:7;;-1:-1:-1;;;;;32495:11:0;;:24;;:26;;;;;;;;;;;;;;:11;:26;;;;;;;;;;4188:94;4570:4;4605:5;-1:-1:-1;;;;;4605:5:0;3912:10;4594:16;3896:38;;;;-1:-1:-1;;;3896:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4248:19:0::1;;::::0;;;4270:4:::1;4248:19;::::0;;;;;;;:26;;-1:-1:-1;;4248:26:0::1;::::0;;::::1;::::0;;4188:94::o;33006:787::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;33100:4:::1;33082:24;::::0;;;:9:::1;:24;::::0;;;;;:35;-1:-1:-1;33078:708:0::1;;33276:16;::::0;;33290:1:::1;33276:16:::0;;;;;::::1;::::0;;33164:7;;33214:21:::1;::::0;33143:18:::1;::::0;33276:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33276:16:0::1;33252:40;;33325:4;33307;33312:1;33307:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33307:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;33355:5:::1;::::0;33345:7;;33355:5;::::1;::::0;33345:4;;33355:5;;33345:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;33345:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;33393:6:::1;::::0;:231:::1;::::0;-1:-1:-1;;;33393:231:0;;:6;::::1;::::0;:58:::1;::::0;:231:::1;::::0;33474:10;;33393:6:::1;::::0;33531:4;;33566::::1;::::0;33594:15:::1;::::0;33393:231:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33641:18;33662:40;33688:13;33662:21;:25;;:40;;;;:::i;:::-;33641:61;;33723:11;;;;;;;;;-1:-1:-1::0;;;;;33723:11:0::1;-1:-1:-1::0;;;;;33723:19:0::1;;33750:10;33723:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;33118:668;;;;33078:708;33006:787:::0;:::o;29755:257::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;29904:11:::1;:22:::0;;-1:-1:-1;;29904:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;29937:14:::1;:33:::0;29981:16:::1;:23:::0;29755:257::o;30696:167::-;30764:7;30791:64;30832:22;:20;:22::i;:::-;30814:4;;-1:-1:-1;;;;;30814:4:0;17833:7;17851:18;;;:9;:18;;;;;;30791:36;;30804:22;;30824:1;30804:19;:22::i;:::-;30791:8;;:12;:36::i;31398:134::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;31482:15:::1;:42:::0;;-1:-1:-1;;;;;;31482:42:0::1;-1:-1:-1::0;;;;;31482:42:0;;;::::1;::::0;;;::::1;::::0;;31398:134::o;4358:97::-;4570:4;4605:5;-1:-1:-1;;;;;4605:5:0;3912:10;4594:16;3896:38;;;;-1:-1:-1;;;3896:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4420:19:0::1;4442:5;4420:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4420:27:0::1;::::0;;4358:97::o;21359:204::-;21415:7;21456:12;21438:10;;21451:1;21438:14;;;;:::i;:::-;:30;21435:54;;-1:-1:-1;;21478:8:0;;;21359:204::o;21435:54::-;21502:7;21499:31;;;-1:-1:-1;;21519:8:0;;;21359:204::o;21499:31::-;-1:-1:-1;;21547:8:0;;;21359:204::o;4915:173::-;4570:4;4605:5;-1:-1:-1;;;;;4605:5:0;3912:10;4594:16;3896:38;;;;-1:-1:-1;;;3896:38:0;;;;;;;:::i;:::-;4991:5:::1;:11:::0;;-1:-1:-1;;;;;;4991:11:0::1;-1:-1:-1::0;;;;;4991:11:0;::::1;::::0;;::::1;::::0;;5013:19;;;-1:-1:-1;5013:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;5013:26:0::1;::::0;;::::1;::::0;;;5055:25;;4165:51:1;;;5055:25:0::1;::::0;4138:18:1;5055:25:0::1;;;;;;;4915:173:::0;:::o;28913:598::-;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;29141:21:::1;:46:::0;;;29198:15:::1;:34:::0;;;29243:20:::1;:44:::0;;;29298:20:::1;:44:::0;;;29372:76:::1;29266:21:::0;29372:49:::1;29321:21:::0;29165:22;29372:25:::1;:49::i;:76::-;29353:16;:95:::0;29486:14:::1;::::0;:18:::1;::::0;29503:1:::1;::::0;29486:18:::1;:::i;:::-;29467:16;;:37;29459:46;;;::::0;::::1;26824:347:::0;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26921:23:0;::::1;26939:4;26921:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;26958:4:0::1;::::0;-1:-1:-1;;;;;26948:14:0;;::::1;26958:4:::0;::::1;26948:14;;26921:41;26913:50;;;::::0;::::1;;-1:-1:-1::0;;;;;26974:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;26974:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;27018:146:::1;;27043:11;::::0;:31:::1;::::0;-1:-1:-1;;;27043:31:0;;-1:-1:-1;;;;;4643:32:1;;;27043:31:0::1;::::0;::::1;4625:51:1::0;27043:11:0::1;4692:18:1::0;;;4685:34;27043:11:0;;::::1;::::0;:20:::1;::::0;4598:18:1;;27043:31:0::1;4443:282:1::0;27018:146:0::1;27105:11;::::0;-1:-1:-1;;;;;27134:17:0;;::::1;27105:11;27134:17:::0;;;:9:::1;:17;::::0;;;;;;;27105:47;;-1:-1:-1;;;27105:47:0;;::::1;::::0;::::1;4625:51:1::0;;;;4692:18;;;4685:34;27105:11:0;::::1;::::0;:20:::1;::::0;4598:18:1;;27105:47:0::1;4443:282:1::0;27307:128:0;4073:24;4086:10;4073:12;:24::i;:::-;4065:48;;;;-1:-1:-1;;;4065:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27395:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;27395:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27307:128::o;4689:107::-;-1:-1:-1;;;;;4769:19:0;4745:4;4769:19;;;:14;:19;;;;;;;;;4689:107::o;1790:98::-;1848:7;1875:5;1879:1;1875;:5;:::i;1472:98::-;1530:7;1557:5;1561:1;1557;:5;:::i;2002:206::-;2088:7;2149:12;2141:6;;;;2133:29;;;;-1:-1:-1;;;2133:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2184:5:0;;;2002:206::o;18923:1792::-;19050:15;;19015:4;;19050:15;;;:43;;;19069:24;19082:10;19069:12;:24::i;:::-;19050:67;;;;19097:20;19110:6;19097:12;:20::i;:::-;19041:102;;;;-1:-1:-1;;;19041:102:0;;7547:2:1;19041:102:0;;;7529:21:1;7586:2;7566:18;;;7559:30;-1:-1:-1;;;7605:18:1;;;7598:52;7667:18;;19041:102:0;7345:346:1;19041:102:0;19206:6;;19164:24;;19206:6;;19203:63;;;19222:41;19237:6;19245:9;19256:6;19222:14;:41::i;:::-;19215:48;;;;;19203:63;19337:10;;19445:4;;-1:-1:-1;;;;;19337:10:0;;;;19313:21;;19433:16;;;19445:4;;19433:16;;:45;;;19465:13;-1:-1:-1;;;;;19452:26:0;:9;-1:-1:-1;;;;;19452:26:0;;19433:45;:78;;;-1:-1:-1;19496:15:0;;-1:-1:-1;;;;;19483:28:0;;;19496:15;;19483:28;19433:78;:111;;;-1:-1:-1;19529:15:0;;-1:-1:-1;;;;;19516:28:0;;;19529:15;;19516:28;19433:111;19421:123;;19565:28;19578:6;19586;19565:12;:28::i;:::-;19674:6;19673:7;:30;;;;-1:-1:-1;;;;;;19685:18:0;;;;;;:7;:18;;;;;;;;19684:19;19673:30;19669:148;;;19761:10;;-1:-1:-1;;;;;19728:20:0;;;;;;:9;:20;;;;;;:29;;19751:6;;19728:29;:::i;:::-;19727:44;19719:86;;;;-1:-1:-1;;;19719:86:0;;7189:2:1;19719:86:0;;;7171:21:1;7228:2;7208:18;;;7201:30;7267:31;7247:18;;;7240:59;7316:18;;19719:86:0;6987:353:1;19719:86:0;19865:53;;;;;;;;;;;-1:-1:-1;;;19865:53:0;;;;;;;;-1:-1:-1;;;;;19865:17:0;;-1:-1:-1;19865:17:0;;;:9;:17;;;;;;;;:53;;19887:6;;19865:21;:53::i;:::-;-1:-1:-1;;;;;19845:17:0;;;;;;:9;:17;;;;;;;;:73;;;;21324:11;:19;;;;;;;;21323:20;19956:67;;20017:6;19956:67;;;19980:34;19988:6;19996:9;20007:6;19980:7;:34::i;:::-;19931:92;-1:-1:-1;20053:23:0;19931:92;20053:6;:23;:::i;:::-;20034:42;;20129:6;20125:132;;;20155:20;;20152:94;;20181:32;20196:16;20181:14;:32::i;:::-;20178:67;;;20216:26;20225:16;20216:8;:26::i;:::-;-1:-1:-1;;;;;20298:20:0;;;;;;:9;:20;;;;;;:40;;20323:14;20298:24;:40::i;:::-;-1:-1:-1;;;;;20275:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;20355:24;;;;;:16;:24;;;;;;;20351:96;;20386:11;;-1:-1:-1;;;;;20415:17:0;;;20386:11;20415:17;;;:9;:17;;;;;;;;20386:47;;-1:-1:-1;;;20386:47:0;;;;;4625:51:1;;;;4692:18;;;4685:34;20386:11:0;;;:20;;4598:18:1;;20386:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20382:63;;-1:-1:-1;;;;;20461:27:0;;;;;;:16;:27;;;;;;;;20457:105;;20495:11;;-1:-1:-1;;;;;20527:20:0;;;20495:11;20527:20;;;:9;:20;;;;;;;;20495:53;;-1:-1:-1;;;20495:53:0;;;;;4625:51:1;;;;4692:18;;;4685:34;20495:11:0;;;:20;;4598:18:1;;20495:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20491:69;;20578:11;;20598:14;;20578:35;;-1:-1:-1;;;;;;20578:35:0;;-1:-1:-1;;;;;20578:11:0;;;;:19;;:35;;;;8865:25:1;;;8853:2;8838:18;;8719:177;20578:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20574:51;20659:9;-1:-1:-1;;;;;20642:43:0;20651:6;-1:-1:-1;;;;;20642:43:0;-1:-1:-1;;;;;;;;;;;20670:14:0;20642:43;;;;8865:25:1;;8853:2;8838:18;;8719:177;20642:43:0;;;;;;;;-1:-1:-1;20703:4:0;;18923:1792;-1:-1:-1;;;;;;;18923:1792:0:o;1578:98::-;1636:7;1663:5;1667:1;1663;:5;:::i;1684:98::-;1742:7;1769:5;1773:1;1769;:5;:::i;20723:332::-;20853:53;;;;;;;;;;;-1:-1:-1;;;20853:53:0;;;;;;;;-1:-1:-1;;;;;20853:17:0;;20816:4;20853:17;;;:9;:17;;;;;;;:53;;20875:6;;20853:21;:53::i;:::-;-1:-1:-1;;;;;20833:17:0;;;;;;;:9;:17;;;;;;:73;;;;20940:20;;;;;;;:32;;20965:6;20940:24;:32::i;:::-;-1:-1:-1;;;;;20917:20:0;;;;;;:9;:20;;;;;:55;-1:-1:-1;21043:4:0;20723:332;;;;;:::o;21063:166::-;21160:12;;21150:6;:22;;:49;;;-1:-1:-1;;;;;;21176:23:0;;;;;;:15;:23;;;;;;;;21150:49;21142:79;;;;-1:-1:-1;;;21142:79:0;;6843:2:1;21142:79:0;;;6825:21:1;6882:2;6862:18;;;6855:30;-1:-1:-1;;;6901:18:1;;;6894:47;6958:18;;21142:79:0;6641:341:1;21575:2166:0;21660:7;21690:17;21728:22;21753:39;21777:14;;21753:19;21764:7;;21753:6;:10;;:19;;;;:::i;:39::-;21728:64;;21803:21;21827:42;21854:14;;21827:22;21838:10;;21827:6;:10;;:22;;;;:::i;:42::-;21803:66;;21880:23;21906:47;21938:14;;21906:27;21917:15;;21906:6;:10;;:27;;;;:::i;:47::-;21996:15;;21880:73;;-1:-1:-1;21970:11:0;;-1:-1:-1;;;;;21984:27:0;;;21996:15;;21984:27;;:58;;-1:-1:-1;22027:15:0;;-1:-1:-1;;;;;22015:27:0;;;22027:15;;22015:27;21984:58;:78;;;-1:-1:-1;22058:4:0;;-1:-1:-1;;;;;22046:16:0;;;22058:4;;22046:16;21984:78;:104;;;-1:-1:-1;22078:10:0;;-1:-1:-1;;;;;22066:22:0;;;22078:10;;22066:22;21984:104;22123:15;;21970:118;;-1:-1:-1;22100:10:0;;-1:-1:-1;;;;;22113:25:0;;;22123:15;;22113:25;;:54;;-1:-1:-1;22152:15:0;;-1:-1:-1;;;;;22142:25:0;;;22152:15;;22142:25;22113:54;:72;;;-1:-1:-1;22181:4:0;;-1:-1:-1;;;;;22171:14:0;;;22181:4;;22171:14;22113:72;:96;;;-1:-1:-1;22199:10:0;;-1:-1:-1;;;;;22189:20:0;;;22199:10;;22189:20;22113:96;31610:7;:27;;-1:-1:-1;;;;;;31610:27:0;-1:-1:-1;;;;;31610:27:0;;;;;22100:109;-1:-1:-1;22272:5:0;22268:1458;;;22318:43;22346:14;;22318:23;22329:11;;22318:6;:10;;:23;;;;:::i;:43::-;22422:4;;-1:-1:-1;;;;;22422:4:0;22412:15;;;;:9;:15;;;;;;22306:55;;-1:-1:-1;22412:34:0;;22432:13;22412:19;:34::i;:::-;22404:4;;;-1:-1:-1;;;;;22404:4:0;;;22394:15;;;;:9;:15;;;;;;;;;:52;;;;22483:4;;22466:37;;8865:25:1;;;22483:4:0;;;;22466:37;;;;-1:-1:-1;;;;;;;;;;;22466:37:0;8838:18:1;22466:37:0;;;;;;;22565:4;22547:24;;;;:9;:24;;;;;;:39;;22576:9;22547:28;:39::i;:::-;22538:4;22520:24;;;;:9;:24;;;;;;;:66;;;;22606:42;;-1:-1:-1;;;;;22606:42:0;;;-1:-1:-1;;;;;;;;;;;22606:42:0;;;22638:9;8865:25:1;;8853:2;8838:18;;8719:177;22606:42:0;;;;;;;;22674:40;22700:13;22674:21;:6;22685:9;22674:10;:21::i;:40::-;22667:47;;;;;;;;;;22268:1458;22756:6;22752:974;;;22802:40;22827:14;;22802:20;22813:8;;22802:6;:10;;:20;;;;:::i;:40::-;22899:4;;-1:-1:-1;;;;;22899:4:0;22889:15;;;;:9;:15;;;;;;22790:52;;-1:-1:-1;22889:35:0;;22909:14;22889:19;:35::i;:::-;22881:4;;;-1:-1:-1;;;;;22881:4:0;;;22871:15;;;;:9;:15;;;;;;;;;:53;;;;22961:4;;22944:38;;8865:25:1;;;22961:4:0;;;;22944:38;;;;-1:-1:-1;;;;;;;;;;;22944:38:0;8838:18:1;22944:38:0;;;;;;;23044:4;23026:24;;;;:9;:24;;;;;;:39;;23055:9;23026:28;:39::i;:::-;23017:4;22999:24;;;;:9;:24;;;;;;;:66;;;;23085:42;;-1:-1:-1;;;;;23085:42:0;;;-1:-1:-1;;;;;;;;;;;23085:42:0;;;23117:9;8865:25:1;;8853:2;8838:18;;8719:177;23085:42:0;;;;;;;;23177:41;23203:14;23177:21;:6;23188:9;23177:10;:21::i;22752:974::-;23302:48;23335:14;;23302:28;23313:16;;23302:6;:10;;:28;;;;:::i;:48::-;23395:4;;-1:-1:-1;;;;;23395:4:0;23385:15;;;;:9;:15;;;;;;23290:60;;-1:-1:-1;23385:36:0;;23405:15;23385:19;:36::i;:::-;23377:4;;;-1:-1:-1;;;;;23377:4:0;;;23367:15;;;;:9;:15;;;;;;;;;:54;;;;23458:4;;23441:39;;8865:25:1;;;23458:4:0;;;;23441:39;;;;-1:-1:-1;;;;;;;;;;;23441:39:0;8838:18:1;23441:39:0;;;;;;;23544:4;23526:24;;;;:9;:24;;;;;;:39;;23555:9;23526:28;:39::i;:::-;23517:4;23499:24;;;;:9;:24;;;;;;;:66;;;;23585:42;;-1:-1:-1;;;;;23585:42:0;;;-1:-1:-1;;;;;;;;;;;23585:42:0;;;23617:9;8865:25:1;;8853:2;8838:18;;8719:177;23585:42:0;;;;;;;;23672;23698:15;23672:21;:6;23683:9;23672:10;:21::i;23749:206::-;23851:4;;23813;;-1:-1:-1;;;;;23851:4:0;23837:10;:18;;;;:38;;-1:-1:-1;23869:6:0;;;;23868:7;23837:38;:62;;;;-1:-1:-1;23888:11:0;;;;23837:62;:110;;;;-1:-1:-1;;23930:4:0;23912:24;;;;:9;:24;;;;;;-1:-1:-1;23912:35:0;;23749:206::o;23963:1721::-;16368:6;:13;;-1:-1:-1;;16368:13:0;16377:4;16368:13;;;:6;24048:22:::1;24062:7:::0;24048:13:::1;:22::i;:::-;24027:43;;24083:27;24113:60;24129:15;;24146:26;;24113:15;:60::i;:::-;:79;;24180:12;;24113:79;;;24176:1;24113:79;24083:109;;24203:23;24229:56;24283:1;24229:49;24269:8;;24229:35;24244:19;24229:10;:14;;:35;;;;:::i;:56::-;24203:82:::0;-1:-1:-1;24296:20:0::1;24319:31;:10:::0;24203:82;24319:14:::1;:31::i;:::-;24387:16;::::0;;24401:1:::1;24387:16:::0;;;;;::::1;::::0;;24296:54;;-1:-1:-1;24363:21:0::1;::::0;24387:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24387:16:0::1;24363:40;;24432:4;24414;24419:1;24414:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24414:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24458:5:::1;::::0;24448:7;;24458:5;::::1;::::0;24448:4;;24458:5;;24448:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;24448:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;24532:6:::1;::::0;:189:::1;::::0;-1:-1:-1;;;24532:189:0;;24498:21:::1;::::0;24532:6;;;::::1;::::0;:58:::1;::::0;:189:::1;::::0;24605:12;;24474:21:::1;::::0;24648:4;;24675::::1;::::0;24695:15:::1;::::0;24532:189:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24732:18;24753:40;24779:13;24753:21;:25;;:40;;;;:::i;:::-;24732:61:::0;-1:-1:-1;24806:20:0::1;24829:40;24842:26;:19:::0;24866:1:::1;24842:23;:26::i;:::-;24829:8;::::0;;:12:::1;:40::i;:::-;24806:63:::0;-1:-1:-1;24882:27:0::1;24912:60;24970:1;24912:53;24806:63:::0;24912:53;:10;24927:19;24912:14:::1;:35::i;:60::-;24882:90;;24983:28;25014:51;25052:12;25014:33;25029:17;;25014:10;:14;;:33;;;;:::i;:51::-;24983:82;;25076:27;25106:46;25139:12;25106:28;25121:12;;25106:10;:14;;:28;;;;:::i;:46::-;25076:76;;25169:11;;;;;;;;;-1:-1:-1::0;;;;;25169:11:0::1;-1:-1:-1::0;;;;;25169:19:0::1;;25196:20;25169:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;25165:66:::0;25249:20:::1;::::0;25241:59:::1;::::0;-1:-1:-1;;;;;25249:20:0;;::::1;::::0;25241:59;::::1;;;::::0;25280:19;;25249:20:::1;25241:59:::0;25249:20;25241:59;25280:19;25249:20;25241:59;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;25319:19:0;;25316:361:::1;;25354:6;::::0;25530:21:::1;::::0;25354:246:::1;::::0;-1:-1:-1;;;25354:246:0;;25432:4:::1;25354:246;::::0;::::1;5350:34:1::0;5400:18;;;5393:34;;;25354:6:0::1;5443:18:1::0;;;5436:34;;;5486:18;;;5479:34;-1:-1:-1;;;;;25530:21:0;;::::1;5529:19:1::0;;;5522:44;25570:15:0::1;5582:19:1::0;;;5575:35;25354:6:0;::::1;::::0;:23:::1;::::0;25385:19;;5284::1;;25354:246:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25616:49:0::1;::::0;;10060:25:1;;;10116:2;10101:18;;10094:34;;;25616:49:0::1;::::0;-1:-1:-1;10033:18:1;25616:49:0::1;;;;;;;25316:361;-1:-1:-1::0;;16386:6:0;:14;;-1:-1:-1;;16386:14:0;;;-1:-1:-1;;;;;;;;;;23963:1721:0:o;-1:-1:-1:-;;;;;;;;:::o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;179:247;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;691:388::-;759:6;767;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;691:388;;;;;:::o;1084:456::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1285:9;1272:23;1304:31;1329:5;1304:31;:::i;:::-;1354:5;-1:-1:-1;1411:2:1;1396:18;;1383:32;1424:33;1383:32;1424:33;:::i;:::-;1084:456;;1476:7;;-1:-1:-1;;;1530:2:1;1515:18;;;;1502:32;;1084:456::o;1545:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;-1:-1:-1;1819:35:1;1850:2;1835:18;;1819:35;:::i;:::-;1809:45;;1545:315;;;;;:::o;1865:::-;1933:6;1941;1994:2;1982:9;1973:7;1969:23;1965:32;1962:52;;;2010:1;2007;2000:12;1962:52;2049:9;2036:23;2068:31;2093:5;2068:31;:::i;:::-;2118:5;2170:2;2155:18;;;;2142:32;;-1:-1:-1;;;1865:315:1:o;2185:180::-;2241:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:52;;;2310:1;2307;2300:12;2262:52;2333:26;2349:9;2333:26;:::i;2370:316::-;2444:6;2452;2460;2513:2;2501:9;2492:7;2488:23;2484:32;2481:52;;;2529:1;2526;2519:12;2481:52;2552:26;2568:9;2552:26;:::i;:::-;2542:36;2625:2;2610:18;;2597:32;;-1:-1:-1;2676:2:1;2661:18;;;2648:32;;2370:316;-1:-1:-1;;;2370:316:1:o;2691:180::-;2750:6;2803:2;2791:9;2782:7;2778:23;2774:32;2771:52;;;2819:1;2816;2809:12;2771:52;-1:-1:-1;2842:23:1;;2691:180;-1:-1:-1;2691:180:1:o;2876:184::-;2946:6;2999:2;2987:9;2978:7;2974:23;2970:32;2967:52;;;3015:1;3012;3005:12;2967:52;-1:-1:-1;3038:16:1;;2876:184;-1:-1:-1;2876:184:1:o;3065:248::-;3133:6;3141;3194:2;3182:9;3173:7;3169:23;3165:32;3162:52;;;3210:1;3207;3200:12;3162:52;-1:-1:-1;;3233:23:1;;;3303:2;3288:18;;;3275:32;;-1:-1:-1;3065:248:1:o;3318:306::-;3406:6;3414;3422;3475:2;3463:9;3454:7;3450:23;3446:32;3443:52;;;3491:1;3488;3481:12;3443:52;3520:9;3514:16;3504:26;;3570:2;3559:9;3555:18;3549:25;3539:35;;3614:2;3603:9;3599:18;3593:25;3583:35;;3318:306;;;;;:::o;3629:385::-;3715:6;3723;3731;3739;3792:3;3780:9;3771:7;3767:23;3763:33;3760:53;;;3809:1;3806;3799:12;3760:53;-1:-1:-1;;3832:23:1;;;3902:2;3887:18;;3874:32;;-1:-1:-1;3953:2:1;3938:18;;3925:32;;4004:2;3989:18;3976:32;;-1:-1:-1;3629:385:1;-1:-1:-1;3629:385:1:o;6039:597::-;6151:4;6180:2;6209;6198:9;6191:21;6241:6;6235:13;6284:6;6279:2;6268:9;6264:18;6257:34;6309:1;6319:140;6333:6;6330:1;6327:13;6319:140;;;6428:14;;;6424:23;;6418:30;6394:17;;;6413:2;6390:26;6383:66;6348:10;;6319:140;;;6477:6;6474:1;6471:13;6468:91;;;6547:1;6542:2;6533:6;6522:9;6518:22;6514:31;6507:42;6468:91;-1:-1:-1;6620:2:1;6599:15;-1:-1:-1;;6595:29:1;6580:45;;;;6627:2;6576:54;;6039:597;-1:-1:-1;;;6039:597:1:o;7696:329::-;7898:2;7880:21;;;7937:1;7917:18;;;7910:29;-1:-1:-1;;;7970:2:1;7955:18;;7948:36;8016:2;8001:18;;7696:329::o;8379:335::-;8581:2;8563:21;;;8620:2;8600:18;;;8593:30;-1:-1:-1;;;8654:2:1;8639:18;;8632:41;8705:2;8690:18;;8379:335::o;8901:980::-;9163:4;9211:3;9200:9;9196:19;9242:6;9231:9;9224:25;9268:2;9306:6;9301:2;9290:9;9286:18;9279:34;9349:3;9344:2;9333:9;9329:18;9322:31;9373:6;9408;9402:13;9439:6;9431;9424:22;9477:3;9466:9;9462:19;9455:26;;9516:2;9508:6;9504:15;9490:29;;9537:1;9547:195;9561:6;9558:1;9555:13;9547:195;;;9626:13;;-1:-1:-1;;;;;9622:39:1;9610:52;;9717:15;;;;9682:12;;;;9658:1;9576:9;9547:195;;;-1:-1:-1;;;;;;;9798:32:1;;;;9793:2;9778:18;;9771:60;-1:-1:-1;;;9862:3:1;9847:19;9840:35;9759:3;8901:980;-1:-1:-1;;;8901:980:1:o;10328:128::-;10368:3;10399:1;10395:6;10392:1;10389:13;10386:39;;;10405:18;;:::i;:::-;-1:-1:-1;10441:9:1;;10328:128::o;10461:217::-;10501:1;10527;10517:132;;10571:10;10566:3;10562:20;10559:1;10552:31;10606:4;10603:1;10596:15;10634:4;10631:1;10624:15;10517:132;-1:-1:-1;10663:9:1;;10461:217::o;10683:168::-;10723:7;10789:1;10785;10781:6;10777:14;10774:1;10771:21;10766:1;10759:9;10752:17;10748:45;10745:71;;;10796:18;;:::i;:::-;-1:-1:-1;10836:9:1;;10683:168::o;10856:125::-;10896:4;10924:1;10921;10918:8;10915:34;;;10929:18;;:::i;:::-;-1:-1:-1;10966:9:1;;10856:125::o;10986:127::-;11047:10;11042:3;11038:20;11035:1;11028:31;11078:4;11075:1;11068:15;11102:4;11099:1;11092:15;11118:127;11179:10;11174:3;11170:20;11167:1;11160:31;11210:4;11207:1;11200:15;11234:4;11231:1;11224:15;11382:131;-1:-1:-1;;;;;11457:31:1;;11447:42;;11437:70;;11503:1;11500;11493:12

Swarm Source

ipfs://00f0301934233f7f03a2b088e9f7a4e6fb82ce4ec2e869382aa2e8b5c0c7702c
Loading