ETH Price: $3,406.30 (+6.17%)
 

Overview

Max Total Supply

10,000,000,000 ETRUMP

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
442,196,704.312863305 ETRUMP

Value
$0.00
0x660866cd4c5ea343671a50f2754c09b814e13337
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:
TRELON

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 250 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-23
*/

/*

Website https://elontrump.vip/ | Portal https://t.me/elontrumpportal | Twitter https://x.com/ElonTrumpEth

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.21;

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


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

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

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 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 TRELON is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = 'Elon Trump';
    string private constant _symbol = 'ETRUMP';
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 250 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 250 ) / 10000;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;   
    address internal liquidity_receiver = 0x61F8AE3180e1a94036BB515A8A92bf7A544fA610;
    address internal marketing_receiver = 0x61F8AE3180e1a94036BB515A8A92bf7A544fA610;
    address internal default_receiver = 0x61F8AE3180e1a94036BB515A8A92bf7A544fA610;
    address internal buyback_receiver = 0x000000000000000000000000000000000000dEaD;
    address internal staking_receiver = 0x61F8AE3180e1a94036BB515A8A92bf7A544fA610;

    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 100,
      marketing: 2400,
      liquidity: 100,
      buybackAndBurn: 0,
      staking: 0 });
    uint256 internal totalFee = 2600;
    uint256 internal sellFee = 2600;
    uint256 internal transferFee = 2600;
    uint256 internal denominator = 10000;
    bool internal swapping;

    bool internal swapEnabled = true;
    uint256 public buybackAddAmount = uint256(25000000000000000);
    uint256 internal swapThreshold = ( _tTotal * 1000 ) / 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;

    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 _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 enableTrading() external onlyOwner {
        tradingAllowed = true;
    }

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

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

    function setFeeRceiver(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 manualFundETHBuyback() external payable {
        amountETHBuyback = amountETHBuyback.add(msg.value);
    }

    function setMaxTransaction(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 takeOutEth(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":[],"name":"enableTrading","outputs":[],"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":[],"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":[],"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":"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":"setFeeRceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setMaxTransaction","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":"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":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"takeOutEth","outputs":[],"stateMutability":"nonpayable","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"},{"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":"updateFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200059b565b62000023906402540be400620005b2565b600181905562000035905f19620005e0565b62000042905f19620005f6565b60025561271060015460fa620000599190620005b2565b6200006591906200060c565b60035561271060015460fa6200007c9190620005b2565b6200008891906200060c565b600455600580546001600160a01b031990811661dead9081179092556006805482167361f8ae3180e1a94036bb515a8a92bf7a544fa6109081179091556007805483168217905560088054831682179055600980548316909317909255600a805490911690911790556040805160a0810182526064808252610960602083018190529282018190525f606083018190526080909201829052600b819055600c92909255600d91909155600e819055600f55610a28601081905560118190556012556127106013556014805461ff0019166101001790556658d15e17628000601555600154620186a0906200017f906103e8620005b2565b6200018b91906200060c565b601655620186a0600154600a620001a39190620005b2565b620001af91906200060c565b601755620186a0600154600a620001c79190620005b2565b620001d391906200060c565b6018556019805461ffff19166101001790556001601b819055601d55348015620001fb575f80fd5b505f80546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000260573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000286919062000622565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f8919062000622565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000343573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000369919062000622565b602780546001600160a01b038581166001600160a01b0319928316179092556028805484841692169190911790556002545f805483168152602160209081526040808320939093553080835260248252838320805460ff1990811660019081179092553385526025845285852080548216831790559184528484208054831682179055600654861684528484208054831682179055600754861684528484208054831682179055600854861684528484208054831682179055600954861684528484208054831682179055600a54861684528484208054909216811790915582549054935193845294955093909216927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350506200064a565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004e057815f1904821115620004c457620004c46200048c565b80851615620004d257918102915b93841c9390800290620004a5565b509250929050565b5f82620004f85750600162000595565b816200050657505f62000595565b81600181146200051f57600281146200052a576200054a565b600191505062000595565b60ff8411156200053e576200053e6200048c565b50506001821b62000595565b5060208310610133831016604e8410600b84101617156200056f575081810a62000595565b6200057b8383620004a0565b805f19048211156200059157620005916200048c565b0290505b92915050565b5f620005ab60ff841683620004e8565b9392505050565b80820281158282048414176200059557620005956200048c565b634e487b7160e01b5f52601260045260245ffd5b5f82620005f157620005f1620005cc565b500690565b818103818111156200059557620005956200048c565b5f826200061d576200061d620005cc565b500490565b5f6020828403121562000633575f80fd5b81516001600160a01b0381168114620005ab575f80fd5b61321c80620006585f395ff3fe608060405260043610610278575f3560e01c80637520ecc91161014a578063a457c2d7116100be578063c705a33e11610078578063c705a33e1461076d578063dd62ed3e1461078c578063e94dd17c146107d0578063f2fde38b146107ef578063f887ea401461080e578063fc7385491461082d575f80fd5b8063a457c2d7146106be578063a8aa1b31146106dd578063a9059cbb146106fc578063aa91f0591461071b578063acdf4f181461073a578063ba1a13ff14610758575f80fd5b80637d1db4a51161010f5780637d1db4a5146105f25780637d459db3146106075780638a8c523c1461063e5780638ebfc7961461065257806395d89b4114610671578063a2e4b5b01461069f575f80fd5b80637520ecc91461056b57806378109e5414610580578063783b5a0a1461059557806378c7dcd6146105b45780637aca891c146105d3575f80fd5b80632b112e49116101ec5780633f4218e0116101a65780633f4218e0146104ac5780634549b039146104da5780635927c434146104f9578063622d6d151461050e5780636bc05f291461052d57806370a082311461054c575f80fd5b80632b112e49146103f35780632d838119146104075780632f54bf6e146104265780633052ea0814610453578063313ce56714610472578063395093511461048d575f80fd5b806318160ddd1161023d57806318160ddd1461036f5780631deff6551461038357806320d730ee1461039857806323b872dd146103ad57806325a06a02146103cc57806327334a08146103d4575f80fd5b8063018763ed1461028357806305f82a45146102a657806306fdde03146102c7578063095ea7b31461030257806313ecfbfa14610331575f80fd5b3661027f57005b5f80fd5b34801561028e575f80fd5b506029545b6040519081526020015b60405180910390f35b3480156102b1575f80fd5b506102c56102c0366004612cc8565b610841565b005b3480156102d2575f80fd5b5060408051808201909152600a8152690456c6f6e205472756d760b41b60208201525b60405161029d9190612ce3565b34801561030d575f80fd5b5061032161031c366004612d2e565b6109f8565b604051901515815260200161029d565b34801561033c575f80fd5b5060195461035790630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161029d565b34801561037a575f80fd5b50600154610293565b34801561038e575f80fd5b50610293601e5481565b3480156103a3575f80fd5b5061029360205481565b3480156103b8575f80fd5b506103216103c7366004612d58565b610a0e565b6102c5610a75565b3480156103df575f80fd5b506102c56103ee366004612cc8565b610a87565b3480156103fe575f80fd5b50610293610bd4565b348015610412575f80fd5b50610293610421366004612d96565b610c0e565b348015610431575f80fd5b50610321610440366004612cc8565b5f546001600160a01b0391821691161490565b34801561045e575f80fd5b506102c561046d366004612d96565b610c90565b34801561047d575f80fd5b506040516009815260200161029d565b348015610498575f80fd5b506103216104a7366004612d2e565b610d09565b3480156104b7575f80fd5b506103216104c6366004612cc8565b60256020525f908152604090205460ff1681565b3480156104e5575f80fd5b506102936104f4366004612dba565b610d3f565b348015610504575f80fd5b5061029360155481565b348015610519575f80fd5b506102c5610528366004612de8565b610dca565b348015610538575f80fd5b506102c5610547366004612e55565b610ea5565b348015610557575f80fd5b50610293610566366004612cc8565b610ee8565b348015610576575f80fd5b50610293601c5481565b34801561058b575f80fd5b5061029360045481565b3480156105a0575f80fd5b506102c56105af366004612e70565b610f44565b3480156105bf575f80fd5b506102c56105ce366004612d96565b610f94565b3480156105de575f80fd5b506102c56105ed366004612e9c565b610fc2565b3480156105fd575f80fd5b5061029360035481565b348015610612575f80fd5b50610321610621366004612cc8565b6001600160a01b03165f9081526024602052604090205460ff1690565b348015610649575f80fd5b506102c5611011565b34801561065d575f80fd5b506102c561066c366004612eec565b611049565b34801561067c575f80fd5b506040805180820190915260068152650455452554d560d41b60208201526102f5565b3480156106aa575f80fd5b506102c56106b9366004612f18565b61109c565b3480156106c9575f80fd5b506103216106d8366004612d2e565b6110ea565b3480156106e8575f80fd5b50602854610357906001600160a01b031681565b348015610707575f80fd5b50610321610716366004612d2e565b611137565b348015610726575f80fd5b506102c5610735366004612f3b565b611143565b348015610745575f80fd5b5060195461032190610100900460ff1681565b348015610763575f80fd5b50610293601f5481565b348015610778575f80fd5b506102c5610787366004612d58565b61124f565b348015610797575f80fd5b506102936107a6366004612f5b565b6001600160a01b039182165f90815260236020908152604080832093909416825291909152205490565b3480156107db575f80fd5b506102c56107ea366004612f77565b611374565b3480156107fa575f80fd5b506102c5610809366004612cc8565b6113d9565b348015610819575f80fd5b50602754610357906001600160a01b031681565b348015610838575f80fd5b506102c5611455565b5f546001600160a01b031633146108735760405162461bcd60e51b815260040161086a90612fa0565b60405180910390fd5b6001600160a01b0381165f9081526024602052604090205460ff166108da5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161086a565b5f5b6026548110156109f457816001600160a01b03166026828154811061090357610903612fc0565b5f918252602090912001546001600160a01b0316036109e2576026805461092c90600190612fe8565b8154811061093c5761093c612fc0565b5f91825260209091200154602680546001600160a01b03909216918390811061096757610967612fc0565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff1916905560268054806109be576109be612ffb565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b806109ec8161300f565b9150506108dc565b5050565b5f610a04338484611488565b5060015b92915050565b5f610a1a8484846115ab565b610a6b8433610a668560405180606001604052806028815260200161319a602891396001600160a01b038a165f9081526023602090815260408083203384529091529020549190611686565b611488565b5060019392505050565b601e54610a8290346116b1565b601e55565b5f546001600160a01b03163314610ab05760405162461bcd60e51b815260040161086a90612fa0565b6001600160a01b0381165f9081526024602052604090205460ff1615610b185760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161086a565b6001600160a01b0381165f9081526021602052604090205415610b6f576001600160a01b0381165f90815260216020526040902054610b5690610c0e565b6001600160a01b0382165f908152602260205260409020555b6001600160a01b03165f818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b5f610c09610be15f610ee8565b600554610c0390610bfa906001600160a01b0316610ee8565b600154906116bc565b906116bc565b905090565b5f600254821115610c745760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161086a565b5f610c7d6116c7565b9050610c898184613027565b9392505050565b5f546001600160a01b03163314610cb95760405162461bcd60e51b815260040161086a90612fa0565b60085447906001600160a01b03166108fc610cdf6064610cd985876116e8565b906116f3565b6040518115909202915f818181858888f19350505050158015610d04573d5f803e3d5ffd5b505050565b335f8181526023602090815260408083206001600160a01b03871684529091528120549091610a04918590610a66908690613046565b5f600154831115610d925760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161086a565b81610daf575f610da58460015f806116fe565b519150610a089050565b5f610dbd8460015f806116fe565b602001519150610a089050565b5f546001600160a01b03163314610df35760405162461bcd60e51b815260040161086a90612fa0565b600780546001600160a01b039687166001600160a01b03199182168117909255600680549688169682168717905560098054958816958216861790556008805494881694821685179055600a805493909716921682179095555f94855260256020526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b5f546001600160a01b03163314610ece5760405162461bcd60e51b815260040161086a90612fa0565b601980549115156101000261ff0019909216919091179055565b6001600160a01b0381165f9081526024602052604081205460ff1615610f2357506001600160a01b03165f9081526022602052604090205490565b6001600160a01b0382165f90815260216020526040902054610a0890610c0e565b5f546001600160a01b03163314610f6d5760405162461bcd60e51b815260040161086a90612fa0565b6001600160a01b03165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610fbd5760405162461bcd60e51b815260040161086a90612fa0565b601855565b5f546001600160a01b03163314610feb5760405162461bcd60e51b815260040161086a90612fa0565b601097909755601195909555601293909355600b91909155600c55600d55600e55600f55565b5f546001600160a01b0316331461103a5760405162461bcd60e51b815260040161086a90612fa0565b6019805460ff19166001179055565b5f546001600160a01b031633146110725760405162461bcd60e51b815260040161086a90612fa0565b6001600160a01b03919091165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146110c55760405162461bcd60e51b815260040161086a90612fa0565b600980546001600160a01b0319166001600160a01b0392909216919091179055601555565b5f610a043384610a66856040518060600160405280602581526020016131c260259139335f9081526023602090815260408083206001600160a01b038d1684529091529020549190611686565b5f610a043384846115ab565b5f546001600160a01b0316331461116c5760405162461bcd60e51b815260040161086a90612fa0565b5f611188601354610cd9856001546116e890919063ffffffff16565b90505f6111a6601354610cd9856001546116e890919063ffffffff16565b90505f6111c5620186a0610cd9600180546116e890919063ffffffff16565b90508083101580156111d75750808210155b6112415760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161086a565b506003919091556004555050565b5f546001600160a01b031633146112785760405162461bcd60e51b815260040161086a90612fa0565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e09190613059565b90506001600160a01b03841663a9059cbb846113016064610cd986886116e8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611349573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136d9190613070565b5050505050565b5f546001600160a01b0316331461139d5760405162461bcd60e51b815260040161086a90612fa0565b601b8390556001546113b890620186a090610cd990856116e8565b6016556001546113d190620186a090610cd990846116e8565b601755505050565b5f546001600160a01b031633146114025760405162461bcd60e51b815260040161086a90612fa0565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b5f546001600160a01b0316331461147e5760405162461bcd60e51b815260040161086a90612fa0565b611486611784565b565b6001600160a01b0383166114ea5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161086a565b6001600160a01b03821661154b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161086a565b6001600160a01b038381165f8181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6115b683838361180e565b6115c08383611946565b6115cb8383836119dd565b6115d6828483611aea565b6115e08383611b74565b6115eb838383611be7565b6115f6838383611d5d565b6116008383611d81565b6001600160a01b0383165f90815260256020526040902054610d049084908490849060ff168061164757506001600160a01b0386165f9081526025602052604090205460ff165b8061165a575060195462010000900460ff165b80611667575060145460ff165b6028549015906001600160a01b039081168882168114918a1614611e1c565b5f81848411156116a95760405162461bcd60e51b815260040161086a9190612ce3565b505050900390565b5f610c898284613046565b5f610c898284612fe8565b5f805f6116d26120a3565b90925090506116e18183613027565b9250505090565b5f610c89828461308b565b5f610c898284613027565b6117446040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6117508585858561221d565b90506117658186866117606116c7565b6124d5565b608086015260608501526040840152602083015281525b949350505050565b601554601e54611793916116bc565b601e556019805462ff00001916620100001790555f6117b130610ee8565b90506117ca601554601f546116b190919063ffffffff16565b601f556015546117d990612560565b5f6117e782610c0330610ee8565b6020549091506117f790826116b1565b60205550506019805462ff0000191690555f601c55565b6001600160a01b0383166118725760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161086a565b6001600160a01b0382166118d45760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161086a565b6118dd83610ee8565b811115610d045760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161086a565b6001600160a01b0382165f9081526025602052604090205460ff1615801561198657506001600160a01b0381165f9081526025602052604090205460ff16155b156109f45760195460ff166109f45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161086a565b6001600160a01b0382165f9081526025602052604090205460ff16158015611a1d57506001600160a01b0383165f9081526025602052604090205460ff16155b8015611a3257506001600160a01b0382163014155b8015611a4c57506005546001600160a01b03838116911614155b8015611a6657506028546001600160a01b03838116911614155b8015611a8057506006546001600160a01b03838116911614155b15610d045760045481611a9284610ee8565b611a9c9190613046565b1115610d045760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161086a565b60035481111580611b1257506001600160a01b0382165f9081526025602052604090205460ff165b80611b3457506001600160a01b0383165f9081526025602052604090205460ff165b610d045760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161086a565b6028546001600160a01b038281169116148015611ba957506001600160a01b0382165f9081526025602052604090205460ff16155b8015611bb8575060145460ff16155b8015611bcd575060195462010000900460ff16155b156109f457601a54611be09060016116b1565b601a555050565b60195460ff168015611c1157506001600160a01b0383165f9081526025602052604090205460ff16155b8015611c2a57506028546001600160a01b038381169116145b8015611c3857506018548110155b8015611c47575060145460ff16155b8015611c5c575060195462010000900460ff16155b15611c79576001601c5f828254611c739190613046565b90915550505b601554601e5410158015611c8f57506015544710155b8015611c9f5750601d54601c5410155b8015611cb25750601954610100900460ff165b8015611cd657506001600160a01b0383165f9081526025602052604090205460ff16155b8015611cef57506028546001600160a01b038381169116145b8015611cfd575060195460ff165b8015611d0c575060145460ff16155b8015611d21575060195462010000900460ff16155b8015611d4257506019546001600160a01b0384811663010000009092041614155b8015611d5057506018548110155b15610d0457610d04611784565b611d688383836126a5565b15610d0457611d78601654612767565b5f601a55505050565b601980546301000000600160b81b03191690556028546001600160a01b038381169116148015611dc957506001600160a01b0381165f9081526025602052604090205460ff16155b8015611dde575060195462010000900460ff16155b8015611ded575060145460ff16155b156109f457601980546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b5f611e29858585856116fe565b6001600160a01b0388165f9081526024602052604090205490915060ff1615611e88576001600160a01b0387165f90815260226020526040902054611e6f908690612fe8565b6001600160a01b0388165f908152602260205260409020555b6001600160a01b0386165f9081526024602052604090205460ff1615611ee85760a08101516001600160a01b0387165f90815260226020526040902054611ecf9190613046565b6001600160a01b0387165f908152602260205260409020555b80516001600160a01b0388165f90815260216020526040902054611f0c9190612fe8565b6001600160a01b038089165f9081526021602090815260408083209490945584015191891681529190912054611f429190613046565b6001600160a01b0387165f90815260216020526040908190209190915581015160c0820151611f71919061293a565b611f8381606001518260e0015161296d565b611f9681608001518261010001516129df565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a00151604051611fdf91815260200190565b60405180910390a360e08101511561204357306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e0015160405161203a91815260200190565b60405180910390a35b6101008101511561209a57600a546101008201516040519081526001600160a01b03918216918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6002546001545f918291825b6026548110156121ec578260215f602684815481106120d0576120d0612fc0565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061213857508160225f6026848154811061211257612112612fc0565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214e57600254600154945094505050509091565b60215f6026838154811061216457612164612fc0565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546121929084612fe8565b925060225f602683815481106121aa576121aa612fc0565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546121d89083612fe8565b9150806121e48161300f565b9150506120af565b506001546002546121fd9190613027565b821015612214576002546001549350935050509091565b90939092509050565b6122636040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b83158061227557506122758383612a72565b156122865760a0810185905261177c565b82158015612292575081155b15612350575f6122b3601354610cd9601254896116e890919063ffffffff16565b9050601254600b5f0154116122e257601354600b546122d2908861308b565b6122dc9190613027565b60c08301525b600b546012546122f1916116bc565b600f541161231a57601354600f54612309908861308b565b6123139190613027565b6101008301525b61233a826101000151610c038460c00151846116bc90919063ffffffff16565b60e08301526123498187612fe8565b60a0830152505b821561240f575f612372601354610cd9601154896116e890919063ffffffff16565b9050601154600b5f0154116123a157601354600b54612391908861308b565b61239b9190613027565b60c08301525b600b546011546123b0916116bc565b600f54116123d957601354600f546123c8908861308b565b6123d29190613027565b6101008301525b6123f9826101000151610c038460c00151846116bc90919063ffffffff16565b60e08301526124088187612fe8565b60a0830152505b811561177c575f612431601354610cd9601054896116e890919063ffffffff16565b9050601054600b5f01541161246057601354600b54612450908861308b565b61245a9190613027565b60c08301525b600b5460105461246f916116bc565b600f541161249857601354600f54612487908861308b565b6124919190613027565b6101008301525b6124b8826101000151610c038460c00151846116bc90919063ffffffff16565b60e08301526124c78187612fe8565b60a083015250949350505050565b5f808080806124e4868961308b565b9450866124fb57508392505f915081905080612555565b858960c0015161250b919061308b565b9250858960e0015161251d919061308b565b915085896101000151612530919061308b565b9050808261253e8588612fe8565b6125489190612fe8565b6125529190612fe8565b93505b945094509450945094565b6040805160028082526060820183525f926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156125c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125eb91906130a2565b815f815181106125fd576125fd612fc0565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061263157612631612fc0565b6001600160a01b03928316602091820292909201015260275460095460405163b6f9de9560e01b81529183169263b6f9de9592869261267c925f9288929091169042906004016130ff565b5f604051808303818588803b158015612693575f80fd5b505af115801561209a573d5f803e3d5ffd5b5f8060175483101590505f6016546126bc30610ee8565b601454911115915060ff161580156126db5750601454610100900460ff165b80156126e45750815b801561270857506001600160a01b0386165f9081526025602052604090205460ff16155b8015612716575060195460ff165b801561272f57506028546001600160a01b038681169116145b801561273f5750601b54601a5410155b80156127485750805b801561275d575060195462010000900460ff16155b9695505050505050565b6014805460ff191660019081179091556010545f916127939160029161278d91906116b1565b906116e8565b90506010545f036127cb57600e54600c54600d546127c89260029261278d926001926127c292909183916116b1565b906116b1565b90505b600d545f9082906127dc908561308b565b6127e69190613027565b90505f6127f38285612fe8565b9050476127ff82612ab7565b5f61280a8247612fe8565b600d549091505f9061281c9087612fe8565b6128269083613027565b600d549091505f90612838908361308b565b9050801561284a5761284a8682612c07565b600c545f9061285e9061278d8560026116e8565b9050801561289f576007546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561289d573d5f803e3d5ffd5b505b600e545f906128b39061278d8660026116e8565b905080156128cc57601e546128c890826116b1565b601e555b5f6128e2601e54476116bc90919063ffffffff16565b90508015612923576008546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612921573d5f803e3d5ffd5b505b50506014805460ff19169055505050505050505050565b8160025f82825461294b9190612fe8565b9091555050602980548291905f90612964908490613046565b90915550505050565b8060296001015f8282546129819190613046565b9091555050305f9081526024602052604090205460ff16156129c157305f90815260226020526040812080548392906129bb908490613046565b90915550505b305f9081526021602052604081208054849290612964908490613046565b8060296002015f8282546129f39190613046565b9091555050600a546001600160a01b03165f9081526024602052604090205460ff1615612a4957600a546001600160a01b03165f9081526022602052604081208054839290612a43908490613046565b90915550505b600a546001600160a01b03165f9081526021602052604081208054849290612964908490613046565b5f828015612a805750601154155b80612a935750818015612a935750601054155b80610c89575082158015612aa5575081155b8015610c895750506012541592915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612aea57612aea612fc0565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b6591906130a2565b81600181518110612b7857612b78612fc0565b6001600160a01b039283166020918202929092010152602754612b9e9130911684611488565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612bd69085905f90869030904290600401613133565b5f604051808303815f87803b158015612bed575f80fd5b505af1158015612bff573d5f803e3d5ffd5b505050505050565b602754612c1f9030906001600160a01b031684611488565b60275460065460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612c8c573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061136d919061316e565b6001600160a01b0381168114612cc5575f80fd5b50565b5f60208284031215612cd8575f80fd5b8135610c8981612cb1565b5f6020808352835180828501525f5b81811015612d0e57858101830151858201604001528201612cf2565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215612d3f575f80fd5b8235612d4a81612cb1565b946020939093013593505050565b5f805f60608486031215612d6a575f80fd5b8335612d7581612cb1565b92506020840135612d8581612cb1565b929592945050506040919091013590565b5f60208284031215612da6575f80fd5b5035919050565b8015158114612cc5575f80fd5b5f8060408385031215612dcb575f80fd5b823591506020830135612ddd81612dad565b809150509250929050565b5f805f805f60a08688031215612dfc575f80fd5b8535612e0781612cb1565b94506020860135612e1781612cb1565b93506040860135612e2781612cb1565b92506060860135612e3781612cb1565b91506080860135612e4781612cb1565b809150509295509295909350565b5f60208284031215612e65575f80fd5b8135610c8981612dad565b5f8060408385031215612e81575f80fd5b8235612e8c81612dad565b91506020830135612ddd81612cb1565b5f805f805f805f80610100898b031215612eb4575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b5f8060408385031215612efd575f80fd5b8235612f0881612cb1565b91506020830135612ddd81612dad565b5f8060408385031215612f29575f80fd5b823591506020830135612ddd81612cb1565b5f8060408385031215612f4c575f80fd5b50508035926020909101359150565b5f8060408385031215612f6c575f80fd5b8235612e8c81612cb1565b5f805f60608486031215612f89575f80fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a0857610a08612fd4565b634e487b7160e01b5f52603160045260245ffd5b5f6001820161302057613020612fd4565b5060010190565b5f8261304157634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a0857610a08612fd4565b5f60208284031215613069575f80fd5b5051919050565b5f60208284031215613080575f80fd5b8151610c8981612dad565b8082028115828204841417610a0857610a08612fd4565b5f602082840312156130b2575f80fd5b8151610c8981612cb1565b5f8151808452602080850194508084015f5b838110156130f45781516001600160a01b0316875295820195908201906001016130cf565b509495945050505050565b848152608060208201525f61311760808301866130bd565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f61315160a08301866130bd565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613180575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205585283cd26d4fc65fbff3398999bfb772893decec1fbbffcf48a81f0f21e7e964736f6c63430008150033

Deployed Bytecode

0x608060405260043610610278575f3560e01c80637520ecc91161014a578063a457c2d7116100be578063c705a33e11610078578063c705a33e1461076d578063dd62ed3e1461078c578063e94dd17c146107d0578063f2fde38b146107ef578063f887ea401461080e578063fc7385491461082d575f80fd5b8063a457c2d7146106be578063a8aa1b31146106dd578063a9059cbb146106fc578063aa91f0591461071b578063acdf4f181461073a578063ba1a13ff14610758575f80fd5b80637d1db4a51161010f5780637d1db4a5146105f25780637d459db3146106075780638a8c523c1461063e5780638ebfc7961461065257806395d89b4114610671578063a2e4b5b01461069f575f80fd5b80637520ecc91461056b57806378109e5414610580578063783b5a0a1461059557806378c7dcd6146105b45780637aca891c146105d3575f80fd5b80632b112e49116101ec5780633f4218e0116101a65780633f4218e0146104ac5780634549b039146104da5780635927c434146104f9578063622d6d151461050e5780636bc05f291461052d57806370a082311461054c575f80fd5b80632b112e49146103f35780632d838119146104075780632f54bf6e146104265780633052ea0814610453578063313ce56714610472578063395093511461048d575f80fd5b806318160ddd1161023d57806318160ddd1461036f5780631deff6551461038357806320d730ee1461039857806323b872dd146103ad57806325a06a02146103cc57806327334a08146103d4575f80fd5b8063018763ed1461028357806305f82a45146102a657806306fdde03146102c7578063095ea7b31461030257806313ecfbfa14610331575f80fd5b3661027f57005b5f80fd5b34801561028e575f80fd5b506029545b6040519081526020015b60405180910390f35b3480156102b1575f80fd5b506102c56102c0366004612cc8565b610841565b005b3480156102d2575f80fd5b5060408051808201909152600a8152690456c6f6e205472756d760b41b60208201525b60405161029d9190612ce3565b34801561030d575f80fd5b5061032161031c366004612d2e565b6109f8565b604051901515815260200161029d565b34801561033c575f80fd5b5060195461035790630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161029d565b34801561037a575f80fd5b50600154610293565b34801561038e575f80fd5b50610293601e5481565b3480156103a3575f80fd5b5061029360205481565b3480156103b8575f80fd5b506103216103c7366004612d58565b610a0e565b6102c5610a75565b3480156103df575f80fd5b506102c56103ee366004612cc8565b610a87565b3480156103fe575f80fd5b50610293610bd4565b348015610412575f80fd5b50610293610421366004612d96565b610c0e565b348015610431575f80fd5b50610321610440366004612cc8565b5f546001600160a01b0391821691161490565b34801561045e575f80fd5b506102c561046d366004612d96565b610c90565b34801561047d575f80fd5b506040516009815260200161029d565b348015610498575f80fd5b506103216104a7366004612d2e565b610d09565b3480156104b7575f80fd5b506103216104c6366004612cc8565b60256020525f908152604090205460ff1681565b3480156104e5575f80fd5b506102936104f4366004612dba565b610d3f565b348015610504575f80fd5b5061029360155481565b348015610519575f80fd5b506102c5610528366004612de8565b610dca565b348015610538575f80fd5b506102c5610547366004612e55565b610ea5565b348015610557575f80fd5b50610293610566366004612cc8565b610ee8565b348015610576575f80fd5b50610293601c5481565b34801561058b575f80fd5b5061029360045481565b3480156105a0575f80fd5b506102c56105af366004612e70565b610f44565b3480156105bf575f80fd5b506102c56105ce366004612d96565b610f94565b3480156105de575f80fd5b506102c56105ed366004612e9c565b610fc2565b3480156105fd575f80fd5b5061029360035481565b348015610612575f80fd5b50610321610621366004612cc8565b6001600160a01b03165f9081526024602052604090205460ff1690565b348015610649575f80fd5b506102c5611011565b34801561065d575f80fd5b506102c561066c366004612eec565b611049565b34801561067c575f80fd5b506040805180820190915260068152650455452554d560d41b60208201526102f5565b3480156106aa575f80fd5b506102c56106b9366004612f18565b61109c565b3480156106c9575f80fd5b506103216106d8366004612d2e565b6110ea565b3480156106e8575f80fd5b50602854610357906001600160a01b031681565b348015610707575f80fd5b50610321610716366004612d2e565b611137565b348015610726575f80fd5b506102c5610735366004612f3b565b611143565b348015610745575f80fd5b5060195461032190610100900460ff1681565b348015610763575f80fd5b50610293601f5481565b348015610778575f80fd5b506102c5610787366004612d58565b61124f565b348015610797575f80fd5b506102936107a6366004612f5b565b6001600160a01b039182165f90815260236020908152604080832093909416825291909152205490565b3480156107db575f80fd5b506102c56107ea366004612f77565b611374565b3480156107fa575f80fd5b506102c5610809366004612cc8565b6113d9565b348015610819575f80fd5b50602754610357906001600160a01b031681565b348015610838575f80fd5b506102c5611455565b5f546001600160a01b031633146108735760405162461bcd60e51b815260040161086a90612fa0565b60405180910390fd5b6001600160a01b0381165f9081526024602052604090205460ff166108da5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161086a565b5f5b6026548110156109f457816001600160a01b03166026828154811061090357610903612fc0565b5f918252602090912001546001600160a01b0316036109e2576026805461092c90600190612fe8565b8154811061093c5761093c612fc0565b5f91825260209091200154602680546001600160a01b03909216918390811061096757610967612fc0565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff1916905560268054806109be576109be612ffb565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b806109ec8161300f565b9150506108dc565b5050565b5f610a04338484611488565b5060015b92915050565b5f610a1a8484846115ab565b610a6b8433610a668560405180606001604052806028815260200161319a602891396001600160a01b038a165f9081526023602090815260408083203384529091529020549190611686565b611488565b5060019392505050565b601e54610a8290346116b1565b601e55565b5f546001600160a01b03163314610ab05760405162461bcd60e51b815260040161086a90612fa0565b6001600160a01b0381165f9081526024602052604090205460ff1615610b185760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161086a565b6001600160a01b0381165f9081526021602052604090205415610b6f576001600160a01b0381165f90815260216020526040902054610b5690610c0e565b6001600160a01b0382165f908152602260205260409020555b6001600160a01b03165f818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b5f610c09610be15f610ee8565b600554610c0390610bfa906001600160a01b0316610ee8565b600154906116bc565b906116bc565b905090565b5f600254821115610c745760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161086a565b5f610c7d6116c7565b9050610c898184613027565b9392505050565b5f546001600160a01b03163314610cb95760405162461bcd60e51b815260040161086a90612fa0565b60085447906001600160a01b03166108fc610cdf6064610cd985876116e8565b906116f3565b6040518115909202915f818181858888f19350505050158015610d04573d5f803e3d5ffd5b505050565b335f8181526023602090815260408083206001600160a01b03871684529091528120549091610a04918590610a66908690613046565b5f600154831115610d925760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161086a565b81610daf575f610da58460015f806116fe565b519150610a089050565b5f610dbd8460015f806116fe565b602001519150610a089050565b5f546001600160a01b03163314610df35760405162461bcd60e51b815260040161086a90612fa0565b600780546001600160a01b039687166001600160a01b03199182168117909255600680549688169682168717905560098054958816958216861790556008805494881694821685179055600a805493909716921682179095555f94855260256020526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b5f546001600160a01b03163314610ece5760405162461bcd60e51b815260040161086a90612fa0565b601980549115156101000261ff0019909216919091179055565b6001600160a01b0381165f9081526024602052604081205460ff1615610f2357506001600160a01b03165f9081526022602052604090205490565b6001600160a01b0382165f90815260216020526040902054610a0890610c0e565b5f546001600160a01b03163314610f6d5760405162461bcd60e51b815260040161086a90612fa0565b6001600160a01b03165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610fbd5760405162461bcd60e51b815260040161086a90612fa0565b601855565b5f546001600160a01b03163314610feb5760405162461bcd60e51b815260040161086a90612fa0565b601097909755601195909555601293909355600b91909155600c55600d55600e55600f55565b5f546001600160a01b0316331461103a5760405162461bcd60e51b815260040161086a90612fa0565b6019805460ff19166001179055565b5f546001600160a01b031633146110725760405162461bcd60e51b815260040161086a90612fa0565b6001600160a01b03919091165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146110c55760405162461bcd60e51b815260040161086a90612fa0565b600980546001600160a01b0319166001600160a01b0392909216919091179055601555565b5f610a043384610a66856040518060600160405280602581526020016131c260259139335f9081526023602090815260408083206001600160a01b038d1684529091529020549190611686565b5f610a043384846115ab565b5f546001600160a01b0316331461116c5760405162461bcd60e51b815260040161086a90612fa0565b5f611188601354610cd9856001546116e890919063ffffffff16565b90505f6111a6601354610cd9856001546116e890919063ffffffff16565b90505f6111c5620186a0610cd9600180546116e890919063ffffffff16565b90508083101580156111d75750808210155b6112415760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161086a565b506003919091556004555050565b5f546001600160a01b031633146112785760405162461bcd60e51b815260040161086a90612fa0565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e09190613059565b90506001600160a01b03841663a9059cbb846113016064610cd986886116e8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611349573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136d9190613070565b5050505050565b5f546001600160a01b0316331461139d5760405162461bcd60e51b815260040161086a90612fa0565b601b8390556001546113b890620186a090610cd990856116e8565b6016556001546113d190620186a090610cd990846116e8565b601755505050565b5f546001600160a01b031633146114025760405162461bcd60e51b815260040161086a90612fa0565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b5f546001600160a01b0316331461147e5760405162461bcd60e51b815260040161086a90612fa0565b611486611784565b565b6001600160a01b0383166114ea5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161086a565b6001600160a01b03821661154b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161086a565b6001600160a01b038381165f8181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6115b683838361180e565b6115c08383611946565b6115cb8383836119dd565b6115d6828483611aea565b6115e08383611b74565b6115eb838383611be7565b6115f6838383611d5d565b6116008383611d81565b6001600160a01b0383165f90815260256020526040902054610d049084908490849060ff168061164757506001600160a01b0386165f9081526025602052604090205460ff165b8061165a575060195462010000900460ff165b80611667575060145460ff165b6028549015906001600160a01b039081168882168114918a1614611e1c565b5f81848411156116a95760405162461bcd60e51b815260040161086a9190612ce3565b505050900390565b5f610c898284613046565b5f610c898284612fe8565b5f805f6116d26120a3565b90925090506116e18183613027565b9250505090565b5f610c89828461308b565b5f610c898284613027565b6117446040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6117508585858561221d565b90506117658186866117606116c7565b6124d5565b608086015260608501526040840152602083015281525b949350505050565b601554601e54611793916116bc565b601e556019805462ff00001916620100001790555f6117b130610ee8565b90506117ca601554601f546116b190919063ffffffff16565b601f556015546117d990612560565b5f6117e782610c0330610ee8565b6020549091506117f790826116b1565b60205550506019805462ff0000191690555f601c55565b6001600160a01b0383166118725760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161086a565b6001600160a01b0382166118d45760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161086a565b6118dd83610ee8565b811115610d045760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161086a565b6001600160a01b0382165f9081526025602052604090205460ff1615801561198657506001600160a01b0381165f9081526025602052604090205460ff16155b156109f45760195460ff166109f45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161086a565b6001600160a01b0382165f9081526025602052604090205460ff16158015611a1d57506001600160a01b0383165f9081526025602052604090205460ff16155b8015611a3257506001600160a01b0382163014155b8015611a4c57506005546001600160a01b03838116911614155b8015611a6657506028546001600160a01b03838116911614155b8015611a8057506006546001600160a01b03838116911614155b15610d045760045481611a9284610ee8565b611a9c9190613046565b1115610d045760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161086a565b60035481111580611b1257506001600160a01b0382165f9081526025602052604090205460ff165b80611b3457506001600160a01b0383165f9081526025602052604090205460ff165b610d045760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161086a565b6028546001600160a01b038281169116148015611ba957506001600160a01b0382165f9081526025602052604090205460ff16155b8015611bb8575060145460ff16155b8015611bcd575060195462010000900460ff16155b156109f457601a54611be09060016116b1565b601a555050565b60195460ff168015611c1157506001600160a01b0383165f9081526025602052604090205460ff16155b8015611c2a57506028546001600160a01b038381169116145b8015611c3857506018548110155b8015611c47575060145460ff16155b8015611c5c575060195462010000900460ff16155b15611c79576001601c5f828254611c739190613046565b90915550505b601554601e5410158015611c8f57506015544710155b8015611c9f5750601d54601c5410155b8015611cb25750601954610100900460ff165b8015611cd657506001600160a01b0383165f9081526025602052604090205460ff16155b8015611cef57506028546001600160a01b038381169116145b8015611cfd575060195460ff165b8015611d0c575060145460ff16155b8015611d21575060195462010000900460ff16155b8015611d4257506019546001600160a01b0384811663010000009092041614155b8015611d5057506018548110155b15610d0457610d04611784565b611d688383836126a5565b15610d0457611d78601654612767565b5f601a55505050565b601980546301000000600160b81b03191690556028546001600160a01b038381169116148015611dc957506001600160a01b0381165f9081526025602052604090205460ff16155b8015611dde575060195462010000900460ff16155b8015611ded575060145460ff16155b156109f457601980546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b5f611e29858585856116fe565b6001600160a01b0388165f9081526024602052604090205490915060ff1615611e88576001600160a01b0387165f90815260226020526040902054611e6f908690612fe8565b6001600160a01b0388165f908152602260205260409020555b6001600160a01b0386165f9081526024602052604090205460ff1615611ee85760a08101516001600160a01b0387165f90815260226020526040902054611ecf9190613046565b6001600160a01b0387165f908152602260205260409020555b80516001600160a01b0388165f90815260216020526040902054611f0c9190612fe8565b6001600160a01b038089165f9081526021602090815260408083209490945584015191891681529190912054611f429190613046565b6001600160a01b0387165f90815260216020526040908190209190915581015160c0820151611f71919061293a565b611f8381606001518260e0015161296d565b611f9681608001518261010001516129df565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a00151604051611fdf91815260200190565b60405180910390a360e08101511561204357306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e0015160405161203a91815260200190565b60405180910390a35b6101008101511561209a57600a546101008201516040519081526001600160a01b03918216918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6002546001545f918291825b6026548110156121ec578260215f602684815481106120d0576120d0612fc0565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061213857508160225f6026848154811061211257612112612fc0565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214e57600254600154945094505050509091565b60215f6026838154811061216457612164612fc0565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546121929084612fe8565b925060225f602683815481106121aa576121aa612fc0565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546121d89083612fe8565b9150806121e48161300f565b9150506120af565b506001546002546121fd9190613027565b821015612214576002546001549350935050509091565b90939092509050565b6122636040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b83158061227557506122758383612a72565b156122865760a0810185905261177c565b82158015612292575081155b15612350575f6122b3601354610cd9601254896116e890919063ffffffff16565b9050601254600b5f0154116122e257601354600b546122d2908861308b565b6122dc9190613027565b60c08301525b600b546012546122f1916116bc565b600f541161231a57601354600f54612309908861308b565b6123139190613027565b6101008301525b61233a826101000151610c038460c00151846116bc90919063ffffffff16565b60e08301526123498187612fe8565b60a0830152505b821561240f575f612372601354610cd9601154896116e890919063ffffffff16565b9050601154600b5f0154116123a157601354600b54612391908861308b565b61239b9190613027565b60c08301525b600b546011546123b0916116bc565b600f54116123d957601354600f546123c8908861308b565b6123d29190613027565b6101008301525b6123f9826101000151610c038460c00151846116bc90919063ffffffff16565b60e08301526124088187612fe8565b60a0830152505b811561177c575f612431601354610cd9601054896116e890919063ffffffff16565b9050601054600b5f01541161246057601354600b54612450908861308b565b61245a9190613027565b60c08301525b600b5460105461246f916116bc565b600f541161249857601354600f54612487908861308b565b6124919190613027565b6101008301525b6124b8826101000151610c038460c00151846116bc90919063ffffffff16565b60e08301526124c78187612fe8565b60a083015250949350505050565b5f808080806124e4868961308b565b9450866124fb57508392505f915081905080612555565b858960c0015161250b919061308b565b9250858960e0015161251d919061308b565b915085896101000151612530919061308b565b9050808261253e8588612fe8565b6125489190612fe8565b6125529190612fe8565b93505b945094509450945094565b6040805160028082526060820183525f926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156125c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125eb91906130a2565b815f815181106125fd576125fd612fc0565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061263157612631612fc0565b6001600160a01b03928316602091820292909201015260275460095460405163b6f9de9560e01b81529183169263b6f9de9592869261267c925f9288929091169042906004016130ff565b5f604051808303818588803b158015612693575f80fd5b505af115801561209a573d5f803e3d5ffd5b5f8060175483101590505f6016546126bc30610ee8565b601454911115915060ff161580156126db5750601454610100900460ff165b80156126e45750815b801561270857506001600160a01b0386165f9081526025602052604090205460ff16155b8015612716575060195460ff165b801561272f57506028546001600160a01b038681169116145b801561273f5750601b54601a5410155b80156127485750805b801561275d575060195462010000900460ff16155b9695505050505050565b6014805460ff191660019081179091556010545f916127939160029161278d91906116b1565b906116e8565b90506010545f036127cb57600e54600c54600d546127c89260029261278d926001926127c292909183916116b1565b906116b1565b90505b600d545f9082906127dc908561308b565b6127e69190613027565b90505f6127f38285612fe8565b9050476127ff82612ab7565b5f61280a8247612fe8565b600d549091505f9061281c9087612fe8565b6128269083613027565b600d549091505f90612838908361308b565b9050801561284a5761284a8682612c07565b600c545f9061285e9061278d8560026116e8565b9050801561289f576007546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561289d573d5f803e3d5ffd5b505b600e545f906128b39061278d8660026116e8565b905080156128cc57601e546128c890826116b1565b601e555b5f6128e2601e54476116bc90919063ffffffff16565b90508015612923576008546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612921573d5f803e3d5ffd5b505b50506014805460ff19169055505050505050505050565b8160025f82825461294b9190612fe8565b9091555050602980548291905f90612964908490613046565b90915550505050565b8060296001015f8282546129819190613046565b9091555050305f9081526024602052604090205460ff16156129c157305f90815260226020526040812080548392906129bb908490613046565b90915550505b305f9081526021602052604081208054849290612964908490613046565b8060296002015f8282546129f39190613046565b9091555050600a546001600160a01b03165f9081526024602052604090205460ff1615612a4957600a546001600160a01b03165f9081526022602052604081208054839290612a43908490613046565b90915550505b600a546001600160a01b03165f9081526021602052604081208054849290612964908490613046565b5f828015612a805750601154155b80612a935750818015612a935750601054155b80610c89575082158015612aa5575081155b8015610c895750506012541592915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612aea57612aea612fc0565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b6591906130a2565b81600181518110612b7857612b78612fc0565b6001600160a01b039283166020918202929092010152602754612b9e9130911684611488565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612bd69085905f90869030904290600401613133565b5f604051808303815f87803b158015612bed575f80fd5b505af1158015612bff573d5f803e3d5ffd5b505050505050565b602754612c1f9030906001600160a01b031684611488565b60275460065460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612c8c573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061136d919061316e565b6001600160a01b0381168114612cc5575f80fd5b50565b5f60208284031215612cd8575f80fd5b8135610c8981612cb1565b5f6020808352835180828501525f5b81811015612d0e57858101830151858201604001528201612cf2565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215612d3f575f80fd5b8235612d4a81612cb1565b946020939093013593505050565b5f805f60608486031215612d6a575f80fd5b8335612d7581612cb1565b92506020840135612d8581612cb1565b929592945050506040919091013590565b5f60208284031215612da6575f80fd5b5035919050565b8015158114612cc5575f80fd5b5f8060408385031215612dcb575f80fd5b823591506020830135612ddd81612dad565b809150509250929050565b5f805f805f60a08688031215612dfc575f80fd5b8535612e0781612cb1565b94506020860135612e1781612cb1565b93506040860135612e2781612cb1565b92506060860135612e3781612cb1565b91506080860135612e4781612cb1565b809150509295509295909350565b5f60208284031215612e65575f80fd5b8135610c8981612dad565b5f8060408385031215612e81575f80fd5b8235612e8c81612dad565b91506020830135612ddd81612cb1565b5f805f805f805f80610100898b031215612eb4575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b5f8060408385031215612efd575f80fd5b8235612f0881612cb1565b91506020830135612ddd81612dad565b5f8060408385031215612f29575f80fd5b823591506020830135612ddd81612cb1565b5f8060408385031215612f4c575f80fd5b50508035926020909101359150565b5f8060408385031215612f6c575f80fd5b8235612e8c81612cb1565b5f805f60608486031215612f89575f80fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a0857610a08612fd4565b634e487b7160e01b5f52603160045260245ffd5b5f6001820161302057613020612fd4565b5060010190565b5f8261304157634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a0857610a08612fd4565b5f60208284031215613069575f80fd5b5051919050565b5f60208284031215613080575f80fd5b8151610c8981612dad565b8082028115828204841417610a0857610a08612fd4565b5f602082840312156130b2575f80fd5b8151610c8981612cb1565b5f8151808452602080850194508084015f5b838110156130f45781516001600160a01b0316875295820195908201906001016130cf565b509495945050505050565b848152608060208201525f61311760808301866130bd565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f61315160a08301866130bd565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613180575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205585283cd26d4fc65fbff3398999bfb772893decec1fbbffcf48a81f0f21e7e964736f6c63430008150033

Deployed Bytecode Sourcemap

7457:22711:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12241:83;;;;;;;;;;-1:-1:-1;12307:11:0;:15;12241:83;;;160:25:1;;;148:2;133:18;12241:83:0;;;;;;;;24175:464;;;;;;;;;;-1:-1:-1;24175:464:0;;;;;:::i;:::-;;:::i;:::-;;11335:67;;;;;;;;;;-1:-1:-1;11395:5:0;;;;;;;;;;;;-1:-1:-1;;;11395:5:0;;;;11335:67;;;;;;;:::i;12101:134::-;;;;;;;;;;-1:-1:-1;12101:134:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;12101:134:0;1480:187:1;9287:24:0;;;;;;;;;;-1:-1:-1;9287:24:0;;;;;;;-1:-1:-1;;;;;9287:24:0;;;;;;-1:-1:-1;;;;;1836:55:1;;;1818:74;;1806:2;1791:18;9287:24:0;1672:226:1;11558:79:0;;;;;;;;;;-1:-1:-1;11628:7:0;;11558:79;;9470:31;;;;;;;;;;;;;;;;9545:32;;;;;;;;;;;;;;;;12512:309;;;;;;;;;;-1:-1:-1;12512:309:0;;;;;:::i;:::-;;:::i;22106:118::-;;;:::i;23832:335::-;;;;;;;;;;-1:-1:-1;23832:335:0;;;;;:::i;:::-;;:::i;22942:143::-;;;;;;;;;;;;;:::i;23576:248::-;;;;;;;;;;-1:-1:-1;23576:248:0;;;;;:::i;:::-;;:::i;6378:87::-;;;;;;;;;;-1:-1:-1;6378:87:0;;;;;:::i;:::-;6433:4;6458:5;-1:-1:-1;;;;;6447:16:0;;;6458:5;;6447:16;;6378:87;21284:182;;;;;;;;;;-1:-1:-1;21284:182:0;;;;;:::i;:::-;;:::i;11485:67::-;;;;;;;;;;-1:-1:-1;11485:67:0;;7699:1;2691:36:1;;2679:2;2664:18;11485:67:0;2549:184:1;12829:209:0;;;;;;;;;;-1:-1:-1;12829:209:0;;;;;:::i;:::-;;:::i;9816:44::-;;;;;;;;;;-1:-1:-1;9816:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23093:475;;;;;;;;;;-1:-1:-1;23093:475:0;;;;;:::i;:::-;;:::i;8910:60::-;;;;;;;;;;;;;;;;20807:469;;;;;;;;;;-1:-1:-1;20807:469:0;;;;;:::i;:::-;;:::i;28052:92::-;;;;;;;;;;-1:-1:-1;28052:92:0;;;;;:::i;:::-;;:::i;11643:173::-;;;;;;;;;;-1:-1:-1;11643:173:0;;;;;:::i;:::-;;:::i;9388:31::-;;;;;;;;;;;;;;;;7938:58;;;;;;;;;;;;;;;;20202:124;;;;;;;;;;-1:-1:-1;20202:124:0;;;;;:::i;:::-;;:::i;21988:110::-;;;;;;;;;;-1:-1:-1;21988:110:0;;;;;:::i;:::-;;:::i;20334:465::-;;;;;;;;;;-1:-1:-1;20334:465:0;;;;;:::i;:::-;;:::i;7876:55::-;;;;;;;;;;;;;;;;12330:108;;;;;;;;;;-1:-1:-1;12330:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12416:20:0;12402:4;12416:20;;;:11;:20;;;;;;;;;12330:108;20110:84;;;;;;;;;;;;;:::i;21474:117::-;;;;;;;;;;-1:-1:-1;21474:117:0;;;;;:::i;:::-;;:::i;11408:71::-;;;;;;;;;;-1:-1:-1;11470:7:0;;;;;;;;;;;;-1:-1:-1;;;11470:7:0;;;;11408:71;;28152:148;;;;;;;;;;-1:-1:-1;28152:148:0;;;;;:::i;:::-;;:::i;13046:265::-;;;;;;;;;;-1:-1:-1;13046:265:0;;;;;:::i;:::-;;:::i;9929:19::-;;;;;;;;;;-1:-1:-1;9929:19:0;;;;-1:-1:-1;;;;;9929:19:0;;;11822:140;;;;;;;;;;-1:-1:-1;11822:140:0;;;;;:::i;:::-;;:::i;22232:449::-;;;;;;;;;;-1:-1:-1;22232:449:0;;;;;:::i;:::-;;:::i;9226:26::-;;;;;;;;;;-1:-1:-1;9226:26:0;;;;;;;;;;;9508:30;;;;;;;;;;;;;;;;22689:245;;;;;;;;;;-1:-1:-1;22689:245:0;;;;;:::i;:::-;;:::i;11968:127::-;;;;;;;;;;-1:-1:-1;11968:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12066:18:0;;;12049:7;12066:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11968:127;21599:294;;;;;;;;;;-1:-1:-1;21599:294:0;;;;;:::i;:::-;;:::i;6471:111::-;;;;;;;;;;-1:-1:-1;6471:111:0;;;;;:::i;:::-;;:::i;9901:21::-;;;;;;;;;;-1:-1:-1;9901:21:0;;;;-1:-1:-1;;;;;9901:21:0;;;21901:79;;;;;;;;;;;;;:::i;24175:464::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;24259:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24251:56;;;::::0;-1:-1:-1;;;24251:56:0;;8008:2:1;24251:56:0::1;::::0;::::1;7990:21:1::0;8047:2;8027:18;;;8020:30;8086:25;8066:18;;;8059:53;8129:18;;24251:56:0::1;7806:347:1::0;24251:56:0::1;24323:9;24318:314;24342:9;:16:::0;24338:20;::::1;24318:314;;;24400:7;-1:-1:-1::0;;;;;24384:23:0::1;:9;24394:1;24384:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24384:12:0::1;:23:::0;24380:241:::1;;24443:9;24453:16:::0;;:20:::1;::::0;24472:1:::1;::::0;24453:20:::1;:::i;:::-;24443:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24428:9:::1;:12:::0;;-1:-1:-1;;;;;24443:31:0;;::::1;::::0;24438:1;;24428:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24428:46:0::1;-1:-1:-1::0;;;;;24428:46:0;;::::1;;::::0;;24493:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24532:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24532:28:0::1;::::0;;24579:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24579:15:0;;;;;-1:-1:-1;;;;;;24579:15:0::1;::::0;;;;;24318:314:::1;24175:464:::0;:::o;24380:241::-:1;24360:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24318:314;;;;24175:464:::0;:::o;12101:134::-;12176:4;12183:37;12192:10;12204:7;12213:6;12183:8;:37::i;:::-;-1:-1:-1;12229:4:0;12101:134;;;;;:::o;12512:309::-;12610:4;12627:36;12637:6;12645:9;12656:6;12627:9;:36::i;:::-;12674:117;12683:6;12691:10;12703:87;12739:6;12703:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12703:19:0;;;;;;:11;:19;;;;;;;;12723:10;12703:31;;;;;;;;;:87;:35;:87::i;:::-;12674:8;:117::i;:::-;-1:-1:-1;12809:4:0;12512:309;;;;;:::o;22106:118::-;22185:16;;:31;;22206:9;22185:20;:31::i;:::-;22166:16;:50;22106:118::o;23832:335::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23917:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23916:21;23908:61;;;::::0;-1:-1:-1;;;23908:61:0;;9029:2:1;23908:61:0::1;::::0;::::1;9011:21:1::0;9068:2;9048:18;;;9041:30;9107:29;9087:18;;;9080:57;9154:18;;23908:61:0::1;8827:351:1::0;23908:61:0::1;-1:-1:-1::0;;;;;23983:16:0;::::1;24002:1;23983:16:::0;;;:7:::1;:16;::::0;;;;;:20;23980:108:::1;;-1:-1:-1::0;;;;;24059:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24039:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24020:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23980:108:::1;-1:-1:-1::0;;;;;24098:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24098:27:0::1;24121:4;24098:27:::0;;::::1;::::0;;;24136:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24136:23:0::1;::::0;;::::1;::::0;;23832:335::o;22942:143::-;22995:7;23022:55;23055:21;23073:1;23055:9;:21::i;:::-;23044:4;;23022:28;;23034:15;;-1:-1:-1;;;;;23044:4:0;23034:9;:15::i;:::-;23022:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;23015:62;;22942:143;:::o;23576:248::-;23642:7;23681;;23670;:18;;23662:73;;;;-1:-1:-1;;;23662:73:0;;9385:2:1;23662:73:0;;;9367:21:1;9424:2;9404:18;;;9397:30;9463:34;9443:18;;;9436:62;-1:-1:-1;;;9514:18:1;;;9507:40;9564:19;;23662:73:0;9183:406:1;23662:73:0;23746:19;23769:10;:8;:10::i;:::-;23746:33;-1:-1:-1;23797:19:0;23746:33;23797:7;:19;:::i;:::-;23790:26;23576:248;-1:-1:-1;;;23576:248:0:o;21284:182::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;21404:16:::1;::::0;21364:21:::1;::::0;-1:-1:-1;;;;;21404:16:0::1;21396:62;21431:26;21453:3;21431:17;21364:21:::0;21445:2;21431:13:::1;:17::i;:::-;:21:::0;::::1;:26::i;:::-;21396:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21333:133;21284:182:::0;:::o;12829:209::-;12943:10;12917:4;12964:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12964:32:0;;;;;;;;;;12917:4;;12934:74;;12955:7;;12964:43;;12997:10;;12964:43;:::i;23093:475::-;23183:7;23222;;23211;:18;;23203:62;;;;-1:-1:-1;;;23203:62:0;;10148:2:1;23203:62:0;;;10130:21:1;10187:2;10167:18;;;10160:30;10226:33;10206:18;;;10199:61;10277:18;;23203:62:0;9946:355:1;23203:62:0;23281:17;23276:285;;23315:28;23346:39;23357:7;23366:4;23372:5;23379;23346:10;:39::i;:::-;23407:9;;-1:-1:-1;23400:16:0;;-1:-1:-1;23400:16:0;23276:285;23449:28;23480:39;23491:7;23500:4;23506:5;23513;23480:10;:39::i;:::-;23541:17;;;;-1:-1:-1;23534:24:0;;-1:-1:-1;23534:24:0;20807:469;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;20954:18:::1;:31:::0;;-1:-1:-1;;;;;20954:31:0;;::::1;-1:-1:-1::0;;;;;;20954:31:0;;::::1;::::0;::::1;::::0;;;20987:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21020:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21049:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21078:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;20954:18:::1;21116:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;21116:30:0;;::::1;20954:31:::0;21116:30;;::::1;::::0;;;21148:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;21180:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21210:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21240:21;;;;;:28;;;;::::1;::::0;;::::1;::::0;;20807:469::o;28052:92::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;28119:7:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;28119:17:0;;::::1;::::0;;;::::1;::::0;;28052:92::o;11643:173::-;-1:-1:-1;;;;;11723:20:0;;11709:7;11723:20;;;:11;:20;;;;;;;;11719:49;;;-1:-1:-1;;;;;;11752:16:0;;;;;:7;:16;;;;;;;11643:173::o;11719:49::-;-1:-1:-1;;;;;11797:16:0;;;;;;:7;:16;;;;;;11777:37;;:19;:37::i;20202:124::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20286:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;20286:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20202:124::o;21988:110::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;22061:20:::1;:29:::0;21988:110::o;20334:465::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;20532:8:::1;:15:::0;;;;20549:7:::1;:15:::0;;;;20566:11:::1;:20:::0;;;;20597:8:::1;:27:::0;;;;20635:18;:31;20677:18;:31;20719:23;:34;20764:16;:27;20334:465::o;20110:84::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;20165:14:::1;:21:::0;;-1:-1:-1;;20165:21:0::1;20182:4;20165:21;::::0;;20110:84::o;21474:117::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21555:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;21555:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21474:117::o;28152:148::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;28237:16:::1;:27:::0;;-1:-1:-1;;;;;;28237:27:0::1;-1:-1:-1::0;;;;;28237:27:0;;;::::1;::::0;;;::::1;::::0;;28266:16:::1;:26:::0;28152:148::o;13046:265::-;13139:4;13156:125;13165:10;13177:7;13186:94;13223:15;13186:94;;;;;;;;;;;;;;;;;13198:10;13186:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13186:32:0;;;;;;;;;;;:94;:36;:94::i;11822:140::-;11900:4;11907:40;11917:10;11929:9;11940:6;11907:9;:40::i;22232:449::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;22320:13:::1;22336:43;22366:11;;22336:17;22348:4;22336:7;;:11;;:17;;;;:::i;:43::-;22320:59;;22390:17;22410:46;22443:11;;22410:20;22422:7;22410;;:11;;:20;;;;:::i;:46::-;22390:66;;22458:13;22474:26;22493:6;22474:14;22486:1;22474:7:::0;::::1;:11;;:14;;;;:::i;:26::-;22458:42;;22528:5;22519;:14;;:36;;;;;22550:5;22537:9;:18;;22519:36;22511:102;;;::::0;-1:-1:-1;;;22511:102:0;;10508:2:1;22511:102:0::1;::::0;::::1;10490:21:1::0;10547:2;10527:18;;;10520:30;10586:34;10566:18;;;10559:62;-1:-1:-1;;;10637:18:1;;;10630:51;10698:19;;22511:102:0::1;10306:417:1::0;22511:102:0::1;-1:-1:-1::0;22624:12:0::1;:20:::0;;;;22646:15:::1;:27:::0;-1:-1:-1;;22232:449:0:o;22689:245::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;22810:39:::1;::::0;-1:-1:-1;;;22810:39:0;;22843:4:::1;22810:39;::::0;::::1;1818:74:1::0;22795:12:0::1;::::0;-1:-1:-1;;;;;22810:24:0;::::1;::::0;::::1;::::0;1791:18:1;;22810:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22795:54:::0;-1:-1:-1;;;;;;22860:23:0;::::1;;22884:9:::0;22895:30:::1;22921:3;22895:21;22795:54:::0;22904:11;22895:8:::1;:21::i;:30::-;22860:66;::::0;-1:-1:-1;;;;;;22860:66:0::1;::::0;;;;;;-1:-1:-1;;;;;11109:55:1;;;22860:66:0::1;::::0;::::1;11091:74:1::0;11181:18;;;11174:34;11064:18;;22860:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22784:150;22689:245:::0;;;:::o;21599:294::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;21727:10:::1;:24:::0;;;21769:7:::1;::::0;:48:::1;::::0;21809:6:::1;::::0;21769:27:::1;::::0;21781:14;21769:11:::1;:27::i;:48::-;21753:13;:64:::0;21837:7:::1;::::0;:48:::1;::::0;21877:6:::1;::::0;21837:27:::1;::::0;21849:14;21837:11:::1;:27::i;:48::-;21819:15;:66:::0;-1:-1:-1;;;21599:294:0:o;6471:111::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;6537:5:::1;:11:::0;;-1:-1:-1;;;;;;6537:11:0::1;-1:-1:-1::0;;;;;6537:11:0;::::1;::::0;;::::1;::::0;;;6555:25:::1;::::0;1818:74:1;;;6555:25:0::1;::::0;1806:2:1;1791:18;6555:25:0::1;;;;;;;6471:111:::0;:::o;21901:79::-;6433:4;6458:5;-1:-1:-1;;;;;6458:5:0;6345:10;6447:16;6329:38;;;;-1:-1:-1;;;6329:38:0;;;;;;;:::i;:::-;21956:16:::1;:14;:16::i;:::-;21901:79::o:0;13319:335::-;-1:-1:-1;;;;;13412:19:0;;13404:68;;;;-1:-1:-1;;;13404:68:0;;11910:2:1;13404:68:0;;;11892:21:1;11949:2;11929:18;;;11922:30;11988:34;11968:18;;;11961:62;-1:-1:-1;;;12039:18:1;;;12032:34;12083:19;;13404:68:0;11708:400:1;13404:68:0;-1:-1:-1;;;;;13491:21:0;;13483:68;;;;-1:-1:-1;;;13483:68:0;;12315:2:1;13483:68:0;;;12297:21:1;12354:2;12334:18;;;12327:30;12393:34;12373:18;;;12366:62;-1:-1:-1;;;12444:18:1;;;12437:32;12486:19;;13483:68:0;12113:398:1;13483:68:0;-1:-1:-1;;;;;13562:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13614:32;;160:25:1;;;13614:32:0;;133:18:1;13614:32:0;;;;;;;13319:335;;;:::o;13662:632::-;13751:37;13762:6;13770:9;13781:6;13751:10;:37::i;:::-;13799:38;13819:6;13827:9;13799:19;:38::i;:::-;13848:41;13863:6;13871:9;13882:6;13848:14;:41::i;:::-;13901:39;13914:9;13925:6;13933;13901:12;:39::i;:::-;13951:35;13968:6;13976:9;13951:16;:35::i;:::-;13997:40;14011:6;14019:9;14030:6;13997:13;:40::i;:::-;14048:35;14057:6;14065:9;14076:6;14048:8;:35::i;:::-;14094:31;14107:6;14115:9;14094:12;:31::i;:::-;-1:-1:-1;;;;;14180:19:0;;;;;;:11;:19;;;;;;14136:150;;14151:6;;14159:9;;14170:6;;14180:19;;;:45;;-1:-1:-1;;;;;;14203:22:0;;;;;;:11;:22;;;;;;;;14180:45;:57;;;-1:-1:-1;14229:8:0;;;;;;;14180:57;:69;;;-1:-1:-1;14241:8:0;;;;14180:69;14265:4;;14178:72;;;-1:-1:-1;;;;;14265:4:0;;;14252:17;;;;;;14271:14;;;14136;:150::i;2364:162::-;2450:7;2496:12;2488:6;;;;2480:29;;;;-1:-1:-1;;;2480:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2518:5:0;;;2364:162::o;1063:82::-;1121:7;1138:5;1142:1;1138;:5;:::i;1151:82::-;1209:7;1226:5;1230:1;1226;:5;:::i;29468:158::-;29509:7;29530:15;29547;29566:19;:17;:19::i;:::-;29529:56;;-1:-1:-1;29529:56:0;-1:-1:-1;29603:15:0;29529:56;;29603:15;:::i;:::-;29596:22;;;;29468:158;:::o;1239:82::-;1297:7;1314:5;1318:1;1314;:5;:::i;1327:82::-;1385:7;1402:5;1406:1;1402;:5;:::i;25246:415::-;25349:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25349:36:0;25410:49;25422:7;25431;25440:6;25448:10;25410:11;:49::i;:::-;25398:61;;25574:52;25586:9;25597:7;25606;25615:10;:8;:10::i;:::-;25574:11;:52::i;:::-;25552:18;;;25470:156;25532:19;;;25470:156;25517:14;;;25470:156;25490:25;;;25470:156;;;25246:415;;;;;;;:::o;28943:517::-;29029:16;;29008;;:38;;:20;:38::i;:::-;28989:16;:57;29057:8;:15;;-1:-1:-1;;29057:15:0;;;;;;29107:24;29125:4;29107:9;:24::i;:::-;29083:48;;29160:37;29180:16;;29160:15;;:19;;:37;;;;:::i;:::-;29142:15;:55;29225:16;;29208:34;;:16;:34::i;:::-;29253:20;29276:43;29305:13;29276:24;29294:4;29276:9;:24::i;:43::-;29350:17;;29253:66;;-1:-1:-1;29350:35:0;;29253:66;29350:21;:35::i;:::-;29330:17;:55;-1:-1:-1;;29396:8:0;:16;;-1:-1:-1;;29396:16:0;;;29407:5;29423:16;:29;28943:517::o;14302:355::-;-1:-1:-1;;;;;14406:20:0;;14398:70;;;;-1:-1:-1;;;14398:70:0;;12891:2:1;14398:70:0;;;12873:21:1;12930:2;12910:18;;;12903:30;12969:34;12949:18;;;12942:62;-1:-1:-1;;;13020:18:1;;;13013:35;13065:19;;14398:70:0;12689:401:1;14398:70:0;-1:-1:-1;;;;;14487:23:0;;14479:71;;;;-1:-1:-1;;;14479:71:0;;13297:2:1;14479:71:0;;;13279:21:1;13336:2;13316:18;;;13309:30;13375:34;13355:18;;;13348:62;-1:-1:-1;;;13426:18:1;;;13419:33;13469:19;;14479:71:0;13095:399:1;14479:71:0;14579:17;14589:6;14579:9;:17::i;:::-;14569:6;:27;;14561:88;;;;-1:-1:-1;;;14561:88:0;;13701:2:1;14561:88:0;;;13683:21:1;13740:2;13720:18;;;13713:30;13779:34;13759:18;;;13752:62;-1:-1:-1;;;13830:18:1;;;13823:47;13887:19;;14561:88:0;13499:413:1;14887:206:0;-1:-1:-1;;;;;14980:19:0;;;;;;:11;:19;;;;;;;;14979:20;:47;;;;-1:-1:-1;;;;;;15004:22:0;;;;;;:11;:22;;;;;;;;15003:23;14979:47;14976:110;;;15036:14;;;;15028:56;;;;-1:-1:-1;;;15028:56:0;;14119:2:1;15028:56:0;;;14101:21:1;14158:2;14138:18;;;14131:30;14197:31;14177:18;;;14170:59;14246:18;;15028:56:0;13917:353:1;15105:384:0;-1:-1:-1;;;;;15209:22:0;;;;;;:11;:22;;;;;;;;15208:23;:47;;;;-1:-1:-1;;;;;;15236:19:0;;;;;;:11;:19;;;;;;;;15235:20;15208:47;:77;;;;-1:-1:-1;;;;;;15259:26:0;;15280:4;15259:26;;15208:77;:107;;;;-1:-1:-1;15310:4:0;;-1:-1:-1;;;;;15289:26:0;;;15310:4;;15289:26;;15208:107;:128;;;;-1:-1:-1;15332:4:0;;-1:-1:-1;;;;;15319:17:0;;;15332:4;;15319:17;;15208:128;:163;;;;-1:-1:-1;15353:18:0;;-1:-1:-1;;;;;15340:31:0;;;15353:18;;15340:31;;15208:163;15205:277;;;15430:15;;15419:6;15396:20;15406:9;15396;:20::i;:::-;:29;;;;:::i;:::-;15395:50;;15387:93;;;;-1:-1:-1;;;15387:93:0;;14477:2:1;15387:93:0;;;14459:21:1;14516:2;14496:18;;;14489:30;14555:32;14535:18;;;14528:60;14605:18;;15387:93:0;14275:354:1;15695:193:0;15804:12;;15794:6;:22;;:45;;;-1:-1:-1;;;;;;15820:19:0;;;;;;:11;:19;;;;;;;;15794:45;:64;;;-1:-1:-1;;;;;;15843:15:0;;;;;;:11;:15;;;;;;;;15794:64;15786:94;;;;-1:-1:-1;;;15786:94:0;;14836:2:1;15786:94:0;;;14818:21:1;14875:2;14855:18;;;14848:30;-1:-1:-1;;;14894:18:1;;;14887:47;14951:18;;15786:94:0;14634:341:1;15497:190:0;15594:4;;-1:-1:-1;;;;;15581:17:0;;;15594:4;;15581:17;:41;;;;-1:-1:-1;;;;;;15603:19:0;;;;;;:11;:19;;;;;;;;15602:20;15581:41;:54;;;;-1:-1:-1;15627:8:0;;;;15626:9;15581:54;:67;;;;-1:-1:-1;15640:8:0;;;;;;;15639:9;15581:67;15578:102;;;15662:9;;:16;;15676:1;15662:13;:16::i;:::-;15650:9;:28;15497:190;;:::o;28308:627::-;28405:14;;;;:38;;;;-1:-1:-1;;;;;;28424:19:0;;;;;;:11;:19;;;;;;;;28423:20;28405:38;:68;;;;-1:-1:-1;28468:4:0;;-1:-1:-1;;;;;28447:26:0;;;28468:4;;28447:26;28405:68;:102;;;;;28487:20;;28477:6;:30;;28405:102;:128;;;;-1:-1:-1;28525:8:0;;;;28524:9;28405:128;:141;;;;-1:-1:-1;28538:8:0;;;;;;;28537:9;28405:141;28402:178;;;28576:1;28548:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;28402:178:0;28613:16;;28593;;:36;;:81;;;;;28658:16;;28633:21;:41;;28593:81;:122;;;;;28698:17;;28678:16;;:37;;28593:122;:147;;;;-1:-1:-1;28733:7:0;;;;;;;28593:147;:171;;;;-1:-1:-1;;;;;;28745:19:0;;;;;;:11;:19;;;;;;;;28744:20;28593:171;:201;;;;-1:-1:-1;28789:4:0;;-1:-1:-1;;;;;28768:26:0;;;28789:4;;28768:26;28593:201;:219;;;;-1:-1:-1;28798:14:0;;;;28593:219;:232;;;;-1:-1:-1;28817:8:0;;;;28816:9;28593:232;:245;;;;-1:-1:-1;28830:8:0;;;;;;;28829:9;28593:245;:268;;;;-1:-1:-1;28852:9:0;;-1:-1:-1;;;;;28842:19:0;;;28852:9;;;;;28842:19;;28593:268;:315;;;;;28888:20;;28878:6;:30;;28593:315;28590:338;;;28910:16;:14;:16::i;17392:188::-;17484:41;17499:6;17507:9;17518:6;17484:14;:41::i;:::-;17481:92;;;17527:29;17542:13;;17527:14;:29::i;:::-;17570:1;17558:9;:13;17392:188;;;:::o;14665:214::-;14742:9;:24;;-1:-1:-1;;;;;;14742:24:0;;;14790:4;;-1:-1:-1;;;;;14780:14:0;;;14790:4;;14780:14;:41;;;;-1:-1:-1;;;;;;14799:22:0;;;;;;:11;:22;;;;;;;;14798:23;14780:41;:54;;;;-1:-1:-1;14826:8:0;;;;;;;14825:9;14780:54;:67;;;;-1:-1:-1;14839:8:0;;;;14838:9;14780:67;14777:95;;;14849:9;:21;;-1:-1:-1;;;;;14849:21:0;;;;-1:-1:-1;;;;;;14849:21:0;;;;;;14665:214;;:::o;16028:921::-;16167:28;16198:48;16209:7;16218;16227:6;16235:10;16198;:48::i;:::-;-1:-1:-1;;;;;16260:19:0;;;;;;:11;:19;;;;;;16167:79;;-1:-1:-1;16260:19:0;;16257:83;;;-1:-1:-1;;;;;16315:15:0;;;;;;:7;:15;;;;;;:23;;16331:7;;16315:23;:::i;:::-;-1:-1:-1;;;;;16297:15:0;;;;;;:7;:15;;;;;:41;16257:83;-1:-1:-1;;;;;16353:22:0;;;;;;:11;:22;;;;;;;;16350:101;;;16432:17;;;;-1:-1:-1;;;;;16413:18:0;;;;;;:7;:18;;;;;;:36;;16432:17;16413:36;:::i;:::-;-1:-1:-1;;;;;16392:18:0;;;;;;:7;:18;;;;;:57;16350:101;16495:9;;-1:-1:-1;;;;;16479:15:0;;16495:9;16479:15;;;:7;:15;;;;;;:25;;16495:9;16479:25;:::i;:::-;-1:-1:-1;;;;;16461:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16555:17;;;16536:18;;;;;;;;;;:36;;16555:17;16536:36;:::i;:::-;-1:-1:-1;;;;;16515:18:0;;;;;;:7;:18;;;;;;;:57;;;;16595:6;;;16603;;;;16583:27;;16595:6;16583:11;:27::i;:::-;16621:39;16635:1;:11;;;16648:1;:11;;;16621:13;:39::i;:::-;16671:36;16684:1;:10;;;16696:1;:10;;;16671:12;:36::i;:::-;16740:9;-1:-1:-1;;;;;16723:46:0;16732:6;-1:-1:-1;;;;;16723:46:0;;16751:1;:17;;;16723:46;;;;160:25:1;;148:2;133:18;;14:177;16723:46:0;;;;;;;;16783:11;;;;:15;16780:71;;16830:4;-1:-1:-1;;;;;16805:44:0;16814:6;-1:-1:-1;;;;;16805:44:0;;16837:1;:11;;;16805:44;;;;160:25:1;;148:2;133:18;;14:177;16805:44:0;;;;;;;;16780:71;16864:10;;;;:14;16861:81;;16910:16;;;16929:10;;;16885:55;;160:25:1;;;-1:-1:-1;;;;;16910:16:0;;;;16885:55;;;;;148:2:1;133:18;16885:55:0;;;;;;;16861:81;16156:793;16028:921;;;;;;:::o;29634:531::-;29731:7;;29767;;29684;;;;;29785:270;29809:9;:16;29805:20;;29785:270;;;29875:7;29851;:21;29859:9;29869:1;29859:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29859:12:0;29851:21;;;;;;;;;;;;;:31;;:66;;;29910:7;29886;:21;29894:9;29904:1;29894:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29894:12:0;29886:21;;;;;;;;;;;;;:31;29851:66;29847:97;;;29927:7;;29936;;29919:25;;;;;;;29634:531;;:::o;29847:97::-;29977:7;:21;29985:9;29995:1;29985:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29985:12:0;29977:21;;;;;;;;;;;;;29969:29;;:7;:29;:::i;:::-;29959:39;;30031:7;:21;30039:9;30049:1;30039:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30039:12:0;30031:21;;;;;;;;;;;;;30023:29;;:7;:29;:::i;:::-;30013:39;-1:-1:-1;29827:3:0;;;;:::i;:::-;;;;29785:270;;;;30087:7;;30079;;:15;;;;:::i;:::-;30069:7;:25;30065:56;;;30104:7;;30113;;30096:25;;;;;;29634:531;;:::o;30065:56::-;30140:7;;30149;;-1:-1:-1;29634:531:0;-1:-1:-1;29634:531:0:o;25887:1555::-;25991:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25991:28:0;26036:7;26035:8;:41;;;;26047:29;26057:6;26065:10;26047:9;:29::i;:::-;26032:110;;;26091:17;;;:27;;;26131:8;;26032:110;26156:6;26155:7;:22;;;;;26167:10;26166:11;26155:22;26152:431;;;26193:17;26213:41;26242:11;;26213:24;26225:11;;26213:7;:11;;:24;;;;:::i;:41::-;26193:61;;26288:11;;26272:8;:12;;;:27;26269:75;;26331:11;;26318:8;:12;26310:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;26301:6;;;:41;26269:75;26397:8;:12;26381:11;;:29;;:15;:29::i;:::-;26361:16;;:49;26358:105;;26450:11;;26433:16;;26425:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;26412:10;;;:49;26358:105;26491:37;26517:1;:10;;;26491:21;26505:1;:6;;;26491:9;:13;;:21;;;;:::i;:37::-;26477:11;;;:51;26563:17;26571:9;26563:7;:17;:::i;:::-;26543;;;:37;-1:-1:-1;26152:431:0;26596:6;26593:403;;;26618:17;26638:37;26663:11;;26638:20;26650:7;;26638;:11;;:20;;;;:::i;:37::-;26618:57;;26709:7;;26693:8;:12;;;:23;26690:71;;26748:11;;26735:8;:12;26727:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;26718:6;;;:41;26690:71;26810:8;:12;26798:7;;:25;;:11;:25::i;:::-;26778:16;;:45;26775:101;;26863:11;;26846:16;;26838:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;26825:10;;;:49;26775:101;26904:37;26930:1;:10;;;26904:21;26918:1;:6;;;26904:9;:13;;:21;;;;:::i;:37::-;26890:11;;;:51;26976:17;26984:9;26976:7;:17;:::i;:::-;26956;;;:37;-1:-1:-1;26593:403:0;27009:10;27006:410;;;27035:17;27055:38;27081:11;;27055:21;27067:8;;27055:7;:11;;:21;;;;:::i;:38::-;27035:58;;27127:8;;27111;:12;;;:24;27108:72;;27167:11;;27154:8;:12;27146:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27137:6;;;:41;27108:72;27230:8;:12;27217:8;;:26;;:12;:26::i;:::-;27197:16;;:46;27194:102;;27283:11;;27266:16;;27258:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;27245:10;;;:49;27194:102;27324:37;27350:1;:10;;;27324:21;27338:1;:6;;;27324:9;:13;;:21;;;;:::i;:37::-;27310:11;;;:51;27396:17;27404:9;27396:7;:17;:::i;:::-;27376;;;:37;-1:-1:-1;25887:1555:0;;;;;;:::o;27450:594::-;27575:15;;;;;27689:19;27697:11;27689:7;:19;:::i;:::-;27679:29;;27723:7;27719:60;;-1:-1:-1;27752:7:0;;-1:-1:-1;27770:1:0;;-1:-1:-1;27770:1:0;;-1:-1:-1;27770:1:0;27745:31;;27719:60;27803:11;27796:1;:6;;;:18;;;;:::i;:::-;27789:25;;27849:11;27837:1;:11;;;:23;;;;:::i;:::-;27825:35;;27893:11;27882:1;:10;;;:22;;;;:::i;:::-;27871:33;-1:-1:-1;27871:33:0;27947:9;27934:12;27942:4;27934:7;:12;:::i;:::-;:22;;;;:::i;:::-;:31;;;;:::i;:::-;27915:50;;27450:594;;;;;;;;;;:::o;19739:363::-;19827:16;;;19841:1;19827:16;;;;;;;;19803:21;;19827:16;;;;;;;;-1:-1:-1;;19864:6:0;;:13;;;-1:-1:-1;;;19864:13:0;;;;19803:40;;-1:-1:-1;;;;;;19864:6:0;;;;:11;;-1:-1:-1;19864:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19854:4;19859:1;19854:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;19854:23:0;;;-1:-1:-1;;;;;19854:23:0;;;;;19906:4;19888;19893:1;19888:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19888:23:0;;;:7;;;;;;;;;:23;19922:6;;20047:16;;19922:172;;-1:-1:-1;;;19922:172:0;;:6;;;;:57;;19987:9;;19922:172;;:6;;20028:4;;20047:16;;;;20078:15;;19922:172;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16958:426;17056:4;17073:13;17099:15;;17089:6;:25;;17073:41;;17125:19;17175:13;;17147:24;17165:4;17147:9;:24::i;:::-;17207:8;;17147:41;-1:-1:-1;17147:41:0;;-1:-1:-1;17207:8:0;;17206:9;:24;;;;-1:-1:-1;17219:11:0;;;;;;;17206:24;:36;;;;;17234:8;17206:36;:60;;;;-1:-1:-1;;;;;;17247:19:0;;;;;;:11;:19;;;;;;;;17246:20;17206:60;:78;;;;-1:-1:-1;17270:14:0;;;;17206:78;:112;;;;-1:-1:-1;17314:4:0;;-1:-1:-1;;;;;17301:17:0;;;17314:4;;17301:17;17206:112;:139;;;;;17335:10;;17322:9;;:23;;17206:139;:157;;;;;17349:14;17206:157;:170;;;;-1:-1:-1;17368:8:0;;;;;;;17367:9;17206:170;17199:177;16958:426;-1:-1:-1;;;;;;16958:426:0:o;17588:1350::-;12466:8;:15;;-1:-1:-1;;12466:15:0;12477:4;12466:15;;;;;;17682:8:::1;::::0;12466;;17681:24:::1;::::0;17703:1:::1;::::0;17681:17:::1;::::0;17682:8;17681:14:::1;:17::i;:::-;:21:::0;::::1;:24::i;:::-;17658:47;;17719:8;;17731:1;17719:13:::0;17716:134:::1;;17810:23:::0;;17772:18;;17749;;:99:::1;::::0;17846:1:::1;::::0;17749:92:::1;::::0;17839:1:::1;::::0;17749:85:::1;::::0;17810:23;;17749:85;;:22:::1;:42::i;:::-;:46:::0;::::1;:85::i;:99::-;17734:114;;17716:134;17904:18:::0;;17860:32:::1;::::0;17925:12;;17895:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;17860:77:::0;-1:-1:-1;17948:14:0::1;17965:33;17860:77:::0;17965:6;:33:::1;:::i;:::-;17948:50:::0;-1:-1:-1;18034:21:0::1;18066:24;17948:50:::0;18066:16:::1;:24::i;:::-;18101:20;18124:38;18148:14:::0;18124:21:::1;:38;:::i;:::-;18225:18:::0;;18101:61;;-1:-1:-1;18173:19:0::1;::::0;18210:33:::1;::::0;:12;:33:::1;:::i;:::-;18194:50;::::0;:12;:50:::1;:::i;:::-;18301:18:::0;;18173:71;;-1:-1:-1;18255:29:0::1;::::0;18287:32:::1;::::0;18173:71;18287:32:::1;:::i;:::-;18255:64:::0;-1:-1:-1;18333:25:0;;18330:108:::1;;18374:61;18387:24;18413:21;18374:12;:61::i;:::-;18497:18:::0;;18448:23:::1;::::0;18474:42:::1;::::0;:18:::1;:11:::0;18490:1:::1;18474:15;:18::i;:42::-;18448:68:::0;-1:-1:-1;18530:19:0;;18527:80:::1;;18559:18;::::0;18551:53:::1;::::0;-1:-1:-1;;;;;18559:18:0;;::::1;::::0;18551:53;::::1;;;::::0;18588:15;;18559:18:::1;18551:53:::0;18559:18;18551:53;18588:15;18559:18;18551:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18527:80;18664:23:::0;;18617:21:::1;::::0;18641:47:::1;::::0;:18:::1;:11:::0;18657:1:::1;18641:15;:18::i;:47::-;18617:71:::0;-1:-1:-1;18702:17:0;;18699:80:::1;;18741:16;::::0;:35:::1;::::0;18762:13;18741:20:::1;:35::i;:::-;18722:16;:54:::0;18699:80:::1;18789:15;18807:43;18833:16;;18807:21;:25;;:43;;;;:::i;:::-;18789:61:::0;-1:-1:-1;18864:20:0;;18861:70:::1;;18894:16;::::0;18886:43:::1;::::0;-1:-1:-1;;;;;18894:16:0;;::::1;::::0;18886:43;::::1;;;::::0;18921:7;;18894:16:::1;18886:43:::0;18894:16;18886:43;18921:7;18894:16;18886:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18861:70;-1:-1:-1::0;;12486:8:0;:16;;-1:-1:-1;;12486:16:0;;;-1:-1:-1;;;;;;;;;17588:1350:0:o;15896:124::-;15974:4;15964:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;15990:11:0;:22;;16008:4;;15990:11;:15;;:22;;16008:4;;15990:22;:::i;:::-;;;;-1:-1:-1;;;;15896:124:0:o;24647:277::-;24750:9;24727:11;:20;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;24795:4:0;24775:26;;;;:11;:26;;;;;;;;24772:100;;;24843:4;24827:22;;;;:7;:22;;;;;:33;;24851:9;;24827:22;:33;;24851:9;;24827:33;:::i;:::-;;;;-1:-1:-1;;24772:100:0;24898:4;24882:22;;;;:7;:22;;;;;:34;;24907:9;;24882:22;:34;;24907:9;;24882:34;:::i;24932:306::-;25031:8;25009:11;:19;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;25075:16:0;;-1:-1:-1;;;;;25075:16:0;25055:38;;;;:11;:38;;;;;;;;25052:123;;;25135:16;;-1:-1:-1;;;;;25135:16:0;25119:34;;;;:7;:34;;;;;:44;;25155:8;;25119:34;:44;;25155:8;;25119:44;:::i;:::-;;;;-1:-1:-1;;25052:123:0;25201:16;;-1:-1:-1;;;;;25201:16:0;25185:34;;;;:7;:34;;;;;:45;;25222:8;;25185:34;:45;;25222:8;;25185:45;:::i;25669:210::-;25741:4;25766:6;:22;;;;-1:-1:-1;25776:7:0;;:12;25766:22;25765:57;;;;25794:10;:27;;;;-1:-1:-1;25808:8:0;;:13;25794:27;25765:105;;;;25828:6;25827:7;:22;;;;;25839:10;25838:11;25827:22;:42;;;;-1:-1:-1;;25853:11:0;;:16;;25669:210;-1:-1:-1;;25669:210:0:o;19297:434::-;19387:16;;;19401:1;19387:16;;;;;;;;19363:21;;19387:16;;;;;;;;;;-1:-1:-1;19387:16:0;19363:40;;19432:4;19414;19419:1;19414:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19414:23:0;;;:7;;;;;;;;;;:23;;;;19458:6;;:13;;;-1:-1:-1;;;19458:13:0;;;;:6;;;;;:11;;:13;;;;;19414:7;;19458:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19448:4;19453:1;19448:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19448:23:0;;;:7;;;;;;;;;:23;19514:6;;19482:53;;19499:4;;19514:6;19523:11;19482:8;:53::i;:::-;19546:6;;:177;;-1:-1:-1;;;19546:177:0;;-1:-1:-1;;;;;19546:6:0;;;;:57;;:177;;19618:11;;19546:6;;19660:4;;19687;;19707:15;;19546:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19352:379;19297:434;:::o;18946:343::-;19059:6;;19027:53;;19044:4;;-1:-1:-1;;;;;19059:6:0;19068:11;19027:8;:53::i;:::-;19091:6;;19232:18;;19091:190;;-1:-1:-1;;;19091:190:0;;19154:4;19091:190;;;17369:34:1;17419:18;;;17412:34;;;19091:6:0;17462:18:1;;;17455:34;;;17505:18;;;17498:34;-1:-1:-1;;;;;19232:18:0;;;17548:19:1;;;17541:44;19265:15:0;17601:19:1;;;17594:35;19091:6:0;;;:22;;19121:9;;17280:19:1;;19091:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:154:1:-;-1:-1:-1;;;;;275:5:1;271:54;264:5;261:65;251:93;;340:1;337;330:12;251:93;196:154;:::o;355:247::-;414:6;467:2;455:9;446:7;442:23;438:32;435:52;;;483:1;480;473:12;435:52;522:9;509:23;541:31;566:5;541:31;:::i;607:548::-;719:4;748:2;777;766:9;759:21;809:6;803:13;852:6;847:2;836:9;832:18;825:34;877:1;887:140;901:6;898:1;895:13;887:140;;;996:14;;;992:23;;986:30;962:17;;;981:2;958:26;951:66;916:10;;887:140;;;891:3;1076:1;1071:2;1062:6;1051:9;1047:22;1043:31;1036:42;1146:2;1139;1135:7;1130:2;1122:6;1118:15;1114:29;1103:9;1099:45;1095:54;1087:62;;;;607:548;;;;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1903:456::-;1980:6;1988;1996;2049:2;2037:9;2028:7;2024:23;2020:32;2017:52;;;2065:1;2062;2055:12;2017:52;2104:9;2091:23;2123:31;2148:5;2123:31;:::i;:::-;2173:5;-1:-1:-1;2230:2:1;2215:18;;2202:32;2243:33;2202:32;2243:33;:::i;:::-;1903:456;;2295:7;;-1:-1:-1;;;2349:2:1;2334:18;;;;2321:32;;1903:456::o;2364:180::-;2423:6;2476:2;2464:9;2455:7;2451:23;2447:32;2444:52;;;2492:1;2489;2482:12;2444:52;-1:-1:-1;2515:23:1;;2364:180;-1:-1:-1;2364:180:1:o;2738:118::-;2824:5;2817:13;2810:21;2803:5;2800:32;2790:60;;2846:1;2843;2836:12;2861:309;2926:6;2934;2987:2;2975:9;2966:7;2962:23;2958:32;2955:52;;;3003:1;3000;2993:12;2955:52;3039:9;3026:23;3016:33;;3099:2;3088:9;3084:18;3071:32;3112:28;3134:5;3112:28;:::i;:::-;3159:5;3149:15;;;2861:309;;;;;:::o;3175:813::-;3270:6;3278;3286;3294;3302;3355:3;3343:9;3334:7;3330:23;3326:33;3323:53;;;3372:1;3369;3362:12;3323:53;3411:9;3398:23;3430:31;3455:5;3430:31;:::i;:::-;3480:5;-1:-1:-1;3537:2:1;3522:18;;3509:32;3550:33;3509:32;3550:33;:::i;:::-;3602:7;-1:-1:-1;3661:2:1;3646:18;;3633:32;3674:33;3633:32;3674:33;:::i;:::-;3726:7;-1:-1:-1;3785:2:1;3770:18;;3757:32;3798:33;3757:32;3798:33;:::i;:::-;3850:7;-1:-1:-1;3909:3:1;3894:19;;3881:33;3923;3881;3923;:::i;:::-;3975:7;3965:17;;;3175:813;;;;;;;;:::o;3993:241::-;4049:6;4102:2;4090:9;4081:7;4077:23;4073:32;4070:52;;;4118:1;4115;4108:12;4070:52;4157:9;4144:23;4176:28;4198:5;4176:28;:::i;4239:382::-;4304:6;4312;4365:2;4353:9;4344:7;4340:23;4336:32;4333:52;;;4381:1;4378;4371:12;4333:52;4420:9;4407:23;4439:28;4461:5;4439:28;:::i;:::-;4486:5;-1:-1:-1;4543:2:1;4528:18;;4515:32;4556:33;4515:32;4556:33;:::i;4626:661::-;4748:6;4756;4764;4772;4780;4788;4796;4804;4857:3;4845:9;4836:7;4832:23;4828:33;4825:53;;;4874:1;4871;4864:12;4825:53;-1:-1:-1;;4897:23:1;;;4967:2;4952:18;;4939:32;;-1:-1:-1;5018:2:1;5003:18;;4990:32;;5069:2;5054:18;;5041:32;;-1:-1:-1;5120:3:1;5105:19;;5092:33;;-1:-1:-1;5172:3:1;5157:19;;5144:33;;-1:-1:-1;5224:3:1;5209:19;;5196:33;;-1:-1:-1;5276:3:1;5261:19;5248:33;;-1:-1:-1;4626:661:1;-1:-1:-1;4626:661:1:o;5292:382::-;5357:6;5365;5418:2;5406:9;5397:7;5393:23;5389:32;5386:52;;;5434:1;5431;5424:12;5386:52;5473:9;5460:23;5492:31;5517:5;5492:31;:::i;:::-;5542:5;-1:-1:-1;5599:2:1;5584:18;;5571:32;5612:30;5571:32;5612:30;:::i;5679:315::-;5747:6;5755;5808:2;5796:9;5787:7;5783:23;5779:32;5776:52;;;5824:1;5821;5814:12;5776:52;5860:9;5847:23;5837:33;;5920:2;5909:9;5905:18;5892:32;5933:31;5958:5;5933:31;:::i;5999:248::-;6067:6;6075;6128:2;6116:9;6107:7;6103:23;6099:32;6096:52;;;6144:1;6141;6134:12;6096:52;-1:-1:-1;;6167:23:1;;;6237:2;6222:18;;;6209:32;;-1:-1:-1;5999:248:1:o;6252:388::-;6320:6;6328;6381:2;6369:9;6360:7;6356:23;6352:32;6349:52;;;6397:1;6394;6387:12;6349:52;6436:9;6423:23;6455:31;6480:5;6455:31;:::i;6645:316::-;6722:6;6730;6738;6791:2;6779:9;6770:7;6766:23;6762:32;6759:52;;;6807:1;6804;6797:12;6759:52;-1:-1:-1;;6830:23:1;;;6900:2;6885:18;;6872:32;;-1:-1:-1;6951:2:1;6936:18;;;6923:32;;6645:316;-1:-1:-1;6645:316:1:o;7472:329::-;7674:2;7656:21;;;7713:1;7693:18;;;7686:29;-1:-1:-1;;;7746:2:1;7731:18;;7724:36;7792:2;7777:18;;7472:329::o;8158:127::-;8219:10;8214:3;8210:20;8207:1;8200:31;8250:4;8247:1;8240:15;8274:4;8271:1;8264:15;8290:127;8351:10;8346:3;8342:20;8339:1;8332:31;8382:4;8379:1;8372:15;8406:4;8403:1;8396:15;8422:128;8489:9;;;8510:11;;;8507:37;;;8524:18;;:::i;8555:127::-;8616:10;8611:3;8607:20;8604:1;8597:31;8647:4;8644:1;8637:15;8671:4;8668:1;8661:15;8687:135;8726:3;8747:17;;;8744:43;;8767:18;;:::i;:::-;-1:-1:-1;8814:1:1;8803:13;;8687:135::o;9594:217::-;9634:1;9660;9650:132;;9704:10;9699:3;9695:20;9692:1;9685:31;9739:4;9736:1;9729:15;9767:4;9764:1;9757:15;9650:132;-1:-1:-1;9796:9:1;;9594:217::o;9816:125::-;9881:9;;;9902:10;;;9899:36;;;9915:18;;:::i;10728:184::-;10798:6;10851:2;10839:9;10830:7;10826:23;10822:32;10819:52;;;10867:1;10864;10857:12;10819:52;-1:-1:-1;10890:16:1;;10728:184;-1:-1:-1;10728:184:1:o;11219:245::-;11286:6;11339:2;11327:9;11318:7;11314:23;11310:32;11307:52;;;11355:1;11352;11345:12;11307:52;11387:9;11381:16;11406:28;11428:5;11406:28;:::i;12516:168::-;12589:9;;;12620;;12637:15;;;12631:22;;12617:37;12607:71;;12658:18;;:::i;15112:251::-;15182:6;15235:2;15223:9;15214:7;15210:23;15206:32;15203:52;;;15251:1;15248;15241:12;15203:52;15283:9;15277:16;15302:31;15327:5;15302:31;:::i;15368:484::-;15421:3;15459:5;15453:12;15486:6;15481:3;15474:19;15512:4;15541:2;15536:3;15532:12;15525:19;;15578:2;15571:5;15567:14;15599:1;15609:218;15623:6;15620:1;15617:13;15609:218;;;15688:13;;-1:-1:-1;;;;;15684:62:1;15672:75;;15767:12;;;;15802:15;;;;15645:1;15638:9;15609:218;;;-1:-1:-1;15843:3:1;;15368:484;-1:-1:-1;;;;;15368:484:1:o;15857:533::-;16128:6;16117:9;16110:25;16171:3;16166:2;16155:9;16151:18;16144:31;16091:4;16192:57;16244:3;16233:9;16229:19;16221:6;16192:57;:::i;:::-;-1:-1:-1;;;;;16285:55:1;;;;16280:2;16265:18;;16258:83;-1:-1:-1;16372:2:1;16357:18;16350:34;16184:65;15857:533;-1:-1:-1;;15857:533:1:o;16395:605::-;16694:6;16683:9;16676:25;16737:6;16732:2;16721:9;16717:18;16710:34;16780:3;16775:2;16764:9;16760:18;16753:31;16657:4;16801:57;16853:3;16842:9;16838:19;16830:6;16801:57;:::i;:::-;-1:-1:-1;;;;;16894:55:1;;;;16889:2;16874:18;;16867:83;-1:-1:-1;16981:3:1;16966:19;16959:35;16793:65;16395:605;-1:-1:-1;;;16395:605:1:o;17640:306::-;17728:6;17736;17744;17797:2;17785:9;17776:7;17772:23;17768:32;17765:52;;;17813:1;17810;17803:12;17765:52;17842:9;17836:16;17826:26;;17892:2;17881:9;17877:18;17871:25;17861:35;;17936:2;17925:9;17921:18;17915:25;17905:35;;17640:306;;;;;:::o

Swarm Source

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