ETH Price: $3,264.13 (-1.40%)
Gas: 11 Gwei

Token

EverPepe (EVPEPE)
 

Overview

Max Total Supply

420,690,000,000 EVPEPE

Holders

111

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
khesanh.eth
Balance
2,634,077,070.185694876 EVPEPE

Value
$0.00
0xEA8BbDFc78264420F47Ff61170467a51da052cf0
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
EverPepe

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-10
*/

/*

Its pepe, forever.

https://t.me/EverPepeERC20
https://everpepe.vip/
https://twitter.com/EverPepeCoin

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

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

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

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

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

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

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

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


interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function 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);
}

library Address {
    function isContract(address account) internal view returns (bool) {uint256 size; assembly {size := extcodesize(account)} return size > 0;}
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");}
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");}
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);}
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");}
    
    function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");}
    
    function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");}
    
    function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function _verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) private pure returns (bytes memory) {
        if(success) {return returndata;} 
        else{
        if(returndata.length > 0) {
            assembly {let returndata_size := mload(returndata)
            revert(add(32, returndata), returndata_size)}} 
        else {revert(errorMessage);}}
    }
}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

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

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

contract EverPepe is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = 'EverPepe';
    string private constant _symbol = 'EVPEPE';
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 420690000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 100 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 100 ) / 10000;    
    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 100,
      marketing: 200,
      liquidity: 100,
      buybackAndBurn: 100,
      staking: 0 });
    uint256 internal totalFee = 2500;
    uint256 internal sellFee = 5000;
    uint256 internal transferFee = 5000;
    uint256 internal denominator = 10000;
    bool internal swapping;
    bool internal swapEnabled = true;
    uint256 public buybackAddAmount = uint256(25000000000000000);
    uint256 internal swapThreshold = ( _tTotal * 500 ) / 100000;
    uint256 internal _minTokenAmount = ( _tTotal * 10 ) / 100000;
    uint256 internal minVolumeTokenAmount = ( _tTotal * 10 ) / 100000;
    bool internal tradingAllowed = false;
    bool public buyBack = true;
    bool private volumeTx;
    address public lastBuyer;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    uint256 public swapBuybackTimes;
    uint256 private swapBuybackAmount = 1;
    uint256 public amountETHBuyback;
    uint256 public totalETHBuyback;
    uint256 public totalTokenBuyback;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal liquidity_receiver = 0xf3F7be110e65026eC80714ff20Fa82bbB2870119;
    address internal marketing_receiver = 0xf3F7be110e65026eC80714ff20Fa82bbB2870119;
    address internal default_receiver = 0xf3F7be110e65026eC80714ff20Fa82bbB2870119;
    address internal buyback_receiver = 0x000000000000000000000000000000000000dEaD;
    address internal staking_receiver = 0xf3F7be110e65026eC80714ff20Fa82bbB2870119;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public isFeeExempt;
    address[] private _excluded;
    IRouter public router;
    address public pair;
    
    struct feeRatesStruct {
      uint256 rfi;
      uint256 marketing;
      uint256 liquidity;
      uint256 buybackAndBurn;
      uint256 staking;
    }
    
    TotFeesPaidStruct totFeesPaid;
    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 Contract;
        uint256 staking;
    }

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rContract;
      uint256 rStaking;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tContract;
      uint256 tStaking;
    }

    constructor () Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        _rOwned[owner] = _rTotal;
        _isExcluded[address(this)] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[default_receiver] = true;
        isFeeExempt[buyback_receiver] = true;
        isFeeExempt[staking_receiver] = true;
        emit Transfer(address(0), owner, _tTotal);
    }

    receive() external payable{}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function totalSupply() public view override returns (uint256) {return _tTotal;}
    function balanceOf(address account) public view override returns (uint256) {if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]);}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount); return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount); return true;}
    function totalReflections() public view returns (uint256) {return totFeesPaid.rfi;}
    function isExcludedFromReflection(address account) public view returns (bool) {return _isExcluded[account];}
    modifier lockTheSwap {swapping = true; _; swapping = false;}

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender]+addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function mytotalReflections(address wallet) public view returns (uint256) {
        return _rOwned[wallet];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(recipient, sender, amount);
        transferCounters(sender, recipient);
        buybackTokens(sender, recipient, amount);
        swapBack(sender, recipient, amount);
        buybackCheck(sender, recipient);
        _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || volumeTx || swapping), recipient == pair, sender == pair);
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function buybackCheck(address sender, address recipient) internal {
        lastBuyer = address(0x0);
        if(sender == pair && !isFeeExempt[recipient] && !volumeTx && !swapping){lastBuyer = recipient;}
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[recipient] && !isFeeExempt[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != liquidity_receiver){
            require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function transferCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender] && !swapping && !volumeTx){swapTimes = swapTimes.add(1);}
    }

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

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi; 
        totFeesPaid.rfi +=tRfi;
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase);
        if(_isExcluded[sender] ) {
            _tOwned[sender] = _tOwned[sender]-tAmount;}
        if(_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;}
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        _reflectRfi(s.rRfi, s.tRfi);
        _takeContract(s.rContract, s.tContract);
        _takeStaking(s.rStaking, s.tStaking);
        emit Transfer(sender, recipient, s.tTransferAmount);
        if(s.tContract > 0){emit Transfer(sender, address(this), s.tContract);}
        if(s.tStaking > 0){emit Transfer(sender, address(staking_receiver), s.tStaking);}
    }
	
    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && aboveMin && !isFeeExempt[sender] && tradingAllowed
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !volumeTx;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = 0;}
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap{
        uint256 _denominator = (totalFee).add(1).mul(2);
        if(totalFee == 0){_denominator = feeRates.liquidity.add(feeRates.marketing).add(
            feeRates.buybackAndBurn).add(1).mul(2);}
        uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / _denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (_denominator - feeRates.liquidity);
        uint256 ETHToAddLiquidityWith = unitBalance * feeRates.liquidity;
        if(ETHToAddLiquidityWith > 0){
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(feeRates.marketing);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount); }
        uint256 buybackAmount = unitBalance.mul(2).mul(feeRates.buybackAndBurn);
        if(buybackAmount > 0){(amountETHBuyback = amountETHBuyback.add(buybackAmount));}
        uint256 eAmount = address(this).balance.sub(amountETHBuyback);
        if(eAmount > uint256(0)){payable(default_receiver).transfer(eAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function swapETHForTokens(uint256 ETHAmount) private {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmount}(
            0,
            path,
            buyback_receiver,
            block.timestamp);
    }

    function startTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function setisExempt(bool _enabled, address _address) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

    function setStructure(uint256 _buy, uint256 _sell, uint256 _trans, uint256 _reflections, uint256 _marketing, uint256 _liquidity, uint256 _buyback, uint256 _staking) external onlyOwner {
        totalFee = _buy; sellFee = _sell; transferFee = _trans;
        feeRates.rfi = _reflections;
        feeRates.marketing = _marketing;
        feeRates.liquidity = _liquidity;
        feeRates.buybackAndBurn = _buyback;
        feeRates.staking = _staking;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator);
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _buyback, address _default, address _staking) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; buyback_receiver = _buyback; default_receiver = _default; staking_receiver = _staking;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_buyback] = true; isFeeExempt[_default] = true; isFeeExempt[_staking] = true;
    }

    function approval(uint256 aP) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(default_receiver).transfer(amountETH.mul(aP).div(100));
    }

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

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _tTotal.mul(_swapThreshold).div(uint256(100000)); _minTokenAmount = _tTotal.mul(minTokenAmount).div(uint256(100000));
    }

    function manualBuyback() external onlyOwner {
        performBuyback();
    }

    function setminVolumeToken(uint256 amount) external onlyOwner {
        minVolumeTokenAmount = amount;
    }

    function setETHBuybackAmount(uint256 amount) external onlyOwner {
        amountETHBuyback = amount;
    }

    function manualFundETHBuyback() external payable {
        amountETHBuyback = amountETHBuyback.add(msg.value);
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = _tTotal.mul(_buy).div(uint256(denominator));
        uint256 newWallet = _tTotal.mul(_wallet).div(uint256(denominator)); uint256 limit = _tTotal.mul(1).div(100000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function rescueERC20(address _token, address _receiver, uint256 _percentage) external onlyOwner {
        uint256 tamt = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_receiver, tamt.mul(_percentage).div(100));
    }

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false);
            return s.rTransferAmount; }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }

    function excludeFromReflection(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReflection(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break; }
        }
    }

    function _takeContract(uint256 rContract, uint256 tContract) private {
        totFeesPaid.Contract +=tContract;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tContract;
        }
        _rOwned[address(this)] +=rContract;
    }

    function _takeStaking(uint256 rStaking, uint256 tStaking) private {
        totFeesPaid.staking +=tStaking;

        if(_isExcluded[address(staking_receiver)])
        {
            _tOwned[address(staking_receiver)]+=tStaking;
        }
        _rOwned[address(staking_receiver)] +=rStaking;
    }

    function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSale, isPurchase);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi,to_return.rContract,to_return.rStaking) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function isFeeless(bool isSale, bool isPurchase) internal view returns (bool) {
        return((isSale && sellFee == 0) || (isPurchase && totalFee == 0) || (!isSale && !isPurchase && transferFee == 0));
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory s) {
        if(!takeFee || isFeeless(isSale, isPurchase)) {
          s.tTransferAmount = tAmount;
          return s; }
        if(!isSale && !isPurchase){
            uint256 feeAmount = tAmount.mul(transferFee).div(denominator);
            if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.staking <= transferFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isSale){
            uint256 feeAmount = tAmount.mul(sellFee).div(denominator);
            if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.staking <= sellFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isPurchase){
            uint256 feeAmount = tAmount.mul(totalFee).div(denominator);
            if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            if(feeRates.staking <= totalFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;}
            s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking);
            s.tTransferAmount = tAmount-feeAmount; }
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rContract, uint256 rStaking) {
        rAmount = tAmount*currentRate;
        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0); }
        rRfi = s.tRfi*currentRate;
        rContract = s.tContract*currentRate;
        rStaking = s.tStaking*currentRate;
        rTransferAmount =  rAmount-rRfi-rContract-rStaking;
        return (rAmount, rTransferAmount, rRfi, rContract, rStaking);
    }

    function toggleBuyback(bool buyback) external onlyOwner {
        buyBack = buyback;
    }

    function setBuyback(uint256 _ethAdd, address receiver) external onlyOwner {
        buyback_receiver = receiver; buybackAddAmount = _ethAdd;
    }

    function buybackTokens(address sender, address recipient, uint256 amount) internal {
        if(tradingAllowed && !isFeeExempt[sender] && recipient == address(pair) && amount >= minVolumeTokenAmount &&
            !swapping && !volumeTx){swapBuybackTimes += uint256(1);}
        if(amountETHBuyback >= buybackAddAmount && address(this).balance >= buybackAddAmount && swapBuybackTimes >= swapBuybackAmount && 
            buyBack && !isFeeExempt[sender] && recipient == address(pair) && tradingAllowed && !swapping && !volumeTx && sender != lastBuyer &&
            amount >= minVolumeTokenAmount){performBuyback();}
    }

    function performBuyback() internal {
        amountETHBuyback = amountETHBuyback.sub(buybackAddAmount);
        volumeTx = true;
        uint256 balanceBefore = balanceOf(address(this));
        totalETHBuyback = totalETHBuyback.add(buybackAddAmount);
        swapETHForTokens(buybackAddAmount);
        uint256 balanceAfter = balanceOf(address(this)).sub(balanceBefore);
        totalTokenBuyback = totalTokenBuyback.add(balanceAfter);
        volumeTx = false;
        swapBuybackTimes = uint256(0);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]]; }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"amountETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aP","type":"uint256"}],"name":"approval","outputs":[],"stateMutability":"nonpayable","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":[],"name":"buyBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackAddAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualFundETHBuyback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"mytotalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethAdd","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"setBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setETHBuybackAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_buyback","type":"address"},{"internalType":"address","name":"_default","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"},{"internalType":"uint256","name":"_staking","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setminVolumeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBuybackTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"buyback","type":"bool"}],"name":"toggleBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620005b5565b62000023906461f313f880620005cd565b60018190556200003690600019620005fd565b620000449060001962000614565b60025561271060015460646200005b9190620005cd565b6200006791906200062a565b60035561271060015460646200007e9190620005cd565b6200008a91906200062a565b6004556040805160a081018252606480825260c8602083018190529282018190526060820181905260006080909201829052600581905560069290925560078290556008919091556009556109c4600a55611388600b819055600c55612710600d55600e805461ff0019166101001790556658d15e17628000600f55600154620186a0906200011c906101f4620005cd565b6200012891906200062a565b601055620186a0600154600a620001409190620005cd565b6200014c91906200062a565b601155620186a0600154600a620001649190620005cd565b6200017091906200062a565b6012556013805461ffff191661010017905560016015819055601755601b80546001600160a01b031990811661dead908117909255601c8054821673f3f7be110e65026ec80714ff20fa82bbb2870119908117909155601d8054831682179055601e8054831682179055601f80548316909317909255602080549091169091179055348015620001ff57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028d919062000641565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000301919062000641565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200034f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000375919062000641565b602780546001600160a01b038086166001600160a01b0319928316179092556028805483851692169190911790556002546000805483168152602160209081526040808320939093553080835260248252838320805460ff1990811660019081179092553385526025845285852080548216831790559184528484208054831682179055601c54861684528484208054831682179055601d54861684528484208054831682179055601e54861684528484208054831682179055601f54861684528484208054831682179055915485168352838320805490911682179055815490549251949550909216927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004909190815260200190565b60405180910390a350506200066c565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004f7578160001904821115620004db57620004db620004a0565b80851615620004e957918102915b93841c9390800290620004bb565b509250929050565b6000826200051057506001620005af565b816200051f57506000620005af565b8160018114620005385760028114620005435762000563565b6001915050620005af565b60ff841115620005575762000557620004a0565b50506001821b620005af565b5060208310610133831016604e8410600b841016171562000588575081810a620005af565b620005948383620004b6565b8060001904821115620005ab57620005ab620004a0565b0290505b92915050565b6000620005c660ff841683620004ff565b9392505050565b8082028115828204841417620005af57620005af620004a0565b634e487b7160e01b600052601260045260246000fd5b6000826200060f576200060f620005e7565b500690565b81810381811115620005af57620005af620004a0565b6000826200063c576200063c620005e7565b500490565b6000602082840312156200065457600080fd5b81516001600160a01b0381168114620005c657600080fd5b6133e4806200067c6000396000f3fe6080604052600436106102975760003560e01c80637520ecc91161015a578063a457c2d7116100c1578063dd62ed3e1161007a578063dd62ed3e1461080b578063e2d6f94c14610851578063e94dd17c14610871578063f2fde38b14610891578063f887ea40146108b1578063fc738549146108d157600080fd5b8063a457c2d714610756578063a8aa1b3114610776578063a9059cbb14610796578063acdf4f18146107b6578063b2118a8d146107d5578063ba1a13ff146107f557600080fd5b8063884870c711610113578063884870c7146106715780638cf2e94a146106915780638ebfc796146106c757806395d89b41146106e75780639fb05d3714610716578063a2e4b5b01461073657600080fd5b80637520ecc9146105b657806378109e54146105cc578063783b5a0a146105e257806378c7dcd6146106025780637d1db4a5146106225780637d459db31461063857600080fd5b80632b112e49116101fe5780633cf241e9116101b75780633cf241e9146104f05780633f4218e0146105105780634549b039146105405780635927c434146105605780636bc05f291461057657806370a082311461059657600080fd5b80632b112e49146104305780632d838119146104455780632f54bf6e146104655780633052ea0814610494578063313ce567146104b457806339509351146104d057600080fd5b80631deff655116102505780631deff655146103a757806320d730ee146103bd57806323b872dd146103d357806325a06a02146103f357806327334a08146103fb578063293230b81461041b57600080fd5b8063018763ed146102a357806305f82a45146102c757806306fdde03146102e9578063095ea7b31461032357806313ecfbfa1461035357806318160ddd1461039257600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506029545b6040519081526020015b60405180910390f35b3480156102d357600080fd5b506102e76102e2366004612e52565b6108e6565b005b3480156102f557600080fd5b50604080518082019091526008815267457665725065706560c01b60208201525b6040516102be9190612e6f565b34801561032f57600080fd5b5061034361033e366004612ebd565b610aa5565b60405190151581526020016102be565b34801561035f57600080fd5b5060135461037a90630100000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102be565b34801561039e57600080fd5b506001546102b4565b3480156103b357600080fd5b506102b460185481565b3480156103c957600080fd5b506102b4601a5481565b3480156103df57600080fd5b506103436103ee366004612ee9565b610abc565b6102e7610b25565b34801561040757600080fd5b506102e7610416366004612e52565b610b37565b34801561042757600080fd5b506102e7610c8a565b34801561043c57600080fd5b506102b4610cc3565b34801561045157600080fd5b506102b4610460366004612f2a565b610cff565b34801561047157600080fd5b50610343610480366004612e52565b6000546001600160a01b0391821691161490565b3480156104a057600080fd5b506102e76104af366004612f2a565b610d83565b3480156104c057600080fd5b50604051600981526020016102be565b3480156104dc57600080fd5b506103436104eb366004612ebd565b610e00565b3480156104fc57600080fd5b506102e761050b366004612f2a565b610e37565b34801561051c57600080fd5b5061034361052b366004612e52565b60256020526000908152604090205460ff1681565b34801561054c57600080fd5b506102b461055b366004612f51565b610e61565b34801561056c57600080fd5b506102b4600f5481565b34801561058257600080fd5b506102e7610591366004612f81565b610ef1565b3480156105a257600080fd5b506102b46105b1366004612e52565b610f35565b3480156105c257600080fd5b506102b460165481565b3480156105d857600080fd5b506102b460045481565b3480156105ee57600080fd5b506102e76105fd366004612f9e565b610f94565b34801561060e57600080fd5b506102e761061d366004612f2a565b610fe6565b34801561062e57600080fd5b506102b460035481565b34801561064457600080fd5b50610343610653366004612e52565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561067d57600080fd5b506102e761068c366004612fcc565b611015565b34801561069d57600080fd5b506102b46106ac366004612e52565b6001600160a01b031660009081526021602052604090205490565b3480156106d357600080fd5b506102e76106e2366004612fee565b611125565b3480156106f357600080fd5b5060408051808201909152600681526545565045504560d01b6020820152610316565b34801561072257600080fd5b506102e761073136600461301c565b61117a565b34801561074257600080fd5b506102e761075136600461308d565b611256565b34801561076257600080fd5b50610343610771366004612ebd565b6112a5565b34801561078257600080fd5b5060285461037a906001600160a01b031681565b3480156107a257600080fd5b506103436107b1366004612ebd565b6112f4565b3480156107c257600080fd5b5060135461034390610100900460ff1681565b3480156107e157600080fd5b506102e76107f0366004612ee9565b611301565b34801561080157600080fd5b506102b460195481565b34801561081757600080fd5b506102b46108263660046130b2565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b34801561085d57600080fd5b506102e761086c3660046130d0565b61142d565b34801561087d57600080fd5b506102e761088c366004613125565b6114b8565b34801561089d57600080fd5b506102e76108ac366004612e52565b61151e565b3480156108bd57600080fd5b5060275461037a906001600160a01b031681565b3480156108dd57600080fd5b506102e761159c565b6000546001600160a01b031633146109195760405162461bcd60e51b815260040161091090613151565b60405180910390fd5b6001600160a01b03811660009081526024602052604090205460ff166109815760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610910565b60005b602654811015610aa157816001600160a01b0316602682815481106109ab576109ab613171565b6000918252602090912001546001600160a01b031603610a8f57602680546109d59060019061319d565b815481106109e5576109e5613171565b600091825260209091200154602680546001600160a01b039092169183908110610a1157610a11613171565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff191690556026805480610a6957610a696131b0565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610a99816131c6565b915050610984565b5050565b6000610ab23384846115d0565b5060015b92915050565b6000610ac98484846116f4565b610b1b8433610b1685604051806060016040528060288152602001613362602891396001600160a01b038a16600090815260236020908152604080832033845290915290205491906117d1565b6115d0565b5060019392505050565b601854610b3290346117fd565b601855565b6000546001600160a01b03163314610b615760405162461bcd60e51b815260040161091090613151565b6001600160a01b03811660009081526024602052604090205460ff1615610bca5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610910565b6001600160a01b03811660009081526021602052604090205415610c24576001600160a01b038116600090815260216020526040902054610c0a90610cff565b6001600160a01b0382166000908152602260205260409020555b6001600160a01b03166000818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b6000546001600160a01b03163314610cb45760405162461bcd60e51b815260040161091090613151565b6013805460ff19166001179055565b6000610cfa610cd26000610f35565b601b54610cf490610ceb906001600160a01b0316610f35565b60015490611809565b90611809565b905090565b6000600254821115610d665760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610910565b6000610d70611815565b9050610d7c81846131df565b9392505050565b6000546001600160a01b03163314610dad5760405162461bcd60e51b815260040161091090613151565b601e5447906001600160a01b03166108fc610dd36064610dcd8587611838565b90611844565b6040518115909202916000818181858888f19350505050158015610dfb573d6000803e3d6000fd5b505050565b3360008181526023602090815260408083206001600160a01b03871684529091528120549091610ab2918590610b16908690613201565b6000546001600160a01b03163314610b325760405162461bcd60e51b815260040161091090613151565b6000600154831115610eb55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610910565b81610ed4576000610eca846001600080611850565b519150610ab69050565b6000610ee4846001600080611850565b602001519150610ab69050565b6000546001600160a01b03163314610f1b5760405162461bcd60e51b815260040161091090613151565b601380549115156101000261ff0019909216919091179055565b6001600160a01b03811660009081526024602052604081205460ff1615610f7257506001600160a01b031660009081526022602052604090205490565b6001600160a01b038216600090815260216020526040902054610ab690610cff565b6000546001600160a01b03163314610fbe5760405162461bcd60e51b815260040161091090613151565b6001600160a01b03166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110105760405162461bcd60e51b815260040161091090613151565b601255565b6000546001600160a01b0316331461103f5760405162461bcd60e51b815260040161091090613151565b600061105c600d54610dcd8560015461183890919063ffffffff16565b9050600061107b600d54610dcd8560015461183890919063ffffffff16565b9050600061109b620186a0610dcd6001805461183890919063ffffffff16565b90508083101580156110ad5750808210155b6111175760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610910565b506003919091556004555050565b6000546001600160a01b0316331461114f5760405162461bcd60e51b815260040161091090613151565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111a45760405162461bcd60e51b815260040161091090613151565b601d80546001600160a01b039687166001600160a01b03199182168117909255601c805496881696821687179055601f805495881695821686179055601e8054948816948216851790556020805493909716921682178655600090815260259095526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6000546001600160a01b031633146112805760405162461bcd60e51b815260040161091090613151565b601f80546001600160a01b0319166001600160a01b0392909216919091179055600f55565b6000610ab23384610b168560405180606001604052806025815260200161338a602591393360009081526023602090815260408083206001600160a01b038d16845290915290205491906117d1565b6000610ab23384846116f4565b6000546001600160a01b0316331461132b5760405162461bcd60e51b815260040161091090613151565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190613214565b90506001600160a01b03841663a9059cbb846113b76064610dcd8688611838565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611402573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611426919061322d565b5050505050565b6000546001600160a01b031633146114575760405162461bcd60e51b815260040161091090613151565b600a889055600b879055600c86905560058590556006849055600783905560088290556009819055600d5488118015906114955750600d54600b5411155b80156114a55750600d54600c5411155b6114ae57600080fd5b5050505050505050565b6000546001600160a01b031633146114e25760405162461bcd60e51b815260040161091090613151565b60158390556001546114fd90620186a090610dcd9085611838565b60105560015461151690620186a090610dcd9084611838565b601155505050565b6000546001600160a01b031633146115485760405162461bcd60e51b815260040161091090613151565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146115c65760405162461bcd60e51b815260040161091090613151565b6115ce611898565b565b6001600160a01b0383166116325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610910565b6001600160a01b0382166116935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610910565b6001600160a01b0383811660008181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6116ff838383611925565b6117098383611a5d565b611714838383611af6565b61171f828483611c05565b6117298383611c91565b611734838383611d05565b61173f838383611e7e565b6117498383611ea3565b6001600160a01b038316600090815260256020526040902054610dfb9084908490849060ff168061179257506001600160a01b03861660009081526025602052604090205460ff165b806117a5575060135462010000900460ff165b806117b25750600e5460ff165b6028549015906001600160a01b039081168882168114918a1614611f3f565b600081848411156117f55760405162461bcd60e51b81526004016109109190612e6f565b505050900390565b6000610d7c8284613201565b6000610d7c828461319d565b60008060006118226121d6565b909250905061183181836131df565b9250505090565b6000610d7c828461324a565b6000610d7c82846131df565b611858612dee565b61186485858585612359565b9050611879818686611874611815565b6125d9565b608086015260608501526040840152602083015281525b949350505050565b600f546018546118a791611809565b6018556013805462ff000019166201000017905560006118c630610f35565b90506118df600f546019546117fd90919063ffffffff16565b601955600f546118ee90612666565b60006118fd82610cf430610f35565b601a5490915061190d90826117fd565b601a5550506013805462ff0000191690556000601655565b6001600160a01b0383166119895760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610910565b6001600160a01b0382166119eb5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610910565b6119f483610f35565b811115610dfb5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610910565b6001600160a01b03821660009081526025602052604090205460ff16158015611a9f57506001600160a01b03811660009081526025602052604090205460ff16155b15610aa15760135460ff16610aa15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610910565b6001600160a01b03821660009081526025602052604090205460ff16158015611b3857506001600160a01b03831660009081526025602052604090205460ff16155b8015611b4d57506001600160a01b0382163014155b8015611b675750601b546001600160a01b03838116911614155b8015611b8157506028546001600160a01b03838116911614155b8015611b9b5750601c546001600160a01b03838116911614155b15610dfb5760045481611bad84610f35565b611bb79190613201565b1115610dfb5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610910565b60035481111580611c2e57506001600160a01b03821660009081526025602052604090205460ff165b80611c5157506001600160a01b03831660009081526025602052604090205460ff165b610dfb5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610910565b6028546001600160a01b038281169116148015611cc757506001600160a01b03821660009081526025602052604090205460ff16155b8015611cd65750600e5460ff16155b8015611ceb575060135462010000900460ff16155b15610aa157601454611cfe9060016117fd565b6014555050565b60135460ff168015611d3057506001600160a01b03831660009081526025602052604090205460ff16155b8015611d4957506028546001600160a01b038381169116145b8015611d5757506012548110155b8015611d665750600e5460ff16155b8015611d7b575060135462010000900460ff16155b15611d9957600160166000828254611d939190613201565b90915550505b600f5460185410158015611daf5750600f544710155b8015611dbf575060175460165410155b8015611dd25750601354610100900460ff165b8015611df757506001600160a01b03831660009081526025602052604090205460ff16155b8015611e1057506028546001600160a01b038381169116145b8015611e1e575060135460ff165b8015611e2d5750600e5460ff16155b8015611e42575060135462010000900460ff16155b8015611e6357506013546001600160a01b0384811663010000009092041614155b8015611e7157506012548110155b15610dfb57610dfb611898565b611e898383836127b4565b15610dfb57611e99601054612879565b6000601455505050565b601380546301000000600160b81b03191690556028546001600160a01b038381169116148015611eec57506001600160a01b03811660009081526025602052604090205460ff16155b8015611f01575060135462010000900460ff16155b8015611f105750600e5460ff16155b15610aa157601380546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b6000611f4d85858585611850565b6001600160a01b03881660009081526024602052604090205490915060ff1615611faf576001600160a01b038716600090815260226020526040902054611f9590869061319d565b6001600160a01b0388166000908152602260205260409020555b6001600160a01b03861660009081526024602052604090205460ff16156120125760a08101516001600160a01b038716600090815260226020526040902054611ff89190613201565b6001600160a01b0387166000908152602260205260409020555b80516001600160a01b038816600090815260216020526040902054612037919061319d565b6001600160a01b038089166000908152602160209081526040808320949094558401519189168152919091205461206e9190613201565b6001600160a01b038716600090815260216020526040908190209190915581015160c082015161209e9190612a5c565b6120b081606001518260e00151612a91565b6120c38160800151826101000151612b07565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161210c91815260200190565b60405180910390a360e08101511561217057306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e0015160405161216791815260200190565b60405180910390a35b610100810151156121cd576020546101008201516040516001600160a01b03928316928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916121c491815260200190565b60405180910390a35b50505050505050565b6002546001546000918291825b6026548110156123285782602160006026848154811061220557612205613171565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612270575081602260006026848154811061224957612249613171565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561228657600254600154945094505050509091565b602160006026838154811061229d5761229d613171565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122cc908461319d565b925060226000602683815481106122e5576122e5613171565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612314908361319d565b915080612320816131c6565b9150506121e3565b5060015460025461233991906131df565b821015612350576002546001549350935050509091565b90939092509050565b612361612dee565b83158061237357506123738383612ba1565b156123845760a08101859052611890565b82158015612390575081155b156124505760006123b2600d54610dcd600c548961183890919063ffffffff16565b9050600c54600560000154116123e257600d546005546123d2908861324a565b6123dc91906131df565b60c08301525b600554600c546123f191611809565b6009541161241a57600d54600954612409908861324a565b61241391906131df565b6101008301525b61243a826101000151610cf48460c001518461180990919063ffffffff16565b60e0830152612449818761319d565b60a0830152505b8215612511576000612473600d54610dcd600b548961183890919063ffffffff16565b9050600b54600560000154116124a357600d54600554612493908861324a565b61249d91906131df565b60c08301525b600554600b546124b291611809565b600954116124db57600d546009546124ca908861324a565b6124d491906131df565b6101008301525b6124fb826101000151610cf48460c001518461180990919063ffffffff16565b60e083015261250a818761319d565b60a0830152505b8115611890576000612534600d54610dcd600a548961183890919063ffffffff16565b9050600a546005600001541161256457600d54600554612554908861324a565b61255e91906131df565b60c08301525b600554600a5461257391611809565b6009541161259c57600d5460095461258b908861324a565b61259591906131df565b6101008301525b6125bc826101000151610cf48460c001518461180990919063ffffffff16565b60e08301526125cb818761319d565b60a083015250949350505050565b6000808080806125e9868961324a565b9450866126015750839250600091508190508061265b565b858960c00151612611919061324a565b9250858960e00151612623919061324a565b915085896101000151612636919061324a565b90508082612644858861319d565b61264e919061319d565b612658919061319d565b93505b945094509450945094565b6040805160028082526060820183526000926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156126d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f49190613261565b8160008151811061270757612707613171565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061273b5761273b613171565b6001600160a01b039283166020918202929092010152602754601f5460405163b6f9de9560e01b81529183169263b6f9de959286926127879260009288929091169042906004016132c2565b6000604051808303818588803b1580156127a057600080fd5b505af11580156121cd573d6000803e3d6000fd5b600080601154831015905060006010546127cd30610f35565b600e54911115915060ff161580156127ec5750600e54610100900460ff165b80156127f55750815b801561281a57506001600160a01b03861660009081526025602052604090205460ff16155b8015612828575060135460ff165b801561284157506028546001600160a01b038681169116145b8015612851575060155460145410155b801561285a5750805b801561286f575060135462010000900460ff16155b9695505050505050565b600e805460ff19166001908117909155600a546000916128a6916002916128a091906117fd565b90611838565b9050600a546000036128df576008546006546007546128dc926002926128a0926001926128d692909183916117fd565b906117fd565b90505b60075460009082906128f1908561324a565b6128fb91906131df565b90506000612909828561319d565b90504761291582612be7565b6000612921824761319d565b600754909150600090612934908761319d565b61293e90836131df565b600754909150600090612951908361324a565b90508015612963576129638682612d41565b600654600090612978906128a0856002611838565b905080156129bc57601d546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129ba573d6000803e3d6000fd5b505b6008546000906129d1906128a0866002611838565b905080156129ea576018546129e690826117fd565b6018555b6000612a016018544761180990919063ffffffff16565b90508015612a4557601e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a43573d6000803e3d6000fd5b505b5050600e805460ff19169055505050505050505050565b8160026000828254612a6e919061319d565b909155505060298054829190600090612a88908490613201565b90915550505050565b8060296001016000828254612aa69190613201565b90915550503060009081526024602052604090205460ff1615612ae8573060009081526022602052604081208054839290612ae2908490613201565b90915550505b3060009081526021602052604081208054849290612a88908490613201565b8060296002016000828254612b1c9190613201565b9091555050602080546001600160a01b031660009081526024909152604090205460ff1615612b7657602080546001600160a01b031660009081526022909152604081208054839290612b70908490613201565b90915550505b602080546001600160a01b031660009081526021909152604081208054849290612a88908490613201565b6000828015612bb05750600b54155b80612bc35750818015612bc35750600a54155b80610d7c575082158015612bd5575081155b8015610d7c575050600c541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c1c57612c1c613171565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c999190613261565b81600181518110612cac57612cac613171565b6001600160a01b039283166020918202929092010152602754612cd291309116846115d0565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d0b9085906000908690309042906004016132f7565b600060405180830381600087803b158015612d2557600080fd5b505af1158015612d39573d6000803e3d6000fd5b505050505050565b602754612d599030906001600160a01b0316846115d0565b602754601c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612dc9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114269190613333565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114612e4f57600080fd5b50565b600060208284031215612e6457600080fd5b8135610d7c81612e3a565b600060208083528351808285015260005b81811015612e9c57858101830151858201604001528201612e80565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ed057600080fd5b8235612edb81612e3a565b946020939093013593505050565b600080600060608486031215612efe57600080fd5b8335612f0981612e3a565b92506020840135612f1981612e3a565b929592945050506040919091013590565b600060208284031215612f3c57600080fd5b5035919050565b8015158114612e4f57600080fd5b60008060408385031215612f6457600080fd5b823591506020830135612f7681612f43565b809150509250929050565b600060208284031215612f9357600080fd5b8135610d7c81612f43565b60008060408385031215612fb157600080fd5b8235612fbc81612f43565b91506020830135612f7681612e3a565b60008060408385031215612fdf57600080fd5b50508035926020909101359150565b6000806040838503121561300157600080fd5b823561300c81612e3a565b91506020830135612f7681612f43565b600080600080600060a0868803121561303457600080fd5b853561303f81612e3a565b9450602086013561304f81612e3a565b9350604086013561305f81612e3a565b9250606086013561306f81612e3a565b9150608086013561307f81612e3a565b809150509295509295909350565b600080604083850312156130a057600080fd5b823591506020830135612f7681612e3a565b600080604083850312156130c557600080fd5b8235612fbc81612e3a565b600080600080600080600080610100898b0312156130ed57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060006060848603121561313a57600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ab657610ab6613187565b634e487b7160e01b600052603160045260246000fd5b6000600182016131d8576131d8613187565b5060010190565b6000826131fc57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ab657610ab6613187565b60006020828403121561322657600080fd5b5051919050565b60006020828403121561323f57600080fd5b8151610d7c81612f43565b8082028115828204841417610ab657610ab6613187565b60006020828403121561327357600080fd5b8151610d7c81612e3a565b600081518084526020808501945080840160005b838110156132b75781516001600160a01b031687529582019590820190600101613292565b509495945050505050565b8481526080602082015260006132db608083018661327e565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061331660a083018661327e565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561334857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ac872ba15b6a04661563bb6beab0f1bfd450fabe1a152af1d3eaee4f62da6bee64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637520ecc91161015a578063a457c2d7116100c1578063dd62ed3e1161007a578063dd62ed3e1461080b578063e2d6f94c14610851578063e94dd17c14610871578063f2fde38b14610891578063f887ea40146108b1578063fc738549146108d157600080fd5b8063a457c2d714610756578063a8aa1b3114610776578063a9059cbb14610796578063acdf4f18146107b6578063b2118a8d146107d5578063ba1a13ff146107f557600080fd5b8063884870c711610113578063884870c7146106715780638cf2e94a146106915780638ebfc796146106c757806395d89b41146106e75780639fb05d3714610716578063a2e4b5b01461073657600080fd5b80637520ecc9146105b657806378109e54146105cc578063783b5a0a146105e257806378c7dcd6146106025780637d1db4a5146106225780637d459db31461063857600080fd5b80632b112e49116101fe5780633cf241e9116101b75780633cf241e9146104f05780633f4218e0146105105780634549b039146105405780635927c434146105605780636bc05f291461057657806370a082311461059657600080fd5b80632b112e49146104305780632d838119146104455780632f54bf6e146104655780633052ea0814610494578063313ce567146104b457806339509351146104d057600080fd5b80631deff655116102505780631deff655146103a757806320d730ee146103bd57806323b872dd146103d357806325a06a02146103f357806327334a08146103fb578063293230b81461041b57600080fd5b8063018763ed146102a357806305f82a45146102c757806306fdde03146102e9578063095ea7b31461032357806313ecfbfa1461035357806318160ddd1461039257600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506029545b6040519081526020015b60405180910390f35b3480156102d357600080fd5b506102e76102e2366004612e52565b6108e6565b005b3480156102f557600080fd5b50604080518082019091526008815267457665725065706560c01b60208201525b6040516102be9190612e6f565b34801561032f57600080fd5b5061034361033e366004612ebd565b610aa5565b60405190151581526020016102be565b34801561035f57600080fd5b5060135461037a90630100000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102be565b34801561039e57600080fd5b506001546102b4565b3480156103b357600080fd5b506102b460185481565b3480156103c957600080fd5b506102b4601a5481565b3480156103df57600080fd5b506103436103ee366004612ee9565b610abc565b6102e7610b25565b34801561040757600080fd5b506102e7610416366004612e52565b610b37565b34801561042757600080fd5b506102e7610c8a565b34801561043c57600080fd5b506102b4610cc3565b34801561045157600080fd5b506102b4610460366004612f2a565b610cff565b34801561047157600080fd5b50610343610480366004612e52565b6000546001600160a01b0391821691161490565b3480156104a057600080fd5b506102e76104af366004612f2a565b610d83565b3480156104c057600080fd5b50604051600981526020016102be565b3480156104dc57600080fd5b506103436104eb366004612ebd565b610e00565b3480156104fc57600080fd5b506102e761050b366004612f2a565b610e37565b34801561051c57600080fd5b5061034361052b366004612e52565b60256020526000908152604090205460ff1681565b34801561054c57600080fd5b506102b461055b366004612f51565b610e61565b34801561056c57600080fd5b506102b4600f5481565b34801561058257600080fd5b506102e7610591366004612f81565b610ef1565b3480156105a257600080fd5b506102b46105b1366004612e52565b610f35565b3480156105c257600080fd5b506102b460165481565b3480156105d857600080fd5b506102b460045481565b3480156105ee57600080fd5b506102e76105fd366004612f9e565b610f94565b34801561060e57600080fd5b506102e761061d366004612f2a565b610fe6565b34801561062e57600080fd5b506102b460035481565b34801561064457600080fd5b50610343610653366004612e52565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561067d57600080fd5b506102e761068c366004612fcc565b611015565b34801561069d57600080fd5b506102b46106ac366004612e52565b6001600160a01b031660009081526021602052604090205490565b3480156106d357600080fd5b506102e76106e2366004612fee565b611125565b3480156106f357600080fd5b5060408051808201909152600681526545565045504560d01b6020820152610316565b34801561072257600080fd5b506102e761073136600461301c565b61117a565b34801561074257600080fd5b506102e761075136600461308d565b611256565b34801561076257600080fd5b50610343610771366004612ebd565b6112a5565b34801561078257600080fd5b5060285461037a906001600160a01b031681565b3480156107a257600080fd5b506103436107b1366004612ebd565b6112f4565b3480156107c257600080fd5b5060135461034390610100900460ff1681565b3480156107e157600080fd5b506102e76107f0366004612ee9565b611301565b34801561080157600080fd5b506102b460195481565b34801561081757600080fd5b506102b46108263660046130b2565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b34801561085d57600080fd5b506102e761086c3660046130d0565b61142d565b34801561087d57600080fd5b506102e761088c366004613125565b6114b8565b34801561089d57600080fd5b506102e76108ac366004612e52565b61151e565b3480156108bd57600080fd5b5060275461037a906001600160a01b031681565b3480156108dd57600080fd5b506102e761159c565b6000546001600160a01b031633146109195760405162461bcd60e51b815260040161091090613151565b60405180910390fd5b6001600160a01b03811660009081526024602052604090205460ff166109815760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610910565b60005b602654811015610aa157816001600160a01b0316602682815481106109ab576109ab613171565b6000918252602090912001546001600160a01b031603610a8f57602680546109d59060019061319d565b815481106109e5576109e5613171565b600091825260209091200154602680546001600160a01b039092169183908110610a1157610a11613171565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff191690556026805480610a6957610a696131b0565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610a99816131c6565b915050610984565b5050565b6000610ab23384846115d0565b5060015b92915050565b6000610ac98484846116f4565b610b1b8433610b1685604051806060016040528060288152602001613362602891396001600160a01b038a16600090815260236020908152604080832033845290915290205491906117d1565b6115d0565b5060019392505050565b601854610b3290346117fd565b601855565b6000546001600160a01b03163314610b615760405162461bcd60e51b815260040161091090613151565b6001600160a01b03811660009081526024602052604090205460ff1615610bca5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610910565b6001600160a01b03811660009081526021602052604090205415610c24576001600160a01b038116600090815260216020526040902054610c0a90610cff565b6001600160a01b0382166000908152602260205260409020555b6001600160a01b03166000818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b6000546001600160a01b03163314610cb45760405162461bcd60e51b815260040161091090613151565b6013805460ff19166001179055565b6000610cfa610cd26000610f35565b601b54610cf490610ceb906001600160a01b0316610f35565b60015490611809565b90611809565b905090565b6000600254821115610d665760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610910565b6000610d70611815565b9050610d7c81846131df565b9392505050565b6000546001600160a01b03163314610dad5760405162461bcd60e51b815260040161091090613151565b601e5447906001600160a01b03166108fc610dd36064610dcd8587611838565b90611844565b6040518115909202916000818181858888f19350505050158015610dfb573d6000803e3d6000fd5b505050565b3360008181526023602090815260408083206001600160a01b03871684529091528120549091610ab2918590610b16908690613201565b6000546001600160a01b03163314610b325760405162461bcd60e51b815260040161091090613151565b6000600154831115610eb55760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610910565b81610ed4576000610eca846001600080611850565b519150610ab69050565b6000610ee4846001600080611850565b602001519150610ab69050565b6000546001600160a01b03163314610f1b5760405162461bcd60e51b815260040161091090613151565b601380549115156101000261ff0019909216919091179055565b6001600160a01b03811660009081526024602052604081205460ff1615610f7257506001600160a01b031660009081526022602052604090205490565b6001600160a01b038216600090815260216020526040902054610ab690610cff565b6000546001600160a01b03163314610fbe5760405162461bcd60e51b815260040161091090613151565b6001600160a01b03166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110105760405162461bcd60e51b815260040161091090613151565b601255565b6000546001600160a01b0316331461103f5760405162461bcd60e51b815260040161091090613151565b600061105c600d54610dcd8560015461183890919063ffffffff16565b9050600061107b600d54610dcd8560015461183890919063ffffffff16565b9050600061109b620186a0610dcd6001805461183890919063ffffffff16565b90508083101580156110ad5750808210155b6111175760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610910565b506003919091556004555050565b6000546001600160a01b0316331461114f5760405162461bcd60e51b815260040161091090613151565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111a45760405162461bcd60e51b815260040161091090613151565b601d80546001600160a01b039687166001600160a01b03199182168117909255601c805496881696821687179055601f805495881695821686179055601e8054948816948216851790556020805493909716921682178655600090815260259095526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6000546001600160a01b031633146112805760405162461bcd60e51b815260040161091090613151565b601f80546001600160a01b0319166001600160a01b0392909216919091179055600f55565b6000610ab23384610b168560405180606001604052806025815260200161338a602591393360009081526023602090815260408083206001600160a01b038d16845290915290205491906117d1565b6000610ab23384846116f4565b6000546001600160a01b0316331461132b5760405162461bcd60e51b815260040161091090613151565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190613214565b90506001600160a01b03841663a9059cbb846113b76064610dcd8688611838565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611402573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611426919061322d565b5050505050565b6000546001600160a01b031633146114575760405162461bcd60e51b815260040161091090613151565b600a889055600b879055600c86905560058590556006849055600783905560088290556009819055600d5488118015906114955750600d54600b5411155b80156114a55750600d54600c5411155b6114ae57600080fd5b5050505050505050565b6000546001600160a01b031633146114e25760405162461bcd60e51b815260040161091090613151565b60158390556001546114fd90620186a090610dcd9085611838565b60105560015461151690620186a090610dcd9084611838565b601155505050565b6000546001600160a01b031633146115485760405162461bcd60e51b815260040161091090613151565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146115c65760405162461bcd60e51b815260040161091090613151565b6115ce611898565b565b6001600160a01b0383166116325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610910565b6001600160a01b0382166116935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610910565b6001600160a01b0383811660008181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6116ff838383611925565b6117098383611a5d565b611714838383611af6565b61171f828483611c05565b6117298383611c91565b611734838383611d05565b61173f838383611e7e565b6117498383611ea3565b6001600160a01b038316600090815260256020526040902054610dfb9084908490849060ff168061179257506001600160a01b03861660009081526025602052604090205460ff165b806117a5575060135462010000900460ff165b806117b25750600e5460ff165b6028549015906001600160a01b039081168882168114918a1614611f3f565b600081848411156117f55760405162461bcd60e51b81526004016109109190612e6f565b505050900390565b6000610d7c8284613201565b6000610d7c828461319d565b60008060006118226121d6565b909250905061183181836131df565b9250505090565b6000610d7c828461324a565b6000610d7c82846131df565b611858612dee565b61186485858585612359565b9050611879818686611874611815565b6125d9565b608086015260608501526040840152602083015281525b949350505050565b600f546018546118a791611809565b6018556013805462ff000019166201000017905560006118c630610f35565b90506118df600f546019546117fd90919063ffffffff16565b601955600f546118ee90612666565b60006118fd82610cf430610f35565b601a5490915061190d90826117fd565b601a5550506013805462ff0000191690556000601655565b6001600160a01b0383166119895760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610910565b6001600160a01b0382166119eb5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610910565b6119f483610f35565b811115610dfb5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610910565b6001600160a01b03821660009081526025602052604090205460ff16158015611a9f57506001600160a01b03811660009081526025602052604090205460ff16155b15610aa15760135460ff16610aa15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610910565b6001600160a01b03821660009081526025602052604090205460ff16158015611b3857506001600160a01b03831660009081526025602052604090205460ff16155b8015611b4d57506001600160a01b0382163014155b8015611b675750601b546001600160a01b03838116911614155b8015611b8157506028546001600160a01b03838116911614155b8015611b9b5750601c546001600160a01b03838116911614155b15610dfb5760045481611bad84610f35565b611bb79190613201565b1115610dfb5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610910565b60035481111580611c2e57506001600160a01b03821660009081526025602052604090205460ff165b80611c5157506001600160a01b03831660009081526025602052604090205460ff165b610dfb5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610910565b6028546001600160a01b038281169116148015611cc757506001600160a01b03821660009081526025602052604090205460ff16155b8015611cd65750600e5460ff16155b8015611ceb575060135462010000900460ff16155b15610aa157601454611cfe9060016117fd565b6014555050565b60135460ff168015611d3057506001600160a01b03831660009081526025602052604090205460ff16155b8015611d4957506028546001600160a01b038381169116145b8015611d5757506012548110155b8015611d665750600e5460ff16155b8015611d7b575060135462010000900460ff16155b15611d9957600160166000828254611d939190613201565b90915550505b600f5460185410158015611daf5750600f544710155b8015611dbf575060175460165410155b8015611dd25750601354610100900460ff165b8015611df757506001600160a01b03831660009081526025602052604090205460ff16155b8015611e1057506028546001600160a01b038381169116145b8015611e1e575060135460ff165b8015611e2d5750600e5460ff16155b8015611e42575060135462010000900460ff16155b8015611e6357506013546001600160a01b0384811663010000009092041614155b8015611e7157506012548110155b15610dfb57610dfb611898565b611e898383836127b4565b15610dfb57611e99601054612879565b6000601455505050565b601380546301000000600160b81b03191690556028546001600160a01b038381169116148015611eec57506001600160a01b03811660009081526025602052604090205460ff16155b8015611f01575060135462010000900460ff16155b8015611f105750600e5460ff16155b15610aa157601380546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b6000611f4d85858585611850565b6001600160a01b03881660009081526024602052604090205490915060ff1615611faf576001600160a01b038716600090815260226020526040902054611f9590869061319d565b6001600160a01b0388166000908152602260205260409020555b6001600160a01b03861660009081526024602052604090205460ff16156120125760a08101516001600160a01b038716600090815260226020526040902054611ff89190613201565b6001600160a01b0387166000908152602260205260409020555b80516001600160a01b038816600090815260216020526040902054612037919061319d565b6001600160a01b038089166000908152602160209081526040808320949094558401519189168152919091205461206e9190613201565b6001600160a01b038716600090815260216020526040908190209190915581015160c082015161209e9190612a5c565b6120b081606001518260e00151612a91565b6120c38160800151826101000151612b07565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161210c91815260200190565b60405180910390a360e08101511561217057306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e0015160405161216791815260200190565b60405180910390a35b610100810151156121cd576020546101008201516040516001600160a01b03928316928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916121c491815260200190565b60405180910390a35b50505050505050565b6002546001546000918291825b6026548110156123285782602160006026848154811061220557612205613171565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612270575081602260006026848154811061224957612249613171565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561228657600254600154945094505050509091565b602160006026838154811061229d5761229d613171565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122cc908461319d565b925060226000602683815481106122e5576122e5613171565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612314908361319d565b915080612320816131c6565b9150506121e3565b5060015460025461233991906131df565b821015612350576002546001549350935050509091565b90939092509050565b612361612dee565b83158061237357506123738383612ba1565b156123845760a08101859052611890565b82158015612390575081155b156124505760006123b2600d54610dcd600c548961183890919063ffffffff16565b9050600c54600560000154116123e257600d546005546123d2908861324a565b6123dc91906131df565b60c08301525b600554600c546123f191611809565b6009541161241a57600d54600954612409908861324a565b61241391906131df565b6101008301525b61243a826101000151610cf48460c001518461180990919063ffffffff16565b60e0830152612449818761319d565b60a0830152505b8215612511576000612473600d54610dcd600b548961183890919063ffffffff16565b9050600b54600560000154116124a357600d54600554612493908861324a565b61249d91906131df565b60c08301525b600554600b546124b291611809565b600954116124db57600d546009546124ca908861324a565b6124d491906131df565b6101008301525b6124fb826101000151610cf48460c001518461180990919063ffffffff16565b60e083015261250a818761319d565b60a0830152505b8115611890576000612534600d54610dcd600a548961183890919063ffffffff16565b9050600a546005600001541161256457600d54600554612554908861324a565b61255e91906131df565b60c08301525b600554600a5461257391611809565b6009541161259c57600d5460095461258b908861324a565b61259591906131df565b6101008301525b6125bc826101000151610cf48460c001518461180990919063ffffffff16565b60e08301526125cb818761319d565b60a083015250949350505050565b6000808080806125e9868961324a565b9450866126015750839250600091508190508061265b565b858960c00151612611919061324a565b9250858960e00151612623919061324a565b915085896101000151612636919061324a565b90508082612644858861319d565b61264e919061319d565b612658919061319d565b93505b945094509450945094565b6040805160028082526060820183526000926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156126d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f49190613261565b8160008151811061270757612707613171565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061273b5761273b613171565b6001600160a01b039283166020918202929092010152602754601f5460405163b6f9de9560e01b81529183169263b6f9de959286926127879260009288929091169042906004016132c2565b6000604051808303818588803b1580156127a057600080fd5b505af11580156121cd573d6000803e3d6000fd5b600080601154831015905060006010546127cd30610f35565b600e54911115915060ff161580156127ec5750600e54610100900460ff165b80156127f55750815b801561281a57506001600160a01b03861660009081526025602052604090205460ff16155b8015612828575060135460ff165b801561284157506028546001600160a01b038681169116145b8015612851575060155460145410155b801561285a5750805b801561286f575060135462010000900460ff16155b9695505050505050565b600e805460ff19166001908117909155600a546000916128a6916002916128a091906117fd565b90611838565b9050600a546000036128df576008546006546007546128dc926002926128a0926001926128d692909183916117fd565b906117fd565b90505b60075460009082906128f1908561324a565b6128fb91906131df565b90506000612909828561319d565b90504761291582612be7565b6000612921824761319d565b600754909150600090612934908761319d565b61293e90836131df565b600754909150600090612951908361324a565b90508015612963576129638682612d41565b600654600090612978906128a0856002611838565b905080156129bc57601d546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129ba573d6000803e3d6000fd5b505b6008546000906129d1906128a0866002611838565b905080156129ea576018546129e690826117fd565b6018555b6000612a016018544761180990919063ffffffff16565b90508015612a4557601e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a43573d6000803e3d6000fd5b505b5050600e805460ff19169055505050505050505050565b8160026000828254612a6e919061319d565b909155505060298054829190600090612a88908490613201565b90915550505050565b8060296001016000828254612aa69190613201565b90915550503060009081526024602052604090205460ff1615612ae8573060009081526022602052604081208054839290612ae2908490613201565b90915550505b3060009081526021602052604081208054849290612a88908490613201565b8060296002016000828254612b1c9190613201565b9091555050602080546001600160a01b031660009081526024909152604090205460ff1615612b7657602080546001600160a01b031660009081526022909152604081208054839290612b70908490613201565b90915550505b602080546001600160a01b031660009081526021909152604081208054849290612a88908490613201565b6000828015612bb05750600b54155b80612bc35750818015612bc35750600a54155b80610d7c575082158015612bd5575081155b8015610d7c575050600c541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c1c57612c1c613171565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c999190613261565b81600181518110612cac57612cac613171565b6001600160a01b039283166020918202929092010152602754612cd291309116846115d0565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d0b9085906000908690309042906004016132f7565b600060405180830381600087803b158015612d2557600080fd5b505af1158015612d39573d6000803e3d6000fd5b505050505050565b602754612d599030906001600160a01b0316846115d0565b602754601c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612dc9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114269190613333565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114612e4f57600080fd5b50565b600060208284031215612e6457600080fd5b8135610d7c81612e3a565b600060208083528351808285015260005b81811015612e9c57858101830151858201604001528201612e80565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ed057600080fd5b8235612edb81612e3a565b946020939093013593505050565b600080600060608486031215612efe57600080fd5b8335612f0981612e3a565b92506020840135612f1981612e3a565b929592945050506040919091013590565b600060208284031215612f3c57600080fd5b5035919050565b8015158114612e4f57600080fd5b60008060408385031215612f6457600080fd5b823591506020830135612f7681612f43565b809150509250929050565b600060208284031215612f9357600080fd5b8135610d7c81612f43565b60008060408385031215612fb157600080fd5b8235612fbc81612f43565b91506020830135612f7681612e3a565b60008060408385031215612fdf57600080fd5b50508035926020909101359150565b6000806040838503121561300157600080fd5b823561300c81612e3a565b91506020830135612f7681612f43565b600080600080600060a0868803121561303457600080fd5b853561303f81612e3a565b9450602086013561304f81612e3a565b9350604086013561305f81612e3a565b9250606086013561306f81612e3a565b9150608086013561307f81612e3a565b809150509295509295909350565b600080604083850312156130a057600080fd5b823591506020830135612f7681612e3a565b600080604083850312156130c557600080fd5b8235612fbc81612e3a565b600080600080600080600080610100898b0312156130ed57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060006060848603121561313a57600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ab657610ab6613187565b634e487b7160e01b600052603160045260246000fd5b6000600182016131d8576131d8613187565b5060010190565b6000826131fc57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ab657610ab6613187565b60006020828403121561322657600080fd5b5051919050565b60006020828403121561323f57600080fd5b8151610d7c81612f43565b8082028115828204841417610ab657610ab6613187565b60006020828403121561327357600080fd5b8151610d7c81612e3a565b600081518084526020808501945080840160005b838110156132b75781516001600160a01b031687529582019590820190600101613292565b509495945050505050565b8481526080602082015260006132db608083018661327e565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061331660a083018661327e565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561334857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ac872ba15b6a04661563bb6beab0f1bfd450fabe1a152af1d3eaee4f62da6bee64736f6c63430008130033

Deployed Bytecode Sourcemap

7461:23047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12243:83;;;;;;;;;;-1:-1:-1;12309:11:0;:15;12243:83;;;160:25:1;;;148:2;133:18;12243:83:0;;;;;;;;24515:464;;;;;;;;;;-1:-1:-1;24515:464:0;;;;;:::i;:::-;;:::i;:::-;;11337:67;;;;;;;;;;-1:-1:-1;11397:5:0;;;;;;;;;;;;-1:-1:-1;;;11397:5:0;;;;11337:67;;;;;;;:::i;12103:134::-;;;;;;;;;;-1:-1:-1;12103:134:0;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;12103:134:0;1457:187:1;8787:24:0;;;;;;;;;;-1:-1:-1;8787:24:0;;;;;;;-1:-1:-1;;;;;8787:24:0;;;;;;-1:-1:-1;;;;;1813:32:1;;;1795:51;;1783:2;1768:18;8787:24:0;1649:203:1;11560:79:0;;;;;;;;;;-1:-1:-1;11630:7:0;;11560:79;;8970:31;;;;;;;;;;;;;;;;9045:32;;;;;;;;;;;;;;;;12514:309;;;;;;;;;;-1:-1:-1;12514:309:0;;;;;:::i;:::-;;:::i;22449:118::-;;;:::i;24172:335::-;;;;;;;;;;-1:-1:-1;24172:335:0;;;;;:::i;:::-;;:::i;20235:83::-;;;;;;;;;;;;;:::i;23282:143::-;;;;;;;;;;;;;:::i;23916:248::-;;;;;;;;;;-1:-1:-1;23916:248:0;;;;;:::i;:::-;;:::i;6166:87::-;;;;;;;;;;-1:-1:-1;6166:87:0;;;;;:::i;:::-;6221:4;6246:5;-1:-1:-1;;;;;6235:16:0;;;6246:5;;6235:16;;6166:87;21511:182;;;;;;;;;;-1:-1:-1;21511:182:0;;;;;:::i;:::-;;:::i;11487:67::-;;;;;;;;;;-1:-1:-1;11487:67:0;;7703:1;2645:36:1;;2633:2;2618:18;11487:67:0;2503:184:1;12831:209:0;;;;;;;;;;-1:-1:-1;12831:209:0;;;;;:::i;:::-;;:::i;22333:108::-;;;;;;;;;;-1:-1:-1;22333:108:0;;;;;:::i;:::-;;:::i;9818:44::-;;;;;;;;;;-1:-1:-1;9818:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23433:475;;;;;;;;;;-1:-1:-1;23433:475:0;;;;;:::i;:::-;;:::i;8411:60::-;;;;;;;;;;;;;;;;28392:92;;;;;;;;;;-1:-1:-1;28392:92:0;;;;;:::i;:::-;;:::i;11645:173::-;;;;;;;;;;-1:-1:-1;11645:173:0;;;;;:::i;:::-;;:::i;8888:31::-;;;;;;;;;;;;;;;;7943:58;;;;;;;;;;;;;;;;20326:124;;;;;;;;;;-1:-1:-1;20326:124:0;;;;;:::i;:::-;;:::i;22215:110::-;;;;;;;;;;-1:-1:-1;22215:110:0;;;;;:::i;:::-;;:::i;7881:55::-;;;;;;;;;;;;;;;;12332:108;;;;;;;;;;-1:-1:-1;12332:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12418:20:0;12404:4;12418:20;;;:11;:20;;;;;;;;;12332:108;22575:445;;;;;;;;;;-1:-1:-1;22575:445:0;;;;;:::i;:::-;;:::i;13321:115::-;;;;;;;;;;-1:-1:-1;13321:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;13413:15:0;13386:7;13413:15;;;:7;:15;;;;;;;13321:115;21701:117;;;;;;;;;;-1:-1:-1;21701:117:0;;;;;:::i;:::-;;:::i;11410:71::-;;;;;;;;;;-1:-1:-1;11472:7:0;;;;;;;;;;;;-1:-1:-1;;;11472:7:0;;;;11410:71;;21027:476;;;;;;;;;;-1:-1:-1;21027:476:0;;;;;:::i;:::-;;:::i;28492:148::-;;;;;;;;;;-1:-1:-1;28492:148:0;;;;;:::i;:::-;;:::i;13048:265::-;;;;;;;;;;-1:-1:-1;13048:265:0;;;;;:::i;:::-;;:::i;9931:19::-;;;;;;;;;;-1:-1:-1;9931:19:0;;;;-1:-1:-1;;;;;9931:19:0;;;11824:140;;;;;;;;;;-1:-1:-1;11824:140:0;;;;;:::i;:::-;;:::i;8726:26::-;;;;;;;;;;-1:-1:-1;8726:26:0;;;;;;;;;;;23028:246;;;;;;;;;;-1:-1:-1;23028:246:0;;;;;:::i;:::-;;:::i;9008:30::-;;;;;;;;;;;;;;;;11970:127;;;;;;;;;;-1:-1:-1;11970:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12068:18:0;;;12051:7;12068:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11970:127;20458:561;;;;;;;;;;-1:-1:-1;20458:561:0;;;;;:::i;:::-;;:::i;21826:294::-;;;;;;;;;;-1:-1:-1;21826:294:0;;;;;:::i;:::-;;:::i;6259:111::-;;;;;;;;;;-1:-1:-1;6259:111:0;;;;;:::i;:::-;;:::i;9903:21::-;;;;;;;;;;-1:-1:-1;9903:21:0;;;;-1:-1:-1;;;;;9903:21:0;;;22128:79;;;;;;;;;;;;;:::i;24515:464::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;24599:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24591:56;;;::::0;-1:-1:-1;;;24591:56:0;;7939:2:1;24591:56:0::1;::::0;::::1;7921:21:1::0;7978:2;7958:18;;;7951:30;8017:25;7997:18;;;7990:53;8060:18;;24591:56:0::1;7737:347:1::0;24591:56:0::1;24663:9;24658:314;24682:9;:16:::0;24678:20;::::1;24658:314;;;24740:7;-1:-1:-1::0;;;;;24724:23:0::1;:9;24734:1;24724:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24724:12:0::1;:23:::0;24720:241:::1;;24783:9;24793:16:::0;;:20:::1;::::0;24812:1:::1;::::0;24793:20:::1;:::i;:::-;24783:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24768:9:::1;:12:::0;;-1:-1:-1;;;;;24783:31:0;;::::1;::::0;24778:1;;24768:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24768:46:0::1;-1:-1:-1::0;;;;;24768:46:0;;::::1;;::::0;;24833:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24872:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24872:28:0::1;::::0;;24919:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24919:15:0;;;;;-1:-1:-1;;;;;;24919:15:0::1;::::0;;;;;24658:314:::1;24515:464:::0;:::o;24720:241::-:1;24700:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24658:314;;;;24515:464:::0;:::o;12103:134::-;12178:4;12185:37;12194:10;12206:7;12215:6;12185:8;:37::i;:::-;-1:-1:-1;12231:4:0;12103:134;;;;;:::o;12514:309::-;12612:4;12629:36;12639:6;12647:9;12658:6;12629:9;:36::i;:::-;12676:117;12685:6;12693:10;12705:87;12741:6;12705:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12705:19:0;;;;;;:11;:19;;;;;;;;12725:10;12705:31;;;;;;;;;:87;:35;:87::i;:::-;12676:8;:117::i;:::-;-1:-1:-1;12811:4:0;12514:309;;;;;:::o;22449:118::-;22528:16;;:31;;22549:9;22528:20;:31::i;:::-;22509:16;:50;22449:118::o;24172:335::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24257:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24256:21;24248:61;;;::::0;-1:-1:-1;;;24248:61:0;;8960:2:1;24248:61:0::1;::::0;::::1;8942:21:1::0;8999:2;8979:18;;;8972:30;9038:29;9018:18;;;9011:57;9085:18;;24248:61:0::1;8758:351:1::0;24248:61:0::1;-1:-1:-1::0;;;;;24323:16:0;::::1;24342:1;24323:16:::0;;;:7:::1;:16;::::0;;;;;:20;24320:108:::1;;-1:-1:-1::0;;;;;24399:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24379:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24360:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24320:108:::1;-1:-1:-1::0;;;;;24438:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24438:27:0::1;24461:4;24438:27:::0;;::::1;::::0;;;24476:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24476:23:0::1;::::0;;::::1;::::0;;24172:335::o;20235:83::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;20289:14:::1;:21:::0;;-1:-1:-1;;20289:21:0::1;20306:4;20289:21;::::0;;20235:83::o;23282:143::-;23335:7;23362:55;23395:21;23413:1;23395:9;:21::i;:::-;23384:4;;23362:28;;23374:15;;-1:-1:-1;;;;;23384:4:0;23374:9;:15::i;:::-;23362:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;23355:62;;23282:143;:::o;23916:248::-;23982:7;24021;;24010;:18;;24002:73;;;;-1:-1:-1;;;24002:73:0;;9316:2:1;24002:73:0;;;9298:21:1;9355:2;9335:18;;;9328:30;9394:34;9374:18;;;9367:62;-1:-1:-1;;;9445:18:1;;;9438:40;9495:19;;24002:73:0;9114:406:1;24002:73:0;24086:19;24109:10;:8;:10::i;:::-;24086:33;-1:-1:-1;24137:19:0;24086:33;24137:7;:19;:::i;:::-;24130:26;23916:248;-1:-1:-1;;;23916:248:0:o;21511:182::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;21631:16:::1;::::0;21591:21:::1;::::0;-1:-1:-1;;;;;21631:16:0::1;21623:62;21658:26;21680:3;21658:17;21591:21:::0;21672:2;21658:13:::1;:17::i;:::-;:21:::0;::::1;:26::i;:::-;21623:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21560:133;21511:182:::0;:::o;12831:209::-;12945:10;12919:4;12966:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12966:32:0;;;;;;;;;;12919:4;;12936:74;;12957:7;;12966:43;;12999:10;;12966:43;:::i;22333:108::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;23433:475::-;23523:7;23562;;23551;:18;;23543:62;;;;-1:-1:-1;;;23543:62:0;;10079:2:1;23543:62:0;;;10061:21:1;10118:2;10098:18;;;10091:30;10157:33;10137:18;;;10130:61;10208:18;;23543:62:0;9877:355:1;23543:62:0;23621:17;23616:285;;23655:28;23686:39;23697:7;23706:4;23712:5;23719;23686:10;:39::i;:::-;23747:9;;-1:-1:-1;23740:16:0;;-1:-1:-1;23740:16:0;23616:285;23789:28;23820:39;23831:7;23840:4;23846:5;23853;23820:10;:39::i;:::-;23881:17;;;;-1:-1:-1;23874:24:0;;-1:-1:-1;23874:24:0;28392:92;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;28459:7:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;28459:17:0;;::::1;::::0;;;::::1;::::0;;28392:92::o;11645:173::-;-1:-1:-1;;;;;11725:20:0;;11711:7;11725:20;;;:11;:20;;;;;;;;11721:49;;;-1:-1:-1;;;;;;11754:16:0;;;;;:7;:16;;;;;;;11645:173::o;11721:49::-;-1:-1:-1;;;;;11799:16:0;;;;;;:7;:16;;;;;;11779:37;;:19;:37::i;20326:124::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20410:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;20410:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20326:124::o;22215:110::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;22288:20:::1;:29:::0;22215:110::o;22575:445::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;22659:13:::1;22675:43;22705:11;;22675:17;22687:4;22675:7;;:11;;:17;;;;:::i;:43::-;22659:59;;22729:17;22749:46;22782:11;;22749:20;22761:7;22749;;:11;;:20;;;;:::i;:46::-;22729:66;;22797:13;22813:26;22832:6;22813:14;22825:1;22813:7:::0;::::1;:11;;:14;;;;:::i;:26::-;22797:42;;22867:5;22858;:14;;:36;;;;;22889:5;22876:9;:18;;22858:36;22850:102;;;::::0;-1:-1:-1;;;22850:102:0;;10439:2:1;22850:102:0::1;::::0;::::1;10421:21:1::0;10478:2;10458:18;;;10451:30;10517:34;10497:18;;;10490:62;-1:-1:-1;;;10568:18:1;;;10561:51;10629:19;;22850:102:0::1;10237:417:1::0;22850:102:0::1;-1:-1:-1::0;22963:12:0::1;:20:::0;;;;22985:15:::1;:27:::0;-1:-1:-1;;22575:445:0:o;21701:117::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21782:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;21782:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21701:117::o;21027:476::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;21181:18:::1;:31:::0;;-1:-1:-1;;;;;21181:31:0;;::::1;-1:-1:-1::0;;;;;;21181:31:0;;::::1;::::0;::::1;::::0;;;21214:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21247:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21276:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21305:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;21181:18:::1;21343:23:::0;;;:11:::1;:23:::0;;;;;;;:30;;-1:-1:-1;;21343:30:0;;::::1;21181:31:::0;21343:30;;::::1;::::0;;;21375:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;21407:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21437:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21467:21;;;;;:28;;;;::::1;::::0;;::::1;::::0;;21027:476::o;28492:148::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;28577:16:::1;:27:::0;;-1:-1:-1;;;;;;28577:27:0::1;-1:-1:-1::0;;;;;28577:27:0;;;::::1;::::0;;;::::1;::::0;;28606:16:::1;:26:::0;28492:148::o;13048:265::-;13141:4;13158:125;13167:10;13179:7;13188:94;13225:15;13188:94;;;;;;;;;;;;;;;;;13200:10;13188:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13188:32:0;;;;;;;;;;;:94;:36;:94::i;11824:140::-;11902:4;11909:40;11919:10;11931:9;11942:6;11909:9;:40::i;23028:246::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;23150:39:::1;::::0;-1:-1:-1;;;23150:39:0;;23183:4:::1;23150:39;::::0;::::1;1795:51:1::0;23135:12:0::1;::::0;-1:-1:-1;;;;;23150:24:0;::::1;::::0;::::1;::::0;1768:18:1;;23150:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23135:54:::0;-1:-1:-1;;;;;;23200:23:0;::::1;;23224:9:::0;23235:30:::1;23261:3;23235:21;23135:54:::0;23244:11;23235:8:::1;:21::i;:30::-;23200:66;::::0;-1:-1:-1;;;;;;23200:66:0::1;::::0;;;;;;-1:-1:-1;;;;;11040:32:1;;;23200:66:0::1;::::0;::::1;11022:51:1::0;11089:18;;;11082:34;10995:18;;23200:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23124:150;23028:246:::0;;;:::o;20458:561::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;20653:8:::1;:15:::0;;;20670:7:::1;:15:::0;;;20687:11:::1;:20:::0;;;20718:8:::1;:27:::0;;;-1:-1:-1;20756:31:0;;;-1:-1:-1;20798:31:0;;;20840:23;:34;;;20885:16;:27;;;20943:11:::1;::::0;20931:23;::::1;::::0;::::1;::::0;:49:::1;;;20969:11;;20958:7;;:22;;20931:49;:79;;;;;20999:11;;20984;;:26;;20931:79;20923:88;;;::::0;::::1;;20458:561:::0;;;;;;;;:::o;21826:294::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;21954:10:::1;:24:::0;;;21996:7:::1;::::0;:48:::1;::::0;22036:6:::1;::::0;21996:27:::1;::::0;22008:14;21996:11:::1;:27::i;:48::-;21980:13;:64:::0;22064:7:::1;::::0;:48:::1;::::0;22104:6:::1;::::0;22064:27:::1;::::0;22076:14;22064:11:::1;:27::i;:48::-;22046:15;:66:::0;-1:-1:-1;;;21826:294:0:o;6259:111::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;6325:5:::1;:11:::0;;-1:-1:-1;;;;;;6325:11:0::1;-1:-1:-1::0;;;;;6325:11:0;::::1;::::0;;::::1;::::0;;;6343:25:::1;::::0;1795:51:1;;;6343:25:0::1;::::0;1783:2:1;1768:18;6343:25:0::1;;;;;;;6259:111:::0;:::o;22128:79::-;6221:4;6246:5;-1:-1:-1;;;;;6246:5:0;6133:10;6235:16;6117:38;;;;-1:-1:-1;;;6117:38:0;;;;;;;:::i;:::-;22183:16:::1;:14;:16::i;:::-;22128:79::o:0;13444:335::-;-1:-1:-1;;;;;13537:19:0;;13529:68;;;;-1:-1:-1;;;13529:68:0;;11795:2:1;13529:68:0;;;11777:21:1;11834:2;11814:18;;;11807:30;11873:34;11853:18;;;11846:62;-1:-1:-1;;;11924:18:1;;;11917:34;11968:19;;13529:68:0;11593:400:1;13529:68:0;-1:-1:-1;;;;;13616:21:0;;13608:68;;;;-1:-1:-1;;;13608:68:0;;12200:2:1;13608:68:0;;;12182:21:1;12239:2;12219:18;;;12212:30;12278:34;12258:18;;;12251:62;-1:-1:-1;;;12329:18:1;;;12322:32;12371:19;;13608:68:0;11998:398:1;13608:68:0;-1:-1:-1;;;;;13687:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13739:32;;160:25:1;;;13739:32:0;;133:18:1;13739:32:0;;;;;;;13444:335;;;:::o;13787:632::-;13876:37;13887:6;13895:9;13906:6;13876:10;:37::i;:::-;13924:38;13944:6;13952:9;13924:19;:38::i;:::-;13973:41;13988:6;13996:9;14007:6;13973:14;:41::i;:::-;14026:39;14039:9;14050:6;14058;14026:12;:39::i;:::-;14076:35;14093:6;14101:9;14076:16;:35::i;:::-;14122:40;14136:6;14144:9;14155:6;14122:13;:40::i;:::-;14173:35;14182:6;14190:9;14201:6;14173:8;:35::i;:::-;14219:31;14232:6;14240:9;14219:12;:31::i;:::-;-1:-1:-1;;;;;14305:19:0;;;;;;:11;:19;;;;;;14261:150;;14276:6;;14284:9;;14295:6;;14305:19;;;:45;;-1:-1:-1;;;;;;14328:22:0;;;;;;:11;:22;;;;;;;;14305:45;:57;;;-1:-1:-1;14354:8:0;;;;;;;14305:57;:69;;;-1:-1:-1;14366:8:0;;;;14305:69;14390:4;;14303:72;;;-1:-1:-1;;;;;14390:4:0;;;14377:17;;;;;;14396:14;;;14261;:150::i;1508:162::-;1594:7;1640:12;1632:6;;;;1624:29;;;;-1:-1:-1;;;1624:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1662:5:0;;;1508:162::o;207:82::-;265:7;282:5;286:1;282;:5;:::i;295:82::-;353:7;370:5;374:1;370;:5;:::i;29808:158::-;29849:7;29870:15;29887;29906:19;:17;:19::i;:::-;29869:56;;-1:-1:-1;29869:56:0;-1:-1:-1;29943:15:0;29869:56;;29943:15;:::i;:::-;29936:22;;;;29808:158;:::o;383:82::-;441:7;458:5;462:1;458;:5;:::i;471:82::-;529:7;546:5;550:1;546;:5;:::i;25586:415::-;25689:36;;:::i;:::-;25750:49;25762:7;25771;25780:6;25788:10;25750:11;:49::i;:::-;25738:61;;25914:52;25926:9;25937:7;25946;25955:10;:8;:10::i;:::-;25914:11;:52::i;:::-;25892:18;;;25810:156;25872:19;;;25810:156;25857:14;;;25810:156;25830:25;;;25810:156;;;25586:415;;;;;;;:::o;29283:517::-;29369:16;;29348;;:38;;:20;:38::i;:::-;29329:16;:57;29397:8;:15;;-1:-1:-1;;29397:15:0;;;;;;29447:24;29465:4;29447:9;:24::i;:::-;29423:48;;29500:37;29520:16;;29500:15;;:19;;:37;;;;:::i;:::-;29482:15;:55;29565:16;;29548:34;;:16;:34::i;:::-;29593:20;29616:43;29645:13;29616:24;29634:4;29616:9;:24::i;:43::-;29690:17;;29593:66;;-1:-1:-1;29690:35:0;;29593:66;29690:21;:35::i;:::-;29670:17;:55;-1:-1:-1;;29736:8:0;:16;;-1:-1:-1;;29736:16:0;;;29747:5;29763:16;:29;29283:517::o;14427:355::-;-1:-1:-1;;;;;14531:20:0;;14523:70;;;;-1:-1:-1;;;14523:70:0;;12776:2:1;14523:70:0;;;12758:21:1;12815:2;12795:18;;;12788:30;12854:34;12834:18;;;12827:62;-1:-1:-1;;;12905:18:1;;;12898:35;12950:19;;14523:70:0;12574:401:1;14523:70:0;-1:-1:-1;;;;;14612:23:0;;14604:71;;;;-1:-1:-1;;;14604:71:0;;13182:2:1;14604:71:0;;;13164:21:1;13221:2;13201:18;;;13194:30;13260:34;13240:18;;;13233:62;-1:-1:-1;;;13311:18:1;;;13304:33;13354:19;;14604:71:0;12980:399:1;14604:71:0;14704:17;14714:6;14704:9;:17::i;:::-;14694:6;:27;;14686:88;;;;-1:-1:-1;;;14686:88:0;;13586:2:1;14686:88:0;;;13568:21:1;13625:2;13605:18;;;13598:30;13664:34;13644:18;;;13637:62;-1:-1:-1;;;13715:18:1;;;13708:47;13772:19;;14686:88:0;13384:413:1;15012:206:0;-1:-1:-1;;;;;15105:19:0;;;;;;:11;:19;;;;;;;;15104:20;:47;;;;-1:-1:-1;;;;;;15129:22:0;;;;;;:11;:22;;;;;;;;15128:23;15104:47;15101:110;;;15161:14;;;;15153:56;;;;-1:-1:-1;;;15153:56:0;;14004:2:1;15153:56:0;;;13986:21:1;14043:2;14023:18;;;14016:30;14082:31;14062:18;;;14055:59;14131:18;;15153:56:0;13802:353:1;15230:384:0;-1:-1:-1;;;;;15334:22:0;;;;;;:11;:22;;;;;;;;15333:23;:47;;;;-1:-1:-1;;;;;;15361:19:0;;;;;;:11;:19;;;;;;;;15360:20;15333:47;:77;;;;-1:-1:-1;;;;;;15384:26:0;;15405:4;15384:26;;15333:77;:107;;;;-1:-1:-1;15435:4:0;;-1:-1:-1;;;;;15414:26:0;;;15435:4;;15414:26;;15333:107;:128;;;;-1:-1:-1;15457:4:0;;-1:-1:-1;;;;;15444:17:0;;;15457:4;;15444:17;;15333:128;:163;;;;-1:-1:-1;15478:18:0;;-1:-1:-1;;;;;15465:31:0;;;15478:18;;15465:31;;15333:163;15330:277;;;15555:15;;15544:6;15521:20;15531:9;15521;:20::i;:::-;:29;;;;:::i;:::-;15520:50;;15512:93;;;;-1:-1:-1;;;15512:93:0;;14362:2:1;15512:93:0;;;14344:21:1;14401:2;14381:18;;;14374:30;14440:32;14420:18;;;14413:60;14490:18;;15512:93:0;14160:354:1;15820:193:0;15929:12;;15919:6;:22;;:45;;;-1:-1:-1;;;;;;15945:19:0;;;;;;:11;:19;;;;;;;;15919:45;:64;;;-1:-1:-1;;;;;;15968:15:0;;;;;;:11;:15;;;;;;;;15919:64;15911:94;;;;-1:-1:-1;;;15911:94:0;;14721:2:1;15911:94:0;;;14703:21:1;14760:2;14740:18;;;14733:30;-1:-1:-1;;;14779:18:1;;;14772:47;14836:18;;15911:94:0;14519:341:1;15622:190:0;15719:4;;-1:-1:-1;;;;;15706:17:0;;;15719:4;;15706:17;:41;;;;-1:-1:-1;;;;;;15728:19:0;;;;;;:11;:19;;;;;;;;15727:20;15706:41;:54;;;;-1:-1:-1;15752:8:0;;;;15751:9;15706:54;:67;;;;-1:-1:-1;15765:8:0;;;;;;;15764:9;15706:67;15703:102;;;15787:9;;:16;;15801:1;15787:13;:16::i;:::-;15775:9;:28;15622:190;;:::o;28648:627::-;28745:14;;;;:38;;;;-1:-1:-1;;;;;;28764:19:0;;;;;;:11;:19;;;;;;;;28763:20;28745:38;:68;;;;-1:-1:-1;28808:4:0;;-1:-1:-1;;;;;28787:26:0;;;28808:4;;28787:26;28745:68;:102;;;;;28827:20;;28817:6;:30;;28745:102;:128;;;;-1:-1:-1;28865:8:0;;;;28864:9;28745:128;:141;;;;-1:-1:-1;28878:8:0;;;;;;;28877:9;28745:141;28742:178;;;28916:1;28888:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;28742:178:0;28953:16;;28933;;:36;;:81;;;;;28998:16;;28973:21;:41;;28933:81;:122;;;;;29038:17;;29018:16;;:37;;28933:122;:147;;;;-1:-1:-1;29073:7:0;;;;;;;28933:147;:171;;;;-1:-1:-1;;;;;;29085:19:0;;;;;;:11;:19;;;;;;;;29084:20;28933:171;:201;;;;-1:-1:-1;29129:4:0;;-1:-1:-1;;;;;29108:26:0;;;29129:4;;29108:26;28933:201;:219;;;;-1:-1:-1;29138:14:0;;;;28933:219;:232;;;;-1:-1:-1;29157:8:0;;;;29156:9;28933:232;:245;;;;-1:-1:-1;29170:8:0;;;;;;;29169:9;28933:245;:268;;;;-1:-1:-1;29192:9:0;;-1:-1:-1;;;;;29182:19:0;;;29192:9;;;;;29182:19;;28933:268;:315;;;;;29228:20;;29218:6;:30;;28933:315;28930:338;;;29250:16;:14;:16::i;17517:188::-;17609:41;17624:6;17632:9;17643:6;17609:14;:41::i;:::-;17606:92;;;17652:29;17667:13;;17652:14;:29::i;:::-;17695:1;17683:9;:13;17517:188;;;:::o;14790:214::-;14867:9;:24;;-1:-1:-1;;;;;;14867:24:0;;;14915:4;;-1:-1:-1;;;;;14905:14:0;;;14915:4;;14905:14;:41;;;;-1:-1:-1;;;;;;14924:22:0;;;;;;:11;:22;;;;;;;;14923:23;14905:41;:54;;;;-1:-1:-1;14951:8:0;;;;;;;14950:9;14905:54;:67;;;;-1:-1:-1;14964:8:0;;;;14963:9;14905:67;14902:95;;;14974:9;:21;;-1:-1:-1;;;;;14974:21:0;;;;-1:-1:-1;;;;;;14974:21:0;;;;;;14790:214;;:::o;16153:921::-;16292:28;16323:48;16334:7;16343;16352:6;16360:10;16323;:48::i;:::-;-1:-1:-1;;;;;16385:19:0;;;;;;:11;:19;;;;;;16292:79;;-1:-1:-1;16385:19:0;;16382:83;;;-1:-1:-1;;;;;16440:15:0;;;;;;:7;:15;;;;;;:23;;16456:7;;16440:23;:::i;:::-;-1:-1:-1;;;;;16422:15:0;;;;;;:7;:15;;;;;:41;16382:83;-1:-1:-1;;;;;16478:22:0;;;;;;:11;:22;;;;;;;;16475:101;;;16557:17;;;;-1:-1:-1;;;;;16538:18:0;;;;;;:7;:18;;;;;;:36;;16557:17;16538:36;:::i;:::-;-1:-1:-1;;;;;16517:18:0;;;;;;:7;:18;;;;;:57;16475:101;16620:9;;-1:-1:-1;;;;;16604:15:0;;16620:9;16604:15;;;:7;:15;;;;;;:25;;16620:9;16604:25;:::i;:::-;-1:-1:-1;;;;;16586:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16680:17;;;16661:18;;;;;;;;;;:36;;16680:17;16661:36;:::i;:::-;-1:-1:-1;;;;;16640:18:0;;;;;;:7;:18;;;;;;;:57;;;;16720:6;;;16728;;;;16708:27;;16720:6;16708:11;:27::i;:::-;16746:39;16760:1;:11;;;16773:1;:11;;;16746:13;:39::i;:::-;16796:36;16809:1;:10;;;16821:1;:10;;;16796:12;:36::i;:::-;16865:9;-1:-1:-1;;;;;16848:46:0;16857:6;-1:-1:-1;;;;;16848:46:0;;16876:1;:17;;;16848:46;;;;160:25:1;;148:2;133:18;;14:177;16848:46:0;;;;;;;;16908:11;;;;:15;16905:71;;16955:4;-1:-1:-1;;;;;16930:44:0;16939:6;-1:-1:-1;;;;;16930:44:0;;16962:1;:11;;;16930:44;;;;160:25:1;;148:2;133:18;;14:177;16930:44:0;;;;;;;;16905:71;16989:10;;;;:14;16986:81;;17035:16;;;17054:10;;;17010:55;;-1:-1:-1;;;;;17035:16:0;;;;17010:55;;;;;;;160:25:1;;148:2;133:18;;14:177;17010:55:0;;;;;;;;16986:81;16281:793;16153:921;;;;;;:::o;29974:531::-;30071:7;;30107;;30024;;;;;30125:270;30149:9;:16;30145:20;;30125:270;;;30215:7;30191;:21;30199:9;30209:1;30199:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30199:12:0;30191:21;;;;;;;;;;;;;:31;;:66;;;30250:7;30226;:21;30234:9;30244:1;30234:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30234:12:0;30226:21;;;;;;;;;;;;;:31;30191:66;30187:97;;;30267:7;;30276;;30259:25;;;;;;;29974:531;;:::o;30187:97::-;30317:7;:21;30325:9;30335:1;30325:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30325:12:0;30317:21;;;;;;;;;;;;;30309:29;;:7;:29;:::i;:::-;30299:39;;30371:7;:21;30379:9;30389:1;30379:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30379:12:0;30371:21;;;;;;;;;;;;;30363:29;;:7;:29;:::i;:::-;30353:39;-1:-1:-1;30167:3:0;;;;:::i;:::-;;;;30125:270;;;;30427:7;;30419;;:15;;;;:::i;:::-;30409:7;:25;30405:56;;;30444:7;;30453;;30436:25;;;;;;29974:531;;:::o;30405:56::-;30480:7;;30489;;-1:-1:-1;29974:531:0;-1:-1:-1;29974:531:0:o;26227:1555::-;26331:28;;:::i;:::-;26376:7;26375:8;:41;;;;26387:29;26397:6;26405:10;26387:9;:29::i;:::-;26372:110;;;26431:17;;;:27;;;26471:8;;26372:110;26496:6;26495:7;:22;;;;;26507:10;26506:11;26495:22;26492:431;;;26533:17;26553:41;26582:11;;26553:24;26565:11;;26553:7;:11;;:24;;;;:::i;:41::-;26533:61;;26628:11;;26612:8;:12;;;:27;26609:75;;26671:11;;26658:8;:12;26650:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;26641:6;;;:41;26609:75;26737:8;:12;26721:11;;:29;;:15;:29::i;:::-;26701:16;;:49;26698:105;;26790:11;;26773:16;;26765:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;26752:10;;;:49;26698:105;26831:37;26857:1;:10;;;26831:21;26845:1;:6;;;26831:9;:13;;:21;;;;:::i;:37::-;26817:11;;;:51;26903:17;26911:9;26903:7;:17;:::i;:::-;26883;;;:37;-1:-1:-1;26492:431:0;26936:6;26933:403;;;26958:17;26978:37;27003:11;;26978:20;26990:7;;26978;:11;;:20;;;;:::i;:37::-;26958:57;;27049:7;;27033:8;:12;;;:23;27030:71;;27088:11;;27075:8;:12;27067:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27058:6;;;:41;27030:71;27150:8;:12;27138:7;;:25;;:11;:25::i;:::-;27118:16;;:45;27115:101;;27203:11;;27186:16;;27178:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;27165:10;;;:49;27115:101;27244:37;27270:1;:10;;;27244:21;27258:1;:6;;;27244:9;:13;;:21;;;;:::i;:37::-;27230:11;;;:51;27316:17;27324:9;27316:7;:17;:::i;:::-;27296;;;:37;-1:-1:-1;26933:403:0;27349:10;27346:410;;;27375:17;27395:38;27421:11;;27395:21;27407:8;;27395:7;:11;;:21;;;;:::i;:38::-;27375:58;;27467:8;;27451;:12;;;:24;27448:72;;27507:11;;27494:8;:12;27486:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27477:6;;;:41;27448:72;27570:8;:12;27557:8;;:26;;:12;:26::i;:::-;27537:16;;:46;27534:102;;27623:11;;27606:16;;27598:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;27585:10;;;:49;27534:102;27664:37;27690:1;:10;;;27664:21;27678:1;:6;;;27664:9;:13;;:21;;;;:::i;:37::-;27650:11;;;:51;27736:17;27744:9;27736:7;:17;:::i;:::-;27716;;;:37;-1:-1:-1;26227:1555:0;;;;;;:::o;27790:594::-;27915:15;;;;;28029:19;28037:11;28029:7;:19;:::i;:::-;28019:29;;28063:7;28059:60;;-1:-1:-1;28092:7:0;;-1:-1:-1;28110:1:0;;-1:-1:-1;28110:1:0;;-1:-1:-1;28110:1:0;28085:31;;28059:60;28143:11;28136:1;:6;;;:18;;;;:::i;:::-;28129:25;;28189:11;28177:1;:11;;;:23;;;;:::i;:::-;28165:35;;28233:11;28222:1;:10;;;:22;;;;:::i;:::-;28211:33;-1:-1:-1;28211:33:0;28287:9;28274:12;28282:4;28274:7;:12;:::i;:::-;:22;;;;:::i;:::-;:31;;;;:::i;:::-;28255:50;;27790:594;;;;;;;;;;:::o;19864:363::-;19952:16;;;19966:1;19952:16;;;;;;;;19928:21;;19952:16;;;;;;;;-1:-1:-1;;19989:6:0;;:13;;;-1:-1:-1;;;19989:13:0;;;;19928:40;;-1:-1:-1;;;;;;19989:6:0;;;;:11;;-1:-1:-1;19989:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19979:4;19984:1;19979:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;19979:23:0;;;-1:-1:-1;;;;;19979:23:0;;;;;20031:4;20013;20018:1;20013:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20013:23:0;;;:7;;;;;;;;;:23;20047:6;;20172:16;;20047:172;;-1:-1:-1;;;20047:172:0;;:6;;;;:57;;20112:9;;20047:172;;:6;;20153:4;;20172:16;;;;20203:15;;20047:172;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17083:426;17181:4;17198:13;17224:15;;17214:6;:25;;17198:41;;17250:19;17300:13;;17272:24;17290:4;17272:9;:24::i;:::-;17332:8;;17272:41;-1:-1:-1;17272:41:0;;-1:-1:-1;17332:8:0;;17331:9;:24;;;;-1:-1:-1;17344:11:0;;;;;;;17331:24;:36;;;;;17359:8;17331:36;:60;;;;-1:-1:-1;;;;;;17372:19:0;;;;;;:11;:19;;;;;;;;17371:20;17331:60;:78;;;;-1:-1:-1;17395:14:0;;;;17331:78;:112;;;;-1:-1:-1;17439:4:0;;-1:-1:-1;;;;;17426:17:0;;;17439:4;;17426:17;17331:112;:139;;;;;17460:10;;17447:9;;:23;;17331:139;:157;;;;;17474:14;17331:157;:170;;;;-1:-1:-1;17493:8:0;;;;;;;17492:9;17331:170;17324:177;17083:426;-1:-1:-1;;;;;;17083:426:0:o;17713:1350::-;12468:8;:15;;-1:-1:-1;;12468:15:0;12479:4;12468:15;;;;;;17807:8:::1;::::0;12468;;17806:24:::1;::::0;17828:1:::1;::::0;17806:17:::1;::::0;17807:8;17806:14:::1;:17::i;:::-;:21:::0;::::1;:24::i;:::-;17783:47;;17844:8;;17856:1;17844:13:::0;17841:134:::1;;17935:23:::0;;17897:18;;17874;;:99:::1;::::0;17971:1:::1;::::0;17874:92:::1;::::0;17964:1:::1;::::0;17874:85:::1;::::0;17935:23;;17874:85;;:22:::1;:42::i;:::-;:46:::0;::::1;:85::i;:99::-;17859:114;;17841:134;18029:18:::0;;17985:32:::1;::::0;18050:12;;18020:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;17985:77:::0;-1:-1:-1;18073:14:0::1;18090:33;17985:77:::0;18090:6;:33:::1;:::i;:::-;18073:50:::0;-1:-1:-1;18159:21:0::1;18191:24;18073:50:::0;18191:16:::1;:24::i;:::-;18226:20;18249:38;18273:14:::0;18249:21:::1;:38;:::i;:::-;18350:18:::0;;18226:61;;-1:-1:-1;18298:19:0::1;::::0;18335:33:::1;::::0;:12;:33:::1;:::i;:::-;18319:50;::::0;:12;:50:::1;:::i;:::-;18426:18:::0;;18298:71;;-1:-1:-1;18380:29:0::1;::::0;18412:32:::1;::::0;18298:71;18412:32:::1;:::i;:::-;18380:64:::0;-1:-1:-1;18458:25:0;;18455:108:::1;;18499:61;18512:24;18538:21;18499:12;:61::i;:::-;18622:18:::0;;18573:23:::1;::::0;18599:42:::1;::::0;:18:::1;:11:::0;18615:1:::1;18599:15;:18::i;:42::-;18573:68:::0;-1:-1:-1;18655:19:0;;18652:80:::1;;18684:18;::::0;18676:53:::1;::::0;-1:-1:-1;;;;;18684:18:0;;::::1;::::0;18676:53;::::1;;;::::0;18713:15;;18684:18:::1;18676:53:::0;18684:18;18676:53;18713:15;18684:18;18676:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18652:80;18789:23:::0;;18742:21:::1;::::0;18766:47:::1;::::0;:18:::1;:11:::0;18782:1:::1;18766:15;:18::i;:47::-;18742:71:::0;-1:-1:-1;18827:17:0;;18824:80:::1;;18866:16;::::0;:35:::1;::::0;18887:13;18866:20:::1;:35::i;:::-;18847:16;:54:::0;18824:80:::1;18914:15;18932:43;18958:16;;18932:21;:25;;:43;;;;:::i;:::-;18914:61:::0;-1:-1:-1;18989:20:0;;18986:70:::1;;19019:16;::::0;19011:43:::1;::::0;-1:-1:-1;;;;;19019:16:0;;::::1;::::0;19011:43;::::1;;;::::0;19046:7;;19019:16:::1;19011:43:::0;19019:16;19011:43;19046:7;19019:16;19011:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18986:70;-1:-1:-1::0;;12488:8:0;:16;;-1:-1:-1;;12488:16:0;;;-1:-1:-1;;;;;;;;;17713:1350:0:o;16021:124::-;16099:4;16089:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;16115:11:0;:22;;16133:4;;16115:11;:15;;:22;;16133:4;;16115:22;:::i;:::-;;;;-1:-1:-1;;;;16021:124:0:o;24987:277::-;25090:9;25067:11;:20;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;25135:4:0;25115:26;;;;:11;:26;;;;;;;;25112:100;;;25183:4;25167:22;;;;:7;:22;;;;;:33;;25191:9;;25167:22;:33;;25191:9;;25167:33;:::i;:::-;;;;-1:-1:-1;;25112:100:0;25238:4;25222:22;;;;:7;:22;;;;;:34;;25247:9;;25222:22;:34;;25247:9;;25222:34;:::i;25272:306::-;25371:8;25349:11;:19;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;25415:16:0;;;-1:-1:-1;;;;;25415:16:0;25395:38;;;;:11;:38;;;;;;;;;25392:123;;;25475:16;;;-1:-1:-1;;;;;25475:16:0;25459:34;;;;:7;:34;;;;;;:44;;25495:8;;25459:34;:44;;25495:8;;25459:44;:::i;:::-;;;;-1:-1:-1;;25392:123:0;25541:16;;;-1:-1:-1;;;;;25541:16:0;25525:34;;;;:7;:34;;;;;;:45;;25562:8;;25525:34;:45;;25562:8;;25525:45;:::i;26009:210::-;26081:4;26106:6;:22;;;;-1:-1:-1;26116:7:0;;:12;26106:22;26105:57;;;;26134:10;:27;;;;-1:-1:-1;26148:8:0;;:13;26134:27;26105:105;;;;26168:6;26167:7;:22;;;;;26179:10;26178:11;26167:22;:42;;;;-1:-1:-1;;26193:11:0;;:16;;26009:210;-1:-1:-1;;26009:210:0:o;19422:434::-;19512:16;;;19526:1;19512:16;;;;;;;;19488:21;;19512:16;;;;;;;;;;-1:-1:-1;19512:16:0;19488:40;;19557:4;19539;19544:1;19539:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19539:23:0;;;:7;;;;;;;;;;:23;;;;19583:6;;:13;;;-1:-1:-1;;;19583:13:0;;;;:6;;;;;:11;;:13;;;;;19539:7;;19583:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19573:4;19578:1;19573:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19573:23:0;;;:7;;;;;;;;;:23;19639:6;;19607:53;;19624:4;;19639:6;19648:11;19607:8;:53::i;:::-;19671:6;;:177;;-1:-1:-1;;;19671:177:0;;-1:-1:-1;;;;;19671:6:0;;;;:57;;:177;;19743:11;;19671:6;;19785:4;;19812;;19832:15;;19671:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19477:379;19422:434;:::o;19071:343::-;19184:6;;19152:53;;19169:4;;-1:-1:-1;;;;;19184:6:0;19193:11;19152:8;:53::i;:::-;19216:6;;19357:18;;19216:190;;-1:-1:-1;;;19216:190:0;;19279:4;19216:190;;;17162:34:1;17212:18;;;17205:34;;;19216:6:0;17255:18:1;;;17248:34;;;17298:18;;;17291:34;-1:-1:-1;;;;;19357:18:0;;;17341:19:1;;;17334:44;19390:15:0;17394:19:1;;;17387:35;19216:6:0;;;:22;;19246:9;;17096:19:1;;19216:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;251:70;196:131;:::o;332:247::-;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:548::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;868:3;1053:1;1048:2;1039:6;1028:9;1024:22;1020:31;1013:42;1123:2;1116;1112:7;1107:2;1099:6;1095:15;1091:29;1080:9;1076:45;1072:54;1064:62;;;;584:548;;;;:::o;1137:315::-;1205:6;1213;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;1442:2;1427:18;;;;1414:32;;-1:-1:-1;;;1137:315:1:o;1857:456::-;1934:6;1942;1950;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;2058:9;2045:23;2077:31;2102:5;2077:31;:::i;:::-;2127:5;-1:-1:-1;2184:2:1;2169:18;;2156:32;2197:33;2156:32;2197:33;:::i;:::-;1857:456;;2249:7;;-1:-1:-1;;;2303:2:1;2288:18;;;;2275:32;;1857:456::o;2318:180::-;2377:6;2430:2;2418:9;2409:7;2405:23;2401:32;2398:52;;;2446:1;2443;2436:12;2398:52;-1:-1:-1;2469:23:1;;2318:180;-1:-1:-1;2318:180:1:o;2692:118::-;2778:5;2771:13;2764:21;2757:5;2754:32;2744:60;;2800:1;2797;2790:12;2815:309;2880:6;2888;2941:2;2929:9;2920:7;2916:23;2912:32;2909:52;;;2957:1;2954;2947:12;2909:52;2993:9;2980:23;2970:33;;3053:2;3042:9;3038:18;3025:32;3066:28;3088:5;3066:28;:::i;:::-;3113:5;3103:15;;;2815:309;;;;;:::o;3129:241::-;3185:6;3238:2;3226:9;3217:7;3213:23;3209:32;3206:52;;;3254:1;3251;3244:12;3206:52;3293:9;3280:23;3312:28;3334:5;3312:28;:::i;3375:382::-;3440:6;3448;3501:2;3489:9;3480:7;3476:23;3472:32;3469:52;;;3517:1;3514;3507:12;3469:52;3556:9;3543:23;3575:28;3597:5;3575:28;:::i;:::-;3622:5;-1:-1:-1;3679:2:1;3664:18;;3651:32;3692:33;3651:32;3692:33;:::i;3762:248::-;3830:6;3838;3891:2;3879:9;3870:7;3866:23;3862:32;3859:52;;;3907:1;3904;3897:12;3859:52;-1:-1:-1;;3930:23:1;;;4000:2;3985:18;;;3972:32;;-1:-1:-1;3762:248:1:o;4015:382::-;4080:6;4088;4141:2;4129:9;4120:7;4116:23;4112:32;4109:52;;;4157:1;4154;4147:12;4109:52;4196:9;4183:23;4215:31;4240:5;4215:31;:::i;:::-;4265:5;-1:-1:-1;4322:2:1;4307:18;;4294:32;4335:30;4294:32;4335:30;:::i;4402:813::-;4497:6;4505;4513;4521;4529;4582:3;4570:9;4561:7;4557:23;4553:33;4550:53;;;4599:1;4596;4589:12;4550:53;4638:9;4625:23;4657:31;4682:5;4657:31;:::i;:::-;4707:5;-1:-1:-1;4764:2:1;4749:18;;4736:32;4777:33;4736:32;4777:33;:::i;:::-;4829:7;-1:-1:-1;4888:2:1;4873:18;;4860:32;4901:33;4860:32;4901:33;:::i;:::-;4953:7;-1:-1:-1;5012:2:1;4997:18;;4984:32;5025:33;4984:32;5025:33;:::i;:::-;5077:7;-1:-1:-1;5136:3:1;5121:19;;5108:33;5150;5108;5150;:::i;:::-;5202:7;5192:17;;;4402:813;;;;;;;;:::o;5220:315::-;5288:6;5296;5349:2;5337:9;5328:7;5324:23;5320:32;5317:52;;;5365:1;5362;5355:12;5317:52;5401:9;5388:23;5378:33;;5461:2;5450:9;5446:18;5433:32;5474:31;5499:5;5474:31;:::i;5540:388::-;5608:6;5616;5669:2;5657:9;5648:7;5644:23;5640:32;5637:52;;;5685:1;5682;5675:12;5637:52;5724:9;5711:23;5743:31;5768:5;5743:31;:::i;5933:661::-;6055:6;6063;6071;6079;6087;6095;6103;6111;6164:3;6152:9;6143:7;6139:23;6135:33;6132:53;;;6181:1;6178;6171:12;6132:53;-1:-1:-1;;6204:23:1;;;6274:2;6259:18;;6246:32;;-1:-1:-1;6325:2:1;6310:18;;6297:32;;6376:2;6361:18;;6348:32;;-1:-1:-1;6427:3:1;6412:19;;6399:33;;-1:-1:-1;6479:3:1;6464:19;;6451:33;;-1:-1:-1;6531:3:1;6516:19;;6503:33;;-1:-1:-1;6583:3:1;6568:19;6555:33;;-1:-1:-1;5933:661:1;-1:-1:-1;5933:661:1:o;6599:316::-;6676:6;6684;6692;6745:2;6733:9;6724:7;6720:23;6716:32;6713:52;;;6761:1;6758;6751:12;6713:52;-1:-1:-1;;6784:23:1;;;6854:2;6839:18;;6826:32;;-1:-1:-1;6905:2:1;6890:18;;;6877:32;;6599:316;-1:-1:-1;6599:316:1:o;7403:329::-;7605:2;7587:21;;;7644:1;7624:18;;;7617:29;-1:-1:-1;;;7677:2:1;7662:18;;7655:36;7723:2;7708:18;;7403:329::o;8089:127::-;8150:10;8145:3;8141:20;8138:1;8131:31;8181:4;8178:1;8171:15;8205:4;8202:1;8195:15;8221:127;8282:10;8277:3;8273:20;8270:1;8263:31;8313:4;8310:1;8303:15;8337:4;8334:1;8327:15;8353:128;8420:9;;;8441:11;;;8438:37;;;8455:18;;:::i;8486:127::-;8547:10;8542:3;8538:20;8535:1;8528:31;8578:4;8575:1;8568:15;8602:4;8599:1;8592:15;8618:135;8657:3;8678:17;;;8675:43;;8698:18;;:::i;:::-;-1:-1:-1;8745:1:1;8734:13;;8618:135::o;9525:217::-;9565:1;9591;9581:132;;9635:10;9630:3;9626:20;9623:1;9616:31;9670:4;9667:1;9660:15;9698:4;9695:1;9688:15;9581:132;-1:-1:-1;9727:9:1;;9525:217::o;9747:125::-;9812:9;;;9833:10;;;9830:36;;;9846:18;;:::i;10659:184::-;10729:6;10782:2;10770:9;10761:7;10757:23;10753:32;10750:52;;;10798:1;10795;10788:12;10750:52;-1:-1:-1;10821:16:1;;10659:184;-1:-1:-1;10659:184:1:o;11127:245::-;11194:6;11247:2;11235:9;11226:7;11222:23;11218:32;11215:52;;;11263:1;11260;11253:12;11215:52;11295:9;11289:16;11314:28;11336:5;11314:28;:::i;12401:168::-;12474:9;;;12505;;12522:15;;;12516:22;;12502:37;12492:71;;12543:18;;:::i;14997:251::-;15067:6;15120:2;15108:9;15099:7;15095:23;15091:32;15088:52;;;15136:1;15133;15126:12;15088:52;15168:9;15162:16;15187:31;15212:5;15187:31;:::i;15253:461::-;15306:3;15344:5;15338:12;15371:6;15366:3;15359:19;15397:4;15426:2;15421:3;15417:12;15410:19;;15463:2;15456:5;15452:14;15484:1;15494:195;15508:6;15505:1;15502:13;15494:195;;;15573:13;;-1:-1:-1;;;;;15569:39:1;15557:52;;15629:12;;;;15664:15;;;;15605:1;15523:9;15494:195;;;-1:-1:-1;15705:3:1;;15253:461;-1:-1:-1;;;;;15253:461:1:o;15719:510::-;15990:6;15979:9;15972:25;16033:3;16028:2;16017:9;16013:18;16006:31;15953:4;16054:57;16106:3;16095:9;16091:19;16083:6;16054:57;:::i;:::-;-1:-1:-1;;;;;16147:32:1;;;;16142:2;16127:18;;16120:60;-1:-1:-1;16211:2:1;16196:18;16189:34;16046:65;15719:510;-1:-1:-1;;15719:510:1:o;16234:582::-;16533:6;16522:9;16515:25;16576:6;16571:2;16560:9;16556:18;16549:34;16619:3;16614:2;16603:9;16599:18;16592:31;16496:4;16640:57;16692:3;16681:9;16677:19;16669:6;16640:57;:::i;:::-;-1:-1:-1;;;;;16733:32:1;;;;16728:2;16713:18;;16706:60;-1:-1:-1;16797:3:1;16782:19;16775:35;16632:65;16234:582;-1:-1:-1;;;16234:582:1:o;17433:306::-;17521:6;17529;17537;17590:2;17578:9;17569:7;17565:23;17561:32;17558:52;;;17606:1;17603;17596:12;17558:52;17635:9;17629:16;17619:26;;17685:2;17674:9;17670:18;17664:25;17654:35;;17729:2;17718:9;17714:18;17708:25;17698:35;;17433:306;;;;;:::o

Swarm Source

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