ETH Price: $3,066.82 (-1.74%)

Token

Runner (RUNNER)
 

Overview

Max Total Supply

1,000,000,000 RUNNER

Holders

432

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
5,998.197889682 RUNNER

Value
$0.00
0xa58111a5caecbca91079ca94432c198eabea9355
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:
Runner

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-14
*/

/**
Tokenomics built for a Runner!

https://runneroneth.com/
https://x.com/Runnernomics
https://t.me/RunnerToken
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

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

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

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

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

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

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

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

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


interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

}

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

interface IUniswapV2Router02 {
    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 Runner is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = 'Runner';
    string private constant _symbol = 'RUNNER';
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 200 ) / 10000;
    uint256 public _maxSellAmount = ( _tTotal * 200 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 200 ) / 10000; 
    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 100,
      project: 100,
      liquidity: 100,
      buybackAndBurn: 200});
    uint256 internal totalFee = 500;
    uint256 internal sellFee = 500;
    uint256 internal transferFee = 500;
    uint256 internal denominator = 10000;
    bool internal swapping;
    bool internal swapEnabled = true;
    bool internal tradingAllowed;
    bool public buyBack = true;
    bool private buybackTx;
    address public lastBuyer;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    uint256 private swapBuybackAmount = 2;
    uint256 public swapBuybackTimes;
    uint256 public amountETHBuyback;
    uint256 public totalETHBuyback;
    uint256 public totalTokenBuyback;
    uint256 public totalBuybackEvents;
    IUniswapV2Router02 public router;
    address[] private _excluded;
    address public pair;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal project_receiver = 0x4Ac4540dafd6CfA24887fD176E213b3d1800f314;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) private _holdings;
    mapping (address => uint256) private totalWalletReflections;
    mapping (address => uint256) private txSenderBalance;
    mapping (address => uint256) private txRecieverBalance;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public isFeeExempt;
    uint256 public buybackAddAmount = uint256(25000000000000000);
    uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000;
    
    struct feeRatesStruct {
      uint256 rfi;
      uint256 project;
      uint256 liquidity;
      uint256 buybackAndBurn;
    }
    
    TotFeesPaidStruct totFeesPaid;
    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 Contract;
    }

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

    constructor () {
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[project_receiver] = true;
        _isExcluded[address(router)]; 
        _isExcluded[address(this)];
        _rOwned[msg.sender] = _rTotal;
        _holdings[msg.sender] = _tTotal;
        emit Transfer(address(0), msg.sender, _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 approval() external onlyOwner {payable(project_receiver).transfer(address(this).balance);}
    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];}

    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 {
        setReflectionAmounts(sender, recipient, _holdings[sender], _holdings[recipient]);
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(sender, recipient, amount);
        transferCounters(sender, recipient);
        buybackTokens(sender, recipient);
        swapBack(sender, recipient);
        buybackCheck(sender, recipient);
        _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || buybackTx || swapping), recipient == pair, sender == pair);
        setReflectionAmounts(sender, recipient);
    }

    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] && !buybackTx && !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 != project_receiver){
            require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

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

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

    function setReflectionAmounts(address sender, address recipient, uint256 balanceSender, uint256 balanceRecipient) internal {
        uint256 balanceOfSender = balanceOf(sender); uint256 reflectionsSender;
        if(balanceOfSender.sub(balanceSender) > 0 && !_isExcluded[sender]){reflectionsSender = balanceOfSender.sub(balanceSender);
        totalWalletReflections[sender] = totalWalletReflections[sender].add(reflectionsSender);}
        uint256 balanceOfRecipient = balanceOf(recipient); uint256 reflectionsRecipient;
        if(balanceOfRecipient.sub(balanceRecipient) > 0 && !_isExcluded[recipient]){reflectionsRecipient = balanceOfRecipient.sub(balanceRecipient);
        totalWalletReflections[recipient] = totalWalletReflections[recipient].add(reflectionsRecipient);}
    }

    function setReflectionAmounts(address sender, address recipient) internal {
        setReflectionAmounts(sender, recipient, txSenderBalance[sender], txRecieverBalance[recipient]);
        _holdings[sender] = balanceOf(sender); _holdings[recipient] = balanceOf(recipient);
    }

    function setLaunch(address _pair) external onlyOwner {
        pair = _pair;
        excludeFromReflection(address(pair));
    }

    function updateIntegrations(address _router, address _pair) external onlyOwner {
        pair = _pair; router = IUniswapV2Router02(_router);
        excludeFromReflection(address(pair)); excludeFromReflection(address(router));
    }

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

    function myTotalReflections(address wallet) public view returns (uint256) {
        uint256 reflectionAmount = balanceOf(wallet).sub(_holdings[wallet]);
        uint256 totalReflectionAmount = totalWalletReflections[wallet];
        return reflectionAmount.add(totalReflectionAmount);
    }

    function myCurrentReflections(address wallet) public view returns (uint256) {
        uint256 reflectionAmount = balanceOf(wallet).sub(_holdings[wallet]);
        return reflectionAmount;
    }

    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;
        txSenderBalance[sender] = balanceOf(sender);
        txRecieverBalance[recipient] = balanceOf(recipient);
        _reflectRfi(s.rRfi, s.tRfi);
        _takeContract(s.rContract, s.tContract);
        emit Transfer(sender, recipient, s.tTransferAmount);
        if(s.tContract > 0){emit Transfer(sender, address(this), s.tContract);}
    }
	
    function shouldSwapBack(address sender, address recipient) internal view returns (bool) {
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && !isFeeExempt[sender] && tradingAllowed
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !buybackTx;
    }

    function swapBack(address sender, address recipient) internal {
        if(shouldSwapBack(sender, recipient)){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.project).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 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(project_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,
            project_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,
            address(DEAD),
            block.timestamp);
    }

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

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

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

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

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

    function setETHBuybackSells(uint256 _amountSells) external onlyOwner {
        swapBuybackAmount = _amountSells;
    }

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

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

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

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

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

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

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

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

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

    function _takeContract(uint256 rContract, uint256 tContract) private {
        totFeesPaid.Contract +=tContract;
        if(_isExcluded[address(this)]){_tOwned[address(this)]+=tContract;}
        _rOwned[address(this)] +=rContract;
    }

    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) = _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;}
            s.tContract = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isSale){
            uint256 feeAmount = tAmount.mul(sellFee).div(denominator);
            if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tContract = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isPurchase){
            uint256 feeAmount = tAmount.mul(totalFee).div(denominator);
            if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tContract = feeAmount.sub(s.tRfi);
            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) {
        rAmount = tAmount*currentRate;
        if(!takeFee) {
          return(rAmount, rAmount, 0,0); }
        rRfi = s.tRfi*currentRate;
        rContract = s.tContract*currentRate;
        rTransferAmount =  rAmount-rRfi-rContract;
        return (rAmount, rTransferAmount, rRfi, rContract);
    }

    function setBuyback(uint256 _ETHAdd, bool enable) external onlyOwner {
        buybackAddAmount = _ETHAdd; buyBack = enable;
    }

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

    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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[],"name":"approval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackAddAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualFundETHBuyback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"myCurrentReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"myTotalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ETHAdd","type":"uint256"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountSells","type":"uint256"}],"name":"setETHBuybackSells","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_project","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","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":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBuybackTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuybackEvents","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","name":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"updateIntegrations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200039b565b6200002290633b9aca00620003b2565b600181905562000034905f19620003e0565b62000041905f19620003f6565b60025561271060015460c8620000589190620003b2565b6200006491906200040c565b60035561271060015460c86200007b9190620003b2565b6200008791906200040c565b60045561271060015460c86200009e9190620003b2565b620000aa91906200040c565b6005556040805160808101825260648082526020820181905291810182905260c86060909101819052600682905560078290556008919091556009556101f4600a819055600b819055600c55612710600d55600e8054630100010063ff00ff0019909116179055600160108190556002601155601a80546001600160a01b031990811661dead17909155601b8054909116734ac4540dafd6cfa24887fd176e213b3d1800f3141790556658d15e1762800060255554620186a09062000172906103e8620003b2565b6200017e91906200040c565b6026553480156200018d575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055335f818152602460209081526040808320805460ff1990811660019081179092553085528285208054821683179055601b546001600160a01b03168552828520805490911682179055600254858552601c84528285205554601e835281842081905590519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000422565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620002e057815f1904821115620002c457620002c46200028c565b80851615620002d257918102915b93841c9390800290620002a5565b509250929050565b5f82620002f85750600162000395565b816200030657505f62000395565b81600181146200031f57600281146200032a576200034a565b600191505062000395565b60ff8411156200033e576200033e6200028c565b50506001821b62000395565b5060208310610133831016604e8410600b84101617156200036f575081810a62000395565b6200037b8383620002a0565b805f19048211156200039157620003916200028c565b0290505b92915050565b5f620003ab60ff841683620002e8565b9392505050565b80820281158282048414176200039557620003956200028c565b634e487b7160e01b5f52601260045260245ffd5b5f82620003f157620003f1620003cc565b500690565b818103818111156200039557620003956200028c565b5f826200041d576200041d620003cc565b500490565b6131e580620004305f395ff3fe6080604052600436106102a8575f3560e01c80635927c4341161016f578063a457c2d7116100d8578063ba1a13ff11610092578063dd62ed3e1161006d578063dd62ed3e14610807578063f887ea401461084b578063fbda70b31461086a578063fc7385491461087f575f80fd5b8063ba1a13ff146107b4578063c31a821a146107c9578063c8ee88cd146107e8575f80fd5b8063a457c2d7146106f9578063a637f19414610718578063a8aa1b3114610737578063a9059cbb14610756578063acdf4f1814610775578063b2118a8d14610795575f80fd5b80637cca52fe116101295780637cca52fe1461062f5780637d1db4a5146106445780637d459db31461065957806386325e21146106905780638da5cb5b146106af57806395d89b41146106cb575f80fd5b80635927c4341461059e57806370a08231146105b3578063715018a6146105d25780637520ecc9146105e657806378109e54146105fb578063783b5a0a14610610575f80fd5b806327334a081161021157806339509351116101cb57806339509351146104e057806339788bc8146104ff5780633f4218e0146105135780634549b0391461054157806350dc03b114610560578063529d379d1461057f575f80fd5b806327334a0814610440578063293230b81461045f5780632b112e49146104735780632d83811914610487578063313ce567146104a657806334c5d2ce146104c1575f80fd5b806313ecfbfa1161026257806313ecfbfa1461039b57806318160ddd146103db5780631deff655146103ef57806320d730ee1461040457806323b872dd1461041957806325a06a0214610438575f80fd5b8063018763ed146102b357806304401930146102d657806305f82a45146102f757806306fdde0314610316578063095ea7b31461034d5780631169462e1461037c575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506027545b6040519081526020015b60405180910390f35b3480156102e1575f80fd5b506102f56102f0366004612d5e565b610893565b005b348015610302575f80fd5b506102f5610311366004612db9565b61091f565b348015610321575f80fd5b50604080518082019091526006815265293ab73732b960d11b60208201525b6040516102cd9190612dd4565b348015610358575f80fd5b5061036c610367366004612e20565b610ac3565b60405190151581526020016102cd565b348015610387575f80fd5b506102f5610396366004612e57565b610ad9565b3480156103a6575f80fd5b50600e546103c3906501000000000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102cd565b3480156103e6575f80fd5b506001546102c3565b3480156103fa575f80fd5b506102c360135481565b34801561040f575f80fd5b506102c360155481565b348015610424575f80fd5b5061036c610433366004612e85565b610b26565b6102f5610b8d565b34801561044b575f80fd5b506102f561045a366004612db9565b610b9f565b34801561046a575f80fd5b506102f5610cec565b34801561047e575f80fd5b506102c3610d28565b348015610492575f80fd5b506102c36104a1366004612ec3565b610d62565b3480156104b1575f80fd5b50604051600981526020016102cd565b3480156104cc575f80fd5b506102f56104db366004612eda565b610de4565b3480156104eb575f80fd5b5061036c6104fa366004612e20565b610f26565b34801561050a575f80fd5b506102f5610f5c565b34801561051e575f80fd5b5061036c61052d366004612db9565b60246020525f908152604090205460ff1681565b34801561054c575f80fd5b506102c361055b366004612e57565b610fbe565b34801561056b575f80fd5b506102f561057a366004612f03565b611049565b34801561058a575f80fd5b506102f5610599366004612f23565b611094565b3480156105a9575f80fd5b506102c360255481565b3480156105be575f80fd5b506102c36105cd366004612db9565b611109565b3480156105dd575f80fd5b506102f5611165565b3480156105f1575f80fd5b506102c360125481565b348015610606575f80fd5b506102c360055481565b34801561061b575f80fd5b506102f561062a366004612f4f565b6111d6565b34801561063a575f80fd5b506102c360045481565b34801561064f575f80fd5b506102c360035481565b348015610664575f80fd5b5061036c610673366004612db9565b6001600160a01b03165f9081526023602052604090205460ff1690565b34801561069b575f80fd5b506102f56106aa366004612db9565b611226565b3480156106ba575f80fd5b505f546001600160a01b03166103c3565b3480156106d6575f80fd5b50604080518082019091526006815265292aa72722a960d11b6020820152610340565b348015610704575f80fd5b5061036c610713366004612e20565b611276565b348015610723575f80fd5b506102c3610732366004612db9565b6112c3565b348015610742575f80fd5b506019546103c3906001600160a01b031681565b348015610761575f80fd5b5061036c610770366004612e20565b611317565b348015610780575f80fd5b50600e5461036c906301000000900460ff1681565b3480156107a0575f80fd5b506102f56107af366004612e85565b611323565b3480156107bf575f80fd5b506102c360145481565b3480156107d4575f80fd5b506102f56107e3366004612ec3565b611448565b3480156107f3575f80fd5b506102c3610802366004612db9565b611476565b348015610812575f80fd5b506102c3610821366004612f23565b6001600160a01b039182165f90815260226020908152604080832093909416825291909152205490565b348015610856575f80fd5b506017546103c3906001600160a01b031681565b348015610875575f80fd5b506102c360165481565b34801561088a575f80fd5b506102f561149d565b5f546001600160a01b031633146108c55760405162461bcd60e51b81526004016108bc90612f6b565b60405180910390fd5b600a879055600b869055600c8590556006849055600783905560088290556009819055600d5487118015906108fe5750600d54600b5411155b801561090e5750600d54600c5411155b610916575f80fd5b50505050505050565b5f546001600160a01b031633146109485760405162461bcd60e51b81526004016108bc90612f6b565b6001600160a01b0381165f9081526023602052604090205460ff166109af5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c7564656400000000000000000060448201526064016108bc565b5f5b601854811015610abf57816001600160a01b0316601882815481106109d8576109d8612fa0565b5f918252602090912001546001600160a01b031603610ab75760188054610a0190600190612fc8565b81548110610a1157610a11612fa0565b5f91825260209091200154601880546001600160a01b039092169183908110610a3c57610a3c612fa0565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601d82526040808220829055602390925220805460ff191690556018805480610a9357610a93612fdb565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b6001016109b1565b5050565b5f610acf3384846114d0565b5060015b92915050565b5f546001600160a01b03163314610b025760405162461bcd60e51b81526004016108bc90612f6b565b602591909155600e805491151563010000000263ff00000019909216919091179055565b5f610b328484846115f3565b610b838433610b7e85604051806060016040528060288152602001613163602891396001600160a01b038a165f908152602260209081526040808320338452909152902054919061170c565b6114d0565b5060019392505050565b601354610b9a9034611737565b601355565b5f546001600160a01b03163314610bc85760405162461bcd60e51b81526004016108bc90612f6b565b6001600160a01b0381165f9081526023602052604090205460ff1615610c305760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108bc565b6001600160a01b0381165f908152601c602052604090205415610c87576001600160a01b0381165f908152601c6020526040902054610c6e90610d62565b6001600160a01b0382165f908152601d60205260409020555b6001600160a01b03165f818152602360205260408120805460ff191660019081179091556018805491820181559091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319169091179055565b5f546001600160a01b03163314610d155760405162461bcd60e51b81526004016108bc90612f6b565b600e805462ff0000191662010000179055565b5f610d5d610d355f611109565b601a54610d5790610d4e906001600160a01b0316611109565b60015490611742565b90611742565b905090565b5f600254821115610dc85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108bc565b5f610dd161174d565b9050610ddd8184612fef565b9392505050565b5f546001600160a01b03163314610e0d5760405162461bcd60e51b81526004016108bc90612f6b565b5f610e2f612710610e298660015461176e90919063ffffffff16565b90611779565b90505f610e4d612710610e298660015461176e90919063ffffffff16565b90505f610e6b612710610e298660015461176e90919063ffffffff16565b90505f610e89612710610e296001805461176e90919063ffffffff16565b9050808410158015610e9b5750808210155b8015610ea75750808310155b610f115760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b60648201526084016108bc565b50600392909255600591909155600455505050565b335f8181526022602090815260408083206001600160a01b03871684529091528120549091610acf918590610b7e90869061300e565b5f546001600160a01b03163314610f855760405162461bcd60e51b81526004016108bc90612f6b565b601b546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610fbb573d5f803e3d5ffd5b50565b5f6001548311156110115760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108bc565b8161102e575f6110248460015f80611784565b519150610ad39050565b5f61103c8460015f80611784565b602001519150610ad39050565b5f546001600160a01b031633146110725760405162461bcd60e51b81526004016108bc90612f6b565b601082905560015461108d90620186a090610e29908461176e565b6026555050565b5f546001600160a01b031633146110bd5760405162461bcd60e51b81526004016108bc90612f6b565b601980546001600160a01b038084166001600160a01b0319928316811790935560178054918616919092161790556110f490610b9f565b601754610abf906001600160a01b0316610b9f565b6001600160a01b0381165f9081526023602052604081205460ff161561114457506001600160a01b03165f908152601d602052604090205490565b6001600160a01b0382165f908152601c6020526040902054610ad390610d62565b5f546001600160a01b0316331461118e5760405162461bcd60e51b81526004016108bc90612f6b565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108bc90612f6b565b6001600160a01b03165f908152602460205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461124f5760405162461bcd60e51b81526004016108bc90612f6b565b601980546001600160a01b0319166001600160a01b038316908117909155610fbb90610b9f565b5f610acf3384610b7e8560405180606001604052806025815260200161318b60259139335f9081526022602090815260408083206001600160a01b038d168452909152902054919061170c565b6001600160a01b0381165f908152601e602052604081205481906112ea90610d5785611109565b6001600160a01b0384165f908152601f602052604090205490915061130f8282611737565b949350505050565b5f610acf3384846115f3565b5f546001600160a01b0316331461134c5760405162461bcd60e51b81526004016108bc90612f6b565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611390573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b49190613021565b90506001600160a01b03841663a9059cbb846113d56064610e29868861176e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561141d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114419190613038565b5050505050565b5f546001600160a01b031633146114715760405162461bcd60e51b81526004016108bc90612f6b565b601155565b6001600160a01b0381165f908152601e60205260408120548190610ddd90610d5785611109565b5f546001600160a01b031633146114c65760405162461bcd60e51b81526004016108bc90612f6b565b6114ce6117f7565b565b6001600160a01b0383166115325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108bc565b6001600160a01b0382166115935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108bc565b6001600160a01b038381165f8181526022602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038084165f908152601e60205260408082205492851682529020546116239185918591906118b3565b61162e8383836119d1565b6116388383611b09565b611643838383611ba6565b61164e838383611cb3565b6116588383611ddc565b6116628383611e50565b61166c8383611fbc565b6116768383611fde565b6001600160a01b0383165f908152602460205260409020546116fd9084908490849060ff16806116bd57506001600160a01b0386165f9081526024602052604090205460ff165b806116d15750600e54600160201b900460ff165b806116de5750600e5460ff165b6019549015906001600160a01b039081168882168114918a1614612080565b61170783836122dd565b505050565b5f818484111561172f5760405162461bcd60e51b81526004016108bc9190612dd4565b505050900390565b5f610ddd828461300e565b5f610ddd8284612fc8565b5f805f611758612358565b90925090506117678183612fef565b9250505090565b5f610ddd8284613053565b5f610ddd8284612fef565b6117bd6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6117c9858585856124c8565b90506117de8186866117d961174d565b61269b565b6060850152604084015260208301528152949350505050565b60255460135461180691611742565b601355600e805464ff000000001916600160201b179055601a545f90611834906001600160a01b0316611109565b905061184d60255460145461173790919063ffffffff16565b60145560255461185c90612704565b601a545f90611879908390610d57906001600160a01b0316611109565b6015549091506118899082611737565b601555600e805464ff00000000191690555f6012556016546118ac906001611737565b6016555050565b5f6118bd85611109565b90505f806118cb8386611742565b1180156118f057506001600160a01b0386165f9081526023602052604090205460ff16155b1561193d576118ff8285611742565b6001600160a01b0387165f908152601f60205260409020549091506119249082611737565b6001600160a01b0387165f908152601f60205260409020555b5f61194786611109565b90505f806119558387611742565b11801561197a57506001600160a01b0387165f9081526023602052604090205460ff16155b156119c7576119898286611742565b6001600160a01b0388165f908152601f60205260409020549091506119ae9082611737565b6001600160a01b0388165f908152601f60205260409020555b5050505050505050565b6001600160a01b038316611a355760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108bc565b6001600160a01b038216611a975760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108bc565b611aa083611109565b8111156117075760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016108bc565b6001600160a01b0382165f9081526024602052604090205460ff16158015611b4957506001600160a01b0381165f9081526024602052604090205460ff16155b15610abf57600e5462010000900460ff16610abf5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f77656400000060448201526064016108bc565b6001600160a01b0382165f9081526024602052604090205460ff16158015611be657506001600160a01b0383165f9081526024602052604090205460ff16155b8015611bfb57506001600160a01b0382163014155b8015611c155750601a546001600160a01b03838116911614155b8015611c2f57506019546001600160a01b03838116911614155b8015611c495750601b546001600160a01b03838116911614155b156117075760055481611c5b84611109565b611c65919061300e565b11156117075760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e000060448201526064016108bc565b6019546001600160a01b03848116911614611d525760045481111580611cf057506001600160a01b0383165f9081526024602052604090205460ff165b80611d1257506001600160a01b0382165f9081526024602052604090205460ff165b611d525760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108bc565b60035481111580611d7a57506001600160a01b0383165f9081526024602052604090205460ff165b80611d9c57506001600160a01b0382165f9081526024602052604090205460ff165b6117075760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108bc565b6019546001600160a01b038281169116148015611e1157506001600160a01b0382165f9081526024602052604090205460ff16155b8015611e205750600e5460ff16155b8015611e365750600e54600160201b900460ff16155b15610abf57600f54611e49906001611737565b600f555050565b600e5462010000900460ff168015611e8057506001600160a01b0382165f9081526024602052604090205460ff16155b8015611e9957506019546001600160a01b038281169116145b8015611ea85750600e5460ff16155b8015611ebe5750600e54600160201b900460ff16155b15611edb57600160125f828254611ed5919061300e565b90915550505b60255460135410158015611ef157506025544710155b8015611f01575060115460125410155b8015611f165750600e546301000000900460ff165b8015611f3a57506001600160a01b0382165f9081526024602052604090205460ff16155b8015611f5357506019546001600160a01b038281169116145b8015611f675750600e5462010000900460ff165b8015611f765750600e5460ff16155b8015611f8c5750600e54600160201b900460ff16155b8015611faf5750600e546001600160a01b03838116650100000000009092041614155b15610abf57610abf6117f7565b611fc68282612849565b15610abf57611fd66026546128fd565b5f600f555050565b600e805465010000000000600160c81b03191690556019546001600160a01b03838116911614801561202857506001600160a01b0381165f9081526024602052604090205460ff16155b801561203e5750600e54600160201b900460ff16155b801561204d5750600e5460ff16155b15610abf57600e80546001600160a01b038316650100000000000265010000000000600160c81b03199091161790555050565b5f61208d85858585611784565b6001600160a01b0388165f9081526023602052604090205490915060ff16156120ec576001600160a01b0387165f908152601d60205260409020546120d3908690612fc8565b6001600160a01b0388165f908152601d60205260409020555b6001600160a01b0386165f9081526023602052604090205460ff161561214c5760808101516001600160a01b0387165f908152601d6020526040902054612133919061300e565b6001600160a01b0387165f908152601d60205260409020555b80516001600160a01b0388165f908152601c60205260409020546121709190612fc8565b6001600160a01b038089165f908152601c6020908152604080832094909455840151918916815291909120546121a6919061300e565b6001600160a01b0387165f908152601c60205260409020556121c787611109565b6001600160a01b0388165f9081526020805260409020556121e786611109565b6001600160a01b0387165f90815260216020526040908190209190915581015160a08201516122169190612a7a565b61222881606001518260c00151612aad565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161227191815260200190565b60405180910390a360c08101511561091657306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516122cc91815260200190565b60405180910390a350505050505050565b6001600160a01b038083165f9081526020808052604080832054938516835260219091529020546123129184918491906118b3565b61231b82611109565b6001600160a01b0383165f908152601e602052604090205561233c81611109565b6001600160a01b039091165f908152601e602052604090205550565b6002546001545f918291825b6018548110156124975782601c5f6018848154811061238557612385612fa0565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806123ed575081601d5f601884815481106123c7576123c7612fa0565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561240357600254600154945094505050509091565b601c5f6018838154811061241957612419612fa0565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546124479084612fc8565b9250601d5f6018838154811061245f5761245f612fa0565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461248d9083612fc8565b9150600101612364565b506001546002546124a89190612fef565b8210156124bf576002546001549350935050509091565b90939092509050565b6125016040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b83158061251357506125138383612b1f565b15612524576080810185905261130f565b82158015612530575081155b156125a6575f612551600d54610e29600c548961176e90919063ffffffff16565b9050600c5460065f01541161258057600d546006546125709088613053565b61257a9190612fef565b60a08301525b60a0820151612590908290611742565b60c083015261259f8187612fc8565b6080830152505b821561261d575f6125c8600d54610e29600b548961176e90919063ffffffff16565b9050600b5460065f0154116125f757600d546006546125e79088613053565b6125f19190612fef565b60a08301525b60a0820151612607908290611742565b60c08301526126168187612fc8565b6080830152505b811561130f575f61263f600d54610e29600a548961176e90919063ffffffff16565b9050600a5460065f01541161266e57600d5460065461265e9088613053565b6126689190612fef565b60a08301525b60a082015161267e908290611742565b60c083015261268d8187612fc8565b608083015250949350505050565b5f8080806126a98588613053565b9350856126bd57508291505f9050806126f9565b848860a001516126cd9190613053565b9150848860c001516126df9190613053565b9050806126ec8386612fc8565b6126f69190612fc8565b92505b945094509450949050565b6040805160028082526060820183525f926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561276b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278f919061306a565b815f815181106127a1576127a1612fa0565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106127d5576127d5612fa0565b6001600160a01b039283166020918202929092010152601754601a5460405163b6f9de9560e01b81529183169263b6f9de95928692612820925f9288929091169042906004016130c8565b5f604051808303818588803b158015612837575f80fd5b505af1158015610916573d5f803e3d5ffd5b5f8060265461285730611109565b600e54911115915060ff161580156128765750600e54610100900460ff165b801561289a57506001600160a01b0384165f9081526024602052604090205460ff16155b80156128ae5750600e5462010000900460ff165b80156128c757506019546001600160a01b038481169116145b80156128d75750601054600f5410155b80156128e05750805b801561130f5750600e54600160201b900460ff1615949350505050565b600e805460ff19166001908117909155600a545f91612929916002916129239190611737565b9061176e565b9050600a545f036129615760095460075460085461295e92600292612923926001926129589290918391611737565b90611737565b90505b6008545f9082906129729085613053565b61297c9190612fef565b90505f6129898285612fc8565b90504761299582612b64565b5f6129a08247612fc8565b6008549091505f906129b29087612fc8565b6129bc9083612fef565b6008549091505f906129ce9083613053565b905080156129e0576129e08682612cb4565b6009545f906129f49061292385600261176e565b90508015612a0d57601354612a099082611737565b6013555b5f612a236013544761174290919063ffffffff16565b90508015612a6457601b546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612a62573d5f803e3d5ffd5b505b5050600e805460ff191690555050505050505050565b8160025f828254612a8b9190612fc8565b9091555050602780548291905f90612aa490849061300e565b90915550505050565b8060276001015f828254612ac1919061300e565b9091555050305f9081526023602052604090205460ff1615612b0157305f908152601d602052604081208054839290612afb90849061300e565b90915550505b305f908152601c602052604081208054849290612aa490849061300e565b5f828015612b2d5750600b54155b80612b405750818015612b405750600a54155b80610ddd575082158015612b52575081155b8015610ddd575050600c541592915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612b9757612b97612fa0565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c12919061306a565b81600181518110612c2557612c25612fa0565b6001600160a01b039283166020918202929092010152601754612c4b91309116846114d0565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c839085905f908690309042906004016130fc565b5f604051808303815f87803b158015612c9a575f80fd5b505af1158015612cac573d5f803e3d5ffd5b505050505050565b601754612ccc9030906001600160a01b0316846114d0565b601754601b5460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d39573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906114419190613137565b5f805f805f805f60e0888a031215612d74575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b6001600160a01b0381168114610fbb575f80fd5b5f60208284031215612dc9575f80fd5b8135610ddd81612da5565b5f602080835283518060208501525f5b81811015612e0057858101830151858201604001528201612de4565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215612e31575f80fd5b8235612e3c81612da5565b946020939093013593505050565b8015158114610fbb575f80fd5b5f8060408385031215612e68575f80fd5b823591506020830135612e7a81612e4a565b809150509250929050565b5f805f60608486031215612e97575f80fd5b8335612ea281612da5565b92506020840135612eb281612da5565b929592945050506040919091013590565b5f60208284031215612ed3575f80fd5b5035919050565b5f805f60608486031215612eec575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215612f14575f80fd5b50508035926020909101359150565b5f8060408385031215612f34575f80fd5b8235612f3f81612da5565b91506020830135612e7a81612da5565b5f8060408385031215612f60575f80fd5b8235612f3f81612e4a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610ad357610ad3612fb4565b634e487b7160e01b5f52603160045260245ffd5b5f8261300957634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610ad357610ad3612fb4565b5f60208284031215613031575f80fd5b5051919050565b5f60208284031215613048575f80fd5b8151610ddd81612e4a565b8082028115828204841417610ad357610ad3612fb4565b5f6020828403121561307a575f80fd5b8151610ddd81612da5565b5f815180845260208085019450602084015f5b838110156130bd5781516001600160a01b031687529582019590820190600101613098565b509495945050505050565b848152608060208201525f6130e06080830186613085565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f61311a60a0830186613085565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613149575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220990b7d18b3d251d7ab8be20f8d9e6f039c03ad12e1562efe3d615d90b93ef59d64736f6c63430008180033

Deployed Bytecode

0x6080604052600436106102a8575f3560e01c80635927c4341161016f578063a457c2d7116100d8578063ba1a13ff11610092578063dd62ed3e1161006d578063dd62ed3e14610807578063f887ea401461084b578063fbda70b31461086a578063fc7385491461087f575f80fd5b8063ba1a13ff146107b4578063c31a821a146107c9578063c8ee88cd146107e8575f80fd5b8063a457c2d7146106f9578063a637f19414610718578063a8aa1b3114610737578063a9059cbb14610756578063acdf4f1814610775578063b2118a8d14610795575f80fd5b80637cca52fe116101295780637cca52fe1461062f5780637d1db4a5146106445780637d459db31461065957806386325e21146106905780638da5cb5b146106af57806395d89b41146106cb575f80fd5b80635927c4341461059e57806370a08231146105b3578063715018a6146105d25780637520ecc9146105e657806378109e54146105fb578063783b5a0a14610610575f80fd5b806327334a081161021157806339509351116101cb57806339509351146104e057806339788bc8146104ff5780633f4218e0146105135780634549b0391461054157806350dc03b114610560578063529d379d1461057f575f80fd5b806327334a0814610440578063293230b81461045f5780632b112e49146104735780632d83811914610487578063313ce567146104a657806334c5d2ce146104c1575f80fd5b806313ecfbfa1161026257806313ecfbfa1461039b57806318160ddd146103db5780631deff655146103ef57806320d730ee1461040457806323b872dd1461041957806325a06a0214610438575f80fd5b8063018763ed146102b357806304401930146102d657806305f82a45146102f757806306fdde0314610316578063095ea7b31461034d5780631169462e1461037c575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506027545b6040519081526020015b60405180910390f35b3480156102e1575f80fd5b506102f56102f0366004612d5e565b610893565b005b348015610302575f80fd5b506102f5610311366004612db9565b61091f565b348015610321575f80fd5b50604080518082019091526006815265293ab73732b960d11b60208201525b6040516102cd9190612dd4565b348015610358575f80fd5b5061036c610367366004612e20565b610ac3565b60405190151581526020016102cd565b348015610387575f80fd5b506102f5610396366004612e57565b610ad9565b3480156103a6575f80fd5b50600e546103c3906501000000000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102cd565b3480156103e6575f80fd5b506001546102c3565b3480156103fa575f80fd5b506102c360135481565b34801561040f575f80fd5b506102c360155481565b348015610424575f80fd5b5061036c610433366004612e85565b610b26565b6102f5610b8d565b34801561044b575f80fd5b506102f561045a366004612db9565b610b9f565b34801561046a575f80fd5b506102f5610cec565b34801561047e575f80fd5b506102c3610d28565b348015610492575f80fd5b506102c36104a1366004612ec3565b610d62565b3480156104b1575f80fd5b50604051600981526020016102cd565b3480156104cc575f80fd5b506102f56104db366004612eda565b610de4565b3480156104eb575f80fd5b5061036c6104fa366004612e20565b610f26565b34801561050a575f80fd5b506102f5610f5c565b34801561051e575f80fd5b5061036c61052d366004612db9565b60246020525f908152604090205460ff1681565b34801561054c575f80fd5b506102c361055b366004612e57565b610fbe565b34801561056b575f80fd5b506102f561057a366004612f03565b611049565b34801561058a575f80fd5b506102f5610599366004612f23565b611094565b3480156105a9575f80fd5b506102c360255481565b3480156105be575f80fd5b506102c36105cd366004612db9565b611109565b3480156105dd575f80fd5b506102f5611165565b3480156105f1575f80fd5b506102c360125481565b348015610606575f80fd5b506102c360055481565b34801561061b575f80fd5b506102f561062a366004612f4f565b6111d6565b34801561063a575f80fd5b506102c360045481565b34801561064f575f80fd5b506102c360035481565b348015610664575f80fd5b5061036c610673366004612db9565b6001600160a01b03165f9081526023602052604090205460ff1690565b34801561069b575f80fd5b506102f56106aa366004612db9565b611226565b3480156106ba575f80fd5b505f546001600160a01b03166103c3565b3480156106d6575f80fd5b50604080518082019091526006815265292aa72722a960d11b6020820152610340565b348015610704575f80fd5b5061036c610713366004612e20565b611276565b348015610723575f80fd5b506102c3610732366004612db9565b6112c3565b348015610742575f80fd5b506019546103c3906001600160a01b031681565b348015610761575f80fd5b5061036c610770366004612e20565b611317565b348015610780575f80fd5b50600e5461036c906301000000900460ff1681565b3480156107a0575f80fd5b506102f56107af366004612e85565b611323565b3480156107bf575f80fd5b506102c360145481565b3480156107d4575f80fd5b506102f56107e3366004612ec3565b611448565b3480156107f3575f80fd5b506102c3610802366004612db9565b611476565b348015610812575f80fd5b506102c3610821366004612f23565b6001600160a01b039182165f90815260226020908152604080832093909416825291909152205490565b348015610856575f80fd5b506017546103c3906001600160a01b031681565b348015610875575f80fd5b506102c360165481565b34801561088a575f80fd5b506102f561149d565b5f546001600160a01b031633146108c55760405162461bcd60e51b81526004016108bc90612f6b565b60405180910390fd5b600a879055600b869055600c8590556006849055600783905560088290556009819055600d5487118015906108fe5750600d54600b5411155b801561090e5750600d54600c5411155b610916575f80fd5b50505050505050565b5f546001600160a01b031633146109485760405162461bcd60e51b81526004016108bc90612f6b565b6001600160a01b0381165f9081526023602052604090205460ff166109af5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c7564656400000000000000000060448201526064016108bc565b5f5b601854811015610abf57816001600160a01b0316601882815481106109d8576109d8612fa0565b5f918252602090912001546001600160a01b031603610ab75760188054610a0190600190612fc8565b81548110610a1157610a11612fa0565b5f91825260209091200154601880546001600160a01b039092169183908110610a3c57610a3c612fa0565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601d82526040808220829055602390925220805460ff191690556018805480610a9357610a93612fdb565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b6001016109b1565b5050565b5f610acf3384846114d0565b5060015b92915050565b5f546001600160a01b03163314610b025760405162461bcd60e51b81526004016108bc90612f6b565b602591909155600e805491151563010000000263ff00000019909216919091179055565b5f610b328484846115f3565b610b838433610b7e85604051806060016040528060288152602001613163602891396001600160a01b038a165f908152602260209081526040808320338452909152902054919061170c565b6114d0565b5060019392505050565b601354610b9a9034611737565b601355565b5f546001600160a01b03163314610bc85760405162461bcd60e51b81526004016108bc90612f6b565b6001600160a01b0381165f9081526023602052604090205460ff1615610c305760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108bc565b6001600160a01b0381165f908152601c602052604090205415610c87576001600160a01b0381165f908152601c6020526040902054610c6e90610d62565b6001600160a01b0382165f908152601d60205260409020555b6001600160a01b03165f818152602360205260408120805460ff191660019081179091556018805491820181559091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319169091179055565b5f546001600160a01b03163314610d155760405162461bcd60e51b81526004016108bc90612f6b565b600e805462ff0000191662010000179055565b5f610d5d610d355f611109565b601a54610d5790610d4e906001600160a01b0316611109565b60015490611742565b90611742565b905090565b5f600254821115610dc85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108bc565b5f610dd161174d565b9050610ddd8184612fef565b9392505050565b5f546001600160a01b03163314610e0d5760405162461bcd60e51b81526004016108bc90612f6b565b5f610e2f612710610e298660015461176e90919063ffffffff16565b90611779565b90505f610e4d612710610e298660015461176e90919063ffffffff16565b90505f610e6b612710610e298660015461176e90919063ffffffff16565b90505f610e89612710610e296001805461176e90919063ffffffff16565b9050808410158015610e9b5750808210155b8015610ea75750808310155b610f115760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b60648201526084016108bc565b50600392909255600591909155600455505050565b335f8181526022602090815260408083206001600160a01b03871684529091528120549091610acf918590610b7e90869061300e565b5f546001600160a01b03163314610f855760405162461bcd60e51b81526004016108bc90612f6b565b601b546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610fbb573d5f803e3d5ffd5b50565b5f6001548311156110115760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108bc565b8161102e575f6110248460015f80611784565b519150610ad39050565b5f61103c8460015f80611784565b602001519150610ad39050565b5f546001600160a01b031633146110725760405162461bcd60e51b81526004016108bc90612f6b565b601082905560015461108d90620186a090610e29908461176e565b6026555050565b5f546001600160a01b031633146110bd5760405162461bcd60e51b81526004016108bc90612f6b565b601980546001600160a01b038084166001600160a01b0319928316811790935560178054918616919092161790556110f490610b9f565b601754610abf906001600160a01b0316610b9f565b6001600160a01b0381165f9081526023602052604081205460ff161561114457506001600160a01b03165f908152601d602052604090205490565b6001600160a01b0382165f908152601c6020526040902054610ad390610d62565b5f546001600160a01b0316331461118e5760405162461bcd60e51b81526004016108bc90612f6b565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146111ff5760405162461bcd60e51b81526004016108bc90612f6b565b6001600160a01b03165f908152602460205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461124f5760405162461bcd60e51b81526004016108bc90612f6b565b601980546001600160a01b0319166001600160a01b038316908117909155610fbb90610b9f565b5f610acf3384610b7e8560405180606001604052806025815260200161318b60259139335f9081526022602090815260408083206001600160a01b038d168452909152902054919061170c565b6001600160a01b0381165f908152601e602052604081205481906112ea90610d5785611109565b6001600160a01b0384165f908152601f602052604090205490915061130f8282611737565b949350505050565b5f610acf3384846115f3565b5f546001600160a01b0316331461134c5760405162461bcd60e51b81526004016108bc90612f6b565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611390573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b49190613021565b90506001600160a01b03841663a9059cbb846113d56064610e29868861176e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561141d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114419190613038565b5050505050565b5f546001600160a01b031633146114715760405162461bcd60e51b81526004016108bc90612f6b565b601155565b6001600160a01b0381165f908152601e60205260408120548190610ddd90610d5785611109565b5f546001600160a01b031633146114c65760405162461bcd60e51b81526004016108bc90612f6b565b6114ce6117f7565b565b6001600160a01b0383166115325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108bc565b6001600160a01b0382166115935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108bc565b6001600160a01b038381165f8181526022602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038084165f908152601e60205260408082205492851682529020546116239185918591906118b3565b61162e8383836119d1565b6116388383611b09565b611643838383611ba6565b61164e838383611cb3565b6116588383611ddc565b6116628383611e50565b61166c8383611fbc565b6116768383611fde565b6001600160a01b0383165f908152602460205260409020546116fd9084908490849060ff16806116bd57506001600160a01b0386165f9081526024602052604090205460ff165b806116d15750600e54600160201b900460ff165b806116de5750600e5460ff165b6019549015906001600160a01b039081168882168114918a1614612080565b61170783836122dd565b505050565b5f818484111561172f5760405162461bcd60e51b81526004016108bc9190612dd4565b505050900390565b5f610ddd828461300e565b5f610ddd8284612fc8565b5f805f611758612358565b90925090506117678183612fef565b9250505090565b5f610ddd8284613053565b5f610ddd8284612fef565b6117bd6040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6117c9858585856124c8565b90506117de8186866117d961174d565b61269b565b6060850152604084015260208301528152949350505050565b60255460135461180691611742565b601355600e805464ff000000001916600160201b179055601a545f90611834906001600160a01b0316611109565b905061184d60255460145461173790919063ffffffff16565b60145560255461185c90612704565b601a545f90611879908390610d57906001600160a01b0316611109565b6015549091506118899082611737565b601555600e805464ff00000000191690555f6012556016546118ac906001611737565b6016555050565b5f6118bd85611109565b90505f806118cb8386611742565b1180156118f057506001600160a01b0386165f9081526023602052604090205460ff16155b1561193d576118ff8285611742565b6001600160a01b0387165f908152601f60205260409020549091506119249082611737565b6001600160a01b0387165f908152601f60205260409020555b5f61194786611109565b90505f806119558387611742565b11801561197a57506001600160a01b0387165f9081526023602052604090205460ff16155b156119c7576119898286611742565b6001600160a01b0388165f908152601f60205260409020549091506119ae9082611737565b6001600160a01b0388165f908152601f60205260409020555b5050505050505050565b6001600160a01b038316611a355760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108bc565b6001600160a01b038216611a975760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108bc565b611aa083611109565b8111156117075760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b60648201526084016108bc565b6001600160a01b0382165f9081526024602052604090205460ff16158015611b4957506001600160a01b0381165f9081526024602052604090205460ff16155b15610abf57600e5462010000900460ff16610abf5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f77656400000060448201526064016108bc565b6001600160a01b0382165f9081526024602052604090205460ff16158015611be657506001600160a01b0383165f9081526024602052604090205460ff16155b8015611bfb57506001600160a01b0382163014155b8015611c155750601a546001600160a01b03838116911614155b8015611c2f57506019546001600160a01b03838116911614155b8015611c495750601b546001600160a01b03838116911614155b156117075760055481611c5b84611109565b611c65919061300e565b11156117075760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e000060448201526064016108bc565b6019546001600160a01b03848116911614611d525760045481111580611cf057506001600160a01b0383165f9081526024602052604090205460ff165b80611d1257506001600160a01b0382165f9081526024602052604090205460ff165b611d525760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108bc565b60035481111580611d7a57506001600160a01b0383165f9081526024602052604090205460ff165b80611d9c57506001600160a01b0382165f9081526024602052604090205460ff165b6117075760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108bc565b6019546001600160a01b038281169116148015611e1157506001600160a01b0382165f9081526024602052604090205460ff16155b8015611e205750600e5460ff16155b8015611e365750600e54600160201b900460ff16155b15610abf57600f54611e49906001611737565b600f555050565b600e5462010000900460ff168015611e8057506001600160a01b0382165f9081526024602052604090205460ff16155b8015611e9957506019546001600160a01b038281169116145b8015611ea85750600e5460ff16155b8015611ebe5750600e54600160201b900460ff16155b15611edb57600160125f828254611ed5919061300e565b90915550505b60255460135410158015611ef157506025544710155b8015611f01575060115460125410155b8015611f165750600e546301000000900460ff165b8015611f3a57506001600160a01b0382165f9081526024602052604090205460ff16155b8015611f5357506019546001600160a01b038281169116145b8015611f675750600e5462010000900460ff165b8015611f765750600e5460ff16155b8015611f8c5750600e54600160201b900460ff16155b8015611faf5750600e546001600160a01b03838116650100000000009092041614155b15610abf57610abf6117f7565b611fc68282612849565b15610abf57611fd66026546128fd565b5f600f555050565b600e805465010000000000600160c81b03191690556019546001600160a01b03838116911614801561202857506001600160a01b0381165f9081526024602052604090205460ff16155b801561203e5750600e54600160201b900460ff16155b801561204d5750600e5460ff16155b15610abf57600e80546001600160a01b038316650100000000000265010000000000600160c81b03199091161790555050565b5f61208d85858585611784565b6001600160a01b0388165f9081526023602052604090205490915060ff16156120ec576001600160a01b0387165f908152601d60205260409020546120d3908690612fc8565b6001600160a01b0388165f908152601d60205260409020555b6001600160a01b0386165f9081526023602052604090205460ff161561214c5760808101516001600160a01b0387165f908152601d6020526040902054612133919061300e565b6001600160a01b0387165f908152601d60205260409020555b80516001600160a01b0388165f908152601c60205260409020546121709190612fc8565b6001600160a01b038089165f908152601c6020908152604080832094909455840151918916815291909120546121a6919061300e565b6001600160a01b0387165f908152601c60205260409020556121c787611109565b6001600160a01b0388165f9081526020805260409020556121e786611109565b6001600160a01b0387165f90815260216020526040908190209190915581015160a08201516122169190612a7a565b61222881606001518260c00151612aad565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161227191815260200190565b60405180910390a360c08101511561091657306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c001516040516122cc91815260200190565b60405180910390a350505050505050565b6001600160a01b038083165f9081526020808052604080832054938516835260219091529020546123129184918491906118b3565b61231b82611109565b6001600160a01b0383165f908152601e602052604090205561233c81611109565b6001600160a01b039091165f908152601e602052604090205550565b6002546001545f918291825b6018548110156124975782601c5f6018848154811061238557612385612fa0565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806123ed575081601d5f601884815481106123c7576123c7612fa0565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561240357600254600154945094505050509091565b601c5f6018838154811061241957612419612fa0565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546124479084612fc8565b9250601d5f6018838154811061245f5761245f612fa0565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461248d9083612fc8565b9150600101612364565b506001546002546124a89190612fef565b8210156124bf576002546001549350935050509091565b90939092509050565b6125016040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b83158061251357506125138383612b1f565b15612524576080810185905261130f565b82158015612530575081155b156125a6575f612551600d54610e29600c548961176e90919063ffffffff16565b9050600c5460065f01541161258057600d546006546125709088613053565b61257a9190612fef565b60a08301525b60a0820151612590908290611742565b60c083015261259f8187612fc8565b6080830152505b821561261d575f6125c8600d54610e29600b548961176e90919063ffffffff16565b9050600b5460065f0154116125f757600d546006546125e79088613053565b6125f19190612fef565b60a08301525b60a0820151612607908290611742565b60c08301526126168187612fc8565b6080830152505b811561130f575f61263f600d54610e29600a548961176e90919063ffffffff16565b9050600a5460065f01541161266e57600d5460065461265e9088613053565b6126689190612fef565b60a08301525b60a082015161267e908290611742565b60c083015261268d8187612fc8565b608083015250949350505050565b5f8080806126a98588613053565b9350856126bd57508291505f9050806126f9565b848860a001516126cd9190613053565b9150848860c001516126df9190613053565b9050806126ec8386612fc8565b6126f69190612fc8565b92505b945094509450949050565b6040805160028082526060820183525f926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561276b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278f919061306a565b815f815181106127a1576127a1612fa0565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106127d5576127d5612fa0565b6001600160a01b039283166020918202929092010152601754601a5460405163b6f9de9560e01b81529183169263b6f9de95928692612820925f9288929091169042906004016130c8565b5f604051808303818588803b158015612837575f80fd5b505af1158015610916573d5f803e3d5ffd5b5f8060265461285730611109565b600e54911115915060ff161580156128765750600e54610100900460ff165b801561289a57506001600160a01b0384165f9081526024602052604090205460ff16155b80156128ae5750600e5462010000900460ff165b80156128c757506019546001600160a01b038481169116145b80156128d75750601054600f5410155b80156128e05750805b801561130f5750600e54600160201b900460ff1615949350505050565b600e805460ff19166001908117909155600a545f91612929916002916129239190611737565b9061176e565b9050600a545f036129615760095460075460085461295e92600292612923926001926129589290918391611737565b90611737565b90505b6008545f9082906129729085613053565b61297c9190612fef565b90505f6129898285612fc8565b90504761299582612b64565b5f6129a08247612fc8565b6008549091505f906129b29087612fc8565b6129bc9083612fef565b6008549091505f906129ce9083613053565b905080156129e0576129e08682612cb4565b6009545f906129f49061292385600261176e565b90508015612a0d57601354612a099082611737565b6013555b5f612a236013544761174290919063ffffffff16565b90508015612a6457601b546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612a62573d5f803e3d5ffd5b505b5050600e805460ff191690555050505050505050565b8160025f828254612a8b9190612fc8565b9091555050602780548291905f90612aa490849061300e565b90915550505050565b8060276001015f828254612ac1919061300e565b9091555050305f9081526023602052604090205460ff1615612b0157305f908152601d602052604081208054839290612afb90849061300e565b90915550505b305f908152601c602052604081208054849290612aa490849061300e565b5f828015612b2d5750600b54155b80612b405750818015612b405750600a54155b80610ddd575082158015612b52575081155b8015610ddd575050600c541592915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612b9757612b97612fa0565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c12919061306a565b81600181518110612c2557612c25612fa0565b6001600160a01b039283166020918202929092010152601754612c4b91309116846114d0565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c839085905f908690309042906004016130fc565b5f604051808303815f87803b158015612c9a575f80fd5b505af1158015612cac573d5f803e3d5ffd5b505050505050565b601754612ccc9030906001600160a01b0316846114d0565b601754601b5460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d39573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906114419190613137565b5f805f805f805f60e0888a031215612d74575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b6001600160a01b0381168114610fbb575f80fd5b5f60208284031215612dc9575f80fd5b8135610ddd81612da5565b5f602080835283518060208501525f5b81811015612e0057858101830151858201604001528201612de4565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215612e31575f80fd5b8235612e3c81612da5565b946020939093013593505050565b8015158114610fbb575f80fd5b5f8060408385031215612e68575f80fd5b823591506020830135612e7a81612e4a565b809150509250929050565b5f805f60608486031215612e97575f80fd5b8335612ea281612da5565b92506020840135612eb281612da5565b929592945050506040919091013590565b5f60208284031215612ed3575f80fd5b5035919050565b5f805f60608486031215612eec575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215612f14575f80fd5b50508035926020909101359150565b5f8060408385031215612f34575f80fd5b8235612f3f81612da5565b91506020830135612e7a81612da5565b5f8060408385031215612f60575f80fd5b8235612f3f81612e4a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610ad357610ad3612fb4565b634e487b7160e01b5f52603160045260245ffd5b5f8261300957634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610ad357610ad3612fb4565b5f60208284031215613031575f80fd5b5051919050565b5f60208284031215613048575f80fd5b8151610ddd81612e4a565b8082028115828204841417610ad357610ad3612fb4565b5f6020828403121561307a575f80fd5b8151610ddd81612da5565b5f815180845260208085019450602084015f5b838110156130bd5781516001600160a01b031687529582019590820190600101613098565b509495945050505050565b848152608060208201525f6130e06080830186613085565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f61311a60a0830186613085565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215613149575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220990b7d18b3d251d7ab8be20f8d9e6f039c03ad12e1562efe3d615d90b93ef59d64736f6c63430008180033

Deployed Bytecode Sourcemap

7862:22412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12257:83;;;;;;;;;;-1:-1:-1;12323:11:0;:15;12257:83;;;160:25:1;;;148:2;133:18;12257:83:0;;;;;;;;22203:463;;;;;;;;;;-1:-1:-1;22203:463:0;;;;;:::i;:::-;;:::i;:::-;;25274:464;;;;;;;;;;-1:-1:-1;25274:464:0;;;;;:::i;:::-;;:::i;11246:67::-;;;;;;;;;;-1:-1:-1;11306:5:0;;;;;;;;;;;;-1:-1:-1;;;11306:5:0;;;;11246:67;;;;;;;:::i;12117:134::-;;;;;;;;;;-1:-1:-1;12117:134:0;;;;;:::i;:::-;;:::i;:::-;;;2219:14:1;;2212:22;2194:41;;2182:2;2167:18;12117:134:0;2054:187:1;28894:132:0;;;;;;;;;;-1:-1:-1;28894:132:0;;;;;:::i;:::-;;:::i;8939:24::-;;;;;;;;;;-1:-1:-1;8939:24:0;;;;;;;-1:-1:-1;;;;;8939:24:0;;;;;;-1:-1:-1;;;;;2847:32:1;;;2829:51;;2817:2;2802:18;8939:24:0;2683:203:1;11469:79:0;;;;;;;;;;-1:-1:-1;11539:7:0;;11469:79;;9122:31;;;;;;;;;;;;;;;;9197:32;;;;;;;;;;;;;;;;12462:309;;;;;;;;;;-1:-1:-1;12462:309:0;;;;;:::i;:::-;;:::i;23099:118::-;;;:::i;24931:335::-;;;;;;;;;;-1:-1:-1;24931:335:0;;;;;:::i;:::-;;:::i;21980:83::-;;;;;;;;;;;;;:::i;24041:143::-;;;;;;;;;;;;;:::i;24675:248::-;;;;;;;;;;-1:-1:-1;24675:248:0;;;;;:::i;:::-;;:::i;11396:67::-;;;;;;;;;;-1:-1:-1;11396:67:0;;8100:1;3679:36:1;;3667:2;3652:18;11396:67:0;3537:184:1;23225:554:0;;;;;;;;;;-1:-1:-1;23225:554:0;;;;;:::i;:::-;;:::i;12779:209::-;;;;;;;;;;-1:-1:-1;12779:209:0;;;;;:::i;:::-;;:::i;11554:99::-;;;;;;;;;;;;;:::i;10068:44::-;;;;;;;;;;-1:-1:-1;10068:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24192:475;;;;;;;;;;-1:-1:-1;24192:475:0;;;;;:::i;:::-;;:::i;22674:202::-;;;;;;;;;;-1:-1:-1;22674:202:0;;;;;:::i;:::-;;:::i;17344:235::-;;;;;;;;;;-1:-1:-1;17344:235:0;;;;;:::i;:::-;;:::i;10119:60::-;;;;;;;;;;;;;;;;11659:173;;;;;;;;;;-1:-1:-1;11659:173:0;;;;;:::i;:::-;;:::i;6656:148::-;;;;;;;;;;;;;:::i;9084:31::-;;;;;;;;;;;;;;;;8402:58;;;;;;;;;;;;;;;;22071:124;;;;;;;;;;-1:-1:-1;22071:124:0;;;;;:::i;:::-;;:::i;8338:57::-;;;;;;;;;;;;;;;;8276:55;;;;;;;;;;;;;;;;12346:108;;;;;;;;;;-1:-1:-1;12346:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12432:20:0;12418:4;12432:20;;;:11;:20;;;;;;;;;12346:108;17205:131;;;;;;;;;;-1:-1:-1;17205:131:0;;;;;:::i;:::-;;:::i;6442:79::-;;;;;;;;;;-1:-1:-1;6480:7:0;6507:6;-1:-1:-1;;;;;6507:6:0;6442:79;;11319:71;;;;;;;;;;-1:-1:-1;11381:7:0;;;;;;;;;;;;-1:-1:-1;;;11381:7:0;;;;11319:71;;12996:265;;;;;;;;;;-1:-1:-1;12996:265:0;;;;;:::i;:::-;;:::i;17721:294::-;;;;;;;;;;-1:-1:-1;17721:294:0;;;;;:::i;:::-;;:::i;9349:19::-;;;;;;;;;;-1:-1:-1;9349:19:0;;;;-1:-1:-1;;;;;9349:19:0;;;11838:140;;;;;;;;;;-1:-1:-1;11838:140:0;;;;;:::i;:::-;;:::i;8877:26::-;;;;;;;;;;-1:-1:-1;8877:26:0;;;;;;;;;;;23787:246;;;;;;;;;;-1:-1:-1;23787:246:0;;;;;:::i;:::-;;:::i;9160:30::-;;;;;;;;;;;;;;;;22971:120;;;;;;;;;;-1:-1:-1;22971:120:0;;;;;:::i;:::-;;:::i;18023:196::-;;;;;;;;;;-1:-1:-1;18023:196:0;;;;;:::i;:::-;;:::i;11984:127::-;;;;;;;;;;-1:-1:-1;11984:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12082:18:0;;;12065:7;12082:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11984:127;9276:32;;;;;;;;;;-1:-1:-1;9276:32:0;;;;-1:-1:-1;;;;;9276:32:0;;;9236:33;;;;;;;;;;;;;;;;22884:79;;;;;;;;;;;;;:::i;22203:463::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;;;;;;;;;22378:8:::1;:15:::0;;;22395:7:::1;:15:::0;;;22412:11:::1;:20:::0;;;22434:8:::1;:27:::0;;;22463:16;:27;;;22492:18;:31;;;22525:23;:34;;;22590:11:::1;::::0;22578:23;::::1;::::0;::::1;::::0;:49:::1;;;22616:11;;22605:7;;:22;;22578:49;:79;;;;;22646:11;;22631;;:26;;22578:79;22570:88;;;::::0;::::1;;22203:463:::0;;;;;;;:::o;25274:464::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25358:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25350:56;;;::::0;-1:-1:-1;;;25350:56:0;;5877:2:1;25350:56:0::1;::::0;::::1;5859:21:1::0;5916:2;5896:18;;;5889:30;5955:25;5935:18;;;5928:53;5998:18;;25350:56:0::1;5675:347:1::0;25350:56:0::1;25422:9;25417:314;25441:9;:16:::0;25437:20;::::1;25417:314;;;25499:7;-1:-1:-1::0;;;;;25483:23:0::1;:9;25493:1;25483:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25483:12:0::1;:23:::0;25479:241:::1;;25542:9;25552:16:::0;;:20:::1;::::0;25571:1:::1;::::0;25552:20:::1;:::i;:::-;25542:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25527:9:::1;:12:::0;;-1:-1:-1;;;;;25542:31:0;;::::1;::::0;25537:1;;25527:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25527:46:0::1;-1:-1:-1::0;;;;;25527:46:0;;::::1;;::::0;;25592:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25631:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25631:28:0::1;::::0;;25678:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25678:15:0;;;;;-1:-1:-1;;;;;;25678:15:0::1;::::0;;;;;25417:314:::1;25274:464:::0;:::o;25479:241::-:1;25459:3;;25417:314;;;;25274:464:::0;:::o;12117:134::-;12192:4;12199:37;12208:10;12220:7;12229:6;12199:8;:37::i;:::-;-1:-1:-1;12245:4:0;12117:134;;;;;:::o;28894:132::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;28974:16:::1;:26:::0;;;;29002:7:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;29002:16:0;;::::1;::::0;;;::::1;::::0;;28894:132::o;12462:309::-;12560:4;12577:36;12587:6;12595:9;12606:6;12577:9;:36::i;:::-;12624:117;12633:6;12641:10;12653:87;12689:6;12653:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12653:19:0;;;;;;:11;:19;;;;;;;;12673:10;12653:31;;;;;;;;;:87;:35;:87::i;:::-;12624:8;:117::i;:::-;-1:-1:-1;12759:4:0;12462:309;;;;;:::o;23099:118::-;23178:16;;:31;;23199:9;23178:20;:31::i;:::-;23159:16;:50;23099:118::o;24931:335::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25016:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25015:21;25007:61;;;::::0;-1:-1:-1;;;25007:61:0;;6758:2:1;25007:61:0::1;::::0;::::1;6740:21:1::0;6797:2;6777:18;;;6770:30;6836:29;6816:18;;;6809:57;6883:18;;25007:61:0::1;6556:351:1::0;25007:61:0::1;-1:-1:-1::0;;;;;25082:16:0;::::1;25101:1;25082:16:::0;;;:7:::1;:16;::::0;;;;;:20;25079:108:::1;;-1:-1:-1::0;;;;;25158:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;25138:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25119:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25079:108:::1;-1:-1:-1::0;;;;;25197:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;25197:27:0::1;25220:4;25197:27:::0;;::::1;::::0;;;25235:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;25235:23:0::1;::::0;;::::1;::::0;;24931:335::o;21980:83::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;22034:14:::1;:21:::0;;-1:-1:-1;;22034:21:0::1;::::0;::::1;::::0;;21980:83::o;24041:143::-;24094:7;24121:55;24154:21;24172:1;24154:9;:21::i;:::-;24143:4;;24121:28;;24133:15;;-1:-1:-1;;;;;24143:4:0;24133:9;:15::i;:::-;24121:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;24114:62;;24041:143;:::o;24675:248::-;24741:7;24780;;24769;:18;;24761:73;;;;-1:-1:-1;;;24761:73:0;;7114:2:1;24761:73:0;;;7096:21:1;7153:2;7133:18;;;7126:30;7192:34;7172:18;;;7165:62;-1:-1:-1;;;7243:18:1;;;7236:40;7293:19;;24761:73:0;6912:406:1;24761:73:0;24845:19;24868:10;:8;:10::i;:::-;24845:33;-1:-1:-1;24896:19:0;24845:33;24896:7;:19;:::i;:::-;24889:26;24675:248;-1:-1:-1;;;24675:248:0:o;23225:554::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;23324:13:::1;23340:37;23370:5;23340:17;23352:4;23340:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:37::i;:::-;23324:53;;23379:19;23401:29;23424:5;23401:18;23413:5;23401:7;;:11;;:18;;;;:::i;:29::-;23379:51;;23441:17;23461:40;23494:5;23461:20;23473:7;23461;;:11;;:20;;;;:::i;:40::-;23441:60;;23503:13;23519:25;23538:5;23519:14;23531:1;23519:7:::0;::::1;:11;;:14;;;;:::i;:25::-;23503:41;;23572:5;23563;:14;;:36;;;;;23594:5;23581:9;:18;;23563:36;:60;;;;;23618:5;23603:11;:20;;23563:60;23555:126;;;::::0;-1:-1:-1;;;23555:126:0;;7747:2:1;23555:126:0::1;::::0;::::1;7729:21:1::0;7786:2;7766:18;;;7759:30;7825:34;7805:18;;;7798:62;-1:-1:-1;;;7876:18:1;;;7869:51;7937:19;;23555:126:0::1;7545:417:1::0;23555:126:0::1;-1:-1:-1::0;23692:12:0::1;:20:::0;;;;23714:15:::1;:27:::0;;;;23743:14:::1;:28:::0;-1:-1:-1;;;23225:554:0:o;12779:209::-;12893:10;12867:4;12914:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12914:32:0;;;;;;;;;;12867:4;;12884:74;;12905:7;;12914:43;;12947:10;;12914:43;:::i;11554:99::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;11602:16:::1;::::0;11594:57:::1;::::0;-1:-1:-1;;;;;11602:16:0;;::::1;::::0;11629:21:::1;11594:57:::0;::::1;;;::::0;11602:16:::1;11594:57:::0;11602:16;11594:57;11629:21;11602:16;11594:57;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;11554:99::o:0;24192:475::-;24282:7;24321;;24310;:18;;24302:62;;;;-1:-1:-1;;;24302:62:0;;8299:2:1;24302:62:0;;;8281:21:1;8338:2;8318:18;;;8311:30;8377:33;8357:18;;;8350:61;8428:18;;24302:62:0;8097:355:1;24302:62:0;24380:17;24375:285;;24414:28;24445:39;24456:7;24465:4;24471:5;24478;24445:10;:39::i;:::-;24506:9;;-1:-1:-1;24499:16:0;;-1:-1:-1;24499:16:0;24375:285;24548:28;24579:39;24590:7;24599:4;24605:5;24612;24579:10;:39::i;:::-;24640:17;;;;-1:-1:-1;24633:24:0;;-1:-1:-1;24633:24:0;22674:202;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;22778:10:::1;:24:::0;;;22820:7:::1;::::0;:48:::1;::::0;22860:6:::1;::::0;22820:27:::1;::::0;22832:14;22820:11:::1;:27::i;:48::-;22804:13;:64:::0;-1:-1:-1;;22674:202:0:o;17344:235::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;17434:4:::1;:12:::0;;-1:-1:-1;;;;;17434:12:0;;::::1;-1:-1:-1::0;;;;;;17434:12:0;;::::1;::::0;::::1;::::0;;;17448:6:::1;:36:::0;;;;::::1;::::0;;;::::1;;::::0;;17495::::1;::::0;:21:::1;:36::i;:::-;17563:6;::::0;17533:38:::1;::::0;-1:-1:-1;;;;;17563:6:0::1;17533:21;:38::i;11659:173::-:0;-1:-1:-1;;;;;11739:20:0;;11725:7;11739:20;;;:11;:20;;;;;;;;11735:49;;;-1:-1:-1;;;;;;11768:16:0;;;;;:7;:16;;;;;;;11659:173::o;11735:49::-;-1:-1:-1;;;;;11813:16:0;;;;;;:7;:16;;;;;;11793:37;;:19;:37::i;6656:148::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;6763:1:::1;6747:6:::0;;6726:40:::1;::::0;-1:-1:-1;;;;;6747:6:0;;::::1;::::0;6726:40:::1;::::0;6763:1;;6726:40:::1;6794:1;6777:19:::0;;-1:-1:-1;;;;;;6777:19:0::1;::::0;;6656:148::o;22071:124::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22155:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;22155:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22071:124::o;17205:131::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;17269:4:::1;:12:::0;;-1:-1:-1;;;;;;17269:12:0::1;-1:-1:-1::0;;;;;17269:12:0;::::1;::::0;;::::1;::::0;;;17292:36:::1;::::0;:21:::1;:36::i;12996:265::-:0;13089:4;13106:125;13115:10;13127:7;13136:94;13173:15;13136:94;;;;;;;;;;;;;;;;;13148:10;13136:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13136:32:0;;;;;;;;;;;:94;:36;:94::i;17721:294::-;-1:-1:-1;;;;;17855:17:0;;17786:7;17855:17;;;:9;:17;;;;;;17786:7;;17833:40;;:17;17865:6;17833:9;:17::i;:40::-;-1:-1:-1;;;;;17916:30:0;;17884:29;17916:30;;;:22;:30;;;;;;17806:67;;-1:-1:-1;17964:43:0;17806:67;17916:30;17964:20;:43::i;:::-;17957:50;17721:294;-1:-1:-1;;;;17721:294:0:o;11838:140::-;11916:4;11923:40;11933:10;11945:9;11956:6;11923:9;:40::i;23787:246::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;23909:39:::1;::::0;-1:-1:-1;;;23909:39:0;;23942:4:::1;23909:39;::::0;::::1;2829:51:1::0;23894:12:0::1;::::0;-1:-1:-1;;;;;23909:24:0;::::1;::::0;::::1;::::0;2802:18:1;;23909:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23894:54:::0;-1:-1:-1;;;;;;23959:23:0;::::1;;23983:9:::0;23994:30:::1;24020:3;23994:21;23894:54:::0;24003:11;23994:8:::1;:21::i;:30::-;23959:66;::::0;-1:-1:-1;;;;;;23959:66:0::1;::::0;;;;;;-1:-1:-1;;;;;8838:32:1;;;23959:66:0::1;::::0;::::1;8820:51:1::0;8887:18;;;8880:34;8793:18;;23959:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23883:150;23787:246:::0;;;:::o;22971:120::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;23051:17:::1;:32:::0;22971:120::o;18023:196::-;-1:-1:-1;;;;;18159:17:0;;18090:7;18159:17;;;:9;:17;;;;;;18090:7;;18137:40;;:17;18169:6;18137:9;:17::i;22884:79::-;6569:6;;-1:-1:-1;;;;;6569:6:0;6099:10;6569:22;6561:67;;;;-1:-1:-1;;;6561:67:0;;;;;;;:::i;:::-;22939:16:::1;:14;:16::i;:::-;22884:79::o:0;13269:335::-;-1:-1:-1;;;;;13362:19:0;;13354:68;;;;-1:-1:-1;;;13354:68:0;;9377:2:1;13354:68:0;;;9359:21:1;9416:2;9396:18;;;9389:30;9455:34;9435:18;;;9428:62;-1:-1:-1;;;9506:18:1;;;9499:34;9550:19;;13354:68:0;9175:400:1;13354:68:0;-1:-1:-1;;;;;13441:21:0;;13433:68;;;;-1:-1:-1;;;13433:68:0;;9782:2:1;13433:68:0;;;9764:21:1;9821:2;9801:18;;;9794:30;9860:34;9840:18;;;9833:62;-1:-1:-1;;;9911:18:1;;;9904:32;9953:19;;13433:68:0;9580:398:1;13433:68:0;-1:-1:-1;;;;;13512:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13564:32;;160:25:1;;;13564:32:0;;133:18:1;13564:32:0;;;;;;;13269:335;;;:::o;13612:758::-;-1:-1:-1;;;;;13741:17:0;;;;;;;:9;:17;;;;;;;13760:20;;;;;;;;13701:80;;13722:6;;13730:9;;13741:17;13701:20;:80::i;:::-;13792:37;13803:6;13811:9;13822:6;13792:10;:37::i;:::-;13840:38;13860:6;13868:9;13840:19;:38::i;:::-;13889:41;13904:6;13912:9;13923:6;13889:14;:41::i;:::-;13942:39;13955:6;13963:9;13974:6;13942:12;:39::i;:::-;13992:35;14009:6;14017:9;13992:16;:35::i;:::-;14038:32;14052:6;14060:9;14038:13;:32::i;:::-;14081:27;14090:6;14098:9;14081:8;:27::i;:::-;14119:31;14132:6;14140:9;14119:12;:31::i;:::-;-1:-1:-1;;;;;14205:19:0;;;;;;:11;:19;;;;;;14161:151;;14176:6;;14184:9;;14195:6;;14205:19;;;:45;;-1:-1:-1;;;;;;14228:22:0;;;;;;:11;:22;;;;;;;;14205:45;:58;;;-1:-1:-1;14254:9:0;;-1:-1:-1;;;14254:9:0;;;;14205:58;:70;;;-1:-1:-1;14267:8:0;;;;14205:70;14291:4;;14203:73;;;-1:-1:-1;;;;;14291:4:0;;;14278:17;;;;;;14297:14;;;14161;:151::i;:::-;14323:39;14344:6;14352:9;14323:20;:39::i;:::-;13612:758;;;:::o;1512:162::-;1598:7;1644:12;1636:6;;;;1628:29;;;;-1:-1:-1;;;1628:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1666:5:0;;;1512:162::o;211:82::-;269:7;286:5;290:1;286;:5;:::i;299:82::-;357:7;374:5;378:1;374;:5;:::i;29574:158::-;29615:7;29636:15;29653;29672:19;:17;:19::i;:::-;29635:56;;-1:-1:-1;29635:56:0;-1:-1:-1;29709:15:0;29635:56;;29709:15;:::i;:::-;29702:22;;;;29574:158;:::o;387:82::-;445:7;462:5;466:1;462;:5;:::i;475:82::-;533:7;550:5;554:1;550;:5;:::i;26588:396::-;26691:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26691:36:0;26752:49;26764:7;26773;26782:6;26790:10;26752:11;:49::i;:::-;26740:61;;26897:52;26909:9;26920:7;26929;26938:10;:8;:10::i;:::-;26897:11;:52::i;:::-;26874:19;;;26812:137;26859:14;;;26812:137;26832:25;;;26812:137;;;26588:396;;;;;;:::o;25746:585::-;25832:16;;25811;;:38;;:20;:38::i;:::-;25792:16;:57;25860:9;:16;;-1:-1:-1;;25860:16:0;-1:-1:-1;;;25860:16:0;;;25929:4;;25860:16;;25911:24;;-1:-1:-1;;;;;25929:4:0;25911:9;:24::i;:::-;25887:48;;25964:37;25984:16;;25964:15;;:19;;:37;;;;:::i;:::-;25946:15;:55;26029:16;;26012:34;;:16;:34::i;:::-;26098:4;;26057:20;;26080:43;;26109:13;;26080:24;;-1:-1:-1;;;;;26098:4:0;26080:9;:24::i;:43::-;26154:17;;26057:66;;-1:-1:-1;26154:35:0;;26057:66;26154:21;:35::i;:::-;26134:17;:55;26200:9;:17;;-1:-1:-1;;26200:17:0;;;26212:5;26228:16;:29;26289:18;;:34;;26200:17;26289:22;:34::i;:::-;26268:18;:55;-1:-1:-1;;25746:585:0:o;16120:789::-;16254:23;16280:17;16290:6;16280:9;:17::i;:::-;16254:43;-1:-1:-1;16299:25:0;;16338:34;16254:43;16358:13;16338:19;:34::i;:::-;:38;:62;;;;-1:-1:-1;;;;;;16381:19:0;;;;;;:11;:19;;;;;;;;16380:20;16338:62;16335:220;;;16422:34;:15;16442:13;16422:19;:34::i;:::-;-1:-1:-1;;;;;16500:30:0;;;;;;:22;:30;;;;;;16402:54;;-1:-1:-1;16500:53:0;;16402:54;16500:34;:53::i;:::-;-1:-1:-1;;;;;16467:30:0;;;;;;:22;:30;;;;;:86;16335:220;16565:26;16594:20;16604:9;16594;:20::i;:::-;16565:49;-1:-1:-1;16616:28:0;;16658:40;16565:49;16681:16;16658:22;:40::i;:::-;:44;:71;;;;-1:-1:-1;;;;;;16707:22:0;;;;;;:11;:22;;;;;;;;16706:23;16658:71;16655:247;;;16754:40;:18;16777:16;16754:22;:40::i;:::-;-1:-1:-1;;;;;16841:33:0;;;;;;:22;:33;;;;;;16731:63;;-1:-1:-1;16841:59:0;;16731:63;16841:37;:59::i;:::-;-1:-1:-1;;;;;16805:33:0;;;;;;:22;:33;;;;;:95;16655:247;16243:666;;;;16120:789;;;;:::o;14378:355::-;-1:-1:-1;;;;;14482:20:0;;14474:70;;;;-1:-1:-1;;;14474:70:0;;10358:2:1;14474:70:0;;;10340:21:1;10397:2;10377:18;;;10370:30;10436:34;10416:18;;;10409:62;-1:-1:-1;;;10487:18:1;;;10480:35;10532:19;;14474:70:0;10156:401:1;14474:70:0;-1:-1:-1;;;;;14563:23:0;;14555:71;;;;-1:-1:-1;;;14555:71:0;;10764:2:1;14555:71:0;;;10746:21:1;10803:2;10783:18;;;10776:30;10842:34;10822:18;;;10815:62;-1:-1:-1;;;10893:18:1;;;10886:33;10936:19;;14555:71:0;10562:399:1;14555:71:0;14655:17;14665:6;14655:9;:17::i;:::-;14645:6;:27;;14637:88;;;;-1:-1:-1;;;14637:88:0;;11168:2:1;14637:88:0;;;11150:21:1;11207:2;11187:18;;;11180:30;11246:34;11226:18;;;11219:62;-1:-1:-1;;;11297:18:1;;;11290:47;11354:19;;14637:88:0;10966:413:1;14964:206:0;-1:-1:-1;;;;;15057:19:0;;;;;;:11;:19;;;;;;;;15056:20;:47;;;;-1:-1:-1;;;;;;15081:22:0;;;;;;:11;:22;;;;;;;;15080:23;15056:47;15053:110;;;15113:14;;;;;;;15105:56;;;;-1:-1:-1;;;15105:56:0;;11586:2:1;15105:56:0;;;11568:21:1;11625:2;11605:18;;;11598:30;11664:31;11644:18;;;11637:59;11713:18;;15105:56:0;11384:353:1;15182:382:0;-1:-1:-1;;;;;15286:22:0;;;;;;:11;:22;;;;;;;;15285:23;:47;;;;-1:-1:-1;;;;;;15313:19:0;;;;;;:11;:19;;;;;;;;15312:20;15285:47;:77;;;;-1:-1:-1;;;;;;15336:26:0;;15357:4;15336:26;;15285:77;:107;;;;-1:-1:-1;15387:4:0;;-1:-1:-1;;;;;15366:26:0;;;15387:4;;15366:26;;15285:107;:128;;;;-1:-1:-1;15409:4:0;;-1:-1:-1;;;;;15396:17:0;;;15409:4;;15396:17;;15285:128;:161;;;;-1:-1:-1;15430:16:0;;-1:-1:-1;;;;;15417:29:0;;;15430:16;;15417:29;;15285:161;15282:275;;;15505:15;;15494:6;15471:20;15481:9;15471;:20::i;:::-;:29;;;;:::i;:::-;15470:50;;15462:93;;;;-1:-1:-1;;;15462:93:0;;11944:2:1;15462:93:0;;;11926:21:1;11983:2;11963:18;;;11956:30;12022:32;12002:18;;;11995:60;12072:18;;15462:93:0;11742:354:1;15771:341:0;15882:4;;-1:-1:-1;;;;;15872:14:0;;;15882:4;;15872:14;15869:124;;15906:14;;15896:6;:24;;:47;;;-1:-1:-1;;;;;;15924:19:0;;;;;;:11;:19;;;;;;;;15896:47;:73;;;-1:-1:-1;;;;;;15947:22:0;;;;;;:11;:22;;;;;;;;15896:73;15888:103;;;;-1:-1:-1;;;15888:103:0;;12303:2:1;15888:103:0;;;12285:21:1;12342:2;12322:18;;;12315:30;-1:-1:-1;;;12361:18:1;;;12354:47;12418:18;;15888:103:0;12101:341:1;15888:103:0;16021:12;;16011:6;:22;;:45;;;-1:-1:-1;;;;;;16037:19:0;;;;;;:11;:19;;;;;;;;16011:45;:71;;;-1:-1:-1;;;;;;16060:22:0;;;;;;:11;:22;;;;;;;;16011:71;16003:101;;;;-1:-1:-1;;;16003:101:0;;12303:2:1;16003:101:0;;;12285:21:1;12342:2;12322:18;;;12315:30;-1:-1:-1;;;12361:18:1;;;12354:47;12418:18;;16003:101:0;12101:341:1;15572:191:0;15669:4;;-1:-1:-1;;;;;15656:17:0;;;15669:4;;15656:17;:41;;;;-1:-1:-1;;;;;;15678:19:0;;;;;;:11;:19;;;;;;;;15677:20;15656:41;:54;;;;-1:-1:-1;15702:8:0;;;;15701:9;15656:54;:68;;;;-1:-1:-1;15715:9:0;;-1:-1:-1;;;15715:9:0;;;;15714:10;15656:68;15653:103;;;15738:9;;:16;;15752:1;15738:13;:16::i;:::-;15726:9;:28;15572:191;;:::o;29034:532::-;29115:14;;;;;;;:38;;;;-1:-1:-1;;;;;;29134:19:0;;;;;;:11;:19;;;;;;;;29133:20;29115:38;:68;;;;-1:-1:-1;29178:4:0;;-1:-1:-1;;;;;29157:26:0;;;29178:4;;29157:26;29115:68;:94;;;;-1:-1:-1;29201:8:0;;;;29200:9;29115:94;:108;;;;-1:-1:-1;29214:9:0;;-1:-1:-1;;;29214:9:0;;;;29213:10;29115:108;29112:145;;;29253:1;29225:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;29112:145:0;29290:16;;29270;;:36;;:81;;;;;29335:16;;29310:21;:41;;29270:81;:122;;;;;29375:17;;29355:16;;:37;;29270:122;:147;;;;-1:-1:-1;29410:7:0;;;;;;;29270:147;:171;;;;-1:-1:-1;;;;;;29422:19:0;;;;;;:11;:19;;;;;;;;29421:20;29270:171;:201;;;;-1:-1:-1;29466:4:0;;-1:-1:-1;;;;;29445:26:0;;;29466:4;;29445:26;29270:201;:219;;;;-1:-1:-1;29475:14:0;;;;;;;29270:219;:232;;;;-1:-1:-1;29494:8:0;;;;29493:9;29270:232;:246;;;;-1:-1:-1;29507:9:0;;-1:-1:-1;;;29507:9:0;;;;29506:10;29270:246;:269;;;;-1:-1:-1;29530:9:0;;-1:-1:-1;;;;;29520:19:0;;;29530:9;;;;;29520:19;;29270:269;29267:292;;;29541:16;:14;:16::i;19462:164::-;19538:33;19553:6;19561:9;19538:14;:33::i;:::-;19535:84;;;19573:29;19588:13;;19573:14;:29::i;:::-;19616:1;19604:9;:13;19462:164;;:::o;14741:215::-;14818:9;:24;;-1:-1:-1;;;;;;14818:24:0;;;14866:4;;-1:-1:-1;;;;;14856:14:0;;;14866:4;;14856:14;:41;;;;-1:-1:-1;;;;;;14875:22:0;;;;;;:11;:22;;;;;;;;14874:23;14856:41;:55;;;;-1:-1:-1;14902:9:0;;-1:-1:-1;;;14902:9:0;;;;14901:10;14856:55;:68;;;;-1:-1:-1;14916:8:0;;;;14915:9;14856:68;14853:96;;;14926:9;:21;;-1:-1:-1;;;;;14926:21:0;;;;-1:-1:-1;;;;;;14926:21:0;;;;;;14741:215;;:::o;18227:871::-;18366:28;18397:48;18408:7;18417;18426:6;18434:10;18397;:48::i;:::-;-1:-1:-1;;;;;18459:19:0;;;;;;:11;:19;;;;;;18366:79;;-1:-1:-1;18459:19:0;;18456:69;;;-1:-1:-1;;;;;18500:15:0;;;;;;:7;:15;;;;;;:23;;18516:7;;18500:23;:::i;:::-;-1:-1:-1;;;;;18482:15:0;;;;;;:7;:15;;;;;:41;18456:69;-1:-1:-1;;;;;18538:22:0;;;;;;:11;:22;;;;;;;;18535:87;;;18603:17;;;;-1:-1:-1;;;;;18584:18:0;;;;;;:7;:18;;;;;;:36;;18603:17;18584:36;:::i;:::-;-1:-1:-1;;;;;18563:18:0;;;;;;:7;:18;;;;;:57;18535:87;18666:9;;-1:-1:-1;;;;;18650:15:0;;18666:9;18650:15;;;:7;:15;;;;;;:25;;18666:9;18650:25;:::i;:::-;-1:-1:-1;;;;;18632:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;18726:17;;;18707:18;;;;;;;;;;:36;;18726:17;18707:36;:::i;:::-;-1:-1:-1;;;;;18686:18:0;;;;;;:7;:18;;;;;:57;18780:17;18790:6;18780:9;:17::i;:::-;-1:-1:-1;;;;;18754:23:0;;;;;;:15;:23;;;;;:43;18839:20;18849:9;18839;:20::i;:::-;-1:-1:-1;;;;;18808:28:0;;;;;;:17;:28;;;;;;;:51;;;;18882:6;;;18890;;;;18870:27;;18882:6;18870:11;:27::i;:::-;18908:39;18922:1;:11;;;18935:1;:11;;;18908:13;:39::i;:::-;18980:9;-1:-1:-1;;;;;18963:46:0;18972:6;-1:-1:-1;;;;;18963:46:0;;18991:1;:17;;;18963:46;;;;160:25:1;;148:2;133:18;;14:177;18963:46:0;;;;;;;;19023:11;;;;:15;19020:71;;19070:4;-1:-1:-1;;;;;19045:44:0;19054:6;-1:-1:-1;;;;;19045:44:0;;19077:1;:11;;;19045:44;;;;160:25:1;;148:2;133:18;;14:177;19045:44:0;;;;;;;;18355:743;18227:871;;;;;;:::o;16917:280::-;-1:-1:-1;;;;;17042:23:0;;;;;;;:15;:23;;;;;;;;17067:28;;;;;:17;:28;;;;;;17002:94;;17023:6;;17031:9;;17042:23;17002:20;:94::i;:::-;17127:17;17137:6;17127:9;:17::i;:::-;-1:-1:-1;;;;;17107:17:0;;;;;;:9;:17;;;;;:37;17169:20;17179:9;17169;:20::i;:::-;-1:-1:-1;;;;;17146:20:0;;;;;;;:9;:20;;;;;:43;-1:-1:-1;16917:280:0:o;29740:531::-;29837:7;;29873;;29790;;;;;29891:270;29915:9;:16;29911:20;;29891:270;;;29981:7;29957;:21;29965:9;29975:1;29965:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29965:12:0;29957:21;;;;;;;;;;;;;:31;;:66;;;30016:7;29992;:21;30000:9;30010:1;30000:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30000:12:0;29992:21;;;;;;;;;;;;;:31;29957:66;29953:97;;;30033:7;;30042;;30025:25;;;;;;;29740:531;;:::o;29953:97::-;30083:7;:21;30091:9;30101:1;30091:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30091:12:0;30083:21;;;;;;;;;;;;;30075:29;;:7;:29;:::i;:::-;30065:39;;30137:7;:21;30145:9;30155:1;30145:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30145:12:0;30137:21;;;;;;;;;;;;;30129:29;;:7;:29;:::i;:::-;30119:39;-1:-1:-1;29933:3:0;;29891:270;;;;30193:7;;30185;;:15;;;;:::i;:::-;30175:7;:25;30171:56;;;30210:7;;30219;;30202:25;;;;;;29740:531;;:::o;30171:56::-;30246:7;;30255;;-1:-1:-1;29740:531:0;-1:-1:-1;29740:531:0:o;27210:1157::-;27314:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27314:28:0;27359:7;27358:8;:41;;;;27370:29;27380:6;27388:10;27370:9;:29::i;:::-;27355:110;;;27414:17;;;:27;;;27454:8;;27355:110;27479:6;27478:7;:22;;;;;27490:10;27489:11;27478:22;27475:296;;;27516:17;27536:41;27565:11;;27536:24;27548:11;;27536:7;:11;;:24;;;;:::i;:41::-;27516:61;;27611:11;;27595:8;:12;;;:27;27592:75;;27654:11;;27641:8;:12;27633:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27624:6;;;:41;27592:75;27709:6;;;;27695:21;;:9;;:13;:21::i;:::-;27681:11;;;:35;27751:17;27759:9;27751:7;:17;:::i;:::-;27731;;;:37;-1:-1:-1;27475:296:0;27784:6;27781:272;;;27806:17;27826:37;27851:11;;27826:20;27838:7;;27826;:11;;:20;;;;:::i;:37::-;27806:57;;27897:7;;27881:8;:12;;;:23;27878:71;;27936:11;;27923:8;:12;27915:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27906:6;;;:41;27878:71;27991:6;;;;27977:21;;:9;;:13;:21::i;:::-;27963:11;;;:35;28033:17;28041:9;28033:7;:17;:::i;:::-;28013;;;:37;-1:-1:-1;27781:272:0;28066:10;28063:278;;;28092:17;28112:38;28138:11;;28112:21;28124:8;;28112:7;:11;;:21;;;;:::i;:38::-;28092:58;;28184:8;;28168;:12;;;:24;28165:72;;28224:11;;28211:8;:12;28203:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;28194:6;;;:41;28165:72;28279:6;;;;28265:21;;:9;;:13;:21::i;:::-;28251:11;;;:35;28321:17;28329:9;28321:7;:17;:::i;:::-;28301;;;:37;-1:-1:-1;27210:1157:0;;;;;;:::o;28375:511::-;28500:15;;;;28596:19;28604:11;28596:7;:19;:::i;:::-;28586:29;;28630:7;28626:58;;-1:-1:-1;28659:7:0;;-1:-1:-1;28677:1:0;;-1:-1:-1;28677:1:0;28652:29;;28626:58;28708:11;28701:1;:6;;;:18;;;;:::i;:::-;28694:25;;28754:11;28742:1;:11;;;:23;;;;:::i;:::-;28730:35;-1:-1:-1;28730:35:0;28795:12;28803:4;28795:7;:12;:::i;:::-;:22;;;;:::i;:::-;28776:41;;28375:511;;;;;;;;;;:::o;21612:360::-;21700:16;;;21714:1;21700:16;;;;;;;;21676:21;;21700:16;;;;;;;;-1:-1:-1;;21737:6:0;;:13;;;-1:-1:-1;;;21737:13:0;;;;21676:40;;-1:-1:-1;;;;;;21737:6:0;;;;:11;;-1:-1:-1;21737:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21727:4;21732:1;21727:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;21727:23:0;;;-1:-1:-1;;;;;21727:23:0;;;;;21779:4;21761;21766:1;21761:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21761:23:0;;;:7;;;;;;;;;:23;21795:6;;21928:4;;21795:169;;-1:-1:-1;;;21795:169:0;;:6;;;;:57;;21860:9;;21795:169;;:6;;21901:4;;21928;;;;21948:15;;21795:169;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19107:347;19189:4;19206:19;19256:13;;19228:24;19246:4;19228:9;:24::i;:::-;19288:8;;19228:41;-1:-1:-1;19228:41:0;;-1:-1:-1;19288:8:0;;19287:9;:24;;;;-1:-1:-1;19300:11:0;;;;;;;19287:24;:48;;;;-1:-1:-1;;;;;;19316:19:0;;;;;;:11;:19;;;;;;;;19315:20;19287:48;:66;;;;-1:-1:-1;19339:14:0;;;;;;;19287:66;:100;;;;-1:-1:-1;19383:4:0;;-1:-1:-1;;;;;19370:17:0;;;19383:4;;19370:17;19287:100;:127;;;;;19404:10;;19391:9;;:23;;19287:127;:145;;;;;19418:14;19287:145;:159;;;;-1:-1:-1;19437:9:0;;-1:-1:-1;;;19437:9:0;;;;19436:10;19280:166;19107:347;-1:-1:-1;;;;19107:347:0:o;19634:1179::-;9555:8;:15;;-1:-1:-1;;9555:15:0;9566:4;9555:15;;;;;;19728:8:::1;::::0;9555;;19727:24:::1;::::0;19749:1:::1;::::0;19727:17:::1;::::0;19728:8;19727:14:::1;:17::i;:::-;:21:::0;::::1;:24::i;:::-;19704:47;;19765:8;;19777:1;19765:13:::0;19762:132:::1;;19854:23:::0;;19818:16;;19795:18;;:97:::1;::::0;19890:1:::1;::::0;19795:90:::1;::::0;19883:1:::1;::::0;19795:83:::1;::::0;19854:23;;19795:83;;:22:::1;:40::i;:::-;:44:::0;::::1;:83::i;:97::-;19780:112;;19762:132;19948:18:::0;;19904:32:::1;::::0;19969:12;;19939:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;19904:77:::0;-1:-1:-1;19992:14:0::1;20009:33;19904:77:::0;20009:6;:33:::1;:::i;:::-;19992:50:::0;-1:-1:-1;20078:21:0::1;20110:24;19992:50:::0;20110:16:::1;:24::i;:::-;20145:20;20168:38;20192:14:::0;20168:21:::1;:38;:::i;:::-;20269:18:::0;;20145:61;;-1:-1:-1;20217:19:0::1;::::0;20254:33:::1;::::0;:12;:33:::1;:::i;:::-;20238:50;::::0;:12;:50:::1;:::i;:::-;20345:18:::0;;20217:71;;-1:-1:-1;20299:29:0::1;::::0;20331:32:::1;::::0;20217:71;20331:32:::1;:::i;:::-;20299:64:::0;-1:-1:-1;20377:25:0;;20374:108:::1;;20418:61;20431:24;20457:21;20418:12;:61::i;:::-;20539:23:::0;;20492:21:::1;::::0;20516:47:::1;::::0;:18:::1;:11:::0;20532:1:::1;20516:15;:18::i;:47::-;20492:71:::0;-1:-1:-1;20577:17:0;;20574:80:::1;;20616:16;::::0;:35:::1;::::0;20637:13;20616:20:::1;:35::i;:::-;20597:16;:54:::0;20574:80:::1;20664:15;20682:43;20708:16;;20682:21;:25;;:43;;;;:::i;:::-;20664:61:::0;-1:-1:-1;20739:20:0;;20736:70:::1;;20769:16;::::0;20761:43:::1;::::0;-1:-1:-1;;;;;20769:16:0;;::::1;::::0;20761:43;::::1;;;::::0;20796:7;;20769:16:::1;20761:43:::0;20769:16;20761:43;20796:7;20769:16;20761:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20736:70;-1:-1:-1::0;;9575:8:0;:16;;-1:-1:-1;;9575:16:0;;;-1:-1:-1;;;;;;;;19634:1179:0:o;17587:126::-;17666:4;17655:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;17682:11:0;:23;;17701:4;;17682:11;:15;;:23;;17701:4;;17682:23;:::i;:::-;;;;-1:-1:-1;;;;17587:126:0:o;26339:241::-;26442:9;26419:11;:20;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;26485:4:0;26465:26;;;;:11;:26;;;;;;;;26462:66;;;26509:4;26493:22;;;;:7;:22;;;;;:33;;26517:9;;26493:22;:33;;26517:9;;26493:33;:::i;:::-;;;;-1:-1:-1;;26462:66:0;26554:4;26538:22;;;;:7;:22;;;;;:34;;26563:9;;26538:22;:34;;26563:9;;26538:34;:::i;26992:210::-;27064:4;27089:6;:22;;;;-1:-1:-1;27099:7:0;;:12;27089:22;27088:57;;;;27117:10;:27;;;;-1:-1:-1;27131:8:0;;:13;27117:27;27088:105;;;;27151:6;27150:7;:22;;;;;27162:10;27161:11;27150:22;:42;;;;-1:-1:-1;;27176:11:0;;:16;;26992:210;-1:-1:-1;;26992:210:0:o;21170:434::-;21260:16;;;21274:1;21260:16;;;;;;;;21236:21;;21260:16;;;;;;;;;;-1:-1:-1;21260:16:0;21236:40;;21305:4;21287;21292:1;21287:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21287:23:0;;;:7;;;;;;;;;;:23;;;;21331:6;;:13;;;-1:-1:-1;;;21331:13:0;;;;:6;;;;;:11;;:13;;;;;21287:7;;21331:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21321:4;21326:1;21321:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21321:23:0;;;:7;;;;;;;;;:23;21387:6;;21355:53;;21372:4;;21387:6;21396:11;21355:8;:53::i;:::-;21419:6;;:177;;-1:-1:-1;;;21419:177:0;;-1:-1:-1;;;;;21419:6:0;;;;:57;;:177;;21491:11;;21419:6;;21533:4;;21560;;21580:15;;21419:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21225:379;21170:434;:::o;20821:341::-;20934:6;;20902:53;;20919:4;;-1:-1:-1;;;;;20934:6:0;20943:11;20902:8;:53::i;:::-;20966:6;;21107:16;;20966:188;;-1:-1:-1;;;20966:188:0;;21029:4;20966:188;;;14748:34:1;14798:18;;;14791:34;;;20966:6:0;14841:18:1;;;14834:34;;;14884:18;;;14877:34;-1:-1:-1;;;;;21107:16:0;;;14927:19:1;;;14920:44;21138:15:0;14980:19:1;;;14973:35;20966:6:0;;;:22;;20996:9;;14682:19:1;;20966:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:592:1:-;309:6;317;325;333;341;349;357;410:3;398:9;389:7;385:23;381:33;378:53;;;427:1;424;417:12;378:53;-1:-1:-1;;450:23:1;;;520:2;505:18;;492:32;;-1:-1:-1;571:2:1;556:18;;543:32;;622:2;607:18;;594:32;;-1:-1:-1;673:3:1;658:19;;645:33;;-1:-1:-1;725:3:1;710:19;;697:33;;-1:-1:-1;777:3:1;762:19;749:33;;-1:-1:-1;196:592:1;-1:-1:-1;196:592:1:o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;929:247;988:6;1041:2;1029:9;1020:7;1016:23;1012:32;1009:52;;;1057:1;1054;1047:12;1009:52;1096:9;1083:23;1115:31;1140:5;1115:31;:::i;1181:548::-;1293:4;1322:2;1351;1340:9;1333:21;1383:6;1377:13;1426:6;1421:2;1410:9;1406:18;1399:34;1451:1;1461:140;1475:6;1472:1;1469:13;1461:140;;;1570:14;;;1566:23;;1560:30;1536:17;;;1555:2;1532:26;1525:66;1490:10;;1461:140;;;1465:3;1650:1;1645:2;1636:6;1625:9;1621:22;1617:31;1610:42;1720:2;1713;1709:7;1704:2;1696:6;1692:15;1688:29;1677:9;1673:45;1669:54;1661:62;;;;1181:548;;;;:::o;1734:315::-;1802:6;1810;1863:2;1851:9;1842:7;1838:23;1834:32;1831:52;;;1879:1;1876;1869:12;1831:52;1918:9;1905:23;1937:31;1962:5;1937:31;:::i;:::-;1987:5;2039:2;2024:18;;;;2011:32;;-1:-1:-1;;;1734:315:1:o;2246:118::-;2332:5;2325:13;2318:21;2311:5;2308:32;2298:60;;2354:1;2351;2344:12;2369:309;2434:6;2442;2495:2;2483:9;2474:7;2470:23;2466:32;2463:52;;;2511:1;2508;2501:12;2463:52;2547:9;2534:23;2524:33;;2607:2;2596:9;2592:18;2579:32;2620:28;2642:5;2620:28;:::i;:::-;2667:5;2657:15;;;2369:309;;;;;:::o;2891:456::-;2968:6;2976;2984;3037:2;3025:9;3016:7;3012:23;3008:32;3005:52;;;3053:1;3050;3043:12;3005:52;3092:9;3079:23;3111:31;3136:5;3111:31;:::i;:::-;3161:5;-1:-1:-1;3218:2:1;3203:18;;3190:32;3231:33;3190:32;3231:33;:::i;:::-;2891:456;;3283:7;;-1:-1:-1;;;3337:2:1;3322:18;;;;3309:32;;2891:456::o;3352:180::-;3411:6;3464:2;3452:9;3443:7;3439:23;3435:32;3432:52;;;3480:1;3477;3470:12;3432:52;-1:-1:-1;3503:23:1;;3352:180;-1:-1:-1;3352:180:1:o;3726:316::-;3803:6;3811;3819;3872:2;3860:9;3851:7;3847:23;3843:32;3840:52;;;3888:1;3885;3878:12;3840:52;-1:-1:-1;;3911:23:1;;;3981:2;3966:18;;3953:32;;-1:-1:-1;4032:2:1;4017:18;;;4004:32;;3726:316;-1:-1:-1;3726:316:1:o;4047:248::-;4115:6;4123;4176:2;4164:9;4155:7;4151:23;4147:32;4144:52;;;4192:1;4189;4182:12;4144:52;-1:-1:-1;;4215:23:1;;;4285:2;4270:18;;;4257:32;;-1:-1:-1;4047:248:1:o;4300:388::-;4368:6;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:1;4595:18;;4582:32;4623:33;4582:32;4623:33;:::i;4693:382::-;4758:6;4766;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;4874:9;4861:23;4893:28;4915:5;4893:28;:::i;5314:356::-;5516:2;5498:21;;;5535:18;;;5528:30;5594:34;5589:2;5574:18;;5567:62;5661:2;5646:18;;5314:356::o;6027:127::-;6088:10;6083:3;6079:20;6076:1;6069:31;6119:4;6116:1;6109:15;6143:4;6140:1;6133:15;6159:127;6220:10;6215:3;6211:20;6208:1;6201:31;6251:4;6248:1;6241:15;6275:4;6272:1;6265:15;6291:128;6358:9;;;6379:11;;;6376:37;;;6393:18;;:::i;6424:127::-;6485:10;6480:3;6476:20;6473:1;6466:31;6516:4;6513:1;6506:15;6540:4;6537:1;6530:15;7323:217;7363:1;7389;7379:132;;7433:10;7428:3;7424:20;7421:1;7414:31;7468:4;7465:1;7458:15;7496:4;7493:1;7486:15;7379:132;-1:-1:-1;7525:9:1;;7323:217::o;7967:125::-;8032:9;;;8053:10;;;8050:36;;;8066:18;;:::i;8457:184::-;8527:6;8580:2;8568:9;8559:7;8555:23;8551:32;8548:52;;;8596:1;8593;8586:12;8548:52;-1:-1:-1;8619:16:1;;8457:184;-1:-1:-1;8457:184:1:o;8925:245::-;8992:6;9045:2;9033:9;9024:7;9020:23;9016:32;9013:52;;;9061:1;9058;9051:12;9013:52;9093:9;9087:16;9112:28;9134:5;9112:28;:::i;9983:168::-;10056:9;;;10087;;10104:15;;;10098:22;;10084:37;10074:71;;10125:18;;:::i;12579:251::-;12649:6;12702:2;12690:9;12681:7;12677:23;12673:32;12670:52;;;12718:1;12715;12708:12;12670:52;12750:9;12744:16;12769:31;12794:5;12769:31;:::i;12835:465::-;12888:3;12926:5;12920:12;12953:6;12948:3;12941:19;12979:4;13008;13003:3;12999:14;12992:21;;13047:4;13040:5;13036:16;13070:1;13080:195;13094:6;13091:1;13088:13;13080:195;;;13159:13;;-1:-1:-1;;;;;13155:39:1;13143:52;;13215:12;;;;13250:15;;;;13191:1;13109:9;13080:195;;;-1:-1:-1;13291:3:1;;12835:465;-1:-1:-1;;;;;12835:465:1:o;13305:510::-;13576:6;13565:9;13558:25;13619:3;13614:2;13603:9;13599:18;13592:31;13539:4;13640:57;13692:3;13681:9;13677:19;13669:6;13640:57;:::i;:::-;-1:-1:-1;;;;;13733:32:1;;;;13728:2;13713:18;;13706:60;-1:-1:-1;13797:2:1;13782:18;13775:34;13632:65;13305:510;-1:-1:-1;;13305:510:1:o;13820:582::-;14119:6;14108:9;14101:25;14162:6;14157:2;14146:9;14142:18;14135:34;14205:3;14200:2;14189:9;14185:18;14178:31;14082:4;14226:57;14278:3;14267:9;14263:19;14255:6;14226:57;:::i;:::-;-1:-1:-1;;;;;14319:32:1;;;;14314:2;14299:18;;14292:60;-1:-1:-1;14383:3:1;14368:19;14361:35;14218:65;13820:582;-1:-1:-1;;;13820:582:1:o;15019:306::-;15107:6;15115;15123;15176:2;15164:9;15155:7;15151:23;15147:32;15144:52;;;15192:1;15189;15182:12;15144:52;15221:9;15215:16;15205:26;;15271:2;15260:9;15256:18;15250:25;15240:35;;15315:2;15304:9;15300:18;15294:25;15284:35;;15019:306;;;;;:::o

Swarm Source

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