BNB Price: $642.52 (+4.02%)
 

Overview

Max Total Supply

350,000,000SHE

Holders

7,012

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9.9 SHE

Value
$0.00
0x5C08E98F14e462B75C9b3566128f75915B78aee7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
SheKing

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

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

/**
 *Submitted for verification at BscScan.com on 2024-05-12
*/

/**
 *Submitted for verification at BscScan.com on 2024-03-10
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;

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 IPancakeRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface ISwapRouter is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

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

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

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

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

library PancakeLibrary {
    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'PancakeLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PancakeLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint160(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5' // init code hash
            )))));
    }
}

contract Wrap {
    address private _owner;
    constructor(){
        _owner = msg.sender;
    }
    
    function transfer(address token, address mainAddress) external{
        uint allAmount = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(mainAddress, allAmount);
    }

    function transfer2(address token, uint other, uint all, address share1, address share2, address mainAddress) external{
        uint allAmount = IERC20(token).balanceOf(address(this));

        uint otherAmount = allAmount * other / all;
        IERC20(token).transfer(share1, otherAmount / 2);
        IERC20(token).transfer(share2, otherAmount / 2);

        uint leftAmount = allAmount - otherAmount;
        IERC20(token).transfer(mainAddress, leftAmount);
    }

    function transferBnb(uint256 amount) external{
        payable(_owner).transfer(amount);
    }
}

contract SheKing is IERC20, Ownable {
    uint buyFee = 60;
    uint sellFee = 60;
    uint selldisrate=10;
    uint buydisrate=10;
    uint transdisrate=100;
    uint sellmarkrate=230;
    uint buymarkrate=230;

    uint allNum = 0;
    uint otherNum = 0;

    uint256 public _rewardHoldCondition;
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

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

    string private _name="SHE-COIN";
    string private _symbol="SHE";
    uint8 private _decimals=18;
    uint256 private _tTotal;

    mapping(address => bool) public _feeWhiteList;
    mapping(address => bool) public _blackList;
    
    bool isok=true;
    bool isnotok=false;

    Wrap private wrap;

    ISwapRouter public  _swapRouter;
    mapping(address => bool) public _swapPairList;
    mapping(address => bool) public _swapRouters;
    mapping(address=>bool)public  _mger;
    mapping(address=>uint256)public  _cooling;
    uint256 coolopenvalue=140;
    bool iscoolopen=true;

    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);

    uint256 public startTradeBlock;
    uint256 public startAddLPBlock;
    address public  _mainPair;
    address public  _UPair;
    address public immutable _weth;

    bool public _strictCheck = true;

    address RouterAddress = address(0x10ED43C718714eb63d5aA57B78B54704E256024E);
    address usdtContract = address(0x55d398326f99059fF775485246999027B3197955);


    uint256 Supply = 350000000;
    uint256 private _totalSupply=350000000;

    address systemAddress = address(0xEe7788305C81B7Bc25De3b33bc92db9F41178E02);
    address systemAddress2 = address(0xaca8D01f4386416d6425353C771eCF81b6eA66EF);
    uint256 public  limit=150e18;

    constructor (){
        ISwapRouter swapRouter = ISwapRouter(RouterAddress);
        _swapRouter = swapRouter;
        _allowances[address(this)][address(swapRouter)] = MAX;
        _swapRouters[address(swapRouter)] = true;

        ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
        _weth = swapRouter.WETH();
        wrap = new Wrap();
        address lpPair;
        if (address(0x10ED43C718714eb63d5aA57B78B54704E256024E) == RouterAddress) {
            lpPair = PancakeLibrary.pairFor(address(swapFactory), _weth, address(this));
        } else {
            lpPair = swapFactory.createPair(_weth, address(this));
        }
        _mainPair = lpPair;    
        _UPair = swapFactory.createPair(usdtContract, address(this));
        _swapPairList[lpPair] = true;
        _swapPairList[_UPair] = true;

        uint256 tokenUnit = 10 ** _decimals;
        uint256 total = Supply * tokenUnit;
        _tTotal = total;
        _totalSupply=total;
        uint256 receiveTotal = total;
        _balances[msg.sender] = receiveTotal;
        emit Transfer(address(0), msg.sender, receiveTotal);

        _feeWhiteList[msg.sender] = true;   
        _feeWhiteList[address(wrap)] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[msg.sender] = true;
        _feeWhiteList[address(0)] = true;
        _feeWhiteList[address(swapRouter)] = true;
        _feeWhiteList[address(0xdEaD)] = true;
        _mger[msg.sender]=true;
        IERC20(_weth).approve(address(swapRouter), MAX);
    }
    function getOwner() external view returns (address) {
        return owner();
    }
    function decimals() external view returns (uint8) {
        return _decimals;
    }
    function symbol() external view returns (string memory) {
        return _symbol;
    }
    function name() external view returns (string memory) {
        return _name;
    }
    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view  returns (uint256) {
            return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public  returns (bool) {
            _transfer(msg.sender, recipient, amount);
            return true;
    }

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

    function approve(address spender, uint256 amount) public  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 setpairs(address mainpair,address usdtpair)public {
        require(_mger[msg.sender],"no");
        _mainPair=mainpair;
        _UPair=usdtpair;
    }
    function setflagstatus(bool _isok,bool _isnotok)external {
        require(_mger[msg.sender],"no");
        isok=_isok;
        isnotok=_isnotok;
    }
    bool public  islimit=true;   
    function setlimit(uint256 lim,bool isopenlim)external {
        require(_mger[msg.sender],"erro");
        limit=lim;
        islimit=isopenlim;
    }
    function setCoolOpenvalue(uint256 amount,bool _iscoolopen)external {
        require(_mger[msg.sender],"no");
        coolopenvalue=amount;
        iscoolopen=_iscoolopen;
    }
    mapping(uint => bool) hasincr; 

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(!_blackList[from] , "not valid address");
        uint256 balance = balanceOf(from);
        require(balance >= amount, "not enough amount");
        bool takeFee=true;
        bool isTransfer;
        if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
            takeFee = true;
            isTransfer = true;
        }
        bool isAddLP;
        bool isRemoveLp;
        _cooling[to]=block.number;
        if (from == _UPair || to == _UPair){
            if (to == _UPair) {
                isAddLP = _isAddLiquidityU();
            } else if(from == _UPair){
                isRemoveLp = _isRemoveLiquidityU();
            }
        } else {
            uint256 addLPLiquidity;
            if (to == _mainPair && _swapRouters[msg.sender] && tx.origin == from) {
                addLPLiquidity = _isAddLiquidity(amount);
                if (addLPLiquidity > 0) {
                    require(_feeWhiteList[from], "only white address");
                    isAddLP = true;
                    takeFee = false;
                }
            }

            uint256 removeLPLiquidity;
            if (from == _mainPair && to != address(_swapRouter)) {
                removeLPLiquidity = _strictCheckBuy(amount);
            } else if (from == address(_swapRouter)) {
                removeLPLiquidity = _isRemoveLiquidityETH(amount);
            }

            if (removeLPLiquidity > 0) {
                isRemoveLp = true;
                if (!_feeWhiteList[to]) {
                    takeFee = true;
                }else{
                    takeFee=false;
                }
            }
        }
     
        if (_feeWhiteList[from] && _feeWhiteList[to]) {
            takeFee = false;
        }
        if(!_swapPairList[from]&&_feeWhiteList[from]&&!_feeWhiteList[to]){
            takeFee=false;
        }      
        if (0 == startAddLPBlock){
            if (( _swapPairList[from] || from == RouterAddress) && !_feeWhiteList[to]){
                _blackList[to] = true;
            } else if ( _swapPairList[from] && !_feeWhiteList[to]){
                _blackList[to] = true;
            } else if ( _swapPairList[to] && !_feeWhiteList[from] && !isAddLP){
                _blackList[from] = true;
            }
        }
        if (_swapPairList[from] || _swapPairList[to]) {   
             if(_feeWhiteList[from] && _swapPairList[to]){
            takeFee=false;
                }
            if(_feeWhiteList[to] && _swapPairList[from]){
                takeFee=false;
                }    
            if (!_feeWhiteList[from] && _swapPairList[to]) {                
                if (0 == startTradeBlock) {   
                    if(0 < startAddLPBlock && isAddLP){
                        takeFee=false;
                    }else{
                        require(0 < startTradeBlock);
                         takeFee=true;
                    }               
                    
                        
                }else{
                    if(isAddLP){
                        takeFee=false;
                    }else{
                        takeFee=true;
                    }
                    
                }
            }
            if(!_feeWhiteList[to]&&_swapPairList[from]){
                 if (0 == startTradeBlock) {                   
                    require(0 < startAddLPBlock);
                       takeFee=true;
                    }else{
                        takeFee=true;
                    }
                require(0<startTradeBlock); 
            }
        }        

        _tokenTransfer(from, to, amount, takeFee, isRemoveLp, isAddLP,isTransfer);
    }
    function setCloseStartAddLpBlock()external{
         require(_mger[msg.sender],"iserr");
          startAddLPBlock=0;
        
    }
    function setStartAddLPBlock()external{
        require(_mger[msg.sender],"iserr");
         startAddLPBlock = block.number;
    }

    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 _strictCheckBuy(uint256 amount) internal view returns (uint256 liquidity){
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        if (balanceOther < rOther) {
            liquidity = (amount * ISwapPair(_mainPair).totalSupply()) /
            (_balances[_mainPair] - amount);
        } else if (_strictCheck) {
            uint256 amountOther;
            if (rOther > 0 && rThis > 0) {
                amountOther = amount * rOther / (rThis - amount);
                require(balanceOther >= amountOther + rOther);
            }
        }
    }


    function _isAddLiquidityU() internal view returns (bool isAdd){
        ISwapPair uPair = ISwapPair(_UPair);
        (uint r0,uint256 r1,) = uPair.getReserves();
        address tokenOther = usdtContract;
        uint256 r;
        if (tokenOther < address(this)) {
            r = r0;
        } else {
            r = r1;
        }
        uint bal = IERC20(tokenOther).balanceOf(address(uPair));
        isAdd = bal > r;
    }

    function _isRemoveLiquidityU() internal view returns (bool isRemove){
        ISwapPair uPair = ISwapPair(_UPair);
        (uint r0,uint256 r1,) = uPair.getReserves();
        address tokenOther = usdtContract;
        uint256 r;
        if (tokenOther < address(this)) {
            r = r0;
        } else {
            r = r1;
        }
        uint bal = IERC20(tokenOther).balanceOf(address(uPair));
        isRemove = r >= bal;
    }

    function getFee() public view returns(uint, uint, uint, uint,uint,uint){
        return (buyFee, buydisrate, buymarkrate, sellFee,selldisrate,sellmarkrate);
    }
    function setismg(address sender,bool flag)public {
        require(_mger[msg.sender],'isok');
        _mger[sender]=flag;

    }

    function setFee(uint _buyFee, uint _buydisrate, uint _buymarkrate, uint _sellfee,uint _selldisrate,uint _sellmarkrate,uint _trandisrate) public {
        require(_mger[msg.sender],"iserr");
        buyFee = _buyFee;
        buydisrate = _buydisrate;
        buymarkrate = _buymarkrate;
        sellFee = _sellfee;
        selldisrate=_selldisrate;
        sellmarkrate=_sellmarkrate;
        transdisrate=_trandisrate;
    }

    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)) {
                        numerator = pairTotalSupply * (rootK - rootKLast) * 8;
                        denominator = rootK * 17 + (rootKLast * 8);
                    } else if (address(_swapRouter) == address(0xD99D1c33F9fC3444f8101754aBC46c52416550D1)) {
                        numerator = pairTotalSupply * (rootK - rootKLast);
                        denominator = rootK * 3 + rootKLast;
                    } else if (address(_swapRouter) == address(0xE9d6f80028671279a28790bb4007B10B0595Def1)) {
                        numerator = pairTotalSupply * (rootK - rootKLast) * 3;
                        denominator = rootK * 5 + rootKLast;
                    } else {
                        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(_weth).balanceOf(_mainPair);
    }

    function __getReserves() public view returns (uint256 rOther, uint256 rThis){
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1,) = mainPair.getReserves();
        address tokenOther = _weth;
        if (tokenOther < address(this)) {
            rOther = r0;
            rThis = r1;
        } else {
            rOther = r1;
            rThis = r0;
        }
    }

    function _isRemoveLiquidityETH(uint256 amount) internal view returns (uint256 liquidity){
        (uint256 rOther,, uint256 balanceOther) = _getReserves();
        if (balanceOther <= rOther) {
            liquidity = amount * ISwapPair(_mainPair).totalSupply() / balanceOf(_mainPair);
        }
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool removeLPLiquidity,
        bool isAddLP,
        bool isTransfer

    ) private {
        _balances[sender] =_balances[sender]-tAmount;// senderBalance;
        uint256 feeAmount = 0;
        uint256 otherFee = 0;
        uint256 deadamount=0;
        bool isSell = false;
        bool isBuy = false;
        uint allAmount = 0;
        uint256 exhight=_cooling[address(sender)];
        exhight=exhight+coolopenvalue;
        if (takeFee) {
            if (removeLPLiquidity) {
                feeAmount = tAmount * buyFee / 10000;
                otherFee = tAmount * buymarkrate / 10000;
                deadamount=tAmount* buydisrate/10000;
            } else if (isAddLP){
                _addLpProvider(sender);
            } else if (_swapPairList[sender]) {//mai
                if(islimit){
                       uint[] memory amounts= checkbuyamount(limit);                    
                       require(tAmount<amounts[1],"hight");   
                }
                isBuy = true;
                feeAmount = tAmount * buyFee / 10000;
                otherFee = tAmount * buymarkrate / 10000;
                deadamount=tAmount* buydisrate/10000;
            } else if (_swapPairList[recipient]) {//sell
                if(iscoolopen){
                  require(exhight < block.number,"?");
                }
                isSell = true;
                feeAmount = tAmount * sellFee / 10000;
                otherFee = tAmount * sellmarkrate / 10000;
                deadamount=tAmount*selldisrate/10000;
            }
            else if(isTransfer)  {               
                deadamount=tAmount*transdisrate/10000;
                
            }

            allAmount = feeAmount + otherFee;
            if (allAmount > 0){
                _takeTransfer(sender, address(this), allAmount);
                uint256 contractTokenBalance = _balances[address(this)];
                if (!inSwap && isSell && contractTokenBalance > 0){
                    swapTokenForFund(contractTokenBalance);
                }
            }
        }

        if (isSell&&!_feeWhiteList[sender]){
            processLPReward(_rewardGas);
        }     
       
       
        allNum = allNum + allAmount;
        otherNum = otherNum + otherFee;
        allAmount=allAmount+deadamount;
        if(deadamount>0){
           senddeadtoken(sender,deadamount);
           deadamount=0;
        }
        _takeTransfer(sender, recipient, tAmount - allAmount);
        
    }
    function senddeadtoken(address sender, uint256 tokenamount)private {        
       _takeTransfer(sender,address(0xdEaD),tokenamount);
    }

   function test(uint256 amount)external view returns(uint256 rbalance) {    
         ISwapPair mainPair = ISwapPair(_UPair);
          (uint r0, uint256 r1,) = mainPair.getReserves();
             uint256 t=(amount* r0)/r1;
             rbalance=t;
   }
    function swapTokenForFund(uint256 tokenAmount) private lockTheSwap {
        if (0 == tokenAmount) {
            return;
        }
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = usdtContract;
        _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(wrap),
            block.timestamp
        );
        
        if (otherNum > 0){
            wrap.transfer2(usdtContract, otherNum, allNum, systemAddress, systemAddress2, address(this));
            otherNum = 0;
            allNum = 0;
        } else {
            wrap.transfer(usdtContract, address(this));
            allNum = 0;
        }
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;     
        emit Transfer(sender, to, tAmount);
    }
    uint256 public  distoryrate=1;
    function setdistroyRate(uint256 rate)public {
        require(_mger[msg.sender],"no");
        distoryrate=rate;
    }
    
    function exborBnbLp()public {
        require(_mger[msg.sender],"no ok");
         if(_balances[_mainPair]>0){
            uint256 incrNum = _balances[_mainPair] * distoryrate / 10000;
                _balances[_mainPair] = _balances[_mainPair] - incrNum;
                _takeTransfer(_mainPair, address(0xdEaD), incrNum);
                ISwapPair(_mainPair).sync();
         }
          
            

    }
    function exborUSDTLp()public {
        require(_mger[msg.sender],"no ok");
          uint incrNum = _balances[_UPair] * distoryrate / 10000;
                _balances[_UPair] = _balances[_UPair] - incrNum;
                _takeTransfer(_UPair, address(0xdEaD), incrNum);
                ISwapPair(_UPair).sync();
                hasincr[block.timestamp / 1 hours] = true;
    }
    

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

    function getFeeWhite(address addr) public view returns(bool){
        return _feeWhiteList[addr];
    }

    function batchSetFeeWhiteList(address [] memory addr, bool enable) public  {
         require(_mger[msg.sender],"iserr");
        for (uint i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

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

    function batchSetBlackList(address [] memory addr, bool enable) public  {
         require(_mger[msg.sender],"iserr");
        for (uint i = 0; i < addr.length; i++) {
            _blackList[addr[i]] = enable;
        }
    }
   

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

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

    function claimBalance(address addr, uint256 amount) public  {
        payable(addr).transfer(amount);
    }

    function claimToken(address addr, address token, uint256 amount) public onlyOwner {
        IERC20(token).transfer(addr, amount);
    }
   
    receive() external payable {}

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

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

    function setSystem(address setAddress) public  {
         require(_mger[msg.sender],"iserr");
        systemAddress = setAddress;
    }

    function setSystem2(address setAddress) public  {
         require(_mger[msg.sender],"iserr");
        systemAddress2 = setAddress;
    }

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

    uint256 public lpHoldCondition = 1 ether / 1000000000000000000;
    uint256 public _rewardGas = 500000;

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

    function setExcludeLPProvider(address addr, bool enable) public  {
        require(_mger[msg.sender],"iserr");
        excludeLpProvider[addr] = enable;
    }

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

    uint256 public currentLPIndex;
    uint256 public lpRewardCondition = 200e18;
    uint256 public progressLPRewardBlock;
    uint256 public progressLPBlockDebt = 1;
    

    function processLPReward(uint256 gas) private {
        if (0 == startTradeBlock) {
            return;
        }
        if (progressLPRewardBlock + progressLPBlockDebt > block.number) {
            return;
        }

        uint256 rewardCondition = lpRewardCondition;
        IERC20 USDT = IERC20(usdtContract);
        if (USDT.balanceOf(address(this)) < rewardCondition) {
            return;
        }
        IERC20 holdToken = IERC20(_UPair);
        uint holdTokenTotal = holdToken.totalSupply();
        if (0 == holdTokenTotal) {
            return;
        }

        address shareHolder;
        uint256 tokenBalance;
        uint256 amount;

        uint256 shareholderCount = lpProviders.length;

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();
        uint256 holdCondition = lpHoldCondition;
        uint256 rewardHoldCondition = _rewardHoldCondition;

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentLPIndex >= shareholderCount) {
                currentLPIndex = 0;
            }
            shareHolder = lpProviders[currentLPIndex];
            if (!excludeLpProvider[shareHolder] && balanceOf(shareHolder) >= rewardHoldCondition) {
                tokenBalance = holdToken.balanceOf(shareHolder);
                if (tokenBalance >= holdCondition) {
                    amount = rewardCondition * tokenBalance / holdTokenTotal;
                    if (amount > 0) {
                        USDT.transfer(shareHolder, amount);
                    }
                }
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentLPIndex++;
            iterations++;
        }
        progressLPRewardBlock = block.number;
    }
    function checkbuyamount(uint256 amount)private view returns (uint[] memory amounts){
        address[] memory path = new address[](2);
        path[0] = usdtContract;
        path[1] = address(this);
        amounts= _swapRouter.getAmountsOut(amount,path);
    }
    function checkbuyamountsin(uint256 amountOut)private  view returns (uint[]memory amounts){
          address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = usdtContract;
        amounts= _swapRouter.getAmountsIn(amountOut, path);
    }

    function setLPRewardCondition(uint256 amount) public  {
         require(_mger[msg.sender],"iserr");
        lpRewardCondition = amount;
    }

    function setRewardHoldCondition(uint256 amount) public  {
            require(_mger[msg.sender],"iserr");
        _rewardHoldCondition = amount;
    }
}

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":"_UPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_cooling","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":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mger","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardHoldCondition","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":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"batchSetFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"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":[],"name":"distoryrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exborBnbLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exborUSDTLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeLpProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getFeeWhite","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPProviderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"islimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"progressLPBlockDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressLPRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"setCloseStartAddLpBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"_iscoolopen","type":"bool"}],"name":"setCoolOpenvalue","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":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_buydisrate","type":"uint256"},{"internalType":"uint256","name":"_buymarkrate","type":"uint256"},{"internalType":"uint256","name":"_sellfee","type":"uint256"},{"internalType":"uint256","name":"_selldisrate","type":"uint256"},{"internalType":"uint256","name":"_sellmarkrate","type":"uint256"},{"internalType":"uint256","name":"_trandisrate","type":"uint256"}],"name":"setFee","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":"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":"rewardGas","type":"uint256"}],"name":"setRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRewardHoldCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartAddLPBlock","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":"address","name":"setAddress","type":"address"}],"name":"setSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"setAddress","type":"address"}],"name":"setSystem2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setdistroyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isok","type":"bool"},{"internalType":"bool","name":"_isnotok","type":"bool"}],"name":"setflagstatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"setismg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lim","type":"uint256"},{"internalType":"bool","name":"isopenlim","type":"bool"}],"name":"setlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mainpair","type":"address"},{"internalType":"address","name":"usdtpair","type":"address"}],"name":"setpairs","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"test","outputs":[{"internalType":"uint256","name":"rbalance","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]

603c6001819055600255600a6003819055600455606460055560e660068190556007556000600881815560099190915560e060405260a09081526729a42296a1a7a4a760c11b60c052600d9062000057908262000955565b5060408051808201909152600381526253484560e81b6020820152600e9062000081908262000955565b50600f805460ff199081166012179091556013805461ffff19166001908117909155608c601955601a8054831682179055601e805460ff60a01b1916600160a01b179055601f80546001600160a01b03199081167310ed43c718714eb63d5aa57b78b54704e256024e179091556020805482167355d398326f99059ff775485246999027b31979551790556314dc9380602181905560225560238054821673ee7788305c81b7bc25de3b33bc92db9f41178e021790556024805490911673aca8d01f4386416d6425353c771ecf81b6ea66ef179055680821ab0d44149800006025556026805490921681179091556028819055602c8190556207a120602d55680ad78ebc5ac6200000602f556031553480156200019d57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601f54601480546001600160a01b0319166001600160a01b039092169182179055306000908152600c602090815260408083208484528252808320600019905560168252808320805460ff19166001179055805163c45a015560e01b81529051849263c45a015592600480820193918290030181865afa15801562000268573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028e919062000a21565b9050816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000a21565b6001600160a01b03166080526040516200030f90620008a2565b604051809103906000f0801580156200032c573d6000803e3d6000fd5b506013805462010000600160b01b031916620100006001600160a01b0393841602179055601f54600091167310ed43c718714eb63d5aa57b78b54704e256024e0362000394576200038c8260805130620006bb60201b62001e9e1760201c565b905062000410565b6080516040516364e329cb60e11b81526001600160a01b0391821660048201523060248201529083169063c9c65396906044016020604051808303816000875af1158015620003e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040d919062000a21565b90505b601d80546001600160a01b0319166001600160a01b03838116919091179091556020546040516364e329cb60e11b815290821660048201523060248201529083169063c9c65396906044016020604051808303816000875af11580156200047b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a1919062000a21565b601e80546001600160a01b0319166001600160a01b03928316178155828216600090815260156020526040808220805460ff19908116600190811790925593549094168252812080549092169092179055600f54620005059060ff16600a62000b68565b905060008160215462000519919062000b79565b60108190556022819055336000818152600b602090815260408083208590555184815293945084937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a33360008181526011602090815260408083208054600160ff19918216811783556013546001600160a01b036201000090910481168752848720805484168317905530875284872080548416831790558354831682179093557f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b780548316821790558c831680875284872080548416831790557f97847ee99463795296047093514439c3127772df3715e628aa85601cf854171680548416831790559686526017909452938290208054909416909217909255608051915163095ea7b360e01b815260048101939093526000196024840152169063095ea7b3906044016020604051808303816000875af115801562000688573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006ae919062000b93565b5050505050505062000bb7565b60008080620006cb8585620007a3565b6040516001600160601b0319606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001620007819291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b600080826001600160a01b0316846001600160a01b031603620008195760405162461bcd60e51b815260206004820152602360248201527f50616e63616b654c6962726172793a204944454e544943414c5f41444452455360448201526253455360e81b60648201526084015b60405180910390fd5b826001600160a01b0316846001600160a01b0316106200083b5782846200083e565b83835b90925090506001600160a01b0382166200089b5760405162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015260640162000810565b9250929050565b6105b18062004e9e83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008db57607f821691505b602082108103620008fc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200095057600081815260208120601f850160051c810160208610156200092b5750805b601f850160051c820191505b818110156200094c5782815560010162000937565b5050505b505050565b81516001600160401b03811115620009715762000971620008b0565b6200098981620009828454620008c6565b8462000902565b602080601f831160018114620009c15760008415620009a85750858301515b600019600386901b1c1916600185901b1785556200094c565b600085815260208120601f198616915b82811015620009f257888601518255948401946001909101908401620009d1565b508582101562000a115787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a3457600080fd5b81516001600160a01b038116811462000a4c57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000aaa57816000190482111562000a8e5762000a8e62000a53565b8085161562000a9c57918102915b93841c939080029062000a6e565b509250929050565b60008262000ac35750600162000b62565b8162000ad25750600062000b62565b816001811462000aeb576002811462000af65762000b16565b600191505062000b62565b60ff84111562000b0a5762000b0a62000a53565b50506001821b62000b62565b5060208310610133831016604e8410600b841016171562000b3b575081810a62000b62565b62000b47838362000a69565b806000190482111562000b5e5762000b5e62000a53565b0290505b92915050565b600062000a4c60ff84168362000ab2565b808202811582820484141762000b625762000b6262000a53565b60006020828403121562000ba657600080fd5b8151801515811462000a4c57600080fd5b6080516142bd62000be160003960008181610a6a015281816115c60152611ac501526142bd6000f3fe6080604052600436106104355760003560e01c80637a37a0ed11610229578063b2887bec1161012e578063d83d4143116100b6578063e4f4c0681161007a578063e4f4c06814610d64578063e84fb12d14610d79578063ef34db6914610d8f578063f2fde38b14610dbc578063f53dabb614610ddc57600080fd5b8063d83d414314610ca8578063da13310914610cc8578063dd55c10814610ce8578063dd62ed3e14610cfe578063de5c02c214610d4457600080fd5b8063ce4d9f15116100fd578063ce4d9f1514610bb1578063cebe59c314610be1578063ced72f8714610bf6578063d1575be414610c42578063d39612ab14610c7b57600080fd5b8063b2887bec14610b37578063b83b52c314610b57578063bf7737ce14610b77578063c705567214610b9757600080fd5b80639bf4d03a116101b1578063a842486111610180578063a842486114610aa2578063a9059cbb14610ac2578063aa8b38d914610ae2578063aeb5b9b514610b02578063aec0c34414610b2257600080fd5b80639bf4d03a14610a085780639d56e19114610a28578063a176459514610a58578063a4d66daf14610a8c57600080fd5b80638da5cb5b116101f85780638da5cb5b14610969578063917ceeb51461099d57806395d89b41146109bd57806397dad339146109d25780639bb85344146109f257600080fd5b80637a37a0ed14610929578063879b8f5714610953578063893d20e8146109695780638b699a151461098757600080fd5b80633243ca151161033a57806361b746f2116102c2578063715018a611610286578063715018a6146108a957806373509a00146108be57806374d002f1146108de578063756b4190146108f357806379353c081461091357600080fd5b806361b746f2146107fb57806368092bd9146108115780636c580801146108315780636ebcf6071461084657806370a082311461087357600080fd5b806346c123b61161030957806346c123b61461075f5780634870ae2d1461077f578063553193ca1461079557806355837757146107ab578063595dec3c146107cb57600080fd5b80633243ca15146106da5780633c11100d146106fa5780634188bf5a1461072a578063426efbb81461074a57600080fd5b80631d066ac2116103bd578063244c63751161038c578063244c63751461062857806329e99f07146106485780632b01fc9414610668578063313ce567146106985780633211aa48146106ba57600080fd5b80631d066ac2146105b2578063206c17bb146105c85780632171dcc9146105e857806323b872dd1461060857600080fd5b8063095ea7b311610404578063095ea7b3146104f9578063109bec3914610519578063125bfb6614610551578063141ae5661461057357806318160ddd1461059357600080fd5b806301873d8f1461044157806301986fad1461048657806304c23ffe146104b657806306fdde03146104d757600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5061047161045c366004613c33565b60166020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561049257600080fd5b506104716104a1366004613c33565b60116020526000908152604090205460ff1681565b3480156104c257600080fd5b50601e5461047190600160a01b900460ff1681565b3480156104e357600080fd5b506104ec610dfc565b60405161047d9190613c50565b34801561050557600080fd5b50610471610514366004613c9e565b610e8e565b34801561052557600080fd5b50601e54610539906001600160a01b031681565b6040516001600160a01b03909116815260200161047d565b34801561055d57600080fd5b5061057161056c366004613cca565b610ea5565b005b34801561057f57600080fd5b5061057161058e366004613d24565b610f51565b34801561059f57600080fd5b506022545b60405190815260200161047d565b3480156105be57600080fd5b506105a460285481565b3480156105d457600080fd5b50601454610539906001600160a01b031681565b3480156105f457600080fd5b50610571610603366004613d24565b610fab565b34801561061457600080fd5b50610471610623366004613cca565b611000565b34801561063457600080fd5b50610571610643366004613d24565b611097565b34801561065457600080fd5b506105a4610663366004613d5d565b61110a565b34801561067457600080fd5b50610471610683366004613c33565b602b6020526000908152604090205460ff1681565b3480156106a457600080fd5b50600f5460405160ff909116815260200161047d565b3480156106c657600080fd5b506105716106d5366004613d76565b6111b1565b3480156106e657600080fd5b506105716106f5366004613d5d565b611204565b34801561070657600080fd5b50610471610715366004613c33565b60156020526000908152604090205460ff1681565b34801561073657600080fd5b50601d54610539906001600160a01b031681565b34801561075657600080fd5b50610571611238565b34801561076b57600080fd5b5061057161077a366004613d94565b61126d565b34801561078b57600080fd5b506105a460315481565b3480156107a157600080fd5b506105a4601b5481565b3480156107b757600080fd5b506105716107c6366004613c33565b6112b5565b3480156107d757600080fd5b506104716107e6366004613c33565b60126020526000908152604090205460ff1681565b34801561080757600080fd5b506105a4602e5481565b34801561081d57600080fd5b5061057161082c366004613d24565b611306565b34801561083d57600080fd5b5061057161135b565b34801561085257600080fd5b506105a4610861366004613c33565b600b6020526000908152604090205481565b34801561087f57600080fd5b506105a461088e366004613c33565b6001600160a01b03166000908152600b602052604090205490565b3480156108b557600080fd5b506105716113c5565b3480156108ca57600080fd5b506105716108d9366004613db1565b611439565b3480156108ea57600080fd5b506029546105a4565b3480156108ff57600080fd5b5061057161090e366004613e4a565b611496565b34801561091f57600080fd5b506105a4602c5481565b34801561093557600080fd5b5061093e611531565b6040805192835260208301919091520161047d565b34801561095f57600080fd5b506105a4600a5481565b34801561097557600080fd5b506000546001600160a01b0316610539565b34801561099357600080fd5b506105a460305481565b3480156109a957600080fd5b506105716109b8366004613d5d565b611610565b3480156109c957600080fd5b506104ec61168b565b3480156109de57600080fd5b506105716109ed366004613d5d565b61169a565b3480156109fe57600080fd5b506105a4601c5481565b348015610a1457600080fd5b50610571610a23366004613d5d565b6116c9565b348015610a3457600080fd5b50610471610a43366004613c33565b60176020526000908152604090205460ff1681565b348015610a6457600080fd5b506105397f000000000000000000000000000000000000000000000000000000000000000081565b348015610a9857600080fd5b506105a460255481565b348015610aae57600080fd5b50610571610abd366004613d24565b6116fd565b348015610ace57600080fd5b50610471610add366004613c9e565b611752565b348015610aee57600080fd5b50610571610afd366004613c9e565b61175f565b348015610b0e57600080fd5b50610571610b1d366004613efb565b611795565b348015610b2e57600080fd5b506105716117e4565b348015610b4357600080fd5b50610571610b52366004613e4a565b611948565b348015610b6357600080fd5b50610571610b72366004613c33565b6119de565b348015610b8357600080fd5b50610571610b92366004613f47565b611a2f565b348015610ba357600080fd5b506026546104719060ff1681565b348015610bbd57600080fd5b50610bc6611a90565b6040805193845260208401929092529082015260600161047d565b348015610bed57600080fd5b50610571611b37565b348015610c0257600080fd5b50600154600454600754600254600354600654604080519687526020870195909552938501929092526060840152608083015260a082015260c00161047d565b348015610c4e57600080fd5b50610471610c5d366004613c33565b6001600160a01b031660009081526011602052604090205460ff1690565b348015610c8757600080fd5b506105a4610c96366004613c33565b60186020526000908152604090205481565b348015610cb457600080fd5b50610571610cc3366004613d24565b611cad565b348015610cd457600080fd5b50610571610ce3366004613f47565b611d02565b348015610cf457600080fd5b506105a4602f5481565b348015610d0a57600080fd5b506105a4610d19366004613db1565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610d5057600080fd5b50610539610d5f366004613d5d565b611d4a565b348015610d7057600080fd5b50610571611d74565b348015610d8557600080fd5b506105a4602d5481565b348015610d9b57600080fd5b506105a4610daa366004613c33565b602a6020526000908152604090205481565b348015610dc857600080fd5b50610571610dd7366004613c33565b611daa565b348015610de857600080fd5b50610571610df7366004613d5d565b611e6a565b6060600d8054610e0b90613f6c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3790613f6c565b8015610e845780601f10610e5957610100808354040283529160200191610e84565b820191906000526020600020905b815481529060010190602001808311610e6757829003601f168201915b5050505050905090565b6000610e9b338484611f76565b5060015b92915050565b6000546001600160a01b03163314610ed85760405162461bcd60e51b8152600401610ecf90613fa0565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190613fbc565b50505050565b3360009081526017602052604090205460ff16610f805760405162461bcd60e51b8152600401610ecf90613fd9565b6001600160a01b03919091166000908152602b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b600061100d848484611fd8565b6001600160a01b0384166000908152600c602090815260408083203384529091529020546000191461108d576001600160a01b0384166000908152600c6020908152604080832033845290915290205461106890839061400e565b6001600160a01b0385166000908152600c602090815260408083203384529091529020555b5060019392505050565b3360009081526017602052604090205460ff166110df5760405162461bcd60e51b8152600401610ecf9060208082526004908201526369736f6b60e01b604082015260600190565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b601e5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa15801561115b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117f9190614038565b506001600160701b03918216935016905060008161119d8488614088565b6111a7919061409f565b9695505050505050565b3360009081526017602052604090205460ff166111e05760405162461bcd60e51b8152600401610ecf906140c1565b6013805461ffff191692151561ff0019169290921761010091151591909102179055565b3360009081526017602052604090205460ff166112335760405162461bcd60e51b8152600401610ecf906140c1565b602855565b3360009081526017602052604090205460ff166112675760405162461bcd60e51b8152600401610ecf90613fd9565b43601c55565b6000546001600160a01b031633146112975760405162461bcd60e51b8152600401610ecf90613fa0565b601e8054911515600160a01b0260ff60a01b19909216919091179055565b3360009081526017602052604090205460ff166112e45760405162461bcd60e51b8152600401610ecf90613fd9565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113305760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113855760405162461bcd60e51b8152600401610ecf90613fa0565b601b54156113bf5760405162461bcd60e51b81526020600482015260076024820152661cdd185c9d195960ca1b6044820152606401610ecf565b43601b55565b6000546001600160a01b031633146113ef5760405162461bcd60e51b8152600401610ecf90613fa0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526017602052604090205460ff166114685760405162461bcd60e51b8152600401610ecf906140c1565b601d80546001600160a01b039384166001600160a01b031991821617909155601e8054929093169116179055565b3360009081526017602052604090205460ff166114c55760405162461bcd60e51b8152600401610ecf90613fd9565b60005b825181101561152c5781601260008584815181106114e8576114e86140dd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611524816140f3565b9150506114c8565b505050565b6000806000601d60009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b39190614038565b506001600160701b0391821693501690507f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b038216101561160157829550819450611608565b8195508294505b505050509091565b6000546001600160a01b0316331461163a5760405162461bcd60e51b8152600401610ecf90613fa0565b62030d4081101580156116505750621e84808111155b6116865760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401610ecf565b602d55565b6060600e8054610e0b90613f6c565b6000546001600160a01b031633146116c45760405162461bcd60e51b8152600401610ecf90613fa0565b602c55565b3360009081526017602052604090205460ff166116f85760405162461bcd60e51b8152600401610ecf90613fd9565b600a55565b6000546001600160a01b031633146117275760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000610e9b338484611fd8565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561152c573d6000803e3d6000fd5b3360009081526017602052604090205460ff166117c45760405162461bcd60e51b8152600401610ecf90613fd9565b600196909655600494909455600792909255600255600355600655600555565b3360009081526017602052604090205460ff1661182b5760405162461bcd60e51b81526020600482015260056024820152646e6f206f6b60d81b6044820152606401610ecf565b601d546001600160a01b03166000908152600b60205260409020541561194657602854601d546001600160a01b03166000908152600b60205260408120549091612710916118799190614088565b611883919061409f565b601d546001600160a01b03166000908152600b60205260409020549091506118ac90829061400e565b601d80546001600160a01b039081166000908152600b6020526040902092909255546118dc911661dead83612706565b601d60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561192c57600080fd5b505af1158015611940573d6000803e3d6000fd5b50505050505b565b3360009081526017602052604090205460ff166119775760405162461bcd60e51b8152600401610ecf90613fd9565b60005b825181101561152c57816011600085848151811061199a5761199a6140dd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806119d6816140f3565b91505061197a565b3360009081526017602052604090205460ff16611a0d5760405162461bcd60e51b8152600401610ecf90613fd9565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526017602052604090205460ff16611a775760405162461bcd60e51b8152600401610ecf906020808252600490820152636572726f60e01b604082015260600190565b6025919091556026805460ff1916911515919091179055565b6000806000611a9d611531565b601d546040516370a0823160e01b81526001600160a01b0391821660048201529295509093507f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b30919061410c565b9050909192565b3360009081526017602052604090205460ff16611b7e5760405162461bcd60e51b81526020600482015260056024820152646e6f206f6b60d81b6044820152606401610ecf565b602854601e546001600160a01b03166000908152600b6020526040812054909161271091611bac9190614088565b611bb6919061409f565b601e546001600160a01b03166000908152600b6020526040902054909150611bdf90829061400e565b601e80546001600160a01b039081166000908152600b602052604090209290925554611c0f911661dead83612706565b601e60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c5f57600080fd5b505af1158015611c73573d6000803e3d6000fd5b50505050600160276000610e1042611c8b919061409f565b81526020810191909152604001600020805460ff191691151591909117905550565b6000546001600160a01b03163314611cd75760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b3360009081526017602052604090205460ff16611d315760405162461bcd60e51b8152600401610ecf906140c1565b601991909155601a805460ff1916911515919091179055565b60298181548110611d5a57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526017602052604090205460ff16611da35760405162461bcd60e51b8152600401610ecf90613fd9565b6000601c55565b6000546001600160a01b03163314611dd45760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b038116611e0f5760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610ecf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526017602052604090205460ff16611e995760405162461bcd60e51b8152600401610ecf90613fd9565b602f55565b6000806000611ead858561277e565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001611f549291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831660009081526012602052604090205460ff16156120355760405162461bcd60e51b81526020600482015260116024820152706e6f742076616c6964206164647265737360781b6044820152606401610ecf565b6001600160a01b0383166000908152600b6020526040902054818110156120925760405162461bcd60e51b81526020600482015260116024820152701b9bdd08195b9bdd59da08185b5bdd5b9d607a1b6044820152606401610ecf565b6001600160a01b0384166000908152601160205260408120546001919060ff161580156120d857506001600160a01b03851660009081526011602052604090205460ff16155b156120e4575060019050805b6001600160a01b038086166000908152601860205260408120439055601e5490918291898216911614806121255750601e546001600160a01b038881169116145b1561217557601e546001600160a01b039081169088160361214f57612148612873565b91506122d4565b601e546001600160a01b03908116908916036121705761216d612996565b90505b6122d4565b601d546000906001600160a01b0389811691161480156121a457503360009081526016602052604090205460ff165b80156121b85750326001600160a01b038a16145b15612234576121c687612ab9565b90508015612234576001600160a01b03891660009081526011602052604090205460ff1661222b5760405162461bcd60e51b81526020600482015260126024820152716f6e6c79207768697465206164647265737360701b6044820152606401610ecf565b60019250600094505b601d546000906001600160a01b038b8116911614801561226257506014546001600160a01b038a8116911614155b156122775761227088612b24565b9050612299565b6014546001600160a01b03908116908b16036122995761229688612c5e565b90505b80156122d1576001600160a01b0389166000908152601160205260409020546001935060ff166122cc57600195506122d1565b600095505b50505b6001600160a01b03881660009081526011602052604090205460ff16801561231457506001600160a01b03871660009081526011602052604090205460ff165b1561231e57600093505b6001600160a01b03881660009081526015602052604090205460ff1615801561235f57506001600160a01b03881660009081526011602052604090205460ff165b801561238457506001600160a01b03871660009081526011602052604090205460ff16155b1561238e57600093505b601c54600003612500576001600160a01b03881660009081526015602052604090205460ff16806123cc5750601f546001600160a01b038981169116145b80156123f157506001600160a01b03871660009081526011602052604090205460ff16155b1561241e576001600160a01b0387166000908152601260205260409020805460ff19166001179055612500565b6001600160a01b03881660009081526015602052604090205460ff16801561245f57506001600160a01b03871660009081526011602052604090205460ff16155b1561248c576001600160a01b0387166000908152601260205260409020805460ff19166001179055612500565b6001600160a01b03871660009081526015602052604090205460ff1680156124cd57506001600160a01b03881660009081526011602052604090205460ff16155b80156124d7575081155b15612500576001600160a01b0388166000908152601260205260409020805460ff191660011790555b6001600160a01b03881660009081526015602052604090205460ff168061253f57506001600160a01b03871660009081526015602052604090205460ff165b156126ed576001600160a01b03881660009081526011602052604090205460ff16801561258457506001600160a01b03871660009081526015602052604090205460ff165b1561258e57600093505b6001600160a01b03871660009081526011602052604090205460ff1680156125ce57506001600160a01b03881660009081526015602052604090205460ff165b156125d857600093505b6001600160a01b03881660009081526011602052604090205460ff1615801561261957506001600160a01b03871660009081526015602052604090205460ff165b1561267157601b5460000361265d57601c5460001080156126375750815b156126455760009350612671565b601b5460001061265457600080fd5b60019350612671565b811561266c5760009350612671565b600193505b6001600160a01b03871660009081526011602052604090205460ff161580156126b257506001600160a01b03881660009081526015602052604090205460ff165b156126ed57601b546000036126d957601c546000106126d057600080fd5b600193506126de565b600193505b601b546000106126ed57600080fd5b6126fc88888887858789612d10565b5050505050505050565b6001600160a01b0382166000908152600b602052604090205461272a908290614125565b6001600160a01b038084166000818152600b602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fcb9085815260200190565b600080826001600160a01b0316846001600160a01b0316036127ee5760405162461bcd60e51b815260206004820152602360248201527f50616e63616b654c6962726172793a204944454e544943414c5f41444452455360448201526253455360e81b6064820152608401610ecf565b826001600160a01b0316846001600160a01b03161061280e578284612811565b83835b90925090506001600160a01b03821661286c5760405162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f41444452455353000000006044820152606401610ecf565b9250929050565b601e5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa1580156128c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e89190614038565b506020546001600160701b039283169450911691506001600160a01b031660003082101561291757508261291a565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa158015612964573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612988919061410c565b919091119695505050505050565b601e5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa1580156129e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0b9190614038565b506020546001600160701b039283169450911691506001600160a01b0316600030821015612a3a575082612a3d565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa158015612a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aab919061410c565b909110159695505050505050565b600080600080612ac7611a90565b92509250925060008084118015612ade5750600083115b15612afb5782612aee8588614088565b612af8919061409f565b90505b612b058185614125565b8210612b1b57612b1782878686613063565b5094505b50505050919050565b600080600080612b32611a90565b92509250925082811015612bf857601d546001600160a01b03166000908152600b6020526040902054612b6690869061400e565b601d60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdd919061410c565b612be79087614088565b612bf1919061409f565b9350612c56565b601e54600160a01b900460ff1615612c565760008084118015612c1b5750600083115b15612b1b57612c2a868461400e565b612c348588614088565b612c3e919061409f565b9050612c4a8482614125565b821015612b1b57600080fd5b505050919050565b6000806000612c6b611a90565b9250509150818111612d0957601d546001600160a01b03166000818152600b60209081526040918290205482516318160ddd60e01b815292519093926318160ddd9260048083019391928290030181865afa158015612cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf2919061410c565b612cfc9086614088565b612d06919061409f565b92505b5050919050565b6001600160a01b0387166000908152600b6020526040902054612d3490869061400e565b6001600160a01b0388166000908152600b602090815260408083209390935560189052908120546019548291829182918291829190612d739082614125565b90508a15612fc4578915612ddd576127106001548d612d929190614088565b612d9c919061409f565b96506127106007548d612daf9190614088565b612db9919061409f565b95506127106004548d612dcc9190614088565b612dd6919061409f565b9450612f66565b8815612df157612dec8e61344c565b612f66565b6001600160a01b038e1660009081526015602052604090205460ff1615612e945760265460ff1615612e7f576000612e2a60255461351d565b905080600181518110612e3f57612e3f6140dd565b60200260200101518d10612e7d5760405162461bcd60e51b81526020600482015260056024820152641a1a59da1d60da1b6044820152606401610ecf565b505b600192506127106001548d612d929190614088565b6001600160a01b038d1660009081526015602052604090205460ff1615612f4257601a5460ff1615612ef357438110612ef35760405162461bcd60e51b81526020600482015260016024820152603f60f81b6044820152606401610ecf565b600193506127106002548d612f089190614088565b612f12919061409f565b96506127106006548d612f259190614088565b612f2f919061409f565b95506127106003548d612dcc9190614088565b8715612f66576127106005548d612f599190614088565b612f63919061409f565b94505b612f708688614125565b91508115612fc457612f838e3084612706565b306000908152600b6020526040902054601a54610100900460ff16158015612fa85750845b8015612fb45750600081115b15612fc257612fc281613621565b505b838015612fea57506001600160a01b038e1660009081526011602052604090205460ff16155b15612ffa57612ffa602d54613858565b816008546130089190614125565b600855600954613019908790614125565b6009556130268583614125565b9150841561303d576130388e86613b87565b600094505b6130538e8e848f61304e919061400e565b612706565b5050505050505050505050505050565b6000806000601d60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130df919061410c565b90506000601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315a9190614138565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bb9190614138565b601d5460408051637464fc3d60e01b815290519293506001600160a01b0380851615159360009390911691637464fc3d9160048083019260209291908290030181865afa158015613210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613234919061410c565b905081156133d25780156133d2576000613256613251898b614088565b613b98565b9050600061326383613b98565b9050808211156133cf5760145460009081906001600160a01b03167310ed43c718714eb63d5aa57b78b54704e256024d19016132e1576132a3838561400e565b6132ad9089614088565b6132b8906008614088565b91506132c5836008614088565b6132d0856011614088565b6132da9190614125565b90506133ad565b6014546001600160a01b031673d99d1c33f9fc3444f8101754abc46c52416550d0190161332a57613312838561400e565b61331c9089614088565b9150826132d0856003614088565b6014546001600160a01b031673e9d6f80028671279a28790bb4007b10b0595def0190161337e5761335b838561400e565b6133659089614088565b613370906003614088565b9150826132d0856005614088565b613388838561400e565b6133929089614088565b9150826133a0856005614088565b6133aa9190614125565b90505b6133b7818361409f565b985088156133cc576133c98989614125565b97505b50505b50505b60006133de898c61400e565b905084600003613409576103e86133f86132518c84614088565b613402919061400e565b965061343e565b61343b896134178784614088565b613421919061409f565b8961342c888e614088565b613436919061409f565b613c08565b96505b505050505094509492505050565b6001600160a01b0381166000908152602a6020526040812054900361351a5760295415806134ab5750806001600160a01b03166029600081548110613493576134936140dd565b6000918252602090912001546001600160a01b031614155b1561351a57803b80156134bc575050565b50602980546001600160a01b0383166000818152602a60205260408120839055600183018455929092527fcb7c14ce178f56e2e8d86ab33ebc0ae081ba8556a00cd122038841867181caac0180546001600160a01b03191690911790555b50565b60408051600280825260608083018452926000929190602083019080368337505060205482519293506001600160a01b031691839150600090613562576135626140dd565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613596576135966140dd565b6001600160a01b03928316602091820292909201015260145460405163d06ca61f60e01b815291169063d06ca61f906135d59086908590600401614199565b600060405180830381865afa1580156135f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261361a91908101906141ba565b9392505050565b601a805461ff001916610100179055801561384a57604080516002808252606082018352600092602083019080368337019050509050308160008151811061366b5761366b6140dd565b6001600160a01b039283166020918202929092018101919091525482519116908290600190811061369e5761369e6140dd565b6001600160a01b039283166020918202929092010152601454601354604051635c11d79560e01b815291831692635c11d795926136f0928792600092889262010000900490911690429060040161424b565b600060405180830381600087803b15801561370a57600080fd5b505af115801561371e573d6000803e3d6000fd5b50505050600060095411156137d5576013546020546009546008546023546024805460405163172a36e960e11b81526001600160a01b0396871660048201529182019490945260448101929092528316606482015290821660848201523060a4820152620100009092041690632e546dd29060c401600060405180830381600087803b1580156137ad57600080fd5b505af11580156137c1573d6000803e3d6000fd5b505060006009819055600855506138489050565b601354602054604051631748b61760e31b81526001600160a01b03918216600482015230602482015262010000909204169063ba45b0b890604401600060405180830381600087803b15801561382a57600080fd5b505af115801561383e573d6000803e3d6000fd5b5050600060085550505b505b50601a805461ff0019169055565b601b546000036138655750565b436031546030546138769190614125565b111561387f5750565b602f546020546040516370a0823160e01b81523060048201526001600160a01b0390911690829082906370a0823190602401602060405180830381865afa1580156138ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f2919061410c565b10156138fd57505050565b601e54604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561394c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613970919061410c565b905080600003613981575050505050565b602954600090819081908180805a602c54600a54919250905b8d851080156139a857508584105b15613b735785602e54106139bc576000602e555b6029602e54815481106139d1576139d16140dd565b60009182526020808320909101546001600160a01b0316808352602b90915260409091205490995060ff16158015613a27575080613a248a6001600160a01b03166000908152600b602052604090205490565b10155b15613b31576040516370a0823160e01b81526001600160a01b038a811660048301528c16906370a0823190602401602060405180830381865afa158015613a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a96919061410c565b9750818810613b315789613aaa898f614088565b613ab4919061409f565b96508615613b315760405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018990528d169063a9059cbb906044016020604051808303816000875af1158015613b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2f9190613fbc565b505b5a613b3c908461400e565b613b469086614125565b94505a602e80549194506000613b5b836140f3565b91905055508380613b6b906140f3565b94505061399a565b505043603055505050505050505050505050565b613b948261dead83612706565b5050565b60006003821115613bf95750806000613bb260028361409f565b613bbd906001614125565b90505b81811015613bf357905080600281613bd8818661409f565b613be29190614125565b613bec919061409f565b9050613bc0565b50919050565b8115613c03575060015b919050565b6000818310613c17578161361a565b5090919050565b6001600160a01b038116811461351a57600080fd5b600060208284031215613c4557600080fd5b813561361a81613c1e565b600060208083528351808285015260005b81811015613c7d57858101830151858201604001528201613c61565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613cb157600080fd5b8235613cbc81613c1e565b946020939093013593505050565b600080600060608486031215613cdf57600080fd5b8335613cea81613c1e565b92506020840135613cfa81613c1e565b929592945050506040919091013590565b801515811461351a57600080fd5b8035613c0381613d0b565b60008060408385031215613d3757600080fd5b8235613d4281613c1e565b91506020830135613d5281613d0b565b809150509250929050565b600060208284031215613d6f57600080fd5b5035919050565b60008060408385031215613d8957600080fd5b8235613d4281613d0b565b600060208284031215613da657600080fd5b813561361a81613d0b565b60008060408385031215613dc457600080fd5b8235613dcf81613c1e565b91506020830135613d5281613c1e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e1e57613e1e613ddf565b604052919050565b600067ffffffffffffffff821115613e4057613e40613ddf565b5060051b60200190565b60008060408385031215613e5d57600080fd5b823567ffffffffffffffff811115613e7457600080fd5b8301601f81018513613e8557600080fd5b80356020613e9a613e9583613e26565b613df5565b82815260059290921b83018101918181019088841115613eb957600080fd5b938201935b83851015613ee0578435613ed181613c1e565b82529382019390820190613ebe565b9550613eef9050868201613d19565b93505050509250929050565b600080600080600080600060e0888a031215613f1657600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008060408385031215613f5a57600080fd5b823591506020830135613d5281613d0b565b600181811c90821680613f8057607f821691505b602082108103613bf357634e487b7160e01b600052602260045260246000fd5b602080825260029082015261216f60f01b604082015260600190565b600060208284031215613fce57600080fd5b815161361a81613d0b565b60208082526005908201526434b9b2b93960d91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e9f57610e9f613ff8565b80516001600160701b0381168114613c0357600080fd5b60008060006060848603121561404d57600080fd5b61405684614021565b925061406460208501614021565b9150604084015163ffffffff8116811461407d57600080fd5b809150509250925092565b8082028115828204841417610e9f57610e9f613ff8565b6000826140bc57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600290820152616e6f60f01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161410557614105613ff8565b5060010190565b60006020828403121561411e57600080fd5b5051919050565b80820180821115610e9f57610e9f613ff8565b60006020828403121561414a57600080fd5b815161361a81613c1e565b600081518084526020808501945080840160005b8381101561418e5781516001600160a01b031687529582019590820190600101614169565b509495945050505050565b8281526040602082015260006141b26040830184614155565b949350505050565b600060208083850312156141cd57600080fd5b825167ffffffffffffffff8111156141e457600080fd5b8301601f810185136141f557600080fd5b8051614203613e9582613e26565b81815260059190911b8201830190838101908783111561422257600080fd5b928401925b8284101561424057835182529284019290840190614227565b979650505050505050565b85815284602082015260a06040820152600061426a60a0830186614155565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122051f7e236bccebf31bde976dc766778e569653a082d352424a4a6f0175c754d4864736f6c63430008120033608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561057f806100326000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80632e546dd214610046578063705e68c61461005b578063ba45b0b81461006e575b600080fd5b6100596100543660046103ed565b610081565b005b610059610069366004610453565b6102ac565b61005961007c36600461046c565b6102e9565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156100c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ec919061049f565b90506000856100fb88846104ce565b61010591906104eb565b90506001600160a01b03881663a9059cbb866101226002856104eb565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561016d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610191919061050d565b506001600160a01b03881663a9059cbb856101ad6002856104eb565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156101f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021c919061050d565b5060006102298284610536565b60405163a9059cbb60e01b81526001600160a01b03868116600483015260248201839052919250908a169063a9059cbb906044016020604051808303816000875af115801561027c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a0919061050d565b50505050505050505050565b600080546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156102e5573d6000803e3d6000fd5b5050565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610330573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610354919061049f565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af11580156103a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cb919061050d565b50505050565b80356001600160a01b03811681146103e857600080fd5b919050565b60008060008060008060c0878903121561040657600080fd5b61040f876103d1565b9550602087013594506040870135935061042b606088016103d1565b9250610439608088016103d1565b915061044760a088016103d1565b90509295509295509295565b60006020828403121561046557600080fd5b5035919050565b6000806040838503121561047f57600080fd5b610488836103d1565b9150610496602084016103d1565b90509250929050565b6000602082840312156104b157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176104e5576104e56104b8565b92915050565b60008261050857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561051f57600080fd5b8151801515811461052f57600080fd5b9392505050565b818103818111156104e5576104e56104b856fea2646970667358221220ed4f9df6539e0aaf00825bcb73ef68fb9cfb4570a092053bcaa1ca59f71576a264736f6c63430008120033

Deployed Bytecode

0x6080604052600436106104355760003560e01c80637a37a0ed11610229578063b2887bec1161012e578063d83d4143116100b6578063e4f4c0681161007a578063e4f4c06814610d64578063e84fb12d14610d79578063ef34db6914610d8f578063f2fde38b14610dbc578063f53dabb614610ddc57600080fd5b8063d83d414314610ca8578063da13310914610cc8578063dd55c10814610ce8578063dd62ed3e14610cfe578063de5c02c214610d4457600080fd5b8063ce4d9f15116100fd578063ce4d9f1514610bb1578063cebe59c314610be1578063ced72f8714610bf6578063d1575be414610c42578063d39612ab14610c7b57600080fd5b8063b2887bec14610b37578063b83b52c314610b57578063bf7737ce14610b77578063c705567214610b9757600080fd5b80639bf4d03a116101b1578063a842486111610180578063a842486114610aa2578063a9059cbb14610ac2578063aa8b38d914610ae2578063aeb5b9b514610b02578063aec0c34414610b2257600080fd5b80639bf4d03a14610a085780639d56e19114610a28578063a176459514610a58578063a4d66daf14610a8c57600080fd5b80638da5cb5b116101f85780638da5cb5b14610969578063917ceeb51461099d57806395d89b41146109bd57806397dad339146109d25780639bb85344146109f257600080fd5b80637a37a0ed14610929578063879b8f5714610953578063893d20e8146109695780638b699a151461098757600080fd5b80633243ca151161033a57806361b746f2116102c2578063715018a611610286578063715018a6146108a957806373509a00146108be57806374d002f1146108de578063756b4190146108f357806379353c081461091357600080fd5b806361b746f2146107fb57806368092bd9146108115780636c580801146108315780636ebcf6071461084657806370a082311461087357600080fd5b806346c123b61161030957806346c123b61461075f5780634870ae2d1461077f578063553193ca1461079557806355837757146107ab578063595dec3c146107cb57600080fd5b80633243ca15146106da5780633c11100d146106fa5780634188bf5a1461072a578063426efbb81461074a57600080fd5b80631d066ac2116103bd578063244c63751161038c578063244c63751461062857806329e99f07146106485780632b01fc9414610668578063313ce567146106985780633211aa48146106ba57600080fd5b80631d066ac2146105b2578063206c17bb146105c85780632171dcc9146105e857806323b872dd1461060857600080fd5b8063095ea7b311610404578063095ea7b3146104f9578063109bec3914610519578063125bfb6614610551578063141ae5661461057357806318160ddd1461059357600080fd5b806301873d8f1461044157806301986fad1461048657806304c23ffe146104b657806306fdde03146104d757600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5061047161045c366004613c33565b60166020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561049257600080fd5b506104716104a1366004613c33565b60116020526000908152604090205460ff1681565b3480156104c257600080fd5b50601e5461047190600160a01b900460ff1681565b3480156104e357600080fd5b506104ec610dfc565b60405161047d9190613c50565b34801561050557600080fd5b50610471610514366004613c9e565b610e8e565b34801561052557600080fd5b50601e54610539906001600160a01b031681565b6040516001600160a01b03909116815260200161047d565b34801561055d57600080fd5b5061057161056c366004613cca565b610ea5565b005b34801561057f57600080fd5b5061057161058e366004613d24565b610f51565b34801561059f57600080fd5b506022545b60405190815260200161047d565b3480156105be57600080fd5b506105a460285481565b3480156105d457600080fd5b50601454610539906001600160a01b031681565b3480156105f457600080fd5b50610571610603366004613d24565b610fab565b34801561061457600080fd5b50610471610623366004613cca565b611000565b34801561063457600080fd5b50610571610643366004613d24565b611097565b34801561065457600080fd5b506105a4610663366004613d5d565b61110a565b34801561067457600080fd5b50610471610683366004613c33565b602b6020526000908152604090205460ff1681565b3480156106a457600080fd5b50600f5460405160ff909116815260200161047d565b3480156106c657600080fd5b506105716106d5366004613d76565b6111b1565b3480156106e657600080fd5b506105716106f5366004613d5d565b611204565b34801561070657600080fd5b50610471610715366004613c33565b60156020526000908152604090205460ff1681565b34801561073657600080fd5b50601d54610539906001600160a01b031681565b34801561075657600080fd5b50610571611238565b34801561076b57600080fd5b5061057161077a366004613d94565b61126d565b34801561078b57600080fd5b506105a460315481565b3480156107a157600080fd5b506105a4601b5481565b3480156107b757600080fd5b506105716107c6366004613c33565b6112b5565b3480156107d757600080fd5b506104716107e6366004613c33565b60126020526000908152604090205460ff1681565b34801561080757600080fd5b506105a4602e5481565b34801561081d57600080fd5b5061057161082c366004613d24565b611306565b34801561083d57600080fd5b5061057161135b565b34801561085257600080fd5b506105a4610861366004613c33565b600b6020526000908152604090205481565b34801561087f57600080fd5b506105a461088e366004613c33565b6001600160a01b03166000908152600b602052604090205490565b3480156108b557600080fd5b506105716113c5565b3480156108ca57600080fd5b506105716108d9366004613db1565b611439565b3480156108ea57600080fd5b506029546105a4565b3480156108ff57600080fd5b5061057161090e366004613e4a565b611496565b34801561091f57600080fd5b506105a4602c5481565b34801561093557600080fd5b5061093e611531565b6040805192835260208301919091520161047d565b34801561095f57600080fd5b506105a4600a5481565b34801561097557600080fd5b506000546001600160a01b0316610539565b34801561099357600080fd5b506105a460305481565b3480156109a957600080fd5b506105716109b8366004613d5d565b611610565b3480156109c957600080fd5b506104ec61168b565b3480156109de57600080fd5b506105716109ed366004613d5d565b61169a565b3480156109fe57600080fd5b506105a4601c5481565b348015610a1457600080fd5b50610571610a23366004613d5d565b6116c9565b348015610a3457600080fd5b50610471610a43366004613c33565b60176020526000908152604090205460ff1681565b348015610a6457600080fd5b506105397f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b348015610a9857600080fd5b506105a460255481565b348015610aae57600080fd5b50610571610abd366004613d24565b6116fd565b348015610ace57600080fd5b50610471610add366004613c9e565b611752565b348015610aee57600080fd5b50610571610afd366004613c9e565b61175f565b348015610b0e57600080fd5b50610571610b1d366004613efb565b611795565b348015610b2e57600080fd5b506105716117e4565b348015610b4357600080fd5b50610571610b52366004613e4a565b611948565b348015610b6357600080fd5b50610571610b72366004613c33565b6119de565b348015610b8357600080fd5b50610571610b92366004613f47565b611a2f565b348015610ba357600080fd5b506026546104719060ff1681565b348015610bbd57600080fd5b50610bc6611a90565b6040805193845260208401929092529082015260600161047d565b348015610bed57600080fd5b50610571611b37565b348015610c0257600080fd5b50600154600454600754600254600354600654604080519687526020870195909552938501929092526060840152608083015260a082015260c00161047d565b348015610c4e57600080fd5b50610471610c5d366004613c33565b6001600160a01b031660009081526011602052604090205460ff1690565b348015610c8757600080fd5b506105a4610c96366004613c33565b60186020526000908152604090205481565b348015610cb457600080fd5b50610571610cc3366004613d24565b611cad565b348015610cd457600080fd5b50610571610ce3366004613f47565b611d02565b348015610cf457600080fd5b506105a4602f5481565b348015610d0a57600080fd5b506105a4610d19366004613db1565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b348015610d5057600080fd5b50610539610d5f366004613d5d565b611d4a565b348015610d7057600080fd5b50610571611d74565b348015610d8557600080fd5b506105a4602d5481565b348015610d9b57600080fd5b506105a4610daa366004613c33565b602a6020526000908152604090205481565b348015610dc857600080fd5b50610571610dd7366004613c33565b611daa565b348015610de857600080fd5b50610571610df7366004613d5d565b611e6a565b6060600d8054610e0b90613f6c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3790613f6c565b8015610e845780601f10610e5957610100808354040283529160200191610e84565b820191906000526020600020905b815481529060010190602001808311610e6757829003601f168201915b5050505050905090565b6000610e9b338484611f76565b5060015b92915050565b6000546001600160a01b03163314610ed85760405162461bcd60e51b8152600401610ecf90613fa0565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190613fbc565b50505050565b3360009081526017602052604090205460ff16610f805760405162461bcd60e51b8152600401610ecf90613fd9565b6001600160a01b03919091166000908152602b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b600061100d848484611fd8565b6001600160a01b0384166000908152600c602090815260408083203384529091529020546000191461108d576001600160a01b0384166000908152600c6020908152604080832033845290915290205461106890839061400e565b6001600160a01b0385166000908152600c602090815260408083203384529091529020555b5060019392505050565b3360009081526017602052604090205460ff166110df5760405162461bcd60e51b8152600401610ecf9060208082526004908201526369736f6b60e01b604082015260600190565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b601e5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa15801561115b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117f9190614038565b506001600160701b03918216935016905060008161119d8488614088565b6111a7919061409f565b9695505050505050565b3360009081526017602052604090205460ff166111e05760405162461bcd60e51b8152600401610ecf906140c1565b6013805461ffff191692151561ff0019169290921761010091151591909102179055565b3360009081526017602052604090205460ff166112335760405162461bcd60e51b8152600401610ecf906140c1565b602855565b3360009081526017602052604090205460ff166112675760405162461bcd60e51b8152600401610ecf90613fd9565b43601c55565b6000546001600160a01b031633146112975760405162461bcd60e51b8152600401610ecf90613fa0565b601e8054911515600160a01b0260ff60a01b19909216919091179055565b3360009081526017602052604090205460ff166112e45760405162461bcd60e51b8152600401610ecf90613fd9565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113305760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113855760405162461bcd60e51b8152600401610ecf90613fa0565b601b54156113bf5760405162461bcd60e51b81526020600482015260076024820152661cdd185c9d195960ca1b6044820152606401610ecf565b43601b55565b6000546001600160a01b031633146113ef5760405162461bcd60e51b8152600401610ecf90613fa0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526017602052604090205460ff166114685760405162461bcd60e51b8152600401610ecf906140c1565b601d80546001600160a01b039384166001600160a01b031991821617909155601e8054929093169116179055565b3360009081526017602052604090205460ff166114c55760405162461bcd60e51b8152600401610ecf90613fd9565b60005b825181101561152c5781601260008584815181106114e8576114e86140dd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611524816140f3565b9150506114c8565b505050565b6000806000601d60009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b39190614038565b506001600160701b0391821693501690507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c306001600160a01b038216101561160157829550819450611608565b8195508294505b505050509091565b6000546001600160a01b0316331461163a5760405162461bcd60e51b8152600401610ecf90613fa0565b62030d4081101580156116505750621e84808111155b6116865760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401610ecf565b602d55565b6060600e8054610e0b90613f6c565b6000546001600160a01b031633146116c45760405162461bcd60e51b8152600401610ecf90613fa0565b602c55565b3360009081526017602052604090205460ff166116f85760405162461bcd60e51b8152600401610ecf90613fd9565b600a55565b6000546001600160a01b031633146117275760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000610e9b338484611fd8565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561152c573d6000803e3d6000fd5b3360009081526017602052604090205460ff166117c45760405162461bcd60e51b8152600401610ecf90613fd9565b600196909655600494909455600792909255600255600355600655600555565b3360009081526017602052604090205460ff1661182b5760405162461bcd60e51b81526020600482015260056024820152646e6f206f6b60d81b6044820152606401610ecf565b601d546001600160a01b03166000908152600b60205260409020541561194657602854601d546001600160a01b03166000908152600b60205260408120549091612710916118799190614088565b611883919061409f565b601d546001600160a01b03166000908152600b60205260409020549091506118ac90829061400e565b601d80546001600160a01b039081166000908152600b6020526040902092909255546118dc911661dead83612706565b601d60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561192c57600080fd5b505af1158015611940573d6000803e3d6000fd5b50505050505b565b3360009081526017602052604090205460ff166119775760405162461bcd60e51b8152600401610ecf90613fd9565b60005b825181101561152c57816011600085848151811061199a5761199a6140dd565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806119d6816140f3565b91505061197a565b3360009081526017602052604090205460ff16611a0d5760405162461bcd60e51b8152600401610ecf90613fd9565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526017602052604090205460ff16611a775760405162461bcd60e51b8152600401610ecf906020808252600490820152636572726f60e01b604082015260600190565b6025919091556026805460ff1916911515919091179055565b6000806000611a9d611531565b601d546040516370a0823160e01b81526001600160a01b0391821660048201529295509093507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16906370a0823190602401602060405180830381865afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b30919061410c565b9050909192565b3360009081526017602052604090205460ff16611b7e5760405162461bcd60e51b81526020600482015260056024820152646e6f206f6b60d81b6044820152606401610ecf565b602854601e546001600160a01b03166000908152600b6020526040812054909161271091611bac9190614088565b611bb6919061409f565b601e546001600160a01b03166000908152600b6020526040902054909150611bdf90829061400e565b601e80546001600160a01b039081166000908152600b602052604090209290925554611c0f911661dead83612706565b601e60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c5f57600080fd5b505af1158015611c73573d6000803e3d6000fd5b50505050600160276000610e1042611c8b919061409f565b81526020810191909152604001600020805460ff191691151591909117905550565b6000546001600160a01b03163314611cd75760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b3360009081526017602052604090205460ff16611d315760405162461bcd60e51b8152600401610ecf906140c1565b601991909155601a805460ff1916911515919091179055565b60298181548110611d5a57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526017602052604090205460ff16611da35760405162461bcd60e51b8152600401610ecf90613fd9565b6000601c55565b6000546001600160a01b03163314611dd45760405162461bcd60e51b8152600401610ecf90613fa0565b6001600160a01b038116611e0f5760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610ecf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526017602052604090205460ff16611e995760405162461bcd60e51b8152600401610ecf90613fd9565b602f55565b6000806000611ead858561277e565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001611f549291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831660009081526012602052604090205460ff16156120355760405162461bcd60e51b81526020600482015260116024820152706e6f742076616c6964206164647265737360781b6044820152606401610ecf565b6001600160a01b0383166000908152600b6020526040902054818110156120925760405162461bcd60e51b81526020600482015260116024820152701b9bdd08195b9bdd59da08185b5bdd5b9d607a1b6044820152606401610ecf565b6001600160a01b0384166000908152601160205260408120546001919060ff161580156120d857506001600160a01b03851660009081526011602052604090205460ff16155b156120e4575060019050805b6001600160a01b038086166000908152601860205260408120439055601e5490918291898216911614806121255750601e546001600160a01b038881169116145b1561217557601e546001600160a01b039081169088160361214f57612148612873565b91506122d4565b601e546001600160a01b03908116908916036121705761216d612996565b90505b6122d4565b601d546000906001600160a01b0389811691161480156121a457503360009081526016602052604090205460ff165b80156121b85750326001600160a01b038a16145b15612234576121c687612ab9565b90508015612234576001600160a01b03891660009081526011602052604090205460ff1661222b5760405162461bcd60e51b81526020600482015260126024820152716f6e6c79207768697465206164647265737360701b6044820152606401610ecf565b60019250600094505b601d546000906001600160a01b038b8116911614801561226257506014546001600160a01b038a8116911614155b156122775761227088612b24565b9050612299565b6014546001600160a01b03908116908b16036122995761229688612c5e565b90505b80156122d1576001600160a01b0389166000908152601160205260409020546001935060ff166122cc57600195506122d1565b600095505b50505b6001600160a01b03881660009081526011602052604090205460ff16801561231457506001600160a01b03871660009081526011602052604090205460ff165b1561231e57600093505b6001600160a01b03881660009081526015602052604090205460ff1615801561235f57506001600160a01b03881660009081526011602052604090205460ff165b801561238457506001600160a01b03871660009081526011602052604090205460ff16155b1561238e57600093505b601c54600003612500576001600160a01b03881660009081526015602052604090205460ff16806123cc5750601f546001600160a01b038981169116145b80156123f157506001600160a01b03871660009081526011602052604090205460ff16155b1561241e576001600160a01b0387166000908152601260205260409020805460ff19166001179055612500565b6001600160a01b03881660009081526015602052604090205460ff16801561245f57506001600160a01b03871660009081526011602052604090205460ff16155b1561248c576001600160a01b0387166000908152601260205260409020805460ff19166001179055612500565b6001600160a01b03871660009081526015602052604090205460ff1680156124cd57506001600160a01b03881660009081526011602052604090205460ff16155b80156124d7575081155b15612500576001600160a01b0388166000908152601260205260409020805460ff191660011790555b6001600160a01b03881660009081526015602052604090205460ff168061253f57506001600160a01b03871660009081526015602052604090205460ff165b156126ed576001600160a01b03881660009081526011602052604090205460ff16801561258457506001600160a01b03871660009081526015602052604090205460ff165b1561258e57600093505b6001600160a01b03871660009081526011602052604090205460ff1680156125ce57506001600160a01b03881660009081526015602052604090205460ff165b156125d857600093505b6001600160a01b03881660009081526011602052604090205460ff1615801561261957506001600160a01b03871660009081526015602052604090205460ff165b1561267157601b5460000361265d57601c5460001080156126375750815b156126455760009350612671565b601b5460001061265457600080fd5b60019350612671565b811561266c5760009350612671565b600193505b6001600160a01b03871660009081526011602052604090205460ff161580156126b257506001600160a01b03881660009081526015602052604090205460ff165b156126ed57601b546000036126d957601c546000106126d057600080fd5b600193506126de565b600193505b601b546000106126ed57600080fd5b6126fc88888887858789612d10565b5050505050505050565b6001600160a01b0382166000908152600b602052604090205461272a908290614125565b6001600160a01b038084166000818152600b602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fcb9085815260200190565b600080826001600160a01b0316846001600160a01b0316036127ee5760405162461bcd60e51b815260206004820152602360248201527f50616e63616b654c6962726172793a204944454e544943414c5f41444452455360448201526253455360e81b6064820152608401610ecf565b826001600160a01b0316846001600160a01b03161061280e578284612811565b83835b90925090506001600160a01b03821661286c5760405162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f41444452455353000000006044820152606401610ecf565b9250929050565b601e5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa1580156128c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e89190614038565b506020546001600160701b039283169450911691506001600160a01b031660003082101561291757508261291a565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa158015612964573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612988919061410c565b919091119695505050505050565b601e5460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac916004808201926060929091908290030181865afa1580156129e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0b9190614038565b506020546001600160701b039283169450911691506001600160a01b0316600030821015612a3a575082612a3d565b50815b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa158015612a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aab919061410c565b909110159695505050505050565b600080600080612ac7611a90565b92509250925060008084118015612ade5750600083115b15612afb5782612aee8588614088565b612af8919061409f565b90505b612b058185614125565b8210612b1b57612b1782878686613063565b5094505b50505050919050565b600080600080612b32611a90565b92509250925082811015612bf857601d546001600160a01b03166000908152600b6020526040902054612b6690869061400e565b601d60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdd919061410c565b612be79087614088565b612bf1919061409f565b9350612c56565b601e54600160a01b900460ff1615612c565760008084118015612c1b5750600083115b15612b1b57612c2a868461400e565b612c348588614088565b612c3e919061409f565b9050612c4a8482614125565b821015612b1b57600080fd5b505050919050565b6000806000612c6b611a90565b9250509150818111612d0957601d546001600160a01b03166000818152600b60209081526040918290205482516318160ddd60e01b815292519093926318160ddd9260048083019391928290030181865afa158015612cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf2919061410c565b612cfc9086614088565b612d06919061409f565b92505b5050919050565b6001600160a01b0387166000908152600b6020526040902054612d3490869061400e565b6001600160a01b0388166000908152600b602090815260408083209390935560189052908120546019548291829182918291829190612d739082614125565b90508a15612fc4578915612ddd576127106001548d612d929190614088565b612d9c919061409f565b96506127106007548d612daf9190614088565b612db9919061409f565b95506127106004548d612dcc9190614088565b612dd6919061409f565b9450612f66565b8815612df157612dec8e61344c565b612f66565b6001600160a01b038e1660009081526015602052604090205460ff1615612e945760265460ff1615612e7f576000612e2a60255461351d565b905080600181518110612e3f57612e3f6140dd565b60200260200101518d10612e7d5760405162461bcd60e51b81526020600482015260056024820152641a1a59da1d60da1b6044820152606401610ecf565b505b600192506127106001548d612d929190614088565b6001600160a01b038d1660009081526015602052604090205460ff1615612f4257601a5460ff1615612ef357438110612ef35760405162461bcd60e51b81526020600482015260016024820152603f60f81b6044820152606401610ecf565b600193506127106002548d612f089190614088565b612f12919061409f565b96506127106006548d612f259190614088565b612f2f919061409f565b95506127106003548d612dcc9190614088565b8715612f66576127106005548d612f599190614088565b612f63919061409f565b94505b612f708688614125565b91508115612fc457612f838e3084612706565b306000908152600b6020526040902054601a54610100900460ff16158015612fa85750845b8015612fb45750600081115b15612fc257612fc281613621565b505b838015612fea57506001600160a01b038e1660009081526011602052604090205460ff16155b15612ffa57612ffa602d54613858565b816008546130089190614125565b600855600954613019908790614125565b6009556130268583614125565b9150841561303d576130388e86613b87565b600094505b6130538e8e848f61304e919061400e565b612706565b5050505050505050505050505050565b6000806000601d60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130df919061410c565b90506000601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315a9190614138565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bb9190614138565b601d5460408051637464fc3d60e01b815290519293506001600160a01b0380851615159360009390911691637464fc3d9160048083019260209291908290030181865afa158015613210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613234919061410c565b905081156133d25780156133d2576000613256613251898b614088565b613b98565b9050600061326383613b98565b9050808211156133cf5760145460009081906001600160a01b03167310ed43c718714eb63d5aa57b78b54704e256024d19016132e1576132a3838561400e565b6132ad9089614088565b6132b8906008614088565b91506132c5836008614088565b6132d0856011614088565b6132da9190614125565b90506133ad565b6014546001600160a01b031673d99d1c33f9fc3444f8101754abc46c52416550d0190161332a57613312838561400e565b61331c9089614088565b9150826132d0856003614088565b6014546001600160a01b031673e9d6f80028671279a28790bb4007b10b0595def0190161337e5761335b838561400e565b6133659089614088565b613370906003614088565b9150826132d0856005614088565b613388838561400e565b6133929089614088565b9150826133a0856005614088565b6133aa9190614125565b90505b6133b7818361409f565b985088156133cc576133c98989614125565b97505b50505b50505b60006133de898c61400e565b905084600003613409576103e86133f86132518c84614088565b613402919061400e565b965061343e565b61343b896134178784614088565b613421919061409f565b8961342c888e614088565b613436919061409f565b613c08565b96505b505050505094509492505050565b6001600160a01b0381166000908152602a6020526040812054900361351a5760295415806134ab5750806001600160a01b03166029600081548110613493576134936140dd565b6000918252602090912001546001600160a01b031614155b1561351a57803b80156134bc575050565b50602980546001600160a01b0383166000818152602a60205260408120839055600183018455929092527fcb7c14ce178f56e2e8d86ab33ebc0ae081ba8556a00cd122038841867181caac0180546001600160a01b03191690911790555b50565b60408051600280825260608083018452926000929190602083019080368337505060205482519293506001600160a01b031691839150600090613562576135626140dd565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613596576135966140dd565b6001600160a01b03928316602091820292909201015260145460405163d06ca61f60e01b815291169063d06ca61f906135d59086908590600401614199565b600060405180830381865afa1580156135f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261361a91908101906141ba565b9392505050565b601a805461ff001916610100179055801561384a57604080516002808252606082018352600092602083019080368337019050509050308160008151811061366b5761366b6140dd565b6001600160a01b039283166020918202929092018101919091525482519116908290600190811061369e5761369e6140dd565b6001600160a01b039283166020918202929092010152601454601354604051635c11d79560e01b815291831692635c11d795926136f0928792600092889262010000900490911690429060040161424b565b600060405180830381600087803b15801561370a57600080fd5b505af115801561371e573d6000803e3d6000fd5b50505050600060095411156137d5576013546020546009546008546023546024805460405163172a36e960e11b81526001600160a01b0396871660048201529182019490945260448101929092528316606482015290821660848201523060a4820152620100009092041690632e546dd29060c401600060405180830381600087803b1580156137ad57600080fd5b505af11580156137c1573d6000803e3d6000fd5b505060006009819055600855506138489050565b601354602054604051631748b61760e31b81526001600160a01b03918216600482015230602482015262010000909204169063ba45b0b890604401600060405180830381600087803b15801561382a57600080fd5b505af115801561383e573d6000803e3d6000fd5b5050600060085550505b505b50601a805461ff0019169055565b601b546000036138655750565b436031546030546138769190614125565b111561387f5750565b602f546020546040516370a0823160e01b81523060048201526001600160a01b0390911690829082906370a0823190602401602060405180830381865afa1580156138ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f2919061410c565b10156138fd57505050565b601e54604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561394c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613970919061410c565b905080600003613981575050505050565b602954600090819081908180805a602c54600a54919250905b8d851080156139a857508584105b15613b735785602e54106139bc576000602e555b6029602e54815481106139d1576139d16140dd565b60009182526020808320909101546001600160a01b0316808352602b90915260409091205490995060ff16158015613a27575080613a248a6001600160a01b03166000908152600b602052604090205490565b10155b15613b31576040516370a0823160e01b81526001600160a01b038a811660048301528c16906370a0823190602401602060405180830381865afa158015613a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a96919061410c565b9750818810613b315789613aaa898f614088565b613ab4919061409f565b96508615613b315760405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018990528d169063a9059cbb906044016020604051808303816000875af1158015613b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2f9190613fbc565b505b5a613b3c908461400e565b613b469086614125565b94505a602e80549194506000613b5b836140f3565b91905055508380613b6b906140f3565b94505061399a565b505043603055505050505050505050505050565b613b948261dead83612706565b5050565b60006003821115613bf95750806000613bb260028361409f565b613bbd906001614125565b90505b81811015613bf357905080600281613bd8818661409f565b613be29190614125565b613bec919061409f565b9050613bc0565b50919050565b8115613c03575060015b919050565b6000818310613c17578161361a565b5090919050565b6001600160a01b038116811461351a57600080fd5b600060208284031215613c4557600080fd5b813561361a81613c1e565b600060208083528351808285015260005b81811015613c7d57858101830151858201604001528201613c61565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613cb157600080fd5b8235613cbc81613c1e565b946020939093013593505050565b600080600060608486031215613cdf57600080fd5b8335613cea81613c1e565b92506020840135613cfa81613c1e565b929592945050506040919091013590565b801515811461351a57600080fd5b8035613c0381613d0b565b60008060408385031215613d3757600080fd5b8235613d4281613c1e565b91506020830135613d5281613d0b565b809150509250929050565b600060208284031215613d6f57600080fd5b5035919050565b60008060408385031215613d8957600080fd5b8235613d4281613d0b565b600060208284031215613da657600080fd5b813561361a81613d0b565b60008060408385031215613dc457600080fd5b8235613dcf81613c1e565b91506020830135613d5281613c1e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e1e57613e1e613ddf565b604052919050565b600067ffffffffffffffff821115613e4057613e40613ddf565b5060051b60200190565b60008060408385031215613e5d57600080fd5b823567ffffffffffffffff811115613e7457600080fd5b8301601f81018513613e8557600080fd5b80356020613e9a613e9583613e26565b613df5565b82815260059290921b83018101918181019088841115613eb957600080fd5b938201935b83851015613ee0578435613ed181613c1e565b82529382019390820190613ebe565b9550613eef9050868201613d19565b93505050509250929050565b600080600080600080600060e0888a031215613f1657600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008060408385031215613f5a57600080fd5b823591506020830135613d5281613d0b565b600181811c90821680613f8057607f821691505b602082108103613bf357634e487b7160e01b600052602260045260246000fd5b602080825260029082015261216f60f01b604082015260600190565b600060208284031215613fce57600080fd5b815161361a81613d0b565b60208082526005908201526434b9b2b93960d91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e9f57610e9f613ff8565b80516001600160701b0381168114613c0357600080fd5b60008060006060848603121561404d57600080fd5b61405684614021565b925061406460208501614021565b9150604084015163ffffffff8116811461407d57600080fd5b809150509250925092565b8082028115828204841417610e9f57610e9f613ff8565b6000826140bc57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600290820152616e6f60f01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161410557614105613ff8565b5060010190565b60006020828403121561411e57600080fd5b5051919050565b80820180821115610e9f57610e9f613ff8565b60006020828403121561414a57600080fd5b815161361a81613c1e565b600081518084526020808501945080840160005b8381101561418e5781516001600160a01b031687529582019590820190600101614169565b509495945050505050565b8281526040602082015260006141b26040830184614155565b949350505050565b600060208083850312156141cd57600080fd5b825167ffffffffffffffff8111156141e457600080fd5b8301601f810185136141f557600080fd5b8051614203613e9582613e26565b81815260059190911b8201830190838101908783111561422257600080fd5b928401925b8284101561424057835182529284019290840190614227565b979650505050505050565b85815284602082015260a06040820152600061426a60a0830186614155565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122051f7e236bccebf31bde976dc766778e569653a082d352424a4a6f0175c754d4864736f6c63430008120033

Deployed Bytecode Sourcemap

9653:27006:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10603:44;;;;;;;;;;-1:-1:-1;10603:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;567:14:1;;560:22;542:41;;530:2;515:18;10603:44:0;;;;;;;;10332:45;;;;;;;;;;-1:-1:-1;10332:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11058:31;;;;;;;;;;-1:-1:-1;11058:31:0;;;;-1:-1:-1;;;11058:31:0;;;;;;13394:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14025:151::-;;;;;;;;;;-1:-1:-1;14025:151:0;;;;;:::i;:::-;;:::i;10990:22::-;;;;;;;;;;-1:-1:-1;10990:22:0;;;;-1:-1:-1;;;;;10990:22:0;;;;;;-1:-1:-1;;;;;1631:32:1;;;1613:51;;1601:2;1586:18;10990:22:0;1467:203:1;31727:137:0;;;;;;;;;;-1:-1:-1;31727:137:0;;;;;:::i;:::-;;:::i;:::-;;33404:161;;;;;;;;;;-1:-1:-1;33404:161:0;;;;;:::i;:::-;;:::i;13485:93::-;;;;;;;;;;-1:-1:-1;13558:12:0;;13485:93;;;2925:25:1;;;2913:2;2898:18;13485:93:0;2779:177:1;29529:29:0;;;;;;;;;;;;;;;;10513:31;;;;;;;;;;-1:-1:-1;10513:31:0;;;;-1:-1:-1;;;;;10513:31:0;;;31489:113;;;;;;;;;;-1:-1:-1;31489:113:0;;;;;:::i;:::-;;:::i;14184:336::-;;;;;;;;;;-1:-1:-1;14184:336:0;;;;;:::i;:::-;;:::i;21741:132::-;;;;;;;;;;-1:-1:-1;21741:132:0;;;;;:::i;:::-;;:::i;28262:257::-;;;;;;;;;;-1:-1:-1;28262:257:0;;;;;:::i;:::-;;:::i;32547:49::-;;;;;;;;;;-1:-1:-1;32547:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13208:85;;;;;;;;;;-1:-1:-1;13276:9:0;;13208:85;;13276:9;;;;3515:36:1;;3503:2;3488:18;13208:85:0;3373:184:1;14881:155:0;;;;;;;;;;-1:-1:-1;14881:155:0;;;;;:::i;:::-;;:::i;29565:121::-;;;;;;;;;;-1:-1:-1;29565:121:0;;;;;:::i;:::-;;:::i;10551:45::-;;;;;;;;;;-1:-1:-1;10551:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10958:25;;;;;;;;;;-1:-1:-1;10958:25:0;;;;-1:-1:-1;;;;;10958:25:0;;;19461:132;;;;;;;;;;;;;:::i;31912:94::-;;;;;;;;;;-1:-1:-1;31912:94:0;;;;;:::i;:::-;;:::i;33881:38::-;;;;;;;;;;;;;;;;10884:30;;;;;;;;;;;;;;;;32161:138;;;;;;;;;;-1:-1:-1;32161:138:0;;;;;:::i;:::-;;:::i;10384:42::-;;;;;;;;;;-1:-1:-1;10384:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33754:29;;;;;;;;;;;;;;;;31004:110;;;;;;;;;;-1:-1:-1;31004:110:0;;;;;:::i;:::-;;:::i;32014:139::-;;;;;;;;;;;;;:::i;10067:44::-;;;;;;;;;;-1:-1:-1;10067:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;13584:115;;;;;;;;;;-1:-1:-1;13584:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;13673:18:0;13642:7;13673:18;;;:9;:18;;;;;;;13584:115;6597:148;;;;;;;;;;;;;:::i;14711:164::-;;;;;;;;;;-1:-1:-1;14711:164:0;;;;;:::i;:::-;;:::i;32605:104::-;;;;;;;;;;-1:-1:-1;32683:11:0;:18;32605:104;;31122:230;;;;;;;;;;-1:-1:-1;31122:230:0;;;;;:::i;:::-;;:::i;33180:62::-;;;;;;;;;;;;;;;;24689:405;;;;;;;;;;;;;:::i;:::-;;;;6397:25:1;;;6453:2;6438:18;;6431:34;;;;6370:18;24689:405:0;6223:248:1;9927:35:0;;;;;;;;;;;;;;;;13117:85;;;;;;;;;;-1:-1:-1;13160:7:0;6480:6;-1:-1:-1;;;;;6480:6:0;13117:85;;33838:36;;;;;;;;;;;;;;;;33573:173;;;;;;;;;;-1:-1:-1;33573:173:0;;;;;:::i;:::-;;:::i;13299:89::-;;;;;;;;;;;;;:::i;33292:104::-;;;;;;;;;;-1:-1:-1;33292:104:0;;;;;:::i;:::-;;:::i;10921:30::-;;;;;;;;;;;;;;;;36503:153;;;;;;;;;;-1:-1:-1;36503:153:0;;;;;:::i;:::-;;:::i;10654:35::-;;;;;;;;;;-1:-1:-1;10654:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11019:30;;;;;;;;;;;;;;;11510:28;;;;;;;;;;;;;;;;31365:116;;;;;;;;;;-1:-1:-1;31365:116:0;;;;;:::i;:::-;;:::i;13705:165::-;;;;;;;;;;-1:-1:-1;13705:165:0;;;;;:::i;:::-;;:::i;31610:109::-;;;;;;;;;;-1:-1:-1;31610:109:0;;;;;:::i;:::-;;:::i;21881:433::-;;;;;;;;;;-1:-1:-1;21881:433:0;;;;;:::i;:::-;;:::i;29698:421::-;;;;;;;;;;;;;:::i;30760:236::-;;;;;;;;;;-1:-1:-1;30760:236:0;;;;;:::i;:::-;;:::i;32307:140::-;;;;;;;;;;-1:-1:-1;32307:140:0;;;;;:::i;:::-;;:::i;15077:154::-;;;;;;;;;;-1:-1:-1;15077:154:0;;;;;:::i;:::-;;:::i;15042:25::-;;;;;;;;;;-1:-1:-1;15042:25:0;;;;;;;;24472:209;;;;;;;;;;;;;:::i;:::-;;;;7589:25:1;;;7645:2;7630:18;;7623:34;;;;7673:18;;;7666:34;7577:2;7562:18;24472:209:0;7387:319:1;30125:384:0;;;;;;;;;;;;;:::i;21571:164::-;;;;;;;;;;-1:-1:-1;21661:6:0;;21669:10;;21681:11;;21694:7;;21702:11;;21714:12;;21571:164;;;7998:25:1;;;8054:2;8039:18;;8032:34;;;;8082:18;;;8075:34;;;;8140:2;8125:18;;8118:34;8183:3;8168:19;;8161:35;8227:3;8212:19;;8205:35;7985:3;7970:19;21571:164:0;7711:535:1;30647:105:0;;;;;;;;;;-1:-1:-1;30647:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;30725:19:0;30702:4;30725:19;;;:13;:19;;;;;;;;;30647:105;10696:41;;;;;;;;;;-1:-1:-1;10696:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;30523:116;;;;;;;;;;-1:-1:-1;30523:116:0;;;;;:::i;:::-;;:::i;15237:181::-;;;;;;;;;;-1:-1:-1;15237:181:0;;;;;:::i;:::-;;:::i;33790:41::-;;;;;;;;;;;;;;;;13878:139;;;;;;;;;;-1:-1:-1;13878:139:0;;;;;:::i;:::-;-1:-1:-1;;;;;13982:18:0;;;13951:7;13982:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13878:139;32455:28;;;;;;;;;;-1:-1:-1;32455:28:0;;;;;:::i;:::-;;:::i;19319:136::-;;;;;;;;;;;;;:::i;33249:34::-;;;;;;;;;;;;;;;;32490:50;;;;;;;;;;-1:-1:-1;32490:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;6753:208;;;;;;;;;;-1:-1:-1;6753:208:0;;;;;:::i;:::-;;:::i;36350:145::-;;;;;;;;;;-1:-1:-1;36350:145:0;;;;;:::i;:::-;;:::i;13394:85::-;13433:13;13466:5;13459:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13394:85;:::o;14025:151::-;14092:4;14109:37;14118:10;14130:7;14139:6;14109:8;:37::i;:::-;-1:-1:-1;14164:4:0;14025:151;;;;;:::o;31727:137::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;;;;;;;;;31820:36:::1;::::0;-1:-1:-1;;;31820:36:0;;-1:-1:-1;;;;;9158:32:1;;;31820:36:0::1;::::0;::::1;9140:51:1::0;9207:18;;;9200:34;;;31820:22:0;::::1;::::0;::::1;::::0;9113:18:1;;31820:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31727:137:::0;;;:::o;33404:161::-;33494:10;33488:17;;;;:5;:17;;;;;;;;33480:34;;;;-1:-1:-1;;;33480:34:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33525:23:0;;;;;;;;:17;:23;;;;;:32;;-1:-1:-1;;33525:32:0;;;;;;;;;;33404:161::o;31489:113::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31567:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:27;;-1:-1:-1;;31567:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31489:113::o;14184:336::-;14282:4;14299:36;14309:6;14317:9;14328:6;14299:9;:36::i;:::-;-1:-1:-1;;;;;14350:19:0;;10873:1;14350:19;;;:11;:19;;;;;;;;14370:10;14350:31;;;;;;;;-1:-1:-1;;14350:38:0;14346:145;;-1:-1:-1;;;;;14439:19:0;;;;;;:11;:19;;;;;;;;14459:10;14439:31;;;;;;;;:40;;14473:6;;14439:40;:::i;:::-;-1:-1:-1;;;;;14405:19:0;;;;;;:11;:19;;;;;;;;14425:10;14405:31;;;;;;;:74;14346:145;-1:-1:-1;14508:4:0;14184:336;;;;;:::o;21741:132::-;21815:10;21809:17;;;;:5;:17;;;;;;;;21801:33;;;;-1:-1:-1;;;21801:33:0;;;;;;10295:2:1;10277:21;;;10334:1;10314:18;;;10307:29;-1:-1:-1;;;10367:2:1;10352:18;;10345:34;10411:2;10396:18;;10093:327;21801:33:0;-1:-1:-1;;;;;21845:13:0;;;;;;;;:5;:13;;;;;:18;;-1:-1:-1;;21845:18:0;;;;;;;;;;21741:132::o;28262:257::-;28378:6;;28423:22;;;-1:-1:-1;;;28423:22:0;;;;28313:16;;-1:-1:-1;;;;;28378:6:0;;28313:16;;;;28378:6;;28423:20;;:22;;;;;;;;;;;;;;;28378:6;28423:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;28398:47:0;;;;-1:-1:-1;28398:47:0;;-1:-1:-1;28461:9:0;28398:47;28472:10;28398:47;28472:6;:10;:::i;:::-;28471:15;;;;:::i;:::-;28461:25;28262:257;-1:-1:-1;;;;;;28262:257:0:o;14881:155::-;14963:10;14957:17;;;;:5;:17;;;;;;;;14949:31;;;;-1:-1:-1;;;14949:31:0;;;;;;;:::i;:::-;14991:4;:10;;-1:-1:-1;;15012:16:0;14991:10;;;-1:-1:-1;;15012:16:0;;;;;14991:10;15012:16;;;;;;;;;;14881:155::o;29565:121::-;29634:10;29628:17;;;;:5;:17;;;;;;;;29620:31;;;;-1:-1:-1;;;29620:31:0;;;;;;;:::i;:::-;29662:11;:16;29565:121::o;19461:132::-;19523:10;19517:17;;;;:5;:17;;;;;;;;19509:34;;;;-1:-1:-1;;;19509:34:0;;;;;;;:::i;:::-;19573:12;19555:15;:30;19461:132::o;31912:94::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;31977:12:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;31977:21:0::1;-1:-1:-1::0;;;;31977:21:0;;::::1;::::0;;;::::1;::::0;;31912:94::o;32161:138::-;32234:10;32228:17;;;;:5;:17;;;;;;;;32220:34;;;;-1:-1:-1;;;32220:34:0;;;;;;;:::i;:::-;32265:13;:26;;-1:-1:-1;;;;;;32265:26:0;-1:-1:-1;;;;;32265:26:0;;;;;;;;;;32161:138::o;31004:110::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31081:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:25;;-1:-1:-1;;31081:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31004:110::o;32014:139::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;32077:15:::1;::::0;32072:20;32064:40:::1;;;::::0;-1:-1:-1;;;32064:40:0;;12000:2:1;32064:40:0::1;::::0;::::1;11982:21:1::0;12039:1;12019:18;;;12012:29;-1:-1:-1;;;12057:18:1;;;12050:37;12104:18;;32064:40:0::1;11798:330:1::0;32064:40:0::1;32133:12;32115:15;:30:::0;32014:139::o;6597:148::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;6704:1:::1;6688:6:::0;;6667:40:::1;::::0;-1:-1:-1;;;;;6688:6:0;;::::1;::::0;6667:40:::1;::::0;6704:1;;6667:40:::1;6735:1;6718:19:::0;;-1:-1:-1;;;;;;6718:19:0::1;::::0;;6597:148::o;14711:164::-;14795:10;14789:17;;;;:5;:17;;;;;;;;14781:31;;;;-1:-1:-1;;;14781:31:0;;;;;;;:::i;:::-;14823:9;:18;;-1:-1:-1;;;;;14823:18:0;;;-1:-1:-1;;;;;;14823:18:0;;;;;;;14852:6;:15;;;;;;;;;;;14711:164::o;31122:230::-;31220:10;31214:17;;;;:5;:17;;;;;;;;31206:34;;;;-1:-1:-1;;;31206:34:0;;;;;;;:::i;:::-;31256:6;31251:94;31272:4;:11;31268:1;:15;31251:94;;;31327:6;31305:10;:19;31316:4;31321:1;31316:7;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;31305:19:0;;;;;;;;;;;-1:-1:-1;31305:19:0;:28;;-1:-1:-1;;31305:28:0;;;;;;;;;;31285:3;;;;:::i;:::-;;;;31251:94;;;;31122:230;;:::o;24689:405::-;24735:14;24751:13;24776:18;24807:9;;;;;;;;;-1:-1:-1;;;;;24807:9:0;24776:41;;24829:7;24838:10;24853:8;-1:-1:-1;;;;;24853:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;24828:47:0;;;;-1:-1:-1;24828:47:0;;-1:-1:-1;24907:5:0;24948:4;-1:-1:-1;;;;;24927:26:0;;;24923:164;;;24979:2;24970:11;;25004:2;24996:10;;24923:164;;;25048:2;25039:11;;25073:2;25065:10;;24923:164;24765:329;;;;24689:405;;:::o;33573:173::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;33663:6:::1;33650:9;:19;;:43;;;;;33686:7;33673:9;:20;;33650:43;33642:63;;;::::0;-1:-1:-1;;;33642:63:0;;12607:2:1;33642:63:0::1;::::0;::::1;12589:21:1::0;12646:1;12626:18;;;12619:29;-1:-1:-1;;;12664:18:1;;;12657:37;12711:18;;33642:63:0::1;12405:330:1::0;33642:63:0::1;33716:10;:22:::0;33573:173::o;13299:89::-;13340:13;13373:7;13366:14;;;;;:::i;33292:104::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;33364:15:::1;:24:::0;33292:104::o;36503:153::-;36588:10;36582:17;;;;:5;:17;;;;;;;;36574:34;;;;-1:-1:-1;;;36574:34:0;;;;;;;:::i;:::-;36619:20;:29;36503:153::o;31365:116::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31445:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;31445:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31365:116::o;13705:165::-;13775:4;13796:40;13806:10;13818:9;13829:6;13796:9;:40::i;31610:109::-;31681:30;;-1:-1:-1;;;;;31681:22:0;;;:30;;;;;31704:6;;31681:30;;;;31704:6;31681:22;:30;;;;;;;;;;;;;;;;;;;21881:433;22050:10;22044:17;;;;:5;:17;;;;;;;;22036:34;;;;-1:-1:-1;;;22036:34:0;;;;;;;:::i;:::-;22081:6;:16;;;;22108:10;:24;;;;22143:11;:26;;;;22180:7;:18;22209:11;:24;22244:12;:26;-1:-1:-1;22281:25:0;21881:433::o;29698:421::-;29751:10;29745:17;;;;:5;:17;;;;;;;;29737:34;;;;-1:-1:-1;;;29737:34:0;;12942:2:1;29737:34:0;;;12924:21:1;12981:1;12961:18;;;12954:29;-1:-1:-1;;;12999:18:1;;;12992:35;13044:18;;29737:34:0;12740:328:1;29737:34:0;29796:9;;-1:-1:-1;;;;;29796:9:0;29807:1;29786:20;;;:9;:20;;;;;;:22;29783:301;;29865:11;;29852:9;;-1:-1:-1;;;;;29852:9:0;29824:15;29842:20;;;:9;:20;;;;;;29824:15;;29879:5;;29842:34;;29865:11;29842:34;:::i;:::-;:42;;;;:::i;:::-;29936:9;;-1:-1:-1;;;;;29936:9:0;29926:20;;;;:9;:20;;;;;;29824:60;;-1:-1:-1;29926:30:0;;29824:60;;29926:30;:::i;:::-;29913:9;;;-1:-1:-1;;;;;29913:9:0;;;29903:20;;;;:9;:20;;;;;:53;;;;29989:9;29975:50;;29989:9;30008:6;30017:7;29975:13;:50::i;:::-;30054:9;;;;;;;;;-1:-1:-1;;;;;30054:9:0;-1:-1:-1;;;;;30044:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29809:275;29783:301;29698:421::o;30760:236::-;30861:10;30855:17;;;;:5;:17;;;;;;;;30847:34;;;;-1:-1:-1;;;30847:34:0;;;;;;;:::i;:::-;30897:6;30892:97;30913:4;:11;30909:1;:15;30892:97;;;30971:6;30946:13;:22;30960:4;30965:1;30960:7;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;30946:22:0;;;;;;;;;;;-1:-1:-1;30946:22:0;:31;;-1:-1:-1;;30946:31:0;;;;;;;;;;30926:3;;;;:::i;:::-;;;;30892:97;;32307:140;32381:10;32375:17;;;;:5;:17;;;;;;;;32367:34;;;;-1:-1:-1;;;32367:34:0;;;;;;;:::i;:::-;32412:14;:27;;-1:-1:-1;;;;;;32412:27:0;-1:-1:-1;;;;;32412:27:0;;;;;;;;;;32307:140::o;15077:154::-;15156:10;15150:17;;;;:5;:17;;;;;;;;15142:33;;;;-1:-1:-1;;;15142:33:0;;;;;;13275:2:1;13257:21;;;13314:1;13294:18;;;13287:29;-1:-1:-1;;;13347:2:1;13332:18;;13325:34;13391:2;13376:18;;13073:327;15142:33:0;15186:5;:9;;;;15206:7;:17;;-1:-1:-1;;15206:17:0;;;;;;;;;;15077:154::o;24472:209::-;24517:14;24533:13;24548:20;24598:15;:13;:15::i;:::-;24663:9;;24639:34;;-1:-1:-1;;;24639:34:0;;-1:-1:-1;;;;;24663:9:0;;;24639:34;;;1613:51:1;24580:33:0;;-1:-1:-1;24580:33:0;;-1:-1:-1;24646:5:0;24639:23;;;;1586:18:1;;24639:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24624:49;;24472:209;;;:::o;30125:384::-;30179:10;30173:17;;;;:5;:17;;;;;;;;30165:34;;;;-1:-1:-1;;;30165:34:0;;12942:2:1;30165:34:0;;;12924:21:1;12981:1;12961:18;;;12954:29;-1:-1:-1;;;12999:18:1;;;12992:35;13044:18;;30165:34:0;12740:328:1;30165:34:0;30247:11;;30237:6;;-1:-1:-1;;;;;30237:6:0;30212:12;30227:17;;;:9;:17;;;;;;30212:12;;30261:5;;30227:31;;30247:11;30227:31;:::i;:::-;:39;;;;:::i;:::-;30315:6;;-1:-1:-1;;;;;30315:6:0;30305:17;;;;:9;:17;;;;;;30212:54;;-1:-1:-1;30305:27:0;;30212:54;;30305:27;:::i;:::-;30295:6;;;-1:-1:-1;;;;;30295:6:0;;;30285:17;;;;:9;:17;;;;;:47;;;;30365:6;30351:47;;30365:6;30381;30390:7;30351:13;:47::i;:::-;30427:6;;;;;;;;;-1:-1:-1;;;;;30427:6:0;-1:-1:-1;;;;;30417:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30497:4;30460:7;:34;30486:7;30468:15;:25;;;;:::i;:::-;30460:34;;;;;;;;;;;-1:-1:-1;30460:34:0;:41;;-1:-1:-1;;30460:41:0;;;;;;;;;;-1:-1:-1;30125:384:0:o;30523:116::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30603:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;30603:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30523:116::o;15237:181::-;15329:10;15323:17;;;;:5;:17;;;;;;;;15315:31;;;;-1:-1:-1;;;15315:31:0;;;;;;;:::i;:::-;15357:13;:20;;;;15388:10;:22;;-1:-1:-1;;15388:22:0;;;;;;;;;;15237:181::o;32455:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32455:28:0;;-1:-1:-1;32455:28:0;:::o;19319:136::-;19387:10;19381:17;;;;:5;:17;;;;;;;;19373:34;;;;-1:-1:-1;;;19373:34:0;;;;;;;:::i;:::-;19436:1;19420:15;:17;19319:136::o;6753:208::-;6542:6;;-1:-1:-1;;;;;6542:6:0;6552:10;6542:20;6534:35;;;;-1:-1:-1;;;6534:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6842:22:0;::::1;6834:37;;;::::0;-1:-1:-1;;;6834:37:0;;13796:2:1;6834:37:0::1;::::0;::::1;13778:21:1::0;13835:1;13815:18;;;13808:29;-1:-1:-1;;;13853:18:1;;;13846:32;13895:18;;6834:37:0::1;13594:325:1::0;6834:37:0::1;6908:6;::::0;;6887:38:::1;::::0;-1:-1:-1;;;;;6887:38:0;;::::1;::::0;6908:6;::::1;::::0;6887:38:::1;::::0;::::1;6936:6;:17:::0;;-1:-1:-1;;;;;;6936:17:0::1;-1:-1:-1::0;;;;;6936:17:0;;;::::1;::::0;;;::::1;::::0;;6753:208::o;36350:145::-;36430:10;36424:17;;;;:5;:17;;;;;;;;36416:34;;;;-1:-1:-1;;;36416:34:0;;;;;;;:::i;:::-;36461:17;:26;36350:145::o;8260:487::-;8349:12;8375:14;8391;8409:26;8420:6;8428;8409:10;:26::i;:::-;8581:32;;-1:-1:-1;;14151:2:1;14147:15;;;14143:24;;8581:32:0;;;14131:37:1;14202:15;;;14198:24;14184:12;;;14177:46;8374:61:0;;-1:-1:-1;8374:61:0;-1:-1:-1;8545:7:0;;14239:12:1;;8581:32:0;;;;;;;;;;;;8571:43;;;;;;8484:251;;;;;;;;-1:-1:-1;;;;;;14621:26:1;;14684:2;14680:15;;;;-1:-1:-1;;14676:53:1;14672:1;14663:11;;14656:74;14755:2;14746:12;;14739:28;14797:66;14792:2;14783:12;;14776:88;14889:2;14880:12;;14262:636;8484:251:0;;;;-1:-1:-1;;8484:251:0;;;;;;;;;8474:262;;8484:251;8474:262;;;;;8260:487;-1:-1:-1;;;;;;8260:487:0:o;14528:177::-;-1:-1:-1;;;;;14613:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14665:32;;2925:25:1;;;14665:32:0;;2898:18:1;14665:32:0;;;;;;;;14528:177;;;:::o;15463:3850::-;-1:-1:-1;;;;;15586:16:0;;;;;;:10;:16;;;;;;;;15585:17;15577:48;;;;-1:-1:-1;;;15577:48:0;;15105:2:1;15577:48:0;;;15087:21:1;15144:2;15124:18;;;15117:30;-1:-1:-1;;;15163:18:1;;;15156:47;15220:18;;15577:48:0;14903:341:1;15577:48:0;-1:-1:-1;;;;;13673:18:0;;15636:15;13673:18;;;:9;:18;;;;;;15688:17;;;;15680:47;;;;-1:-1:-1;;;15680:47:0;;15451:2:1;15680:47:0;;;15433:21:1;15490:2;15470:18;;;15463:30;-1:-1:-1;;;15509:18:1;;;15502:47;15566:18;;15680:47:0;15249:341:1;15680:47:0;-1:-1:-1;;;;;15797:19:0;;15738:12;15797:19;;;:13;:19;;;;;;15751:4;;15738:12;15797:19;;15796:20;:42;;;;-1:-1:-1;;;;;;15821:17:0;;;;;;:13;:17;;;;;;;;15820:18;15796:42;15792:121;;;-1:-1:-1;15865:4:0;;-1:-1:-1;15865:4:0;15792:121;-1:-1:-1;;;;;15972:12:0;;;15923;15972;;;:8;:12;;;;;15985;15972:25;;16020:6;;15923:12;;;;16012:14;;;16020:6;;16012:14;;:30;;-1:-1:-1;16036:6:0;;-1:-1:-1;;;;;16030:12:0;;;16036:6;;16030:12;16012:30;16008:1224;;;16068:6;;-1:-1:-1;;;;;16068:6:0;;;16062:12;;;;16058:174;;16105:18;:16;:18::i;:::-;16095:28;;16008:1224;;16058:174;16156:6;;-1:-1:-1;;;;;16156:6:0;;;16148:14;;;;16145:87;;16195:21;:19;:21::i;:::-;16182:34;;16145:87;16008:1224;;;16311:9;;16264:22;;-1:-1:-1;;;;;16305:15:0;;;16311:9;;16305:15;:43;;;;-1:-1:-1;16337:10:0;16324:24;;;;:12;:24;;;;;;;;16305:43;:64;;;;-1:-1:-1;16352:9:0;-1:-1:-1;;;;;16352:17:0;;;16305:64;16301:355;;;16407:23;16423:6;16407:15;:23::i;:::-;16390:40;-1:-1:-1;16453:18:0;;16449:192;;-1:-1:-1;;;;;16504:19:0;;;;;;:13;:19;;;;;;;;16496:50;;;;-1:-1:-1;;;16496:50:0;;15797:2:1;16496:50:0;;;15779:21:1;15836:2;15816:18;;;15809:30;-1:-1:-1;;;15855:18:1;;;15848:48;15913:18;;16496:50:0;15595:342:1;16496:50:0;16579:4;16569:14;;16616:5;16606:15;;16449:192;16724:9;;16672:25;;-1:-1:-1;;;;;16716:17:0;;;16724:9;;16716:17;:47;;;;-1:-1:-1;16751:11:0;;-1:-1:-1;;;;;16737:26:0;;;16751:11;;16737:26;;16716:47;16712:255;;;16804:23;16820:6;16804:15;:23::i;:::-;16784:43;;16712:255;;;16869:11;;-1:-1:-1;;;;;16869:11:0;;;16853:28;;;;16849:118;;16922:29;16944:6;16922:21;:29::i;:::-;16902:49;;16849:118;16987:21;;16983:238;;-1:-1:-1;;;;;17070:17:0;;;;;;:13;:17;;;;;;17042:4;;-1:-1:-1;17070:17:0;;17065:141;;17122:4;17112:14;;17065:141;;;17181:5;17173:13;;17065:141;16249:983;;16008:1224;-1:-1:-1;;;;;17253:19:0;;;;;;:13;:19;;;;;;;;:40;;;;-1:-1:-1;;;;;;17276:17:0;;;;;;:13;:17;;;;;;;;17253:40;17249:88;;;17320:5;17310:15;;17249:88;-1:-1:-1;;;;;17351:19:0;;;;;;:13;:19;;;;;;;;17350:20;:41;;;;-1:-1:-1;;;;;;17372:19:0;;;;;;:13;:19;;;;;;;;17350:41;:61;;;;-1:-1:-1;;;;;;17394:17:0;;;;;;:13;:17;;;;;;;;17393:18;17350:61;17347:105;;;17435:5;17427:13;;17347:105;17477:15;;17472:1;:20;17468:413;;-1:-1:-1;;;;;17514:19:0;;;;;;:13;:19;;;;;;;;;:44;;-1:-1:-1;17545:13:0;;-1:-1:-1;;;;;17537:21:0;;;17545:13;;17537:21;17514:44;17512:69;;;;-1:-1:-1;;;;;;17564:17:0;;;;;;:13;:17;;;;;;;;17563:18;17512:69;17508:362;;;-1:-1:-1;;;;;17601:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;17601:21:0;17618:4;17601:21;;;17508:362;;;-1:-1:-1;;;;;17649:19:0;;;;;;:13;:19;;;;;;;;:41;;;;-1:-1:-1;;;;;;17673:17:0;;;;;;:13;:17;;;;;;;;17672:18;17649:41;17644:226;;;-1:-1:-1;;;;;17710:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;17710:21:0;17727:4;17710:21;;;17644:226;;;-1:-1:-1;;;;;17758:17:0;;;;;;:13;:17;;;;;;;;:41;;;;-1:-1:-1;;;;;;17780:19:0;;;;;;:13;:19;;;;;;;;17779:20;17758:41;:53;;;;;17804:7;17803:8;17758:53;17753:117;;;-1:-1:-1;;;;;17831:16:0;;;;;;:10;:16;;;;;:23;;-1:-1:-1;;17831:23:0;17850:4;17831:23;;;17753:117;-1:-1:-1;;;;;17895:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;17918:17:0;;;;;;:13;:17;;;;;;;;17895:40;17891:1321;;;-1:-1:-1;;;;;17959:19:0;;;;;;:13;:19;;;;;;;;:40;;;;-1:-1:-1;;;;;;17982:17:0;;;;;;:13;:17;;;;;;;;17959:40;17956:92;;;18023:5;18015:13;;17956:92;-1:-1:-1;;;;;18065:17:0;;;;;;:13;:17;;;;;;;;:40;;;;-1:-1:-1;;;;;;18086:19:0;;;;;;:13;:19;;;;;;;;18065:40;18062:96;;;18133:5;18125:13;;18062:96;-1:-1:-1;;;;;18181:19:0;;;;;;:13;:19;;;;;;;;18180:20;:41;;;;-1:-1:-1;;;;;;18204:17:0;;;;;;:13;:17;;;;;;;;18180:41;18176:662;;;18267:15;;18262:1;:20;18258:565;;18317:15;;18313:1;:19;:30;;;;;18336:7;18313:30;18310:221;;;18379:5;18371:13;;18258:565;;18310:221;18451:15;;18447:1;:19;18439:28;;;;;;18503:4;18495:12;;18258:565;;;18643:7;18640:142;;;18686:5;18678:13;;18640:142;;;18754:4;18746:12;;18640:142;-1:-1:-1;;;;;18856:17:0;;;;;;:13;:17;;;;;;;;18855:18;:39;;;;-1:-1:-1;;;;;;18875:19:0;;;;;;:13;:19;;;;;;;;18855:39;18852:349;;;18924:15;;18919:1;:20;18915:225;;18995:15;;18991:1;:19;18983:28;;;;;;19045:4;19037:12;;18915:225;;;19112:4;19104:12;;18915:225;19168:15;;19166:1;:17;19158:26;;;;;;19232:73;19247:4;19253:2;19257:6;19265:7;19274:10;19286:7;19294:10;19232:14;:73::i;:::-;15566:3747;;;;;15463:3850;;;:::o;29305:218::-;-1:-1:-1;;;;;29442:13:0;;;;;;:9;:13;;;;;;:23;;29458:7;;29442:23;:::i;:::-;-1:-1:-1;;;;;29426:13:0;;;;;;;:9;:13;;;;;;;:39;;;;29486:29;;;;;;;;;;29507:7;2925:25:1;;2913:2;2898:18;;2779:177;7823:345:0;7898:14;7914;7959:6;-1:-1:-1;;;;;7949:16:0;:6;-1:-1:-1;;;;;7949:16:0;;7941:64;;;;-1:-1:-1;;;7941:64:0;;16274:2:1;7941:64:0;;;16256:21:1;16313:2;16293:18;;;16286:30;16352:34;16332:18;;;16325:62;-1:-1:-1;;;16403:18:1;;;16396:33;16446:19;;7941:64:0;16072:399:1;7941:64:0;8044:6;-1:-1:-1;;;;;8035:15:0;:6;-1:-1:-1;;;;;8035:15:0;;:53;;8073:6;8081;8035:53;;;8054:6;8062;8035:53;8016:72;;-1:-1:-1;8016:72:0;-1:-1:-1;;;;;;8107:20:0;;8099:61;;;;-1:-1:-1;;;8099:61:0;;16678:2:1;8099:61:0;;;16660:21:1;16717:2;16697:18;;;16690:30;16756;16736:18;;;16729:58;16804:18;;8099:61:0;16476:352:1;8099:61:0;7823:345;;;;;:::o;20665:440::-;20766:6;;20808:19;;;-1:-1:-1;;;20808:19:0;;;;20716:10;;-1:-1:-1;;;;;20766:6:0;;20716:10;;;;20766:6;;20808:17;;:19;;;;;;;;;;;;;;;20766:6;20808:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20859:12:0;;-1:-1:-1;;;;;20784:43:0;;;;-1:-1:-1;20784:43:0;;;-1:-1:-1;;;;;;20859:12:0;20838:18;20927:4;20906:26;;20902:104;;;-1:-1:-1;20953:2:0;20902:104;;;-1:-1:-1;20992:2:0;20902:104;21027:44;;-1:-1:-1;;;21027:44:0;;-1:-1:-1;;;;;1631:32:1;;;21027:44:0;;;1613:51:1;21016:8:0;;21027:28;;;;;;1586:18:1;;21027:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21090:7;;;;;20665:440;-1:-1:-1;;;;;;20665:440:0:o;21113:450::-;21220:6;;21262:19;;;-1:-1:-1;;;21262:19:0;;;;21167:13;;-1:-1:-1;;;;;21220:6:0;;21167:13;;;;21220:6;;21262:17;;:19;;;;;;;;;;;;;;;21220:6;21262:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21313:12:0;;-1:-1:-1;;;;;21238:43:0;;;;-1:-1:-1;21238:43:0;;;-1:-1:-1;;;;;;21313:12:0;21292:18;21381:4;21360:26;;21356:104;;;-1:-1:-1;21407:2:0;21356:104;;;-1:-1:-1;21446:2:0;21356:104;21481:44;;-1:-1:-1;;;21481:44:0;;-1:-1:-1;;;;;1631:32:1;;;21481:44:0;;;1613:51:1;21470:8:0;;21481:28;;;;;;1586:18:1;;21481:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21547:8;;;;;21113:450;-1:-1:-1;;;;;;21113:450:0:o;19601:447::-;19665:17;19695:14;19711:13;19726:20;19750:14;:12;:14::i;:::-;19694:70;;;;;;19775:19;19818:1;19809:6;:10;:23;;;;;19831:1;19823:5;:9;19809:23;19805:93;;;19881:5;19863:15;19872:6;19863;:15;:::i;:::-;:23;;;;:::i;:::-;19849:37;;19805:93;19928:20;19937:11;19928:6;:20;:::i;:::-;19912:12;:36;19908:133;;19980:49;19993:12;20007:6;20015;20023:5;19980:12;:49::i;:::-;-1:-1:-1;19965:64:0;-1:-1:-1;19908:133:0;19683:365;;;;19601:447;;;:::o;20056:599::-;20120:17;20150:14;20166:13;20181:20;20205:14;:12;:14::i;:::-;20149:70;;;;;;20249:6;20234:12;:21;20230:418;;;20356:9;;-1:-1:-1;;;;;20356:9:0;20346:20;;;;:9;:20;;;;;;:29;;20369:6;;20346:29;:::i;:::-;20304:9;;;;;;;;;-1:-1:-1;;;;;20304:9:0;-1:-1:-1;;;;;20294:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20285:43;;:6;:43;:::i;:::-;20284:92;;;;:::i;:::-;20272:104;;20230:418;;;20398:12;;-1:-1:-1;;;20398:12:0;;;;20394:254;;;20427:19;20474:1;20465:6;:10;:23;;;;;20487:1;20479:5;:9;20465:23;20461:176;;;20542:14;20550:6;20542:5;:14;:::i;:::-;20523:15;20532:6;20523;:15;:::i;:::-;:34;;;;:::i;:::-;20509:48;-1:-1:-1;20600:20:0;20614:6;20509:48;20600:20;:::i;:::-;20584:12;:36;;20576:45;;;;;20394:254;20138:517;;;20056:599;;;:::o;25102:306::-;25172:17;25202:14;25219:20;25243:14;:12;:14::i;:::-;25201:56;;;;;25288:6;25272:12;:22;25268:133;;25379:9;;-1:-1:-1;;;;;25379:9:0;13642:7;13673:18;;;:9;:18;;;;;;;;;;25332:34;;-1:-1:-1;;;25332:34:0;;;;13673:18;;25379:9;25332:32;;:34;;;;;13673:18;;25332:34;;;;;25379:9;25332:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25323:43;;:6;:43;:::i;:::-;:66;;;;:::i;:::-;25311:78;;25268:133;25190:218;;25102:306;;;:::o;25416:2691::-;-1:-1:-1;;;;;25671:17:0;;;;;;:9;:17;;;;;;:25;;25689:7;;25671:25;:::i;:::-;-1:-1:-1;;;;;25652:17:0;;;;;;:9;:17;;;;;;;;:44;;;;25922:8;:25;;;;;;25974:13;;25652:17;;;;;;;;;;25922:25;25966:21;;25922:25;25966:21;:::i;:::-;25958:29;;26002:7;25998:1674;;;26030:17;26026:1249;;;26099:5;26090:6;;26080:7;:16;;;;:::i;:::-;:24;;;;:::i;:::-;26068:36;;26158:5;26144:11;;26134:7;:21;;;;:::i;:::-;:29;;;;:::i;:::-;26123:40;;26213:5;26202:10;;26193:7;:19;;;;:::i;:::-;:25;;;;:::i;:::-;26182:36;;26026:1249;;;26244:7;26240:1035;;;26271:22;26286:6;26271:14;:22::i;:::-;26240:1035;;;-1:-1:-1;;;;;26319:21:0;;;;;;:13;:21;;;;;;;;26315:960;;;26369:7;;;;26366:185;;;26403:21;26426;26441:5;;26426:14;:21::i;:::-;26403:44;;26509:7;26517:1;26509:10;;;;;;;;:::i;:::-;;;;;;;26501:7;:18;26493:35;;;;-1:-1:-1;;;26493:35:0;;17035:2:1;26493:35:0;;;17017:21:1;17074:1;17054:18;;;17047:29;-1:-1:-1;;;17092:18:1;;;17085:35;17137:18;;26493:35:0;16833:328:1;26493:35:0;26377:174;26366:185;26577:4;26569:12;;26631:5;26622:6;;26612:7;:16;;;;:::i;26315:960::-;-1:-1:-1;;;;;26776:24:0;;;;;;:13;:24;;;;;;;;26772:503;;;26830:10;;;;26827:90;;;26880:12;26870:7;:22;26862:35;;;;-1:-1:-1;;;26862:35:0;;17368:2:1;26862:35:0;;;17350:21:1;17407:1;17387:18;;;17380:29;-1:-1:-1;;;17425:18:1;;;17418:31;17466:18;;26862:35:0;17166:324:1;26862:35:0;26944:4;26935:13;;26999:5;26989:7;;26979;:17;;;;:::i;:::-;:25;;;;:::i;:::-;26967:37;;27059:5;27044:12;;27034:7;:22;;;;:::i;:::-;:30;;;;:::i;:::-;27023:41;;27114:5;27102:11;;27094:7;:19;;;;:::i;26772:503::-;27157:10;27154:121;;;27236:5;27223:12;;27215:7;:20;;;;:::i;:::-;:26;;;;:::i;:::-;27204:37;;27154:121;27303:20;27315:8;27303:9;:20;:::i;:::-;27291:32;-1:-1:-1;27342:13:0;;27338:323;;27375:47;27389:6;27405:4;27412:9;27375:13;:47::i;:::-;27490:4;27441:28;27472:24;;;:9;:24;;;;;;27520:6;;;;;;;27519:7;:17;;;;;27530:6;27519:17;:45;;;;;27563:1;27540:20;:24;27519:45;27515:131;;;27588:38;27605:20;27588:16;:38::i;:::-;27356:305;27338:323;27688:6;:30;;;;-1:-1:-1;;;;;;27697:21:0;;;;;;:13;:21;;;;;;;;27696:22;27688:30;27684:89;;;27734:27;27750:10;;27734:15;:27::i;:::-;27824:9;27815:6;;:18;;;;:::i;:::-;27806:6;:27;27855:8;;:19;;27866:8;;27855:19;:::i;:::-;27844:8;:30;27895:20;27905:10;27895:9;:20;:::i;:::-;27885:30;-1:-1:-1;27929:12:0;;27926:100;;27956:32;27970:6;27977:10;27956:13;:32::i;:::-;28013:1;28002:12;;27926:100;28036:53;28050:6;28058:9;28079;28069:7;:19;;;;:::i;:::-;28036:13;:53::i;:::-;25641:2466;;;;;;;25416:2691;;;;;;;:::o;22322:2142::-;22426:17;22445:22;22486:23;22522:9;;;;;;;;;-1:-1:-1;;;;;22522:9:0;-1:-1:-1;;;;;22512:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22486:60;;22557:13;22586:11;;;;;;;;;-1:-1:-1;;;;;22586:11:0;-1:-1:-1;;;;;22586:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22573:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22697:9;;22687:28;;;-1:-1:-1;;;22687:28:0;;;;22557:59;;-1:-1:-1;;;;;;22640:19:0;;;;;;22627:10;;22697:9;;;;22687:26;;:28;;;;;;;;;;;;;;22697:9;22687:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22670:45;;22730:5;22726:1411;;;22756:11;;22752:1374;;22788:13;22804:18;22814:7;22819:2;22814;:7;:::i;:::-;22804:9;:18::i;:::-;22788:34;;22841:17;22861;22871:6;22861:9;:17::i;:::-;22841:37;;22909:9;22901:5;:17;22897:1214;;;23037:11;;22943:17;;;;-1:-1:-1;;;;;23037:11:0;-1:-1:-1;;23029:75:0;23025:924;;23164:17;23172:9;23164:5;:17;:::i;:::-;23145:37;;:15;:37;:::i;:::-;:41;;23185:1;23145:41;:::i;:::-;23133:53;-1:-1:-1;23241:13:0;:9;23253:1;23241:13;:::i;:::-;23227:10;:5;23235:2;23227:10;:::i;:::-;:28;;;;:::i;:::-;23213:42;;23025:924;;;23297:11;;-1:-1:-1;;;;;23297:11:0;-1:-1:-1;;23289:75:0;23285:664;;23424:17;23432:9;23424:5;:17;:::i;:::-;23405:37;;:15;:37;:::i;:::-;23393:49;-1:-1:-1;23495:9:0;23483;:5;23491:1;23483:9;:::i;23285:664::-;23546:11;;-1:-1:-1;;;;;23546:11:0;-1:-1:-1;;23538:75:0;23534:415;;23673:17;23681:9;23673:5;:17;:::i;:::-;23654:37;;:15;:37;:::i;:::-;:41;;23694:1;23654:41;:::i;:::-;23642:53;-1:-1:-1;23748:9:0;23736;:5;23744:1;23736:9;:::i;23534:415::-;23845:17;23853:9;23845:5;:17;:::i;:::-;23826:37;;:15;:37;:::i;:::-;23814:49;-1:-1:-1;23916:9:0;23904;:5;23912:1;23904:9;:::i;:::-;:21;;;;:::i;:::-;23890:35;;23534:415;23988:23;24000:11;23988:9;:23;:::i;:::-;23971:40;-1:-1:-1;24038:18:0;;24034:57;;24058:33;24077:14;24058:33;;:::i;:::-;;;24034:57;22920:1191;;22897:1214;22769:1357;;22752:1374;24147:15;24165:13;24176:2;24165:8;:13;:::i;:::-;24147:31;;24193:15;24212:1;24193:20;24189:268;;24272:4;24242:27;24252:16;24262:6;24252:7;:16;:::i;24242:27::-;:34;;;;:::i;:::-;24230:46;;24189:268;;;24321:124;24378:2;24349:25;24359:15;24349:7;:25;:::i;:::-;24348:32;;;;:::i;:::-;24428:2;24400:24;24409:15;24400:6;:24;:::i;:::-;24399:31;;;;:::i;:::-;24321:8;:124::i;:::-;24309:136;;24189:268;22475:1989;;;;;22322:2142;;;;;;;:::o;32717:455::-;-1:-1:-1;;;;;32782:20:0;;;;;;:15;:20;;;;;;32777:25;;32773:392;;32828:11;:18;32823:23;;:48;;;32868:3;-1:-1:-1;;;;;32850:21:0;:11;32862:1;32850:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;32850:14:0;:21;;32823:48;32819:335;;;32941:16;;32980:8;;32976:63;;33013:7;32717:455;:::o;32976:63::-;-1:-1:-1;33080:11:0;:18;;-1:-1:-1;;;;;33057:20:0;;;;;;:15;:20;;;;;:41;;;33117:21;;;;;;;;;;;;;-1:-1:-1;;;;;;33117:21:0;;;;;;32819:335;32717:455;:::o;35791:267::-;35909:16;;;35923:1;35909:16;;;35852:21;35909:16;;;;;35852:21;35885;;35909:16;35923:1;35909:16;;;;;;;;-1:-1:-1;;35946:12:0;;35936:7;;;;-1:-1:-1;;;;;;35946:12:0;;35936:7;;-1:-1:-1;35946:12:0;;35936:7;;;;:::i;:::-;;;;;;:22;-1:-1:-1;;;;;35936:22:0;;;-1:-1:-1;;;;;35936:22:0;;;;;35987:4;35969;35974:1;35969:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35969:23:0;;;:7;;;;;;;;;:23;36012:11;;:38;;-1:-1:-1;;;36012:38:0;;:11;;;:25;;:38;;36038:6;;36045:4;;36012:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36012:38:0;;;;;;;;;;;;:::i;:::-;36003:47;35791:267;-1:-1:-1;;;35791:267:0:o;28525:772::-;10001:6;:13;;-1:-1:-1;;10001:13:0;;;;;28603:55;;28640:7:::1;28603:55;28692:16;::::0;;28706:1:::1;28692:16:::0;;;;;::::1;::::0;;28668:21:::1;::::0;28692:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28692:16:0::1;28668:40;;28737:4;28719;28724:1;28719:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28719:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28763:12;28753:7;;28763:12;::::1;::::0;28753:4;;28763:12;;28753:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;28753:22:0;;::::1;:7;::::0;;::::1;::::0;;;;;:22;28786:11:::1;::::0;28935:4:::1;::::0;28786:195:::1;::::0;-1:-1:-1;;;28786:195:0;;:11;;::::1;::::0;:65:::1;::::0;:195:::1;::::0;28866:11;;28786::::1;::::0;28908:4;;28935;;::::1;::::0;;::::1;::::0;28955:15:::1;::::0;28786:195:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29017:1;29006:8;;:12;29002:288;;;29034:4;::::0;29049:12:::1;::::0;29063:8:::1;::::0;29073:6:::1;::::0;29081:13:::1;::::0;29096:14:::1;::::0;;29034:92:::1;::::0;-1:-1:-1;;;29034:92:0;;-1:-1:-1;;;;;29049:12:0;;::::1;29034:92;::::0;::::1;20352:34:1::0;20402:18;;;20395:34;;;;20445:18;;;20438:34;;;;29081:13:0;::::1;20488:18:1::0;;;20481:43;29096:14:0;;::::1;20540:19:1::0;;;20533:44;29120:4:0::1;20593:19:1::0;;;20586:44;29034:4:0;;;::::1;;::::0;:14:::1;::::0;20286:19:1;;29034:92:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29152:1:0::1;29141:8;:12:::0;;;29168:6:::1;:10:::0;-1:-1:-1;29002:288:0::1;::::0;-1:-1:-1;29002:288:0::1;;29211:4;::::0;29225:12:::1;::::0;29211:42:::1;::::0;-1:-1:-1;;;29211:42:0;;-1:-1:-1;;;;;29225:12:0;;::::1;29211:42;::::0;::::1;20853:34:1::0;29247:4:0::1;20903:18:1::0;;;20896:43;29211:4:0;;;::::1;;::::0;:13:::1;::::0;20788:18:1;;29211:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29277:1:0::1;29268:6;:10:::0;-1:-1:-1;;29002:288:0::1;28592:705;10025:1;-1:-1:-1::0;10037:6:0;:14;;-1:-1:-1;;10037:14:0;;;28525:772::o;33934:1851::-;34000:15;;33995:1;:20;33991:59;;33934:1851;:::o;33991:59::-;34110:12;34088:19;;34064:21;;:43;;;;:::i;:::-;:58;34060:97;;;33934:1851;:::o;34060:97::-;34195:17;;34244:12;;34272:29;;-1:-1:-1;;;34272:29:0;;34295:4;34272:29;;;1613:51:1;-1:-1:-1;;;;;34244:12:0;;;;34195:17;;34244:12;;34272:14;;1586:18:1;;34272:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;34268:86;;;34336:7;;33934:1851;:::o;34268:86::-;34390:6;;34430:23;;;-1:-1:-1;;;34430:23:0;;;;-1:-1:-1;;;;;34390:6:0;;;;34364:16;;34390:6;;34430:21;;:23;;;;;;;;;;;;;;;34390:6;34430:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34408:45;;34473:14;34468:1;:19;34464:58;;34504:7;;;;33934:1851;:::o;34464:58::-;34649:11;:18;34534:19;;;;;;;;;34761:9;34805:15;;34861:20;;34743:27;;-1:-1:-1;34805:15:0;34894:837;34911:3;34901:7;:13;:46;;;;;34931:16;34918:10;:29;34901:46;34894:837;;;34986:16;34968:14;;:34;34964:93;;35040:1;35023:14;:18;34964:93;35085:11;35097:14;;35085:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35085:27:0;35132:30;;;:17;:30;;;;;;;;35085:27;;-1:-1:-1;35132:30:0;;35131:31;:80;;;;;35192:19;35166:22;35176:11;-1:-1:-1;;;;;13673:18:0;13642:7;13673:18;;;:9;:18;;;;;;;13584:115;35166:22;:45;;35131:80;35127:443;;;35247:32;;-1:-1:-1;;;35247:32:0;;-1:-1:-1;;;;;1631:32:1;;;35247::0;;;1613:51:1;35247:19:0;;;;;1586:18:1;;35247:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35232:47;;35318:13;35302:12;:29;35298:257;;35398:14;35365:30;35383:12;35365:15;:30;:::i;:::-;:47;;;;:::i;:::-;35356:56;-1:-1:-1;35439:10:0;;35435:101;;35478:34;;-1:-1:-1;;;35478:34:0;;-1:-1:-1;;;;;9158:32:1;;;35478:34:0;;;9140:51:1;9207:18;;;9200:34;;;35478:13:0;;;;;9113:18:1;;35478:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35435:101;35617:9;35607:19;;:7;:19;:::i;:::-;35596:31;;:7;:31;:::i;:::-;35586:41;;35652:9;35676:14;:16;;35642:19;;-1:-1:-1;35676:14:0;:16;;;:::i;:::-;;;;;;35707:12;;;;;:::i;:::-;;;;34894:837;;;-1:-1:-1;;35765:12:0;35741:21;:36;-1:-1:-1;;;;;;;;;;;;33934:1851:0:o;28113:142::-;28198:49;28212:6;28227;28235:11;28198:13;:49::i;:::-;28113:142;;:::o;7382:303::-;7427:6;7454:1;7450;:5;7446:232;;;-1:-1:-1;7476:1:0;7492:6;7501:5;7505:1;7476;7501:5;:::i;:::-;:9;;7509:1;7501:9;:::i;:::-;7492:18;;7525:92;7536:1;7532;:5;7525:92;;;7562:1;-1:-1:-1;7562:1:0;7600;7562;7587:5;7562:1;7587;:5;:::i;:::-;:9;;;;:::i;:::-;7586:15;;;;:::i;:::-;7582:19;;7525:92;;;7457:171;7382:303;;;:::o;7446:232::-;7638:6;;7634:44;;-1:-1:-1;7665:1:0;7634:44;7382:303;;;:::o;7278:96::-;7330:6;7357:1;7353;:5;:13;;7365:1;7353:13;;;-1:-1:-1;7361:1:0;;7349:17;-1:-1:-1;7278:96: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;594:548::-;706:4;735:2;764;753:9;746:21;796:6;790:13;839:6;834:2;823:9;819:18;812:34;864:1;874:140;888:6;885:1;882:13;874:140;;;983:14;;;979:23;;973:30;949:17;;;968:2;945:26;938:66;903:10;;874:140;;;878:3;1063:1;1058:2;1049:6;1038:9;1034:22;1030:31;1023:42;1133:2;1126;1122:7;1117:2;1109:6;1105:15;1101:29;1090:9;1086:45;1082:54;1074:62;;;;594:548;;;;:::o;1147:315::-;1215:6;1223;1276:2;1264:9;1255:7;1251:23;1247:32;1244:52;;;1292:1;1289;1282:12;1244:52;1331:9;1318:23;1350:31;1375:5;1350:31;:::i;:::-;1400:5;1452:2;1437:18;;;;1424:32;;-1:-1:-1;;;1147:315:1:o;1675:456::-;1752:6;1760;1768;1821:2;1809:9;1800:7;1796:23;1792:32;1789:52;;;1837:1;1834;1827:12;1789:52;1876:9;1863:23;1895:31;1920:5;1895:31;:::i;:::-;1945:5;-1:-1:-1;2002:2:1;1987:18;;1974:32;2015:33;1974:32;2015:33;:::i;:::-;1675:456;;2067:7;;-1:-1:-1;;;2121:2:1;2106:18;;;;2093:32;;1675:456::o;2136:118::-;2222:5;2215:13;2208:21;2201:5;2198:32;2188:60;;2244:1;2241;2234:12;2259:128;2324:20;;2353:28;2324:20;2353:28;:::i;2392:382::-;2457:6;2465;2518:2;2506:9;2497:7;2493:23;2489:32;2486:52;;;2534:1;2531;2524:12;2486:52;2573:9;2560:23;2592:31;2617:5;2592:31;:::i;:::-;2642:5;-1:-1:-1;2699:2:1;2684:18;;2671:32;2712:30;2671:32;2712:30;:::i;:::-;2761:7;2751:17;;;2392:382;;;;;:::o;3188:180::-;3247:6;3300:2;3288:9;3279:7;3275:23;3271:32;3268:52;;;3316:1;3313;3306:12;3268:52;-1:-1:-1;3339:23:1;;3188:180;-1:-1:-1;3188:180:1:o;3562:376::-;3624:6;3632;3685:2;3673:9;3664:7;3660:23;3656:32;3653:52;;;3701:1;3698;3691:12;3653:52;3740:9;3727:23;3759:28;3781:5;3759:28;:::i;3943:241::-;3999:6;4052:2;4040:9;4031:7;4027:23;4023:32;4020:52;;;4068:1;4065;4058:12;4020:52;4107:9;4094:23;4126:28;4148:5;4126:28;:::i;4189:388::-;4257:6;4265;4318:2;4306:9;4297:7;4293:23;4289:32;4286:52;;;4334:1;4331;4324:12;4286:52;4373:9;4360:23;4392:31;4417:5;4392:31;:::i;:::-;4442:5;-1:-1:-1;4499:2:1;4484:18;;4471:32;4512:33;4471:32;4512:33;:::i;4582:127::-;4643:10;4638:3;4634:20;4631:1;4624:31;4674:4;4671:1;4664:15;4698:4;4695:1;4688:15;4714:275;4785:2;4779:9;4850:2;4831:13;;-1:-1:-1;;4827:27:1;4815:40;;4885:18;4870:34;;4906:22;;;4867:62;4864:88;;;4932:18;;:::i;:::-;4968:2;4961:22;4714:275;;-1:-1:-1;4714:275:1:o;4994:183::-;5054:4;5087:18;5079:6;5076:30;5073:56;;;5109:18;;:::i;:::-;-1:-1:-1;5154:1:1;5150:14;5166:4;5146:25;;4994:183::o;5182:1036::-;5272:6;5280;5333:2;5321:9;5312:7;5308:23;5304:32;5301:52;;;5349:1;5346;5339:12;5301:52;5389:9;5376:23;5422:18;5414:6;5411:30;5408:50;;;5454:1;5451;5444:12;5408:50;5477:22;;5530:4;5522:13;;5518:27;-1:-1:-1;5508:55:1;;5559:1;5556;5549:12;5508:55;5595:2;5582:16;5617:4;5641:60;5657:43;5697:2;5657:43;:::i;:::-;5641:60;:::i;:::-;5735:15;;;5817:1;5813:10;;;;5805:19;;5801:28;;;5766:12;;;;5841:19;;;5838:39;;;5873:1;5870;5863:12;5838:39;5897:11;;;;5917:217;5933:6;5928:3;5925:15;5917:217;;;6013:3;6000:17;6030:31;6055:5;6030:31;:::i;:::-;6074:18;;5950:12;;;;6112;;;;5917:217;;;6153:5;-1:-1:-1;6177:35:1;;-1:-1:-1;6193:18:1;;;6177:35;:::i;:::-;6167:45;;;;;5182:1036;;;;;:::o;6476:592::-;6589:6;6597;6605;6613;6621;6629;6637;6690:3;6678:9;6669:7;6665:23;6661:33;6658:53;;;6707:1;6704;6697:12;6658:53;-1:-1:-1;;6730:23:1;;;6800:2;6785:18;;6772:32;;-1:-1:-1;6851:2:1;6836:18;;6823:32;;6902:2;6887:18;;6874:32;;-1:-1:-1;6953:3:1;6938:19;;6925:33;;-1:-1:-1;7005:3:1;6990:19;;6977:33;;-1:-1:-1;7057:3:1;7042:19;7029:33;;-1:-1:-1;6476:592:1;-1:-1:-1;6476:592:1:o;7073:309::-;7138:6;7146;7199:2;7187:9;7178:7;7174:23;7170:32;7167:52;;;7215:1;7212;7205:12;7167:52;7251:9;7238:23;7228:33;;7311:2;7300:9;7296:18;7283:32;7324:28;7346:5;7324:28;:::i;8251:380::-;8330:1;8326:12;;;;8373;;;8394:61;;8448:4;8440:6;8436:17;8426:27;;8394:61;8501:2;8493:6;8490:14;8470:18;8467:38;8464:161;;8547:10;8542:3;8538:20;8535:1;8528:31;8582:4;8579:1;8572:15;8610:4;8607:1;8600:15;8636:325;8838:2;8820:21;;;8877:1;8857:18;;;8850:29;-1:-1:-1;;;8910:2:1;8895:18;;8888:32;8952:2;8937:18;;8636:325::o;9245:245::-;9312:6;9365:2;9353:9;9344:7;9340:23;9336:32;9333:52;;;9381:1;9378;9371:12;9333:52;9413:9;9407:16;9432:28;9454:5;9432:28;:::i;9495:328::-;9697:2;9679:21;;;9736:1;9716:18;;;9709:29;-1:-1:-1;;;9769:2:1;9754:18;;9747:35;9814:2;9799:18;;9495:328::o;9828:127::-;9889:10;9884:3;9880:20;9877:1;9870:31;9920:4;9917:1;9910:15;9944:4;9941:1;9934:15;9960:128;10027:9;;;10048:11;;;10045:37;;;10062:18;;:::i;10425:188::-;10504:13;;-1:-1:-1;;;;;10546:42:1;;10536:53;;10526:81;;10603:1;10600;10593:12;10618:450;10705:6;10713;10721;10774:2;10762:9;10753:7;10749:23;10745:32;10742:52;;;10790:1;10787;10780:12;10742:52;10813:40;10843:9;10813:40;:::i;:::-;10803:50;;10872:49;10917:2;10906:9;10902:18;10872:49;:::i;:::-;10862:59;;10964:2;10953:9;10949:18;10943:25;11008:10;11001:5;10997:22;10990:5;10987:33;10977:61;;11034:1;11031;11024:12;10977:61;11057:5;11047:15;;;10618:450;;;;;:::o;11073:168::-;11146:9;;;11177;;11194:15;;;11188:22;;11174:37;11164:71;;11215:18;;:::i;11246:217::-;11286:1;11312;11302:132;;11356:10;11351:3;11347:20;11344:1;11337:31;11391:4;11388:1;11381:15;11419:4;11416:1;11409:15;11302:132;-1:-1:-1;11448:9:1;;11246:217::o;11468:325::-;11670:2;11652:21;;;11709:1;11689:18;;;11682:29;-1:-1:-1;;;11742:2:1;11727:18;;11720:32;11784:2;11769:18;;11468:325::o;12133:127::-;12194:10;12189:3;12185:20;12182:1;12175:31;12225:4;12222:1;12215:15;12249:4;12246:1;12239:15;12265:135;12304:3;12325:17;;;12322:43;;12345:18;;:::i;:::-;-1:-1:-1;12392:1:1;12381:13;;12265:135::o;13405:184::-;13475:6;13528:2;13516:9;13507:7;13503:23;13499:32;13496:52;;;13544:1;13541;13534:12;13496:52;-1:-1:-1;13567:16:1;;13405:184;-1:-1:-1;13405:184:1:o;15942:125::-;16007:9;;;16028:10;;;16025:36;;;16041:18;;:::i;17495:251::-;17565:6;17618:2;17606:9;17597:7;17593:23;17589:32;17586:52;;;17634:1;17631;17624:12;17586:52;17666:9;17660:16;17685:31;17710:5;17685:31;:::i;17751:461::-;17804:3;17842:5;17836:12;17869:6;17864:3;17857:19;17895:4;17924:2;17919:3;17915:12;17908:19;;17961:2;17954:5;17950:14;17982:1;17992:195;18006:6;18003:1;18000:13;17992:195;;;18071:13;;-1:-1:-1;;;;;18067:39:1;18055:52;;18127:12;;;;18162:15;;;;18103:1;18021:9;17992:195;;;-1:-1:-1;18203:3:1;;17751:461;-1:-1:-1;;;;;17751:461:1:o;18217:332::-;18424:6;18413:9;18406:25;18467:2;18462;18451:9;18447:18;18440:30;18387:4;18487:56;18539:2;18528:9;18524:18;18516:6;18487:56;:::i;:::-;18479:64;18217:332;-1:-1:-1;;;;18217:332:1:o;18554:881::-;18649:6;18680:2;18723;18711:9;18702:7;18698:23;18694:32;18691:52;;;18739:1;18736;18729:12;18691:52;18772:9;18766:16;18805:18;18797:6;18794:30;18791:50;;;18837:1;18834;18827:12;18791:50;18860:22;;18913:4;18905:13;;18901:27;-1:-1:-1;18891:55:1;;18942:1;18939;18932:12;18891:55;18971:2;18965:9;18994:60;19010:43;19050:2;19010:43;:::i;18994:60::-;19088:15;;;19170:1;19166:10;;;;19158:19;;19154:28;;;19119:12;;;;19194:19;;;19191:39;;;19226:1;19223;19216:12;19191:39;19250:11;;;;19270:135;19286:6;19281:3;19278:15;19270:135;;;19352:10;;19340:23;;19303:12;;;;19383;;;;19270:135;;;19424:5;18554:881;-1:-1:-1;;;;;;;18554:881:1:o;19440:582::-;19739:6;19728:9;19721:25;19782:6;19777:2;19766:9;19762:18;19755:34;19825:3;19820:2;19809:9;19805:18;19798:31;19702:4;19846:57;19898:3;19887:9;19883:19;19875:6;19846:57;:::i;:::-;-1:-1:-1;;;;;19939:32:1;;;;19934:2;19919:18;;19912:60;-1:-1:-1;20003:3:1;19988:19;19981:35;19838:65;19440:582;-1:-1:-1;;;19440:582:1:o

Swarm Source

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