ETH Price: $3,486.63 (+3.51%)
Gas: 3.8 Gwei

Token

Anubis Inu (ANUBIS INU)
 

Overview

Max Total Supply

1,000,000,000,000 ANUBIS INU

Holders

318

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
705.568034018 ANUBIS INU

Value
$0.00
0x5a3c767a412baeabb4df211ebcbba3755a88b9f1
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AnubisInu

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-21
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


interface IERC20 {

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


}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {

            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract AnubisInu is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => User) private cooldown;

    mapping (address => bool) private _isSniper;
    address[] private _confirmedSnipers;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Anubis Inu";
    string private _symbol = "ANUBIS INU";
    uint8 private _decimals = 9;
    
    address payable private teamDevAddress;

    uint256 public launchTime;
    uint256 private buyLimitEnd;
    
    
    uint256 public _taxFee;
    uint256 private _previousTaxFee = _taxFee;
    uint256 public _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
  
    
    uint private _maxBuyAmount;
    bool private _cooldownEnabled=true;

    bool public tradingOpen = false; //once switched on, can never be switched off.
    


    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = true;
    
    struct User {
        uint256 buy;
        uint256 sell;
        bool exists;
    }
    
    event BuyBackEnabledUpdated(bool enabled);
  

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function openTrading() external onlyOwner() {
        _maxBuyAmount = 5000000000 * 10**9;
        _liquidityFee=8;
        _taxFee=2;
        swapAndLiquifyEnabled = true;
        tradingOpen = true;
        launchTime = block.timestamp;
        buyLimitEnd = block.timestamp + (180 seconds);
    }

    function initContract() external onlyOwner() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

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

        teamDevAddress = payable(0xFcbf6A38E13EcA136CAd13edbABCA827B72cc0DA);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, 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()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

  
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }


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

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

    function isRemovedSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[recipient], "You have no power here!");
        require(!_isSniper[msg.sender], "You have no power here!");


        if(sender != owner() && recipient != owner()) {
            
            if (!tradingOpen) {
                if (!(sender == address(this) || recipient == address(this)
                || sender == address(owner()) || recipient == address(owner()))) {
                    require(tradingOpen, "Trading is not enabled");
                }
            }
            
            if (block.timestamp < launchTime + 10 seconds) {
                if (sender != uniswapV2Pair
                && sender != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
                    && sender != address(uniswapV2Router)) {
                    _isSniper[sender] = true;
                    _confirmedSnipers.push(sender);
                }
            }

            if(_cooldownEnabled) {
                if(!cooldown[msg.sender].exists) {
                    cooldown[msg.sender] = User(0,0,true);
                }
            }
        }
        
        //buy
        
        if(sender == uniswapV2Pair && recipient != address(uniswapV2Router) && !_isExcludedFromFee[recipient]) {
                require(tradingOpen, "Trading not yet enabled.");
                
                if(_cooldownEnabled) {
                    if(buyLimitEnd > block.timestamp) {
                        require(amount <= _maxBuyAmount);
                        require(cooldown[recipient].buy < block.timestamp, "Your buy cooldown has not expired.");
                        cooldown[recipient].buy = block.timestamp + (30 seconds);
                    }
                }
                if(_cooldownEnabled) {
                    cooldown[recipient].sell = block.timestamp + (15 seconds);
                }
        }

        //sell
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && recipient == uniswapV2Pair) {
            
            //swap contract's tokens for ETH
            uint256 contractTokenBalance = balanceOf(address(this));
             if(contractTokenBalance > 0) {
                swapTokens(contractTokenBalance);
            }
            
            if (buyBackEnabled) {
                
                uint256 contractBalance=address(this).balance;
                
                if (contractBalance>0)   buyBackTokens(contractBalance);
            }
            
        }

        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        //execute transfer
        _tokenTransfer(sender, recipient,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);
 
        transferToAddressETH(teamDevAddress, transferredBalance.mul(3).div(4));
    }


    function buyBackTokens(uint256 amount) private lockTheSwap {
        if (amount > 0) {
            swapETHForTokens(amount);
        }
    }


    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

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

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

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


    function setTeamDevAddress(address _teamDevAddress) external onlyOwner() {
        teamDevAddress = payable(_teamDevAddress);
    }
    

    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
  
    
    function _blacklistSniper(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap');
        require(!_isSniper[account], "Account is already blacklisted");
        _isSniper[account] = true;
        _confirmedSnipers.push(account);
    }
    
    function _amnestySniper(address account) external onlyOwner() {
        require(_isSniper[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }
    
   
    //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_blacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initContract","outputs":[],"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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isRemovedSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamDevAddress","type":"address"}],"name":"setTeamDevAddress","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":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526ddead000000000000000000000000608052683635c9adc5dea00000600c819055620000339060001962000293565b620000419060001962000232565b600d5560408051808201909152600a80825269416e7562697320496e7560b01b60209092019182526200007791600f916200018c565b5060408051808201909152600a80825269414e5542495320494e5560b01b6020909201918252620000ab916010916200018c565b506011805460ff191660091790556014546015556016546017556019805461ffff19166001179055601a805461ffff60a81b1916600160b01b179055348015620000f457600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d5433600081815260036020908152604080832094909455600c549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620002b4565b8280546200019a9062000256565b90600052602060002090601f016020900481019282620001be576000855562000209565b82601f10620001d957805160ff191683800117855562000209565b8280016001018555821562000209579182015b8281111562000209578251825591602001919060010190620001ec565b50620002179291506200021b565b5090565b5b808211156200021757600081556001016200021c565b6000828210156200025157634e487b7160e01b81526011600452602481fd5b500390565b600181811c908216806200026b57607f821691505b602082108114156200028d57634e487b7160e01b600052602260045260246000fd5b50919050565b600082620002af57634e487b7160e01b81526012600452602481fd5b500690565b60805160601c612f4a620002da6000396000818161034a01526126c60152612f4a6000f3fe60806040526004361061023f5760003560e01c80636053a0e31161012e578063a457c2d7116100ab578063dd4670641161006f578063dd467064146106ce578063dd62ed3e146106ee578063f03e63b414610734578063f2fde38b14610754578063ffb54a991461077457600080fd5b8063a457c2d714610644578063a69df4b514610664578063a9059cbb14610679578063c9567bf914610699578063d75f210c146106ae57600080fd5b8063790ca413116100f2578063790ca413146105ad5780638203f5fe146105c357806388f82020146105d85780638da5cb5b1461061157806395d89b411461062f57600080fd5b80636053a0e314610508578063610d5b19146105295780636bc87c3a1461056257806370a0823114610578578063715018a61461059857600080fd5b8063362a3c5d116101bc57806349bd5a5e1161018057806349bd5a5e146104665780634a74bb02146104865780635342acb4146104a7578063557ed1ba146104e0578063602bc62b146104f357600080fd5b8063362a3c5d146103d057806339509351146103f05780633b124fe7146104105780633bd5d173146104265780634549b0391461044657600080fd5b806323b872dd1161020357806323b872dd1461031857806327c8f8351461033857806329370cc61461036c5780632d8381191461038e578063313ce567146103ae57600080fd5b806306fdde031461024b578063095ea7b31461027657806313114a9d146102a65780631694505e146102c557806318160ddd1461030357600080fd5b3661024657005b600080fd5b34801561025757600080fd5b50610260610793565b60405161026d9190612cd0565b60405180910390f35b34801561028257600080fd5b50610296610291366004612bd0565b610825565b604051901515815260200161026d565b3480156102b257600080fd5b50600e545b60405190815260200161026d565b3480156102d157600080fd5b506019546102eb906201000090046001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b34801561030f57600080fd5b50600c546102b7565b34801561032457600080fd5b50610296610333366004612b90565b61083c565b34801561034457600080fd5b506102eb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037857600080fd5b5061038c610387366004612bfb565b6108a5565b005b34801561039a57600080fd5b506102b76103a9366004612c15565b610930565b3480156103ba57600080fd5b5060115460405160ff909116815260200161026d565b3480156103dc57600080fd5b5061038c6103eb366004612b20565b6109b4565b3480156103fc57600080fd5b5061029661040b366004612bd0565b610b9a565b34801561041c57600080fd5b506102b760145481565b34801561043257600080fd5b5061038c610441366004612c15565b610bd0565b34801561045257600080fd5b506102b7610461366004612c2d565b610cba565b34801561047257600080fd5b50601a546102eb906001600160a01b031681565b34801561049257600080fd5b50601a5461029690600160a81b900460ff1681565b3480156104b357600080fd5b506102966104c2366004612b20565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156104ec57600080fd5b50426102b7565b3480156104ff57600080fd5b506002546102b7565b34801561051457600080fd5b50601a5461029690600160b01b900460ff1681565b34801561053557600080fd5b50610296610544366004612b20565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561056e57600080fd5b506102b760165481565b34801561058457600080fd5b506102b7610593366004612b20565b610d47565b3480156105a457600080fd5b5061038c610da6565b3480156105b957600080fd5b506102b760125481565b3480156105cf57600080fd5b5061038c610e08565b3480156105e457600080fd5b506102966105f3366004612b20565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561061d57600080fd5b506000546001600160a01b03166102eb565b34801561063b57600080fd5b5061026061106d565b34801561065057600080fd5b5061029661065f366004612bd0565b61107c565b34801561067057600080fd5b5061038c6110cb565b34801561068557600080fd5b50610296610694366004612bd0565b6111d1565b3480156106a557600080fd5b5061038c6111de565b3480156106ba57600080fd5b5061038c6106c9366004612b20565b611256565b3480156106da57600080fd5b5061038c6106e9366004612c15565b6113bc565b3480156106fa57600080fd5b506102b7610709366004612b58565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561074057600080fd5b5061038c61074f366004612b20565b611441565b34801561076057600080fd5b5061038c61076f366004612b20565b611493565b34801561078057600080fd5b5060195461029690610100900460ff1681565b6060600f80546107a290612e23565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce90612e23565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050905090565b600061083233848461156b565b5060015b92915050565b600061084984848461168f565b61089b843361089685604051806060016040528060288152602001612ea8602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611d26565b61156b565b5060019392505050565b6000546001600160a01b031633146108d85760405162461bcd60e51b81526004016108cf90612d23565b60405180910390fd5b601a8054821515600160b01b0260ff60b01b199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c09061092590831515815260200190565b60405180910390a150565b6000600d548211156109975760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108cf565b60006109a1611d60565b90506109ad8382611d83565b9392505050565b6000546001600160a01b031633146109de5760405162461bcd60e51b81526004016108cf90612d23565b6001600160a01b03811660009081526007602052604090205460ff16610a465760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000060448201526064016108cf565b60005b600854811015610b9657816001600160a01b031660088281548110610a7e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610b845760088054610aa990600190612e0c565b81548110610ac757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610b0157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610b5e57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b8e81612e5e565b915050610a49565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916108329185906108969086611dc5565b336000818152600a602052604090205460ff1615610c455760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108cf565b6000610c5083611e24565b505050506001600160a01b038416600090815260036020526040902054919250610c7c91905082611e73565b6001600160a01b038316600090815260036020526040902055600d54610ca29082611e73565b600d55600e54610cb29084611dc5565b600e55505050565b6000600c54831115610d0e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108cf565b81610d2d576000610d1e84611e24565b50939550610836945050505050565b6000610d3884611e24565b50929550610836945050505050565b6001600160a01b0381166000908152600a602052604081205460ff1615610d8457506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461083690610930565b6000546001600160a01b03163314610dd05760405162461bcd60e51b81526004016108cf90612d23565b600080546040516001600160a01b0390911690600080516020612ed0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e325760405162461bcd60e51b81526004016108cf90612d23565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8457600080fd5b505afa158015610e98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebc9190612b3c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0457600080fd5b505afa158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c9190612b3c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610f8457600080fd5b505af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190612b3c565b601a80546001600160a01b039283166001600160a01b031990911617815560198054938316620100000262010000600160b01b0319909416939093179092556000805482168152600960209081526040808320805460ff199081166001908117909255308552828520805482168317905595549094168352600a9091529020805490921617905560118054610100600160a81b03191674fcbf6a38e13eca136cad13edbabca827b72cc0da00179055565b6060601080546107a290612e23565b6000610832338461089685604051806060016040528060258152602001612ef0602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611d26565b6001546001600160a01b031633146111315760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108cf565b60025442116111825760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108cf565b600154600080546040516001600160a01b039384169390911691600080516020612ed083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061083233848461168f565b6000546001600160a01b031633146112085760405162461bcd60e51b81526004016108cf90612d23565b674563918244f4000060185560086016556002601455601a805460ff60a81b1916600160a81b1790556019805461ff0019166101001790554260128190556112519060b4612db5565b601355565b6000546001600160a01b031633146112805760405162461bcd60e51b81526004016108cf90612d23565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156112ed5760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420556e69737761700000000060448201526064016108cf565b6001600160a01b03811660009081526007602052604090205460ff16156113565760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c6973746564000060448201526064016108cf565b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113e65760405162461bcd60e51b81526004016108cf90612d23565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556114158142612db5565b600255600080546040516001600160a01b0390911690600080516020612ed0833981519152908390a350565b6000546001600160a01b0316331461146b5760405162461bcd60e51b81526004016108cf90612d23565b601180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146114bd5760405162461bcd60e51b81526004016108cf90612d23565b6001600160a01b0381166115225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cf565b600080546040516001600160a01b0380851693921691600080516020612ed083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115cd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108cf565b6001600160a01b03821661162e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108cf565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116f35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108cf565b6001600160a01b0382166117555760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108cf565b600081116117b75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108cf565b6001600160a01b03821660009081526007602052604090205460ff161561181a5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b60448201526064016108cf565b3360009081526007602052604090205460ff16156118745760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b60448201526064016108cf565b6000546001600160a01b038481169116148015906118a057506000546001600160a01b03838116911614155b15611aa657601954610100900460ff16611957576001600160a01b0383163014806118d357506001600160a01b03821630145b806118eb57506000546001600160a01b038481169116145b8061190357506000546001600160a01b038381169116145b61195757601954610100900460ff166119575760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064016108cf565b60125461196590600a612db5565b421015611a3257601a546001600160a01b038481169116148015906119a757506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156119c757506019546001600160a01b03848116620100009092041614155b15611a32576001600160a01b0383166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b60195460ff1615611aa6573360009081526006602052604090206002015460ff16611aa657604080516060810182526000808252602080830182815260018486018181523385526006909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b601a546001600160a01b038481169116148015611ad757506019546001600160a01b03838116620100009092041614155b8015611afc57506001600160a01b03821660009081526009602052604090205460ff16155b15611c4657601954610100900460ff16611b585760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016108cf565b60195460ff1615611c1357426013541115611c1357601854811115611b7c57600080fd5b6001600160a01b0382166000908152600660205260409020544211611bee5760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265604482015261321760f11b60648201526084016108cf565b611bf942601e612db5565b6001600160a01b0383166000908152600660205260409020555b60195460ff1615611c4657611c2942600f612db5565b6001600160a01b0383166000908152600660205260409020600101555b601a54600160a01b900460ff16158015611c695750601a54600160a81b900460ff165b8015611c825750601a546001600160a01b038381169116145b15611cc9576000611c9230610d47565b90508015611ca357611ca381611eb5565b601a54600160b01b900460ff1615611cc757478015611cc557611cc581611f23565b505b505b6001600160a01b03831660009081526009602052604090205460019060ff1680611d0b57506001600160a01b03831660009081526009602052604090205460ff165b15611d14575060005b611d2084848484611f55565b50505050565b60008184841115611d4a5760405162461bcd60e51b81526004016108cf9190612cd0565b506000611d578486612e0c565b95945050505050565b6000806000611d6d61207a565b9092509050611d7c8282611d83565b9250505090565b60006109ad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612234565b600080611dd28385612db5565b9050838110156109ad5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108cf565b6000806000806000806000806000611e3b8a612262565b9250925092506000806000611e598d8686611e54611d60565b6122a4565b919f909e50909c50959a5093985091965092945050505050565b60006109ad83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d26565b601a805460ff60a01b1916600160a01b17905547611ed2826122f4565b6000611ede4783611e73565b601154909150611f119061010090046001600160a01b0316611f0c6004611f068560036124d7565b90611d83565b612556565b5050601a805460ff60a01b1916905550565b601a805460ff60a01b1916600160a01b1790558015611f4557611f4581612591565b50601a805460ff60a01b19169055565b80611f6257611f62612773565b6001600160a01b0384166000908152600a602052604090205460ff168015611fa357506001600160a01b0383166000908152600a602052604090205460ff16155b15611fb857611fb38484846127a1565b612064565b6001600160a01b0384166000908152600a602052604090205460ff16158015611ff957506001600160a01b0383166000908152600a602052604090205460ff165b1561200957611fb38484846128c7565b6001600160a01b0384166000908152600a602052604090205460ff16801561204957506001600160a01b0383166000908152600a602052604090205460ff165b1561205957611fb3848484612970565b6120648484846129e3565b80611d2057611d20601554601455601754601655565b600d54600c546000918291825b600b54811015612204578260036000600b84815481106120b757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061213057508160046000600b848154811061210957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214657600d54600c54945094505050509091565b61219a60036000600b848154811061216e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e73565b92506121f060046000600b84815481106121c457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e73565b9150806121fc81612e5e565b915050612087565b50600c54600d5461221491611d83565b82101561222b57600d54600c549350935050509091565b90939092509050565b600081836122555760405162461bcd60e51b81526004016108cf9190612cd0565b506000611d578486612dcd565b60008060008061227185612a27565b9050600061227e86612a43565b90506000612296826122908986611e73565b90611e73565b979296509094509092505050565b60008080806122b388866124d7565b905060006122c188876124d7565b905060006122cf88886124d7565b905060006122e1826122908686611e73565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061233757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123a557600080fd5b505afa1580156123b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dd9190612b3c565b816001815181106123fe57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260195461242a913091620100009004168461156b565b60195460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790612468908590600090869030904290600401612d79565b600060405180830381600087803b15801561248257600080fd5b505af1158015612496573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516124cb929190612d58565b60405180910390a15050565b6000826124e657506000610836565b60006124f28385612ded565b9050826124ff8583612dcd565b146109ad5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108cf565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561258c573d6000803e3d6000fd5b505050565b604080516002808252606082018352600092602083019080368337019050509050601960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260057600080fd5b505afa158015612614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126389190612b3c565b8160008151811061265957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061269b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526019546201000090041663b6f9de95836000847f00000000000000000000000000000000000000000000000000000000000000006126f14261012c611dc5565b6040518663ffffffff1660e01b81526004016127109493929190612c9b565b6000604051808303818588803b15801561272957600080fd5b505af115801561273d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516124cb929190612d58565b6014541580156127835750601654155b1561278a57565b601480546015556016805460175560009182905555565b6000806000806000806127b387611e24565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506127e59088611e73565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128149087611e73565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546128439086611dc5565b6001600160a01b03891660009081526003602052604090205561286581612a5f565b61286f8483612ae7565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516128b491815260200190565b60405180910390a3505050505050505050565b6000806000806000806128d987611e24565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061290b9087611e73565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546129419084611dc5565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546128439086611dc5565b60008060008060008061298287611e24565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506129b49088611e73565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461290b9087611e73565b6000806000806000806129f587611e24565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128149087611e73565b60006108366064611f06601454856124d790919063ffffffff16565b60006108366064611f06601654856124d790919063ffffffff16565b6000612a69611d60565b90506000612a7783836124d7565b30600090815260036020526040902054909150612a949082611dc5565b30600090815260036020908152604080832093909355600a9052205460ff161561258c5730600090815260046020526040902054612ad29084611dc5565b30600090815260046020526040902055505050565b600d54612af49083611e73565b600d55600e54612b049082611dc5565b600e555050565b80358015158114612b1b57600080fd5b919050565b600060208284031215612b31578081fd5b81356109ad81612e8f565b600060208284031215612b4d578081fd5b81516109ad81612e8f565b60008060408385031215612b6a578081fd5b8235612b7581612e8f565b91506020830135612b8581612e8f565b809150509250929050565b600080600060608486031215612ba4578081fd5b8335612baf81612e8f565b92506020840135612bbf81612e8f565b929592945050506040919091013590565b60008060408385031215612be2578182fd5b8235612bed81612e8f565b946020939093013593505050565b600060208284031215612c0c578081fd5b6109ad82612b0b565b600060208284031215612c26578081fd5b5035919050565b60008060408385031215612c3f578182fd5b82359150612c4f60208401612b0b565b90509250929050565b6000815180845260208085019450808401835b83811015612c905781516001600160a01b031687529582019590820190600101612c6b565b509495945050505050565b848152608060208201526000612cb46080830186612c58565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015612cfc57858101830151858201604001528201612ce0565b81811115612d0d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612d716040830184612c58565b949350505050565b85815284602082015260a060408201526000612d9860a0830186612c58565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612dc857612dc8612e79565b500190565b600082612de857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612e0757612e07612e79565b500290565b600082821015612e1e57612e1e612e79565b500390565b600181811c90821680612e3757607f821691505b60208210811415612e5857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e7257612e72612e79565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612ea457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b934694b31bfa226ae112feb5d9b13823d35a31687ff9da74d4d726e766e36a64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80636053a0e31161012e578063a457c2d7116100ab578063dd4670641161006f578063dd467064146106ce578063dd62ed3e146106ee578063f03e63b414610734578063f2fde38b14610754578063ffb54a991461077457600080fd5b8063a457c2d714610644578063a69df4b514610664578063a9059cbb14610679578063c9567bf914610699578063d75f210c146106ae57600080fd5b8063790ca413116100f2578063790ca413146105ad5780638203f5fe146105c357806388f82020146105d85780638da5cb5b1461061157806395d89b411461062f57600080fd5b80636053a0e314610508578063610d5b19146105295780636bc87c3a1461056257806370a0823114610578578063715018a61461059857600080fd5b8063362a3c5d116101bc57806349bd5a5e1161018057806349bd5a5e146104665780634a74bb02146104865780635342acb4146104a7578063557ed1ba146104e0578063602bc62b146104f357600080fd5b8063362a3c5d146103d057806339509351146103f05780633b124fe7146104105780633bd5d173146104265780634549b0391461044657600080fd5b806323b872dd1161020357806323b872dd1461031857806327c8f8351461033857806329370cc61461036c5780632d8381191461038e578063313ce567146103ae57600080fd5b806306fdde031461024b578063095ea7b31461027657806313114a9d146102a65780631694505e146102c557806318160ddd1461030357600080fd5b3661024657005b600080fd5b34801561025757600080fd5b50610260610793565b60405161026d9190612cd0565b60405180910390f35b34801561028257600080fd5b50610296610291366004612bd0565b610825565b604051901515815260200161026d565b3480156102b257600080fd5b50600e545b60405190815260200161026d565b3480156102d157600080fd5b506019546102eb906201000090046001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b34801561030f57600080fd5b50600c546102b7565b34801561032457600080fd5b50610296610333366004612b90565b61083c565b34801561034457600080fd5b506102eb7f000000000000000000000000000000000000000000000000000000000000dead81565b34801561037857600080fd5b5061038c610387366004612bfb565b6108a5565b005b34801561039a57600080fd5b506102b76103a9366004612c15565b610930565b3480156103ba57600080fd5b5060115460405160ff909116815260200161026d565b3480156103dc57600080fd5b5061038c6103eb366004612b20565b6109b4565b3480156103fc57600080fd5b5061029661040b366004612bd0565b610b9a565b34801561041c57600080fd5b506102b760145481565b34801561043257600080fd5b5061038c610441366004612c15565b610bd0565b34801561045257600080fd5b506102b7610461366004612c2d565b610cba565b34801561047257600080fd5b50601a546102eb906001600160a01b031681565b34801561049257600080fd5b50601a5461029690600160a81b900460ff1681565b3480156104b357600080fd5b506102966104c2366004612b20565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156104ec57600080fd5b50426102b7565b3480156104ff57600080fd5b506002546102b7565b34801561051457600080fd5b50601a5461029690600160b01b900460ff1681565b34801561053557600080fd5b50610296610544366004612b20565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561056e57600080fd5b506102b760165481565b34801561058457600080fd5b506102b7610593366004612b20565b610d47565b3480156105a457600080fd5b5061038c610da6565b3480156105b957600080fd5b506102b760125481565b3480156105cf57600080fd5b5061038c610e08565b3480156105e457600080fd5b506102966105f3366004612b20565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561061d57600080fd5b506000546001600160a01b03166102eb565b34801561063b57600080fd5b5061026061106d565b34801561065057600080fd5b5061029661065f366004612bd0565b61107c565b34801561067057600080fd5b5061038c6110cb565b34801561068557600080fd5b50610296610694366004612bd0565b6111d1565b3480156106a557600080fd5b5061038c6111de565b3480156106ba57600080fd5b5061038c6106c9366004612b20565b611256565b3480156106da57600080fd5b5061038c6106e9366004612c15565b6113bc565b3480156106fa57600080fd5b506102b7610709366004612b58565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561074057600080fd5b5061038c61074f366004612b20565b611441565b34801561076057600080fd5b5061038c61076f366004612b20565b611493565b34801561078057600080fd5b5060195461029690610100900460ff1681565b6060600f80546107a290612e23565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce90612e23565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050905090565b600061083233848461156b565b5060015b92915050565b600061084984848461168f565b61089b843361089685604051806060016040528060288152602001612ea8602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611d26565b61156b565b5060019392505050565b6000546001600160a01b031633146108d85760405162461bcd60e51b81526004016108cf90612d23565b60405180910390fd5b601a8054821515600160b01b0260ff60b01b199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c09061092590831515815260200190565b60405180910390a150565b6000600d548211156109975760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108cf565b60006109a1611d60565b90506109ad8382611d83565b9392505050565b6000546001600160a01b031633146109de5760405162461bcd60e51b81526004016108cf90612d23565b6001600160a01b03811660009081526007602052604090205460ff16610a465760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000060448201526064016108cf565b60005b600854811015610b9657816001600160a01b031660088281548110610a7e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610b845760088054610aa990600190612e0c565b81548110610ac757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610b0157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610b5e57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b8e81612e5e565b915050610a49565b5050565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916108329185906108969086611dc5565b336000818152600a602052604090205460ff1615610c455760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108cf565b6000610c5083611e24565b505050506001600160a01b038416600090815260036020526040902054919250610c7c91905082611e73565b6001600160a01b038316600090815260036020526040902055600d54610ca29082611e73565b600d55600e54610cb29084611dc5565b600e55505050565b6000600c54831115610d0e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108cf565b81610d2d576000610d1e84611e24565b50939550610836945050505050565b6000610d3884611e24565b50929550610836945050505050565b6001600160a01b0381166000908152600a602052604081205460ff1615610d8457506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461083690610930565b6000546001600160a01b03163314610dd05760405162461bcd60e51b81526004016108cf90612d23565b600080546040516001600160a01b0390911690600080516020612ed0833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e325760405162461bcd60e51b81526004016108cf90612d23565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8457600080fd5b505afa158015610e98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebc9190612b3c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0457600080fd5b505afa158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c9190612b3c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610f8457600080fd5b505af1158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190612b3c565b601a80546001600160a01b039283166001600160a01b031990911617815560198054938316620100000262010000600160b01b0319909416939093179092556000805482168152600960209081526040808320805460ff199081166001908117909255308552828520805482168317905595549094168352600a9091529020805490921617905560118054610100600160a81b03191674fcbf6a38e13eca136cad13edbabca827b72cc0da00179055565b6060601080546107a290612e23565b6000610832338461089685604051806060016040528060258152602001612ef0602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611d26565b6001546001600160a01b031633146111315760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108cf565b60025442116111825760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108cf565b600154600080546040516001600160a01b039384169390911691600080516020612ed083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061083233848461168f565b6000546001600160a01b031633146112085760405162461bcd60e51b81526004016108cf90612d23565b674563918244f4000060185560086016556002601455601a805460ff60a81b1916600160a81b1790556019805461ff0019166101001790554260128190556112519060b4612db5565b601355565b6000546001600160a01b031633146112805760405162461bcd60e51b81526004016108cf90612d23565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156112ed5760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420556e69737761700000000060448201526064016108cf565b6001600160a01b03811660009081526007602052604090205460ff16156113565760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c6973746564000060448201526064016108cf565b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113e65760405162461bcd60e51b81526004016108cf90612d23565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556114158142612db5565b600255600080546040516001600160a01b0390911690600080516020612ed0833981519152908390a350565b6000546001600160a01b0316331461146b5760405162461bcd60e51b81526004016108cf90612d23565b601180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146114bd5760405162461bcd60e51b81526004016108cf90612d23565b6001600160a01b0381166115225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cf565b600080546040516001600160a01b0380851693921691600080516020612ed083398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115cd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108cf565b6001600160a01b03821661162e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108cf565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116f35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108cf565b6001600160a01b0382166117555760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108cf565b600081116117b75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108cf565b6001600160a01b03821660009081526007602052604090205460ff161561181a5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b60448201526064016108cf565b3360009081526007602052604090205460ff16156118745760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b60448201526064016108cf565b6000546001600160a01b038481169116148015906118a057506000546001600160a01b03838116911614155b15611aa657601954610100900460ff16611957576001600160a01b0383163014806118d357506001600160a01b03821630145b806118eb57506000546001600160a01b038481169116145b8061190357506000546001600160a01b038381169116145b61195757601954610100900460ff166119575760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064016108cf565b60125461196590600a612db5565b421015611a3257601a546001600160a01b038481169116148015906119a757506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156119c757506019546001600160a01b03848116620100009092041614155b15611a32576001600160a01b0383166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b60195460ff1615611aa6573360009081526006602052604090206002015460ff16611aa657604080516060810182526000808252602080830182815260018486018181523385526006909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b601a546001600160a01b038481169116148015611ad757506019546001600160a01b03838116620100009092041614155b8015611afc57506001600160a01b03821660009081526009602052604090205460ff16155b15611c4657601954610100900460ff16611b585760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016108cf565b60195460ff1615611c1357426013541115611c1357601854811115611b7c57600080fd5b6001600160a01b0382166000908152600660205260409020544211611bee5760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265604482015261321760f11b60648201526084016108cf565b611bf942601e612db5565b6001600160a01b0383166000908152600660205260409020555b60195460ff1615611c4657611c2942600f612db5565b6001600160a01b0383166000908152600660205260409020600101555b601a54600160a01b900460ff16158015611c695750601a54600160a81b900460ff165b8015611c825750601a546001600160a01b038381169116145b15611cc9576000611c9230610d47565b90508015611ca357611ca381611eb5565b601a54600160b01b900460ff1615611cc757478015611cc557611cc581611f23565b505b505b6001600160a01b03831660009081526009602052604090205460019060ff1680611d0b57506001600160a01b03831660009081526009602052604090205460ff165b15611d14575060005b611d2084848484611f55565b50505050565b60008184841115611d4a5760405162461bcd60e51b81526004016108cf9190612cd0565b506000611d578486612e0c565b95945050505050565b6000806000611d6d61207a565b9092509050611d7c8282611d83565b9250505090565b60006109ad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612234565b600080611dd28385612db5565b9050838110156109ad5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108cf565b6000806000806000806000806000611e3b8a612262565b9250925092506000806000611e598d8686611e54611d60565b6122a4565b919f909e50909c50959a5093985091965092945050505050565b60006109ad83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d26565b601a805460ff60a01b1916600160a01b17905547611ed2826122f4565b6000611ede4783611e73565b601154909150611f119061010090046001600160a01b0316611f0c6004611f068560036124d7565b90611d83565b612556565b5050601a805460ff60a01b1916905550565b601a805460ff60a01b1916600160a01b1790558015611f4557611f4581612591565b50601a805460ff60a01b19169055565b80611f6257611f62612773565b6001600160a01b0384166000908152600a602052604090205460ff168015611fa357506001600160a01b0383166000908152600a602052604090205460ff16155b15611fb857611fb38484846127a1565b612064565b6001600160a01b0384166000908152600a602052604090205460ff16158015611ff957506001600160a01b0383166000908152600a602052604090205460ff165b1561200957611fb38484846128c7565b6001600160a01b0384166000908152600a602052604090205460ff16801561204957506001600160a01b0383166000908152600a602052604090205460ff165b1561205957611fb3848484612970565b6120648484846129e3565b80611d2057611d20601554601455601754601655565b600d54600c546000918291825b600b54811015612204578260036000600b84815481106120b757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061213057508160046000600b848154811061210957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561214657600d54600c54945094505050509091565b61219a60036000600b848154811061216e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e73565b92506121f060046000600b84815481106121c457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e73565b9150806121fc81612e5e565b915050612087565b50600c54600d5461221491611d83565b82101561222b57600d54600c549350935050509091565b90939092509050565b600081836122555760405162461bcd60e51b81526004016108cf9190612cd0565b506000611d578486612dcd565b60008060008061227185612a27565b9050600061227e86612a43565b90506000612296826122908986611e73565b90611e73565b979296509094509092505050565b60008080806122b388866124d7565b905060006122c188876124d7565b905060006122cf88886124d7565b905060006122e1826122908686611e73565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061233757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123a557600080fd5b505afa1580156123b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dd9190612b3c565b816001815181106123fe57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260195461242a913091620100009004168461156b565b60195460405163791ac94760e01b8152620100009091046001600160a01b03169063791ac94790612468908590600090869030904290600401612d79565b600060405180830381600087803b15801561248257600080fd5b505af1158015612496573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516124cb929190612d58565b60405180910390a15050565b6000826124e657506000610836565b60006124f28385612ded565b9050826124ff8583612dcd565b146109ad5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108cf565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561258c573d6000803e3d6000fd5b505050565b604080516002808252606082018352600092602083019080368337019050509050601960029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260057600080fd5b505afa158015612614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126389190612b3c565b8160008151811061265957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061269b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526019546201000090041663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead6126f14261012c611dc5565b6040518663ffffffff1660e01b81526004016127109493929190612c9b565b6000604051808303818588803b15801561272957600080fd5b505af115801561273d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516124cb929190612d58565b6014541580156127835750601654155b1561278a57565b601480546015556016805460175560009182905555565b6000806000806000806127b387611e24565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506127e59088611e73565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128149087611e73565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546128439086611dc5565b6001600160a01b03891660009081526003602052604090205561286581612a5f565b61286f8483612ae7565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516128b491815260200190565b60405180910390a3505050505050505050565b6000806000806000806128d987611e24565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061290b9087611e73565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546129419084611dc5565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546128439086611dc5565b60008060008060008061298287611e24565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506129b49088611e73565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461290b9087611e73565b6000806000806000806129f587611e24565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128149087611e73565b60006108366064611f06601454856124d790919063ffffffff16565b60006108366064611f06601654856124d790919063ffffffff16565b6000612a69611d60565b90506000612a7783836124d7565b30600090815260036020526040902054909150612a949082611dc5565b30600090815260036020908152604080832093909355600a9052205460ff161561258c5730600090815260046020526040902054612ad29084611dc5565b30600090815260046020526040902055505050565b600d54612af49083611e73565b600d55600e54612b049082611dc5565b600e555050565b80358015158114612b1b57600080fd5b919050565b600060208284031215612b31578081fd5b81356109ad81612e8f565b600060208284031215612b4d578081fd5b81516109ad81612e8f565b60008060408385031215612b6a578081fd5b8235612b7581612e8f565b91506020830135612b8581612e8f565b809150509250929050565b600080600060608486031215612ba4578081fd5b8335612baf81612e8f565b92506020840135612bbf81612e8f565b929592945050506040919091013590565b60008060408385031215612be2578182fd5b8235612bed81612e8f565b946020939093013593505050565b600060208284031215612c0c578081fd5b6109ad82612b0b565b600060208284031215612c26578081fd5b5035919050565b60008060408385031215612c3f578182fd5b82359150612c4f60208401612b0b565b90509250929050565b6000815180845260208085019450808401835b83811015612c905781516001600160a01b031687529582019590820190600101612c6b565b509495945050505050565b848152608060208201526000612cb46080830186612c58565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015612cfc57858101830151858201604001528201612ce0565b81811115612d0d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612d716040830184612c58565b949350505050565b85815284602082015260a060408201526000612d9860a0830186612c58565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612dc857612dc8612e79565b500190565b600082612de857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612e0757612e07612e79565b500290565b600082821015612e1e57612e1e612e79565b500390565b600181811c90821680612e3757607f821691505b60208210811415612e5857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e7257612e72612e79565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612ea457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b934694b31bfa226ae112feb5d9b13823d35a31687ff9da74d4d726e766e36a64736f6c63430008040033

Deployed Bytecode Sourcemap

15092:20011:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18258:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19170:161;;;;;;;;;;-1:-1:-1;19170:161:0;;;;;:::i;:::-;;:::i;:::-;;;3714:14:1;;3707:22;3689:41;;3677:2;3662:18;19170:161:0;3644:92:1;20291:87:0;;;;;;;;;;-1:-1:-1;20360:10:0;;20291:87;;;13277:25:1;;;13265:2;13250:18;20291:87:0;13232:76:1;16569:41:0;;;;;;;;;;-1:-1:-1;16569:41:0;;;;;;;-1:-1:-1;;;;;16569:41:0;;;;;;-1:-1:-1;;;;;3196:32:1;;;3178:51;;3166:2;3151:18;16569:41:0;3133:102:1;18535:95:0;;;;;;;;;;-1:-1:-1;18615:7:0;;18535:95;;19339:313;;;;;;;;;;-1:-1:-1;19339:313:0;;;;;:::i;:::-;;:::i;15213:81::-;;;;;;;;;;;;;;;33869:150;;;;;;;;;;-1:-1:-1;33869:150:0;;;;;:::i;:::-;;:::i;:::-;;21221:253;;;;;;;;;;-1:-1:-1;21221:253:0;;;;;:::i;:::-;;:::i;18444:83::-;;;;;;;;;;-1:-1:-1;18510:9:0;;18444:83;;18510:9;;;;14379:36:1;;14367:2;14352:18;18444:83:0;14334:87:1;34515:482:0;;;;;;;;;;-1:-1:-1;34515:482:0;;;;;:::i;:::-;;:::i;19660:218::-;;;;;;;;;;-1:-1:-1;19660:218:0;;;;;:::i;:::-;;:::i;16216:22::-;;;;;;;;;;;;;;;;20390:377;;;;;;;;;;-1:-1:-1;20390:377:0;;;;;:::i;:::-;;:::i;20777:436::-;;;;;;;;;;-1:-1:-1;20777:436:0;;;;;:::i;:::-;;:::i;16617:28::-;;;;;;;;;;-1:-1:-1;16617:28:0;;;;-1:-1:-1;;;;;16617:28:0;;;16682:41;;;;;;;;;;-1:-1:-1;16682:41:0;;;;-1:-1:-1;;;16682:41:0;;;;;;33589:123;;;;;;;;;;-1:-1:-1;33589:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;33677:27:0;33653:4;33677:27;;;:18;:27;;;;;;;;;33589:123;6530:90;;;;;;;;;;-1:-1:-1;6597:15:0;6530:90;;6432;;;;;;;;;;-1:-1:-1;6505:9:0;;6432:90;;16730:33;;;;;;;;;;-1:-1:-1;16730:33:0;;;;-1:-1:-1;;;16730:33:0;;;;;;21482:113;;;;;;;;;;-1:-1:-1;21482:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;21569:18:0;21545:4;21569:18;;;:9;:18;;;;;;;;;21482:113;16293:28;;;;;;;;;;;;;;;;18638:198;;;;;;;;;;-1:-1:-1;18638:198:0;;;;;:::i;:::-;;:::i;6018:148::-;;;;;;;;;;;;;:::i;16138:25::-;;;;;;;;;;;;;;;;17673:577;;;;;;;;;;;;;:::i;20163:120::-;;;;;;;;;;-1:-1:-1;20163:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20255:20:0;20231:4;20255:20;;;:11;:20;;;;;;;;;20163:120;5800:79;;;;;;;;;;-1:-1:-1;5838:7:0;5865:6;-1:-1:-1;;;;;5865:6:0;5800:79;;18349:87;;;;;;;;;;;;;:::i;19886:269::-;;;;;;;;;;-1:-1:-1;19886:269:0;;;;;:::i;:::-;;:::i;6862:305::-;;;;;;;;;;;;;:::i;18844:167::-;;;;;;;;;;-1:-1:-1;18844:167:0;;;;;:::i;:::-;;:::i;17359:306::-;;;;;;;;;;;;;:::i;34175:328::-;;;;;;;;;;-1:-1:-1;34175:328:0;;;;;:::i;:::-;;:::i;6628:226::-;;;;;;;;;;-1:-1:-1;6628:226:0;;;;;:::i;:::-;;:::i;19019:143::-;;;;;;;;;;-1:-1:-1;19019:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19127:18:0;;;19100:7;19127:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19019:143;33722:133;;;;;;;;;;-1:-1:-1;33722:133:0;;;;;:::i;:::-;;:::i;6180:244::-;;;;;;;;;;-1:-1:-1;6180:244:0;;;;;:::i;:::-;;:::i;16474:31::-;;;;;;;;;;-1:-1:-1;16474:31:0;;;;;;;;;;;18258:83;18295:13;18328:5;18321:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18258:83;:::o;19170:161::-;19245:4;19262:39;198:10;19285:7;19294:6;19262:8;:39::i;:::-;-1:-1:-1;19319:4:0;19170:161;;;;;:::o;19339:313::-;19437:4;19454:36;19464:6;19472:9;19483:6;19454:9;:36::i;:::-;19501:121;19510:6;198:10;19532:89;19570:6;19532:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19532:19:0;;;;;;:11;:19;;;;;;;;198:10;19532:33;;;;;;;;;;:37;:89::i;:::-;19501:8;:121::i;:::-;-1:-1:-1;19640:4:0;19339:313;;;;;:::o;33869:150::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;;;;;;;;;33939:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;33939:25:0::1;-1:-1:-1::0;;;;33939:25:0;;::::1;;::::0;;33980:31:::1;::::0;::::1;::::0;::::1;::::0;33956:8;3714:14:1;3707:22;3689:41;;3677:2;3662:18;;3644:92;33980:31:0::1;;;;;;;;33869:150:::0;:::o;21221:253::-;21287:7;21326;;21315;:18;;21307:73;;;;-1:-1:-1;;;21307:73:0;;5705:2:1;21307:73:0;;;5687:21:1;5744:2;5724:18;;;5717:30;5783:34;5763:18;;;5756:62;-1:-1:-1;;;5834:18:1;;;5827:40;5884:19;;21307:73:0;5677:232:1;21307:73:0;21391:19;21414:10;:8;:10::i;:::-;21391:33;-1:-1:-1;21442:24:0;:7;21391:33;21442:11;:24::i;:::-;21435:31;21221:253;-1:-1:-1;;;21221:253:0:o;34515:482::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34596:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;34588:57;;;::::0;-1:-1:-1;;;34588:57:0;;9928:2:1;34588:57:0::1;::::0;::::1;9910:21:1::0;9967:2;9947:18;;;9940:30;10006:28;9986:18;;;9979:56;10052:18;;34588:57:0::1;9900:176:1::0;34588:57:0::1;34661:9;34656:334;34680:17;:24:::0;34676:28;::::1;34656:334;;;34754:7;-1:-1:-1::0;;;;;34730:31:0::1;:17;34748:1;34730:20;;;;;;-1:-1:-1::0;;;34730:20:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34730:20:0::1;:31;34726:253;;;34805:17;34823:24:::0;;:28:::1;::::0;34850:1:::1;::::0;34823:28:::1;:::i;:::-;34805:47;;;;;;-1:-1:-1::0;;;34805:47:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;34782:17:::1;:20:::0;;-1:-1:-1;;;;;34805:47:0;;::::1;::::0;34800:1;;34782:20;::::1;;;-1:-1:-1::0;;;34782:20:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:70:::0;;-1:-1:-1;;;;;;34782:70:0::1;-1:-1:-1::0;;;;;34782:70:0;;::::1;;::::0;;34871:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:26;;-1:-1:-1;;34871:26:0::1;::::0;;34916:17:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;34916:23:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34916:23:0;;;;;-1:-1:-1;;;;;;34916:23:0::1;::::0;;;;;34656:334:::1;34515:482:::0;:::o;34726:253::-:1;34706:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34656:334;;;;34515:482:::0;:::o;19660:218::-;198:10;19748:4;19797:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19797:34:0;;;;;;;;;;19748:4;;19765:83;;19788:7;;19797:50;;19836:10;19797:38;:50::i;20390:377::-;198:10;20442:14;20491:19;;;:11;:19;;;;;;;;20490:20;20482:77;;;;-1:-1:-1;;;20482:77:0;;12164:2:1;20482:77:0;;;12146:21:1;12203:2;12183:18;;;12176:30;12242:34;12222:18;;;12215:62;-1:-1:-1;;;12293:18:1;;;12286:42;12345:19;;20482:77:0;12136:234:1;20482:77:0;20571:15;20595:19;20606:7;20595:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20643:15:0;;;;;;:7;:15;;;;;;20570:44;;-1:-1:-1;20643:28:0;;:15;-1:-1:-1;20570:44:0;20643:19;:28::i;:::-;-1:-1:-1;;;;;20625:15:0;;;;;;:7;:15;;;;;:46;20692:7;;:20;;20704:7;20692:11;:20::i;:::-;20682:7;:30;20736:10;;:23;;20751:7;20736:14;:23::i;:::-;20723:10;:36;-1:-1:-1;;;20390:377:0:o;20777:436::-;20867:7;20906;;20895;:18;;20887:62;;;;-1:-1:-1;;;20887:62:0;;8395:2:1;20887:62:0;;;8377:21:1;8434:2;8414:18;;;8407:30;8473:33;8453:18;;;8446:61;8524:18;;20887:62:0;8367:181:1;20887:62:0;20965:17;20960:246;;21000:15;21024:19;21035:7;21024:10;:19::i;:::-;-1:-1:-1;20999:44:0;;-1:-1:-1;21058:14:0;;-1:-1:-1;;;;;21058:14:0;20960:246;21107:23;21138:19;21149:7;21138:10;:19::i;:::-;-1:-1:-1;21105:52:0;;-1:-1:-1;21172:22:0;;-1:-1:-1;;;;;21172:22:0;18638:198;-1:-1:-1;;;;;18728:20:0;;18704:7;18728:20;;;:11;:20;;;;;;;;18724:49;;;-1:-1:-1;;;;;;18757:16:0;;;;;:7;:16;;;;;;;18638:198::o;18724:49::-;-1:-1:-1;;;;;18811:16:0;;;;;;:7;:16;;;;;;18791:37;;:19;:37::i;6018:148::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;6125:1:::1;6109:6:::0;;6088:40:::1;::::0;-1:-1:-1;;;;;6109:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6088:40:0;6125:1;;6088:40:::1;6156:1;6139:19:::0;;-1:-1:-1;;;;;;6139:19:0::1;::::0;;6018:148::o;17673:577::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;17729:35:::1;17786:42;17729:100;;17874:16;-1:-1:-1::0;;;;;17874:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17856:66:0::1;;17931:4;17938:16;-1:-1:-1::0;;;;;17938:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17856:106;::::0;-1:-1:-1;;;;;;17856:106:0::1;::::0;;;;;;-1:-1:-1;;;;;3470:15:1;;;17856:106:0::1;::::0;::::1;3452:34:1::0;3522:15;;3502:18;;;3495:43;3387:18;;17856:106:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17840:13;:122:::0;;-1:-1:-1;;;;;17840:122:0;;::::1;-1:-1:-1::0;;;;;;17840:122:0;;::::1;;::::0;;17975:15:::1;:34:::0;;;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;17975:34:0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;5865:6:0;;;;18022:27;;:18:::1;:27;::::0;;;;;;;:34;;-1:-1:-1;;18022:34:0;;::::1;-1:-1:-1::0;18022:34:0;;::::1;::::0;;;18094:4:::1;18067:33:::0;;;;;:40;;;::::1;::::0;::::1;::::0;;18130:13;;;;::::1;18118:26:::0;;:11:::1;:26:::0;;;;;:33;;;;::::1;;::::0;;18174:14:::1;:68:::0;;-1:-1:-1;;;;;;18174:68:0::1;::::0;::::1;::::0;;17673:577::o;18349:87::-;18388:13;18421:7;18414:14;;;;;:::i;19886:269::-;19979:4;19996:129;198:10;20019:7;20028:96;20067:15;20028:96;;;;;;;;;;;;;;;;;198:10;20028:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20028:34:0;;;;;;;;;;;;:38;:96::i;6862:305::-;6914:14;;-1:-1:-1;;;;;6914:14:0;6932:10;6914:28;6906:76;;;;-1:-1:-1;;;6906:76:0;;12577:2:1;6906:76:0;;;12559:21:1;12616:2;12596:18;;;12589:30;12655:34;12635:18;;;12628:62;-1:-1:-1;;;12706:18:1;;;12699:33;12749:19;;6906:76:0;12549:225:1;6906:76:0;7019:9;;7001:15;:27;6993:72;;;;-1:-1:-1;;;6993:72:0;;11451:2:1;6993:72:0;;;11433:21:1;11490:2;11470:18;;;11463:30;11529:33;11509:18;;;11502:61;11580:18;;6993:72:0;11423:181:1;6993:72:0;7110:14;;;7102:6;;7081:44;;-1:-1:-1;;;;;7110:14:0;;;;7102:6;;;;-1:-1:-1;;;;;;;;;;;7081:44:0;;7145:14;;;7136:23;;-1:-1:-1;;;;;;7136:23:0;-1:-1:-1;;;;;7145:14:0;;;7136:23;;;;;;6862:305::o;18844:167::-;18922:4;18939:42;198:10;18963:9;18974:6;18939:9;:42::i;17359:306::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;17430:18:::1;17414:13;:34:::0;17473:1:::1;17459:13;:15:::0;-1:-1:-1;17485:7:0::1;:9:::0;17505:21:::1;:28:::0;;-1:-1:-1;;;;17505:28:0::1;-1:-1:-1::0;;;17505:28:0::1;::::0;;17544:11:::1;:18:::0;;-1:-1:-1;;17544:18:0::1;17505:28;17544:18;::::0;;17586:15:::1;17573:10;:28:::0;;;17626:31:::1;::::0;17645:11:::1;17626:31;:::i;:::-;17612:11;:45:::0;17359:306::o;34175:328::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;34269:42:::1;-1:-1:-1::0;;;;;34258:53:0;::::1;;;34250:94;;;::::0;-1:-1:-1;;;34250:94:0;;10283:2:1;34250:94:0::1;::::0;::::1;10265:21:1::0;10322:2;10302:18;;;10295:30;10361;10341:18;;;10334:58;10409:18;;34250:94:0::1;10255:178:1::0;34250:94:0::1;-1:-1:-1::0;;;;;34364:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;34363:19;34355:62;;;::::0;-1:-1:-1;;;34355:62:0;;8036:2:1;34355:62:0::1;::::0;::::1;8018:21:1::0;8075:2;8055:18;;;8048:30;8114:32;8094:18;;;8087:60;8164:18;;34355:62:0::1;8008:180:1::0;34355:62:0::1;-1:-1:-1::0;;;;;34428:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;34428:25:0::1;34449:4;34428:25:::0;;::::1;::::0;;;34464:17:::1;:31:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34464:31:0::1;::::0;;::::1;::::0;;34175:328::o;6628:226::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;6709:6:::1;::::0;;;6692:23;;-1:-1:-1;;;;;;6692:23:0;;::::1;-1:-1:-1::0;;;;;6709:6:0;::::1;6692:23;::::0;;;6726:19:::1;::::0;;6768:22:::1;6786:4:::0;6768:15:::1;:22;:::i;:::-;6756:9;:34:::0;6843:1:::1;6827:6:::0;;6806:40:::1;::::0;-1:-1:-1;;;;;6827:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6806:40:0;6843:1;;6806:40:::1;6628:226:::0;:::o;33722:133::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;33806:14:::1;:41:::0;;-1:-1:-1;;;;;33806:41:0;;::::1;;;-1:-1:-1::0;;;;;;33806:41:0;;::::1;::::0;;;::::1;::::0;;33722:133::o;6180:244::-;5927:6;;-1:-1:-1;;;;;5927:6:0;198:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6269:22:0;::::1;6261:73;;;::::0;-1:-1:-1;;;6261:73:0;;6116:2:1;6261:73:0::1;::::0;::::1;6098:21:1::0;6155:2;6135:18;;;6128:30;6194:34;6174:18;;;6167:62;-1:-1:-1;;;6245:18:1;;;6238:36;6291:19;;6261:73:0::1;6088:228:1::0;6261:73:0::1;6371:6;::::0;;6350:38:::1;::::0;-1:-1:-1;;;;;6350:38:0;;::::1;::::0;6371:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6350:38:0;::::1;6399:6;:17:::0;;-1:-1:-1;;;;;;6399:17:0::1;-1:-1:-1::0;;;;;6399:17:0;;;::::1;::::0;;;::::1;::::0;;6180:244::o;21603:337::-;-1:-1:-1;;;;;21696:19:0;;21688:68;;;;-1:-1:-1;;;21688:68:0;;11046:2:1;21688:68:0;;;11028:21:1;11085:2;11065:18;;;11058:30;11124:34;11104:18;;;11097:62;-1:-1:-1;;;11175:18:1;;;11168:34;11219:19;;21688:68:0;11018:226:1;21688:68:0;-1:-1:-1;;;;;21775:21:0;;21767:68;;;;-1:-1:-1;;;21767:68:0;;6523:2:1;21767:68:0;;;6505:21:1;6562:2;6542:18;;;6535:30;6601:34;6581:18;;;6574:62;-1:-1:-1;;;6652:18:1;;;6645:32;6694:19;;21767:68:0;6495:224:1;21767:68:0;-1:-1:-1;;;;;21848:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21900:32;;13277:25:1;;;21900:32:0;;13250:18:1;21900:32:0;;;;;;;21603:337;;;:::o;21948:3184::-;-1:-1:-1;;;;;22079:20:0;;22071:70;;;;-1:-1:-1;;;22071:70:0;;10640:2:1;22071:70:0;;;10622:21:1;10679:2;10659:18;;;10652:30;10718:34;10698:18;;;10691:62;-1:-1:-1;;;10769:18:1;;;10762:35;10814:19;;22071:70:0;10612:227:1;22071:70:0;-1:-1:-1;;;;;22160:23:0;;22152:71;;;;-1:-1:-1;;;22152:71:0;;5301:2:1;22152:71:0;;;5283:21:1;5340:2;5320:18;;;5313:30;5379:34;5359:18;;;5352:62;-1:-1:-1;;;5430:18:1;;;5423:33;5473:19;;22152:71:0;5273:225:1;22152:71:0;22251:1;22242:6;:10;22234:64;;;;-1:-1:-1;;;22234:64:0;;9518:2:1;22234:64:0;;;9500:21:1;9557:2;9537:18;;;9530:30;9596:34;9576:18;;;9569:62;-1:-1:-1;;;9647:18:1;;;9640:39;9696:19;;22234:64:0;9490:231:1;22234:64:0;-1:-1:-1;;;;;22318:20:0;;;;;;:9;:20;;;;;;;;22317:21;22309:57;;;;-1:-1:-1;;;22309:57:0;;12981:2:1;22309:57:0;;;12963:21:1;13020:2;13000:18;;;12993:30;-1:-1:-1;;;13039:18:1;;;13032:53;13102:18;;22309:57:0;12953:173:1;22309:57:0;22396:10;22386:21;;;;:9;:21;;;;;;;;22385:22;22377:58;;;;-1:-1:-1;;;22377:58:0;;12981:2:1;22377:58:0;;;12963:21:1;13020:2;13000:18;;;12993:30;-1:-1:-1;;;13039:18:1;;;13032:53;13102:18;;22377:58:0;12953:173:1;22377:58:0;5838:7;5865:6;-1:-1:-1;;;;;22453:17:0;;;5865:6;;22453:17;;;;:41;;-1:-1:-1;5838:7:0;5865:6;-1:-1:-1;;;;;22474:20:0;;;5865:6;;22474:20;;22453:41;22450:952;;;22530:11;;;;;;;22525:283;;-1:-1:-1;;;;;22568:23:0;;22586:4;22568:23;;:53;;-1:-1:-1;;;;;;22595:26:0;;22616:4;22595:26;22568:53;:100;;;-1:-1:-1;5838:7:0;5865:6;-1:-1:-1;;;;;22642:26:0;;;5865:6;;22642:26;22568:100;:133;;;-1:-1:-1;5838:7:0;5865:6;-1:-1:-1;;;;;22672:29:0;;;5865:6;;22672:29;22568:133;22562:231;;22735:11;;;;;;;22727:46;;;;-1:-1:-1;;;22727:46:0;;7685:2:1;22727:46:0;;;7667:21:1;7724:2;7704:18;;;7697:30;-1:-1:-1;;;7743:18:1;;;7736:52;7805:18;;22727:46:0;7657:172:1;22727:46:0;22858:10;;:23;;22871:10;22858:23;:::i;:::-;22840:15;:41;22836:371;;;22916:13;;-1:-1:-1;;;;;22906:23:0;;;22916:13;;22906:23;;;;:105;;-1:-1:-1;;;;;;22950:61:0;;22968:42;22950:61;;22906:105;:164;;;;-1:-1:-1;23054:15:0;;-1:-1:-1;;;;;23036:34:0;;;23054:15;;;;;23036:34;;22906:164;22902:290;;;-1:-1:-1;;;;;23095:17:0;;;;;;:9;:17;;;;;:24;;-1:-1:-1;;23095:24:0;23115:4;23095:24;;;;;;23142:17;:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;23142:30:0;;;;;;22902:290;23226:16;;;;23223:168;;;23276:10;23267:20;;;;:8;:20;;;;;:27;;;;;23263:113;;23342:14;;;;;;;;-1:-1:-1;23342:14:0;;;;;;;;;;23351:4;23342:14;;;;;;23328:10;23319:20;;:8;:20;;;;;;;:37;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23319:37:0;;;;;;;;;;23263:113;23460:13;;-1:-1:-1;;;;;23450:23:0;;;23460:13;;23450:23;:64;;;;-1:-1:-1;23498:15:0;;-1:-1:-1;;;;;23477:37:0;;;23498:15;;;;;23477:37;;23450:64;:98;;;;-1:-1:-1;;;;;;23519:29:0;;;;;;:18;:29;;;;;;;;23518:30;23450:98;23447:735;;;23577:11;;;;;;;23569:48;;;;-1:-1:-1;;;23569:48:0;;11811:2:1;23569:48:0;;;11793:21:1;11850:2;11830:18;;;11823:30;11889:26;11869:18;;;11862:54;11933:18;;23569:48:0;11783:174:1;23569:48:0;23657:16;;;;23654:378;;;23715:15;23701:11;;:29;23698:315;;;23777:13;;23767:6;:23;;23759:32;;;;;;-1:-1:-1;;;;;23826:19:0;;;;;;:8;:19;;;;;:23;23852:15;-1:-1:-1;23818:88:0;;;;-1:-1:-1;;;23818:88:0;;6926:2:1;23818:88:0;;;6908:21:1;6965:2;6945:18;;;6938:30;7004:34;6984:18;;;6977:62;-1:-1:-1;;;7055:18:1;;;7048:32;7097:19;;23818:88:0;6898:224:1;23818:88:0;23959:30;:15;23978:10;23959:30;:::i;:::-;-1:-1:-1;;;;;23933:19:0;;;;;;:8;:19;;;;;:56;23698:315;24053:16;;;;24050:121;;;24121:30;:15;24140:10;24121:30;:::i;:::-;-1:-1:-1;;;;;24094:19:0;;;;;;:8;:19;;;;;:24;;:57;24050:121;24225:16;;-1:-1:-1;;;24225:16:0;;;;24224:17;:42;;;;-1:-1:-1;24245:21:0;;-1:-1:-1;;;24245:21:0;;;;24224:42;:72;;;;-1:-1:-1;24283:13:0;;-1:-1:-1;;;;;24270:26:0;;;24283:13;;24270:26;24224:72;24220:583;;;24373:28;24404:24;24422:4;24404:9;:24::i;:::-;24373:55;-1:-1:-1;24447:24:0;;24444:96;;24492:32;24503:20;24492:10;:32::i;:::-;24572:14;;-1:-1:-1;;;24572:14:0;;;;24568:210;;;24649:21;24711:17;;24707:55;;24732:30;24746:15;24732:13;:30::i;:::-;24568:210;;24220:583;;-1:-1:-1;;;;;24934:26:0;;24815:12;24934:26;;;:18;:26;;;;;;24830:4;;24934:26;;;:59;;-1:-1:-1;;;;;;24964:29:0;;;;;;:18;:29;;;;;;;;24934:59;24931:105;;;-1:-1:-1;25019:5:0;24931:105;25076:48;25091:6;25099:9;25109:6;25116:7;25076:14;:48::i;:::-;21948:3184;;;;:::o;1509:192::-;1595:7;1631:12;1623:6;;;;1615:29;;;;-1:-1:-1;;;1615:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1655:9:0;1667:5;1671:1;1667;:5;:::i;:::-;1655:17;1509:192;-1:-1:-1;;;;;1509:192:0:o;31781:163::-;31822:7;31843:15;31860;31879:19;:17;:19::i;:::-;31842:56;;-1:-1:-1;31842:56:0;-1:-1:-1;31916:20:0;31842:56;;31916:11;:20::i;:::-;31909:27;;;;31781:163;:::o;1969:132::-;2027:7;2054:39;2058:1;2061;2054:39;;;;;;;;;;;;;;;;;:3;:39::i;1176:181::-;1234:7;;1266:5;1270:1;1266;:5;:::i;:::-;1254:17;;1295:1;1290;:6;;1282:46;;;;-1:-1:-1;;;1282:46:0;;7329:2:1;1282:46:0;;;7311:21:1;7368:2;7348:18;;;7341:30;7407:29;7387:18;;;7380:57;7454:18;;1282:46:0;7301:177:1;30579:419:0;30638:7;30647;30656;30665;30674;30683;30704:23;30729:12;30743:18;30765:20;30777:7;30765:11;:20::i;:::-;30703:82;;;;;;30797:15;30814:23;30839:12;30855:50;30867:7;30876:4;30882:10;30894;:8;:10::i;:::-;30855:11;:50::i;:::-;30796:109;;;;-1:-1:-1;30796:109:0;;-1:-1:-1;30956:15:0;;-1:-1:-1;30973:4:0;;-1:-1:-1;30979:10:0;;-1:-1:-1;30579:419:0;;-1:-1:-1;;;;;30579:419:0:o;1365:136::-;1423:7;1450:43;1454:1;1457;1450:43;;;;;;;;;;;;;;;;;:3;:43::i;25140:351::-;17141:16;:23;;-1:-1:-1;;;;17141:23:0;-1:-1:-1;;;17141:23:0;;;25248:21:::1;25280:38;25297:20:::0;25280:16:::1;:38::i;:::-;25329:26;25358:41;:21;25384:14:::0;25358:25:::1;:41::i;:::-;25434:14;::::0;25329:70;;-1:-1:-1;25413:70:0::1;::::0;25434:14:::1;::::0;::::1;-1:-1:-1::0;;;;;25434:14:0::1;25450:32;25480:1;25450:25;25329:70:::0;25473:1:::1;25450:22;:25::i;:::-;:29:::0;::::1;:32::i;:::-;25413:20;:70::i;:::-;-1:-1:-1::0;;17187:16:0;:24;;-1:-1:-1;;;;17187:24:0;;;-1:-1:-1;25140:351:0:o;25501:144::-;17141:16;:23;;-1:-1:-1;;;;17141:23:0;-1:-1:-1;;;17141:23:0;;;25575:10;;25571:67:::1;;25602:24;25619:6;25602:16;:24::i;:::-;-1:-1:-1::0;17187:16:0;:24;;-1:-1:-1;;;;17187:24:0;;;25501:144::o;27422:688::-;27533:7;27529:40;;27555:14;:12;:14::i;:::-;-1:-1:-1;;;;;27586:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27610:22:0;;;;;;:11;:22;;;;;;;;27609:23;27586:46;27582:467;;;27649:48;27671:6;27679:9;27690:6;27649:21;:48::i;:::-;27582:467;;;-1:-1:-1;;;;;27720:19:0;;;;;;:11;:19;;;;;;;;27719:20;:46;;;;-1:-1:-1;;;;;;27743:22:0;;;;;;:11;:22;;;;;;;;27719:46;27715:334;;;27782:46;27802:6;27810:9;27821:6;27782:19;:46::i;27715:334::-;-1:-1:-1;;;;;27850:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27873:22:0;;;;;;:11;:22;;;;;;;;27850:45;27846:203;;;27912:48;27934:6;27942:9;27953:6;27912:21;:48::i;27846:203::-;27993:44;28011:6;28019:9;28030:6;27993:17;:44::i;:::-;28065:7;28061:41;;28087:15;33510;;33500:7;:25;33552:21;;33536:13;:37;33456:125;31952:555;32049:7;;32085;;32002;;;;;32103:289;32127:9;:16;32123:20;;32103:289;;;32193:7;32169;:21;32177:9;32187:1;32177:12;;;;;;-1:-1:-1;;;32177:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32177:12:0;32169:21;;;;;;;;;;;;;:31;;:66;;;32228:7;32204;:21;32212:9;32222:1;32212:12;;;;;;-1:-1:-1;;;32212:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32212:12:0;32204:21;;;;;;;;;;;;;:31;32169:66;32165:97;;;32245:7;;32254;;32237:25;;;;;;;31952:555;;:::o;32165:97::-;32287:34;32299:7;:21;32307:9;32317:1;32307:12;;;;;;-1:-1:-1;;;32307:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32307:12:0;32299:21;;;;;;;;;;;;;32287:7;;:11;:34::i;:::-;32277:44;;32346:34;32358:7;:21;32366:9;32376:1;32366:12;;;;;;-1:-1:-1;;;32366:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32366:12:0;32358:21;;;;;;;;;;;;;32346:7;;:11;:34::i;:::-;32336:44;-1:-1:-1;32145:3:0;;;;:::i;:::-;;;;32103:289;;;-1:-1:-1;32428:7:0;;32416;;:20;;:11;:20::i;:::-;32406:7;:30;32402:61;;;32446:7;;32455;;32438:25;;;;;;31952:555;;:::o;32402:61::-;32482:7;;32491;;-1:-1:-1;31952:555:0;-1:-1:-1;31952:555:0:o;2109:278::-;2195:7;2230:12;2223:5;2215:28;;;;-1:-1:-1;;;2215:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2254:9:0;2266:5;2270:1;2266;:5;:::i;31006:330::-;31066:7;31075;31084;31104:12;31119:24;31135:7;31119:15;:24::i;:::-;31104:39;;31154:18;31175:30;31197:7;31175:21;:30::i;:::-;31154:51;-1:-1:-1;31216:23:0;31242:33;31154:51;31242:17;:7;31254:4;31242:11;:17::i;:::-;:21;;:33::i;:::-;31216:59;31311:4;;-1:-1:-1;31317:10:0;;-1:-1:-1;31006:330:0;;-1:-1:-1;;;31006:330:0:o;31344:429::-;31459:7;;;;31515:24;:7;31527:11;31515;:24::i;:::-;31497:42;-1:-1:-1;31550:12:0;31565:21;:4;31574:11;31565:8;:21::i;:::-;31550:36;-1:-1:-1;31597:18:0;31618:27;:10;31633:11;31618:14;:27::i;:::-;31597:48;-1:-1:-1;31656:23:0;31682:33;31597:48;31682:17;:7;31694:4;31682:11;:17::i;:33::-;31734:7;;;;-1:-1:-1;31760:4:0;;-1:-1:-1;31344:429:0;;-1:-1:-1;;;;;;;31344:429:0:o;25655:658::-;25805:16;;;25819:1;25805:16;;;;;;;;25781:21;;25805:16;;;;;;;;;;-1:-1:-1;25805:16:0;25781:40;;25850:4;25832;25837:1;25832:7;;;;;;-1:-1:-1;;;25832:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;25832:23:0;;;-1:-1:-1;;;;;25832:23:0;;;;;25876:15;;;;;;;;;-1:-1:-1;;;;;25876:15:0;-1:-1:-1;;;;;25876:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25866:4;25871:1;25866:7;;;;;;-1:-1:-1;;;25866:7:0;;;;;;;;;-1:-1:-1;;;;;25866:32:0;;;:7;;;;;;;;;:32;25943:15;;25911:62;;25928:4;;25943:15;;;;25961:11;25911:8;:62::i;:::-;26012:15;;:240;;-1:-1:-1;;;26012:240:0;;:15;;;;-1:-1:-1;;;;;26012:15:0;;:66;;:240;;26093:11;;26119:1;;26163:4;;26190;;26226:15;;26012:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26270:35;26287:11;26300:4;26270:35;;;;;;;:::i;:::-;;;;;;;;25655:658;;:::o;1709:250::-;1767:7;1791:6;1787:47;;-1:-1:-1;1821:1:0;1814:8;;1787:47;1846:9;1858:5;1862:1;1858;:5;:::i;:::-;1846:17;-1:-1:-1;1891:1:0;1882:5;1886:1;1846:17;1882:5;:::i;:::-;:10;1874:56;;;;-1:-1:-1;;;1874:56:0;;8755:2:1;1874:56:0;;;8737:21:1;8794:2;8774:18;;;8767:30;8833:34;8813:18;;;8806:62;-1:-1:-1;;;8884:18:1;;;8877:31;8925:19;;1874:56:0;8727:223:1;34027:126:0;34119:26;;-1:-1:-1;;;;;34119:18:0;;;:26;;;;;34138:6;;34119:26;;;;34138:6;34119:18;:26;;;;;;;;;;;;;;;;;;;;;34027:126;;:::o;26321:572::-;26466:16;;;26480:1;26466:16;;;;;;;;26442:21;;26466:16;;;;;;;;;;-1:-1:-1;26466:16:0;26442:40;;26503:15;;;;;;;;;-1:-1:-1;;;;;26503:15:0;-1:-1:-1;;;;;26503:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26493:4;26498:1;26493:7;;;;;;-1:-1:-1;;;26493:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;26493:32:0;;;-1:-1:-1;;;;;26493:32:0;;;;;26554:4;26536;26541:1;26536:7;;;;;;-1:-1:-1;;;26536:7:0;;;;;;;;;-1:-1:-1;;;;;26536:23:0;;;:7;;;;;;;;;:23;26598:15;;;;;;:66;26672:6;26694:1;26741:4;26760:11;26802:24;:15;26822:3;26802:19;:24::i;:::-;26598:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26855:30;26872:6;26880:4;26855:30;;;;;;;:::i;33214:234::-;33260:7;;:12;:34;;;;-1:-1:-1;33276:13:0;;:18;33260:34;33257:46;;;33214:234::o;33257:46::-;33333:7;;;33315:15;:25;33375:13;;;33351:21;:37;-1:-1:-1;33401:11:0;;;;33423:17;33214:234::o;29211:563::-;29314:15;29331:23;29356:12;29370:23;29395:12;29409:18;29431:19;29442:7;29431:10;:19::i;:::-;-1:-1:-1;;;;;29479:15:0;;;;;;:7;:15;;;;;;29313:137;;-1:-1:-1;29313:137:0;;-1:-1:-1;29313:137:0;;-1:-1:-1;29313:137:0;-1:-1:-1;29313:137:0;-1:-1:-1;29313:137:0;-1:-1:-1;29479:28:0;;29499:7;29479:19;:28::i;:::-;-1:-1:-1;;;;;29461:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29536:7;:15;;;;:28;;29556:7;29536:19;:28::i;:::-;-1:-1:-1;;;;;29518:15:0;;;;;;;:7;:15;;;;;;:46;;;;29596:18;;;;;;;:39;;29619:15;29596:22;:39::i;:::-;-1:-1:-1;;;;;29575:18:0;;;;;;:7;:18;;;;;:60;29646:26;29661:10;29646:14;:26::i;:::-;29683:23;29695:4;29701;29683:11;:23::i;:::-;29739:9;-1:-1:-1;;;;;29722:44:0;29731:6;-1:-1:-1;;;;;29722:44:0;;29750:15;29722:44;;;;13277:25:1;;13265:2;13250:18;;13232:76;29722:44:0;;;;;;;;29211:563;;;;;;;;;:::o;28628:575::-;28729:15;28746:23;28771:12;28785:23;28810:12;28824:18;28846:19;28857:7;28846:10;:19::i;:::-;-1:-1:-1;;;;;28894:15:0;;;;;;:7;:15;;;;;;28728:137;;-1:-1:-1;28728:137:0;;-1:-1:-1;28728:137:0;;-1:-1:-1;28728:137:0;-1:-1:-1;28728:137:0;-1:-1:-1;28728:137:0;-1:-1:-1;28894:28:0;;28728:137;28894:19;:28::i;:::-;-1:-1:-1;;;;;28876:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;28954:18;;;;;:7;:18;;;;;:39;;28977:15;28954:22;:39::i;:::-;-1:-1:-1;;;;;28933:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29025:7;:18;;;;:39;;29048:15;29025:22;:39::i;29782:634::-;29885:15;29902:23;29927:12;29941:23;29966:12;29980:18;30002:19;30013:7;30002:10;:19::i;:::-;-1:-1:-1;;;;;30050:15:0;;;;;;:7;:15;;;;;;29884:137;;-1:-1:-1;29884:137:0;;-1:-1:-1;29884:137:0;;-1:-1:-1;29884:137:0;-1:-1:-1;29884:137:0;-1:-1:-1;29884:137:0;-1:-1:-1;30050:28:0;;30070:7;30050:19;:28::i;:::-;-1:-1:-1;;;;;30032:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30107:7;:15;;;;:28;;30127:7;30107:19;:28::i;28118:502::-;28217:15;28234:23;28259:12;28273:23;28298:12;28312:18;28334:19;28345:7;28334:10;:19::i;:::-;-1:-1:-1;;;;;28382:15:0;;;;;;:7;:15;;;;;;28216:137;;-1:-1:-1;28216:137:0;;-1:-1:-1;28216:137:0;;-1:-1:-1;28216:137:0;-1:-1:-1;28216:137:0;-1:-1:-1;28216:137:0;-1:-1:-1;28382:28:0;;28216:137;28382:19;:28::i;32878:154::-;32942:7;32969:55;33008:5;32969:20;32981:7;;32969;:11;;:20;;;;:::i;33040:166::-;33110:7;33137:61;33182:5;33137:26;33149:13;;33137:7;:11;;:26;;;;:::i;32515:355::-;32578:19;32601:10;:8;:10::i;:::-;32578:33;-1:-1:-1;32622:18:0;32643:27;:10;32578:33;32643:14;:27::i;:::-;32722:4;32706:22;;;;:7;:22;;;;;;32622:48;;-1:-1:-1;32706:38:0;;32622:48;32706:26;:38::i;:::-;32697:4;32681:22;;;;:7;:22;;;;;;;;:63;;;;32758:11;:26;;;;;;32755:107;;;32840:4;32824:22;;;;:7;:22;;;;;;:38;;32851:10;32824:26;:38::i;:::-;32815:4;32799:22;;;;:7;:22;;;;;:63;32515:355;;;:::o;30424:147::-;30502:7;;:17;;30514:4;30502:11;:17::i;:::-;30492:7;:27;30543:10;;:20;;30558:4;30543:14;:20::i;:::-;30530:10;:33;-1:-1:-1;;30424:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1775:9;1762:23;1794:31;1819:5;1794:31;:::i;:::-;1844:5;1896:2;1881:18;;;;1868:32;;-1:-1:-1;;;1668:238:1:o;1911:190::-;1967:6;2020:2;2008:9;1999:7;1995:23;1991:32;1988:2;;;2041:6;2033;2026:22;1988:2;2069:26;2085:9;2069:26;:::i;2106:190::-;2165:6;2218:2;2206:9;2197:7;2193:23;2189:32;2186:2;;;2239:6;2231;2224:22;2186:2;-1:-1:-1;2267:23:1;;2176:120;-1:-1:-1;2176:120:1:o;2301:258::-;2366:6;2374;2427:2;2415:9;2406:7;2402:23;2398:32;2395:2;;;2448:6;2440;2433:22;2395:2;2489:9;2476:23;2466:33;;2518:35;2549:2;2538:9;2534:18;2518:35;:::i;:::-;2508:45;;2385:174;;;;;:::o;2564:463::-;2617:3;2655:5;2649:12;2682:6;2677:3;2670:19;2708:4;2737:2;2732:3;2728:12;2721:19;;2774:2;2767:5;2763:14;2795:3;2807:195;2821:6;2818:1;2815:13;2807:195;;;2886:13;;-1:-1:-1;;;;;2882:39:1;2870:52;;2942:12;;;;2977:15;;;;2918:1;2836:9;2807:195;;;-1:-1:-1;3018:3:1;;2625:402;-1:-1:-1;;;;;2625:402:1:o;3976:510::-;4247:6;4236:9;4229:25;4290:3;4285:2;4274:9;4270:18;4263:31;4210:4;4311:57;4363:3;4352:9;4348:19;4340:6;4311:57;:::i;:::-;-1:-1:-1;;;;;4404:32:1;;;;4399:2;4384:18;;4377:60;-1:-1:-1;4468:2:1;4453:18;4446:34;4303:65;4219:267;-1:-1:-1;;4219:267:1:o;4491:603::-;4603:4;4632:2;4661;4650:9;4643:21;4693:6;4687:13;4736:6;4731:2;4720:9;4716:18;4709:34;4761:4;4774:140;4788:6;4785:1;4782:13;4774:140;;;4883:14;;;4879:23;;4873:30;4849:17;;;4868:2;4845:26;4838:66;4803:10;;4774:140;;;4932:6;4929:1;4926:13;4923:2;;;5002:4;4997:2;4988:6;4977:9;4973:22;4969:31;4962:45;4923:2;-1:-1:-1;5078:2:1;5057:15;-1:-1:-1;;5053:29:1;5038:45;;;;5085:2;5034:54;;4612:482;-1:-1:-1;;;4612:482:1:o;8955:356::-;9157:2;9139:21;;;9176:18;;;9169:30;9235:34;9230:2;9215:18;;9208:62;9302:2;9287:18;;9129:182::o;13313:332::-;13520:6;13509:9;13502:25;13563:2;13558;13547:9;13543:18;13536:30;13483:4;13583:56;13635:2;13624:9;13620:18;13612:6;13583:56;:::i;:::-;13575:64;13492:153;-1:-1:-1;;;;13492:153:1:o;13650:582::-;13949:6;13938:9;13931:25;13992:6;13987:2;13976:9;13972:18;13965:34;14035:3;14030:2;14019:9;14015:18;14008:31;13912:4;14056:57;14108:3;14097:9;14093:19;14085:6;14056:57;:::i;:::-;-1:-1:-1;;;;;14149:32:1;;;;14144:2;14129:18;;14122:60;-1:-1:-1;14213:3:1;14198:19;14191:35;14048:65;13921:311;-1:-1:-1;;;13921:311:1:o;14426:128::-;14466:3;14497:1;14493:6;14490:1;14487:13;14484:2;;;14503:18;;:::i;:::-;-1:-1:-1;14539:9:1;;14474:80::o;14559:217::-;14599:1;14625;14615:2;;-1:-1:-1;;;14650:31:1;;14704:4;14701:1;14694:15;14732:4;14657:1;14722:15;14615:2;-1:-1:-1;14761:9:1;;14605:171::o;14781:168::-;14821:7;14887:1;14883;14879:6;14875:14;14872:1;14869:21;14864:1;14857:9;14850:17;14846:45;14843:2;;;14894:18;;:::i;:::-;-1:-1:-1;14934:9:1;;14833:116::o;14954:125::-;14994:4;15022:1;15019;15016:8;15013:2;;;15027:18;;:::i;:::-;-1:-1:-1;15064:9:1;;15003:76::o;15084:380::-;15163:1;15159:12;;;;15206;;;15227:2;;15281:4;15273:6;15269:17;15259:27;;15227:2;15334;15326:6;15323:14;15303:18;15300:38;15297:2;;;15380:10;15375:3;15371:20;15368:1;15361:31;15415:4;15412:1;15405:15;15443:4;15440:1;15433:15;15297:2;;15139:325;;;:::o;15469:135::-;15508:3;-1:-1:-1;;15529:17:1;;15526:2;;;15549:18;;:::i;:::-;-1:-1:-1;15596:1:1;15585:13;;15516:88::o;15609:127::-;15670:10;15665:3;15661:20;15658:1;15651:31;15701:4;15698:1;15691:15;15725:4;15722:1;15715:15;15741:131;-1:-1:-1;;;;;15816:31:1;;15806:42;;15796:2;;15862:1;15859;15852:12;15796:2;15786:86;:::o

Swarm Source

ipfs://4b934694b31bfa226ae112feb5d9b13823d35a31687ff9da74d4d726e766e36a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.