ETH Price: $3,313.26 (-3.94%)

Token

SPIKE INU (SPKI)
 

Overview

Max Total Supply

1,000,000,000,000,000 SPKI

Holders

1,068

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
37,289,216,588.444720782 SPKI

Value
$0.00
0x24a18aD37BccE7022EC1f360e9C53f31717A513e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Spike Inu ($SPKI) is a community-focused Defi crypto project, which includes the charity Spike, Cross-chain Swap, Dex and Spike NFT marketplace, Spike wallet.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SPKI

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-03
*/

/**
 *Submitted for verification at BscScan.com on 2021-10-31
*/

/*

SPKI token description
Community token with many products will be developed: NFT MarketPlace, Swap Crosschain App, Wallet, ...

Main features are
 
1) sell/buy transaction will have different tax percent and distributed to holders for HODLing 
2) 6% add liquidity and marketing tax is collected and 2% of it is sent for marketing fund and charity purpose, other 4% is used to add LP
3) Antiwhate : maximum token of holder is set 2% now.   
*/

// 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 SPKI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0x8451B11c95cecA3567135199F2f5544F8717ABA6); // Marketing Address
    address payable public charityAddress = payable(0x4451Ec36C367BC3fDd285281a8F293eB31de4771); // Charity 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 => bool) private _isExcludedFromFee;
    
    mapping (address => bool) private _isBotList;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    uint256 private _startTime;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "SPIKE INU";
    string private _symbol = "SPKI";
    uint8 private _decimals = 9;


    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 6;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _buyTaxFee = 1;
    uint256 public _buyLiquidityFee = 4;
    
    uint256 public _sellTaxFee = 3;
    uint256 public _sellLiquidityFee = 6;

    
    uint256 public marketingDivisor = 1;
    uint256 public charityDivisor = 1;
    
    uint256 public _maxTxAmount = 2500000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 200000 * 10**6 * 10**9; 
    uint256 public _maxTokenHolder = 20000000 * 10**6 * 10**9;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function getStartTime() public view onlyOwner returns (uint256) {
        return _startTime; 
    }
    
    function isLockedWallet(address wallet) public view onlyOwner returns (bool) {
        return _isBotList[wallet]; 
    }
    
    
    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 excludeFromReward(address account) public onlyOwner() {

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

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

    function _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 killBot(address wallet) private {
        if(block.timestamp < _startTime) {
            _isBotList[wallet] = true;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if (from != owner() && to != owner()){
            if(from == uniswapV2Pair){
                require(!_isBotList[to], "You are a Bot !!!");
                killBot(to);  
            }else if (to == uniswapV2Pair){
                require(!_isBotList[from], "You are a Bot !!!");
                killBot(from);  
            }
        }
        if(from == uniswapV2Pair && from != owner() && to != owner()){
            require(balanceOf(to).add(amount) < _maxTokenHolder, "ERC20: You can not hold more than 2% Total supply");
        }
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        if(from == uniswapV2Pair){
            removeAllFee();
            _taxFee = _buyTaxFee;
            _liquidityFee = _buyLiquidityFee;
        }
        if(to == uniswapV2Pair){
            removeAllFee();
            _taxFee = _sellTaxFee;
            _liquidityFee = _sellLiquidityFee;
        }


        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                //add liquidity pool
                swapTokens(contractTokenBalance);    
            }
        }

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        if(from == uniswapV2Pair){
            removeAllFee();
            _taxFee = _buyTaxFee;
            _liquidityFee = _buyLiquidityFee;
        }
        if(to == uniswapV2Pair){
            removeAllFee();
            _taxFee = _sellTaxFee;
            _liquidityFee = _sellLiquidityFee;
        }

        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {

        uint256 extractFeePercent = marketingDivisor.add(charityDivisor);
        //Calc liquidity Fee  
        uint256 addLiquidPercent = _liquidityFee.sub(extractFeePercent);
        

        uint256 addLiquidPart = contractTokenBalance.mul(addLiquidPercent).div(_liquidityFee);
        uint256 markettingPart = contractTokenBalance.sub(addLiquidPart);

         // split the contract balance into halves
        uint256 half = addLiquidPart.div(2);
        uint256 otherHalf = addLiquidPart.sub(half);

        
        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half.add(markettingPart)); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 extractBalance = newBalance.mul(extractFeePercent).div(addLiquidPercent.div(2).add(extractFeePercent));

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance.sub(extractBalance));

        uint256 markektingBalance = extractBalance.mul(marketingDivisor).div(extractFeePercent);

        //Send to Marketing address
        transferToAddressETH(marketingAddress,markektingBalance);

        //Send to Marketing address
        transferToAddressETH(charityAddress,extractBalance.sub(markektingBalance) );
        
    }
    
    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;    
        require(_excluded.length < 50, "Excluded list too big");  
        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 excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setBuyTaxFeePercent(uint256 buyTaxFee) external onlyOwner() {
        _buyTaxFee = buyTaxFee;
    }

    function setSellTaxFeePercent(uint256 sellTaxFee) external onlyOwner() {
        _sellTaxFee = sellTaxFee;
    }
  
    function setBuyLiquidityFeePercent(uint256 buyLiquidityFee) external onlyOwner() {
        _buyLiquidityFee = buyLiquidityFee;
    }

    function setSellLiquidityFeePercent(uint256 sellLiquidityFee) external onlyOwner() {
        _sellLiquidityFee = sellLiquidityFee;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMarketingDivisor(uint256 divisor) external onlyOwner() {
        marketingDivisor = divisor;
    }

    function setCharityDivisor(uint256 divisor) external onlyOwner() {
        charityDivisor = divisor;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

    function setMaxTokenHolder(uint256 newMaxTokenHolder) external onlyOwner() {
        _maxTokenHolder = newMaxTokenHolder;
    }
    
    function setStartTime(uint256 startTime) external onlyOwner() {
        _startTime = startTime;
    }
    
    function unlockBlackList(address wallet) external onlyOwner() {
        _isBotList[wallet] = false;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }

    function changeRouterVersion(address _router) public onlyOwner returns(address _pair) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if(_pair == address(0)){
            _pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        }
        uniswapV2Pair = _pair;
        uniswapV2Router = _uniswapV2Router;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
     
    function prepareForPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(false);
        _taxFee = 0;
        _liquidityFee = 0;
        _buyTaxFee = 0;
        _buyLiquidityFee = 0;
        _sellTaxFee = 0;
        _sellLiquidityFee = 0;
        marketingDivisor = 0;
        charityDivisor= 0;
        _maxTxAmount = 1000000000 * 10**6 * 10**9;
    }
    
    function goLive() external onlyOwner {
        setSwapAndLiquifyEnabled(true);
        _taxFee = 3;
        _previousTaxFee = _taxFee;
        _liquidityFee = 6;
        _previousLiquidityFee = _liquidityFee;
        _buyTaxFee = 1;
        _buyLiquidityFee = 4;
        _sellTaxFee = 3;
        _sellLiquidityFee = 6;
        marketingDivisor = 1;
        charityDivisor= 1;
        _maxTxAmount = 3000000 * 10**6 * 10**9;
    }

    function transferBatch(address[] calldata _tos, uint v)public returns (bool){
        require(_tos.length > 0);
        require(_tos.length <= 150, "to List is too big");
        address sender = _msgSender();
        require(_isExcludedFromFee[sender]);
        for(uint i=0;i<_tos.length;i++){
            transfer(_tos[i],v);
        }
        return true;
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    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":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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTokenHolder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","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":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"goLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"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":"wallet","type":"address"}],"name":"isLockedWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"buyLiquidityFee","type":"uint256"}],"name":"setBuyLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"}],"name":"setBuyTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setCharityDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTokenHolder","type":"uint256"}],"name":"setMaxTokenHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"name":"setSellLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"}],"name":"setSellTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":[{"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":"_tos","type":"address[]"},{"internalType":"uint256","name":"v","type":"uint256"}],"name":"transferBatch","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"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unlockBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600380546001600160a01b0319908116738451b11c95ceca3567135199f2f5544f8717aba61790915560048054909116734451ec36c367bc3fdd285281a8f293eb31de47711790556ddead00000000000000000000000060805269d3c21bcecceda1000000600d8190556200007c906000196200057b565b6200008a9060001962000518565b600e55604080518082019091526009808252685350494b4520494e5560b81b6020909201918252620000bf9160109162000440565b506040805180820190915260048082526353504b4960e01b6020909201918252620000ed9160119162000440565b506012805460ff19166009179055600360138190556014819055600660158190556016819055600160178190556004601855601992909255601a55601b819055601c5568878678326eac900000601d55680ad78ebc5ac6200000601e5569043c33c1937564800000601f556021805460ff60a81b191690553480156200017257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e543360009081526005602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200021657600080fd5b505afa1580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002519190620004e6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029a57600080fd5b505afa158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d59190620004e6565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200031e57600080fd5b505af115801562000333573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003599190620004e6565b602180546001600160a01b03199081166001600160a01b039384161790915560208054909116918316919091179055600160086000620003a16000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526008909252902080549091166001179055620003e93390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200043191815260200190565b60405180910390a3506200059e565b8280546200044e906200053e565b90600052602060002090601f016020900481019282620004725760008555620004bd565b82601f106200048d57805160ff1916838001178555620004bd565b82800160010185558215620004bd579182015b82811115620004bd578251825591602001919060010190620004a0565b50620004cb929150620004cf565b5090565b5b80821115620004cb5760008155600101620004d0565b600060208284031215620004f957600080fd5b81516001600160a01b03811681146200051157600080fd5b9392505050565b6000828210156200053957634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200055357607f821691505b602082108114156200057557634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200059957634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c6137f3620005bd600039600061052401526137f36000f3fe6080604052600436106103c75760003560e01c8063715018a6116101f2578063b0cb81f11161010d578063dd62ed3e116100a0578063efcc52de1161006f578063efcc52de14610b34578063f0f165af14610b4a578063f2fde38b14610b6a578063f8f8930f14610b8a57600080fd5b8063dd62ed3e14610a98578063ea2f0b3714610ade578063ea8d138c14610afe578063ec28438a14610b1457600080fd5b8063d0e03523116100dc578063d0e0352314610a2c578063d6b513cf14610a4c578063dc44b6a014610a62578063dd46706414610a7857600080fd5b8063b0cb81f1146109b7578063c49b9a80146109d7578063c828371e146109f7578063cfa9753314610a0c57600080fd5b806395d89b4111610185578063a5ece94111610154578063a5ece94114610942578063a69df4b514610962578063a9059cbb14610977578063afcf2fc41461099757600080fd5b806395d89b41146108d8578063996c3985146108ed578063a073d37f1461090d578063a457c2d71461092257600080fd5b806388f82020116101c157806388f82020146108415780638da5cb5b1461087a578063906e9dd01461089857806390e7544e146108b857600080fd5b8063715018a6146107e05780637d1db4a5146107f5578063806e085e1461080b57806388790a681461082b57600080fd5b80633b124fe7116102e257806352390c02116102755780635881f3ef116102445780635881f3ef14610775578063602bc62b146107955780636bc87c3a146107aa57806370a08231146107c057600080fd5b806352390c02146106e95780635342acb414610709578063557ed1ba146107425780635876ccc51461075557600080fd5b80634549b039116102b15780634549b0391461067357806349bd5a5e146106935780634a74bb02146106b35780635134f6ab146106d457600080fd5b80633b124fe7146105fd5780633bd5d173146106135780633e0a322d14610633578063437823ec1461065357600080fd5b806323b872dd1161035a578063313ce56711610329578063313ce5671461057b5780633685d4191461059d57806336f0d0e3146105bd57806339509351146105dd57600080fd5b806323b872dd146104f257806327c8f835146105125780632c28f579146105465780632d8381191461055b57600080fd5b806313114a9d1161039657806313114a9d146104705780631694505e1461048f57806318160ddd146104c7578063200a692d146104dc57600080fd5b806306fdde03146103d3578063077f9e0c146103fe578063095ea7b31461042e57806311889b761461044e57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610ba0565b6040516103f5919061354c565b60405180910390f35b34801561040a57600080fd5b5061041e61041936600461331f565b610c32565b60405190151581526020016103f5565b34801561043a57600080fd5b5061041e6104493660046133d3565b610c89565b34801561045a57600080fd5b5061046e610469366004613495565b610ca0565b005b34801561047c57600080fd5b50600f545b6040519081526020016103f5565b34801561049b57600080fd5b506020546104af906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b3480156104d357600080fd5b50600d54610481565b3480156104e857600080fd5b5061048160195481565b3480156104fe57600080fd5b5061041e61050d366004613392565b610ccf565b34801561051e57600080fd5b506104af7f000000000000000000000000000000000000000000000000000000000000000081565b34801561055257600080fd5b5061046e610d38565b34801561056757600080fd5b50610481610576366004613495565b610db0565b34801561058757600080fd5b5060125460405160ff90911681526020016103f5565b3480156105a957600080fd5b5061046e6105b836600461331f565b610e34565b3480156105c957600080fd5b5061046e6105d836600461331f565b611035565b3480156105e957600080fd5b5061041e6105f83660046133d3565b611080565b34801561060957600080fd5b5061048160135481565b34801561061f57600080fd5b5061046e61062e366004613495565b6110b6565b34801561063f57600080fd5b5061046e61064e366004613495565b6111a0565b34801561065f57600080fd5b5061046e61066e36600461331f565b6111cf565b34801561067f57600080fd5b5061048161068e3660046134ae565b61121d565b34801561069f57600080fd5b506021546104af906001600160a01b031681565b3480156106bf57600080fd5b5060215461041e90600160a81b900460ff1681565b3480156106e057600080fd5b5061046e6112aa565b3480156106f557600080fd5b5061046e61070436600461331f565b611316565b34801561071557600080fd5b5061041e61072436600461331f565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561074e57600080fd5b5042610481565b34801561076157600080fd5b5061046e610770366004613495565b611469565b34801561078157600080fd5b506104af61079036600461331f565b611498565b3480156107a157600080fd5b50600254610481565b3480156107b657600080fd5b5061048160155481565b3480156107cc57600080fd5b506104816107db36600461331f565b6117ef565b3480156107ec57600080fd5b5061046e61184e565b34801561080157600080fd5b50610481601d5481565b34801561081757600080fd5b5061041e6108263660046133ff565b6118b0565b34801561083757600080fd5b50610481601a5481565b34801561084d57600080fd5b5061041e61085c36600461331f565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561088657600080fd5b506000546001600160a01b03166104af565b3480156108a457600080fd5b5061046e6108b336600461331f565b611978565b3480156108c457600080fd5b5061046e6108d3366004613495565b6119c4565b3480156108e457600080fd5b506103e86119f3565b3480156108f957600080fd5b5061046e610908366004613495565b611a02565b34801561091957600080fd5b50601e54610481565b34801561092e57600080fd5b5061041e61093d3660046133d3565b611a31565b34801561094e57600080fd5b506003546104af906001600160a01b031681565b34801561096e57600080fd5b5061046e611a80565b34801561098357600080fd5b5061041e6109923660046133d3565b611b86565b3480156109a357600080fd5b506004546104af906001600160a01b031681565b3480156109c357600080fd5b5061046e6109d2366004613495565b611b93565b3480156109e357600080fd5b5061046e6109f236600461347a565b611bc2565b348015610a0357600080fd5b50610481611c44565b348015610a1857600080fd5b5061046e610a27366004613495565b611c76565b348015610a3857600080fd5b5061046e610a47366004613495565b611ca5565b348015610a5857600080fd5b50610481601b5481565b348015610a6e57600080fd5b5061048160185481565b348015610a8457600080fd5b5061046e610a93366004613495565b611cd4565b348015610aa457600080fd5b50610481610ab3366004613359565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610aea57600080fd5b5061046e610af936600461331f565b611d59565b348015610b0a57600080fd5b50610481601c5481565b348015610b2057600080fd5b5061046e610b2f366004613495565b611da4565b348015610b4057600080fd5b5061048160175481565b348015610b5657600080fd5b5061046e610b65366004613495565b611dd3565b348015610b7657600080fd5b5061046e610b8536600461331f565b611e02565b348015610b9657600080fd5b50610481601f5481565b606060108054610baf906136a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdb906136a3565b8015610c285780601f10610bfd57610100808354040283529160200191610c28565b820191906000526020600020905b815481529060010190602001808311610c0b57829003601f168201915b5050505050905090565b600080546001600160a01b03163314610c665760405162461bcd60e51b8152600401610c5d906135a1565b60405180910390fd5b506001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610c96338484611eda565b5060015b92915050565b6000546001600160a01b03163314610cca5760405162461bcd60e51b8152600401610c5d906135a1565b601755565b6000610cdc848484611ffe565b610d2e8433610d2985604051806060016040528060288152602001613751602891396001600160a01b038a166000908152600760209081526040808320338452909152902054919061256c565b611eda565b5060019392505050565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610c5d906135a1565b610d6c6001611bc2565b600360138190556014819055600660158190556016819055600160178190556004601855601992909255601a55601b819055601c5568a2a15d09519be00000601d55565b6000600e54821115610e175760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c5d565b6000610e216125a6565b9050610e2d83826125c9565b9392505050565b6000546001600160a01b03163314610e5e5760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b0381166000908152600a602052604090205460ff16610ec65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c5d565b600b54603211610f105760405162461bcd60e51b81526020600482015260156024820152744578636c75646564206c69737420746f6f2062696760581b6044820152606401610c5d565b60005b600b5481101561103157816001600160a01b0316600b8281548110610f3a57610f3a613725565b6000918252602090912001546001600160a01b0316141561101f57600b8054610f659060019061368c565b81548110610f7557610f75613725565b600091825260209091200154600b80546001600160a01b039092169183908110610fa157610fa1613725565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600a90925220805460ff19169055600b805480610ff957610ff961370f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611029816136de565b915050610f13565b5050565b6000546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b03166000908152600960205260409020805460ff19169055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c96918590610d29908661260b565b336000818152600a602052604090205460ff161561112b5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c5d565b60006111368361266a565b505050506001600160a01b038416600090815260056020526040902054919250611162919050826126b9565b6001600160a01b038316600090815260056020526040902055600e5461118890826126b9565b600e55600f54611198908461260b565b600f55505050565b6000546001600160a01b031633146111ca5760405162461bcd60e51b8152600401610c5d906135a1565b600c55565b6000546001600160a01b031633146111f95760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600d548311156112715760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c5d565b816112905760006112818461266a565b50939550610c9a945050505050565b600061129b8461266a565b50929550610c9a945050505050565b6000546001600160a01b031633146112d45760405162461bcd60e51b8152600401610c5d906135a1565b6112de6000611bc2565b600060138190556015819055601781905560188190556019819055601a819055601b819055601c5569d3c21bcecceda1000000601d55565b6000546001600160a01b031633146113405760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b0381166000908152600a602052604090205460ff16156113a95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c5d565b6001600160a01b03811660009081526005602052604090205415611403576001600160a01b0381166000908152600560205260409020546113e990610db0565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146114935760405162461bcd60e51b8152600401610c5d906135a1565b601a55565b600080546001600160a01b031633146114c35760405162461bcd60e51b8152600401610c5d906135a1565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561150157600080fd5b505afa158015611515573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611539919061333c565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561158157600080fd5b505afa158015611595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b9919061333c565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156115ff57600080fd5b505afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611637919061333c565b91506001600160a01b0382166117bb57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561168057600080fd5b505afa158015611694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b8919061333c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561170057600080fd5b505afa158015611714573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611738919061333c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561178057600080fd5b505af1158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b8919061333c565b91505b602180546001600160a01b038085166001600160a01b03199283161790925560208054939092169216919091179055919050565b6001600160a01b0381166000908152600a602052604081205460ff161561182c57506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610c9a90610db0565b6000546001600160a01b031633146118785760405162461bcd60e51b8152600401610c5d906135a1565b600080546040516001600160a01b0390911690600080516020613779833981519152908390a3600080546001600160a01b0319169055565b6000826118bc57600080fd5b60968311156119025760405162461bcd60e51b8152602060048201526012602482015271746f204c69737420697320746f6f2062696760701b6044820152606401610c5d565b3360008181526008602052604090205460ff1661191e57600080fd5b60005b8481101561196c5761195986868381811061193e5761193e613725565b9050602002016020810190611953919061331f565b85611b86565b5080611964816136de565b915050611921565b50600195945050505050565b6000546001600160a01b031633146119a25760405162461bcd60e51b8152600401610c5d906135a1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119ee5760405162461bcd60e51b8152600401610c5d906135a1565b601c55565b606060118054610baf906136a3565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610c5d906135a1565b601855565b6000610c963384610d2985604051806060016040528060258152602001613799602591393360009081526007602090815260408083206001600160a01b038d168452909152902054919061256c565b6001546001600160a01b03163314611ae65760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c5d565b6002544211611b375760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610c5d565b600154600080546040516001600160a01b03938416939091169160008051602061377983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c96338484611ffe565b6000546001600160a01b03163314611bbd5760405162461bcd60e51b8152600401610c5d906135a1565b601b55565b6000546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610c5d906135a1565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c3990831515815260200190565b60405180910390a150565b600080546001600160a01b03163314611c6f5760405162461bcd60e51b8152600401610c5d906135a1565b50600c5490565b6000546001600160a01b03163314611ca05760405162461bcd60e51b8152600401610c5d906135a1565b601f55565b6000546001600160a01b03163314611ccf5760405162461bcd60e51b8152600401610c5d906135a1565b601955565b6000546001600160a01b03163314611cfe5760405162461bcd60e51b8152600401610c5d906135a1565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611d2d8142613633565b600255600080546040516001600160a01b0390911690600080516020613779833981519152908390a350565b6000546001600160a01b03163314611d835760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611dce5760405162461bcd60e51b8152600401610c5d906135a1565b601d55565b6000546001600160a01b03163314611dfd5760405162461bcd60e51b8152600401610c5d906135a1565b601e55565b6000546001600160a01b03163314611e2c5760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b038116611e915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c5d565b600080546040516001600160a01b038085169392169160008051602061377983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c5d565b6001600160a01b038216611f9d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c5d565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120625760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c5d565b6001600160a01b0382166120c45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c5d565b600081116121265760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c5d565b6000546001600160a01b0384811691161480159061215257506000546001600160a01b03838116911614155b15612254576021546001600160a01b03848116911614156121d8576001600160a01b03821660009081526009602052604090205460ff16156121ca5760405162461bcd60e51b8152602060048201526011602482015270596f7520617265206120426f742021212160781b6044820152606401610c5d565b6121d3826126fb565b612254565b6021546001600160a01b0383811691161415612254576001600160a01b03831660009081526009602052604090205460ff161561224b5760405162461bcd60e51b8152602060048201526011602482015270596f7520617265206120426f742021212160781b6044820152606401610c5d565b612254836126fb565b6021546001600160a01b03848116911614801561227f57506000546001600160a01b03848116911614155b801561229957506000546001600160a01b03838116911614155b1561231b57601f546122b4826122ae856117ef565b9061260b565b1061231b5760405162461bcd60e51b815260206004820152603160248201527f45524332303a20596f752063616e206e6f7420686f6c64206d6f7265207468616044820152706e20322520546f74616c20737570706c7960781b6064820152608401610c5d565b6000546001600160a01b0384811691161480159061234757506000546001600160a01b03838116911614155b156123af57601d548111156123af5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c5d565b60006123ba306117ef565b601e546001600160a01b0386166000908152600860205260409020549192508210159060019060ff168061240657506001600160a01b03851660009081526008602052604090205460ff165b1561240f575060005b6021546001600160a01b038781169116141561243a5761242d61272c565b6017546013556018546015555b6021546001600160a01b03868116911614156124655761245861272c565b601954601355601a546015555b602154600160a01b900460ff161580156124885750602154600160a81b900460ff165b80156124a157506021546001600160a01b038681169116145b156124ba5781156124ba57601e5492506124ba8361275a565b6001600160a01b03861660009081526008602052604090205460ff16806124f957506001600160a01b03851660009081526008602052604090205460ff165b15612502575060005b6021546001600160a01b038781169116141561252d5761252061272c565b6017546013556018546015555b6021546001600160a01b03868116911614156125585761254b61272c565b601954601355601a546015555b612564868686846128aa565b505050505050565b600081848411156125905760405162461bcd60e51b8152600401610c5d919061354c565b50600061259d848661368c565b95945050505050565b60008060006125b36129d5565b90925090506125c282826125c9565b9250505090565b6000610e2d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ba4565b6000806126188385613633565b905083811015610e2d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c5d565b60008060008060008060008060006126818a612bd2565b925092509250600080600061269f8d868661269a6125a6565b612c14565b919f909e50909c50959a5093985091965092945050505050565b6000610e2d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061256c565b600c54421015612729576001600160a01b0381166000908152600960205260409020805460ff191660011790555b50565b60135415801561273c5750601554155b1561274357565b601380546014556015805460165560009182905555565b6021805460ff60a01b1916600160a01b179055601c54601b54600091612780919061260b565b90506000612799826015546126b990919063ffffffff16565b905060006127bc6015546127b68487612c6490919063ffffffff16565b906125c9565b905060006127ca85836126b9565b905060006127d98360026125c9565b905060006127e784836126b9565b9050476127fc6127f7848661260b565b612ce3565b600061280847836126b9565b9050600061282861281e8a6122ae8b60026125c9565b6127b6848c612c64565b905061283d8461283884846126b9565b612e86565b60006128588a6127b6601b5485612c6490919063ffffffff16565b600354909150612871906001600160a01b031682612f6a565b600454612890906001600160a01b031661288b84846126b9565b612f6a565b50506021805460ff60a01b19169055505050505050505050565b806128b7576128b761272c565b6001600160a01b0384166000908152600a602052604090205460ff1680156128f857506001600160a01b0383166000908152600a602052604090205460ff16155b1561290d57612908848484612fa5565b6129b9565b6001600160a01b0384166000908152600a602052604090205460ff1615801561294e57506001600160a01b0383166000908152600a602052604090205460ff165b1561295e576129088484846130cb565b6001600160a01b0384166000908152600a602052604090205460ff16801561299e57506001600160a01b0383166000908152600a602052604090205460ff165b156129ae57612908848484613174565b6129b98484846131e7565b806129cf576129cf601454601355601654601555565b50505050565b600e54600d54600b5460009283929091603211612a2c5760405162461bcd60e51b81526020600482015260156024820152744578636c75646564206c69737420746f6f2062696760581b6044820152606401610c5d565b60005b600b54811015612b74578260056000600b8481548110612a5157612a51613725565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612abc57508160066000600b8481548110612a9557612a95613725565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ad257600e54600d54945094505050509091565b612b1860056000600b8481548110612aec57612aec613725565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126b9565b9250612b6060066000600b8481548110612b3457612b34613725565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126b9565b915080612b6c816136de565b915050612a2f565b50600d54600e54612b84916125c9565b821015612b9b57600e54600d549350935050509091565b90939092509050565b60008183612bc55760405162461bcd60e51b8152600401610c5d919061354c565b50600061259d848661364b565b600080600080612be18561322b565b90506000612bee86613247565b90506000612c0682612c0089866126b9565b906126b9565b979296509094509092505050565b6000808080612c238886612c64565b90506000612c318887612c64565b90506000612c3f8888612c64565b90506000612c5182612c0086866126b9565b939b939a50919850919650505050505050565b600082612c7357506000610c9a565b6000612c7f838561366d565b905082612c8c858361364b565b14610e2d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c5d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d1857612d18613725565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d6b57600080fd5b505afa158015612d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da3919061333c565b81600181518110612db657612db6613725565b6001600160a01b0392831660209182029290920181019190915254612dde9130911684611eda565b60205460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e179085906000908690309042906004016135f7565b600060405180830381600087803b158015612e3157600080fd5b505af1158015612e45573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e7a9291906135d6565b60405180910390a15050565b602054612e9e9030906001600160a01b031684611eda565b6020546001600160a01b031663f305d719823085600080612ec76000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612f2a57600080fd5b505af1158015612f3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f6391906134da565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612fa0573d6000803e3d6000fd5b505050565b600080600080600080612fb78761266a565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612fe990886126b9565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461301890876126b9565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054613047908661260b565b6001600160a01b03891660009081526005602052604090205561306981613263565b61307384836132eb565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130b891815260200190565b60405180910390a3505050505050505050565b6000806000806000806130dd8761266a565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061310f90876126b9565b6001600160a01b03808b16600090815260056020908152604080832094909455918b16815260069091522054613145908461260b565b6001600160a01b038916600090815260066020908152604080832093909355600590522054613047908661260b565b6000806000806000806131868761266a565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506131b890886126b9565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461310f90876126b9565b6000806000806000806131f98761266a565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061301890876126b9565b6000610c9a60646127b660135485612c6490919063ffffffff16565b6000610c9a60646127b660155485612c6490919063ffffffff16565b600061326d6125a6565b9050600061327b8383612c64565b30600090815260056020526040902054909150613298908261260b565b30600090815260056020908152604080832093909355600a9052205460ff1615612fa057306000908152600660205260409020546132d6908461260b565b30600090815260066020526040902055505050565b600e546132f890836126b9565b600e55600f54613308908261260b565b600f555050565b80358015158114610c8457600080fd5b60006020828403121561333157600080fd5b8135610e2d8161373b565b60006020828403121561334e57600080fd5b8151610e2d8161373b565b6000806040838503121561336c57600080fd5b82356133778161373b565b915060208301356133878161373b565b809150509250929050565b6000806000606084860312156133a757600080fd5b83356133b28161373b565b925060208401356133c28161373b565b929592945050506040919091013590565b600080604083850312156133e657600080fd5b82356133f18161373b565b946020939093013593505050565b60008060006040848603121561341457600080fd5b833567ffffffffffffffff8082111561342c57600080fd5b818601915086601f83011261344057600080fd5b81358181111561344f57600080fd5b8760208260051b850101111561346457600080fd5b6020928301989097509590910135949350505050565b60006020828403121561348c57600080fd5b610e2d8261330f565b6000602082840312156134a757600080fd5b5035919050565b600080604083850312156134c157600080fd5b823591506134d16020840161330f565b90509250929050565b6000806000606084860312156134ef57600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156135415781516001600160a01b03168752958201959082019060010161351c565b509495945050505050565b600060208083528351808285015260005b818110156135795785810183015185820160400152820161355d565b8181111561358b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006135ef6040830184613508565b949350505050565b85815284602082015260a06040820152600061361660a0830186613508565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613646576136466136f9565b500190565b60008261366857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613687576136876136f9565b500290565b60008282101561369e5761369e6136f9565b500390565b600181811c908216806136b757607f821691505b602082108114156136d857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136f2576136f26136f9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461272957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122077695a2a57f3aaf33e943b2611f994313578658a14fea5c6fbedc6d08fb6039c64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063715018a6116101f2578063b0cb81f11161010d578063dd62ed3e116100a0578063efcc52de1161006f578063efcc52de14610b34578063f0f165af14610b4a578063f2fde38b14610b6a578063f8f8930f14610b8a57600080fd5b8063dd62ed3e14610a98578063ea2f0b3714610ade578063ea8d138c14610afe578063ec28438a14610b1457600080fd5b8063d0e03523116100dc578063d0e0352314610a2c578063d6b513cf14610a4c578063dc44b6a014610a62578063dd46706414610a7857600080fd5b8063b0cb81f1146109b7578063c49b9a80146109d7578063c828371e146109f7578063cfa9753314610a0c57600080fd5b806395d89b4111610185578063a5ece94111610154578063a5ece94114610942578063a69df4b514610962578063a9059cbb14610977578063afcf2fc41461099757600080fd5b806395d89b41146108d8578063996c3985146108ed578063a073d37f1461090d578063a457c2d71461092257600080fd5b806388f82020116101c157806388f82020146108415780638da5cb5b1461087a578063906e9dd01461089857806390e7544e146108b857600080fd5b8063715018a6146107e05780637d1db4a5146107f5578063806e085e1461080b57806388790a681461082b57600080fd5b80633b124fe7116102e257806352390c02116102755780635881f3ef116102445780635881f3ef14610775578063602bc62b146107955780636bc87c3a146107aa57806370a08231146107c057600080fd5b806352390c02146106e95780635342acb414610709578063557ed1ba146107425780635876ccc51461075557600080fd5b80634549b039116102b15780634549b0391461067357806349bd5a5e146106935780634a74bb02146106b35780635134f6ab146106d457600080fd5b80633b124fe7146105fd5780633bd5d173146106135780633e0a322d14610633578063437823ec1461065357600080fd5b806323b872dd1161035a578063313ce56711610329578063313ce5671461057b5780633685d4191461059d57806336f0d0e3146105bd57806339509351146105dd57600080fd5b806323b872dd146104f257806327c8f835146105125780632c28f579146105465780632d8381191461055b57600080fd5b806313114a9d1161039657806313114a9d146104705780631694505e1461048f57806318160ddd146104c7578063200a692d146104dc57600080fd5b806306fdde03146103d3578063077f9e0c146103fe578063095ea7b31461042e57806311889b761461044e57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610ba0565b6040516103f5919061354c565b60405180910390f35b34801561040a57600080fd5b5061041e61041936600461331f565b610c32565b60405190151581526020016103f5565b34801561043a57600080fd5b5061041e6104493660046133d3565b610c89565b34801561045a57600080fd5b5061046e610469366004613495565b610ca0565b005b34801561047c57600080fd5b50600f545b6040519081526020016103f5565b34801561049b57600080fd5b506020546104af906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b3480156104d357600080fd5b50600d54610481565b3480156104e857600080fd5b5061048160195481565b3480156104fe57600080fd5b5061041e61050d366004613392565b610ccf565b34801561051e57600080fd5b506104af7f000000000000000000000000000000000000000000000000000000000000dead81565b34801561055257600080fd5b5061046e610d38565b34801561056757600080fd5b50610481610576366004613495565b610db0565b34801561058757600080fd5b5060125460405160ff90911681526020016103f5565b3480156105a957600080fd5b5061046e6105b836600461331f565b610e34565b3480156105c957600080fd5b5061046e6105d836600461331f565b611035565b3480156105e957600080fd5b5061041e6105f83660046133d3565b611080565b34801561060957600080fd5b5061048160135481565b34801561061f57600080fd5b5061046e61062e366004613495565b6110b6565b34801561063f57600080fd5b5061046e61064e366004613495565b6111a0565b34801561065f57600080fd5b5061046e61066e36600461331f565b6111cf565b34801561067f57600080fd5b5061048161068e3660046134ae565b61121d565b34801561069f57600080fd5b506021546104af906001600160a01b031681565b3480156106bf57600080fd5b5060215461041e90600160a81b900460ff1681565b3480156106e057600080fd5b5061046e6112aa565b3480156106f557600080fd5b5061046e61070436600461331f565b611316565b34801561071557600080fd5b5061041e61072436600461331f565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561074e57600080fd5b5042610481565b34801561076157600080fd5b5061046e610770366004613495565b611469565b34801561078157600080fd5b506104af61079036600461331f565b611498565b3480156107a157600080fd5b50600254610481565b3480156107b657600080fd5b5061048160155481565b3480156107cc57600080fd5b506104816107db36600461331f565b6117ef565b3480156107ec57600080fd5b5061046e61184e565b34801561080157600080fd5b50610481601d5481565b34801561081757600080fd5b5061041e6108263660046133ff565b6118b0565b34801561083757600080fd5b50610481601a5481565b34801561084d57600080fd5b5061041e61085c36600461331f565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561088657600080fd5b506000546001600160a01b03166104af565b3480156108a457600080fd5b5061046e6108b336600461331f565b611978565b3480156108c457600080fd5b5061046e6108d3366004613495565b6119c4565b3480156108e457600080fd5b506103e86119f3565b3480156108f957600080fd5b5061046e610908366004613495565b611a02565b34801561091957600080fd5b50601e54610481565b34801561092e57600080fd5b5061041e61093d3660046133d3565b611a31565b34801561094e57600080fd5b506003546104af906001600160a01b031681565b34801561096e57600080fd5b5061046e611a80565b34801561098357600080fd5b5061041e6109923660046133d3565b611b86565b3480156109a357600080fd5b506004546104af906001600160a01b031681565b3480156109c357600080fd5b5061046e6109d2366004613495565b611b93565b3480156109e357600080fd5b5061046e6109f236600461347a565b611bc2565b348015610a0357600080fd5b50610481611c44565b348015610a1857600080fd5b5061046e610a27366004613495565b611c76565b348015610a3857600080fd5b5061046e610a47366004613495565b611ca5565b348015610a5857600080fd5b50610481601b5481565b348015610a6e57600080fd5b5061048160185481565b348015610a8457600080fd5b5061046e610a93366004613495565b611cd4565b348015610aa457600080fd5b50610481610ab3366004613359565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610aea57600080fd5b5061046e610af936600461331f565b611d59565b348015610b0a57600080fd5b50610481601c5481565b348015610b2057600080fd5b5061046e610b2f366004613495565b611da4565b348015610b4057600080fd5b5061048160175481565b348015610b5657600080fd5b5061046e610b65366004613495565b611dd3565b348015610b7657600080fd5b5061046e610b8536600461331f565b611e02565b348015610b9657600080fd5b50610481601f5481565b606060108054610baf906136a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdb906136a3565b8015610c285780601f10610bfd57610100808354040283529160200191610c28565b820191906000526020600020905b815481529060010190602001808311610c0b57829003601f168201915b5050505050905090565b600080546001600160a01b03163314610c665760405162461bcd60e51b8152600401610c5d906135a1565b60405180910390fd5b506001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610c96338484611eda565b5060015b92915050565b6000546001600160a01b03163314610cca5760405162461bcd60e51b8152600401610c5d906135a1565b601755565b6000610cdc848484611ffe565b610d2e8433610d2985604051806060016040528060288152602001613751602891396001600160a01b038a166000908152600760209081526040808320338452909152902054919061256c565b611eda565b5060019392505050565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610c5d906135a1565b610d6c6001611bc2565b600360138190556014819055600660158190556016819055600160178190556004601855601992909255601a55601b819055601c5568a2a15d09519be00000601d55565b6000600e54821115610e175760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c5d565b6000610e216125a6565b9050610e2d83826125c9565b9392505050565b6000546001600160a01b03163314610e5e5760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b0381166000908152600a602052604090205460ff16610ec65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c5d565b600b54603211610f105760405162461bcd60e51b81526020600482015260156024820152744578636c75646564206c69737420746f6f2062696760581b6044820152606401610c5d565b60005b600b5481101561103157816001600160a01b0316600b8281548110610f3a57610f3a613725565b6000918252602090912001546001600160a01b0316141561101f57600b8054610f659060019061368c565b81548110610f7557610f75613725565b600091825260209091200154600b80546001600160a01b039092169183908110610fa157610fa1613725565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600a90925220805460ff19169055600b805480610ff957610ff961370f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611029816136de565b915050610f13565b5050565b6000546001600160a01b0316331461105f5760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b03166000908152600960205260409020805460ff19169055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c96918590610d29908661260b565b336000818152600a602052604090205460ff161561112b5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c5d565b60006111368361266a565b505050506001600160a01b038416600090815260056020526040902054919250611162919050826126b9565b6001600160a01b038316600090815260056020526040902055600e5461118890826126b9565b600e55600f54611198908461260b565b600f55505050565b6000546001600160a01b031633146111ca5760405162461bcd60e51b8152600401610c5d906135a1565b600c55565b6000546001600160a01b031633146111f95760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600d548311156112715760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c5d565b816112905760006112818461266a565b50939550610c9a945050505050565b600061129b8461266a565b50929550610c9a945050505050565b6000546001600160a01b031633146112d45760405162461bcd60e51b8152600401610c5d906135a1565b6112de6000611bc2565b600060138190556015819055601781905560188190556019819055601a819055601b819055601c5569d3c21bcecceda1000000601d55565b6000546001600160a01b031633146113405760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b0381166000908152600a602052604090205460ff16156113a95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c5d565b6001600160a01b03811660009081526005602052604090205415611403576001600160a01b0381166000908152600560205260409020546113e990610db0565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146114935760405162461bcd60e51b8152600401610c5d906135a1565b601a55565b600080546001600160a01b031633146114c35760405162461bcd60e51b8152600401610c5d906135a1565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561150157600080fd5b505afa158015611515573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611539919061333c565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561158157600080fd5b505afa158015611595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b9919061333c565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156115ff57600080fd5b505afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611637919061333c565b91506001600160a01b0382166117bb57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561168057600080fd5b505afa158015611694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b8919061333c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561170057600080fd5b505afa158015611714573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611738919061333c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561178057600080fd5b505af1158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b8919061333c565b91505b602180546001600160a01b038085166001600160a01b03199283161790925560208054939092169216919091179055919050565b6001600160a01b0381166000908152600a602052604081205460ff161561182c57506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260056020526040902054610c9a90610db0565b6000546001600160a01b031633146118785760405162461bcd60e51b8152600401610c5d906135a1565b600080546040516001600160a01b0390911690600080516020613779833981519152908390a3600080546001600160a01b0319169055565b6000826118bc57600080fd5b60968311156119025760405162461bcd60e51b8152602060048201526012602482015271746f204c69737420697320746f6f2062696760701b6044820152606401610c5d565b3360008181526008602052604090205460ff1661191e57600080fd5b60005b8481101561196c5761195986868381811061193e5761193e613725565b9050602002016020810190611953919061331f565b85611b86565b5080611964816136de565b915050611921565b50600195945050505050565b6000546001600160a01b031633146119a25760405162461bcd60e51b8152600401610c5d906135a1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119ee5760405162461bcd60e51b8152600401610c5d906135a1565b601c55565b606060118054610baf906136a3565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610c5d906135a1565b601855565b6000610c963384610d2985604051806060016040528060258152602001613799602591393360009081526007602090815260408083206001600160a01b038d168452909152902054919061256c565b6001546001600160a01b03163314611ae65760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c5d565b6002544211611b375760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610c5d565b600154600080546040516001600160a01b03938416939091169160008051602061377983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c96338484611ffe565b6000546001600160a01b03163314611bbd5760405162461bcd60e51b8152600401610c5d906135a1565b601b55565b6000546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610c5d906135a1565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c3990831515815260200190565b60405180910390a150565b600080546001600160a01b03163314611c6f5760405162461bcd60e51b8152600401610c5d906135a1565b50600c5490565b6000546001600160a01b03163314611ca05760405162461bcd60e51b8152600401610c5d906135a1565b601f55565b6000546001600160a01b03163314611ccf5760405162461bcd60e51b8152600401610c5d906135a1565b601955565b6000546001600160a01b03163314611cfe5760405162461bcd60e51b8152600401610c5d906135a1565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611d2d8142613633565b600255600080546040516001600160a01b0390911690600080516020613779833981519152908390a350565b6000546001600160a01b03163314611d835760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611dce5760405162461bcd60e51b8152600401610c5d906135a1565b601d55565b6000546001600160a01b03163314611dfd5760405162461bcd60e51b8152600401610c5d906135a1565b601e55565b6000546001600160a01b03163314611e2c5760405162461bcd60e51b8152600401610c5d906135a1565b6001600160a01b038116611e915760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c5d565b600080546040516001600160a01b038085169392169160008051602061377983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611f3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c5d565b6001600160a01b038216611f9d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c5d565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120625760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c5d565b6001600160a01b0382166120c45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c5d565b600081116121265760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c5d565b6000546001600160a01b0384811691161480159061215257506000546001600160a01b03838116911614155b15612254576021546001600160a01b03848116911614156121d8576001600160a01b03821660009081526009602052604090205460ff16156121ca5760405162461bcd60e51b8152602060048201526011602482015270596f7520617265206120426f742021212160781b6044820152606401610c5d565b6121d3826126fb565b612254565b6021546001600160a01b0383811691161415612254576001600160a01b03831660009081526009602052604090205460ff161561224b5760405162461bcd60e51b8152602060048201526011602482015270596f7520617265206120426f742021212160781b6044820152606401610c5d565b612254836126fb565b6021546001600160a01b03848116911614801561227f57506000546001600160a01b03848116911614155b801561229957506000546001600160a01b03838116911614155b1561231b57601f546122b4826122ae856117ef565b9061260b565b1061231b5760405162461bcd60e51b815260206004820152603160248201527f45524332303a20596f752063616e206e6f7420686f6c64206d6f7265207468616044820152706e20322520546f74616c20737570706c7960781b6064820152608401610c5d565b6000546001600160a01b0384811691161480159061234757506000546001600160a01b03838116911614155b156123af57601d548111156123af5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c5d565b60006123ba306117ef565b601e546001600160a01b0386166000908152600860205260409020549192508210159060019060ff168061240657506001600160a01b03851660009081526008602052604090205460ff165b1561240f575060005b6021546001600160a01b038781169116141561243a5761242d61272c565b6017546013556018546015555b6021546001600160a01b03868116911614156124655761245861272c565b601954601355601a546015555b602154600160a01b900460ff161580156124885750602154600160a81b900460ff165b80156124a157506021546001600160a01b038681169116145b156124ba5781156124ba57601e5492506124ba8361275a565b6001600160a01b03861660009081526008602052604090205460ff16806124f957506001600160a01b03851660009081526008602052604090205460ff165b15612502575060005b6021546001600160a01b038781169116141561252d5761252061272c565b6017546013556018546015555b6021546001600160a01b03868116911614156125585761254b61272c565b601954601355601a546015555b612564868686846128aa565b505050505050565b600081848411156125905760405162461bcd60e51b8152600401610c5d919061354c565b50600061259d848661368c565b95945050505050565b60008060006125b36129d5565b90925090506125c282826125c9565b9250505090565b6000610e2d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ba4565b6000806126188385613633565b905083811015610e2d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c5d565b60008060008060008060008060006126818a612bd2565b925092509250600080600061269f8d868661269a6125a6565b612c14565b919f909e50909c50959a5093985091965092945050505050565b6000610e2d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061256c565b600c54421015612729576001600160a01b0381166000908152600960205260409020805460ff191660011790555b50565b60135415801561273c5750601554155b1561274357565b601380546014556015805460165560009182905555565b6021805460ff60a01b1916600160a01b179055601c54601b54600091612780919061260b565b90506000612799826015546126b990919063ffffffff16565b905060006127bc6015546127b68487612c6490919063ffffffff16565b906125c9565b905060006127ca85836126b9565b905060006127d98360026125c9565b905060006127e784836126b9565b9050476127fc6127f7848661260b565b612ce3565b600061280847836126b9565b9050600061282861281e8a6122ae8b60026125c9565b6127b6848c612c64565b905061283d8461283884846126b9565b612e86565b60006128588a6127b6601b5485612c6490919063ffffffff16565b600354909150612871906001600160a01b031682612f6a565b600454612890906001600160a01b031661288b84846126b9565b612f6a565b50506021805460ff60a01b19169055505050505050505050565b806128b7576128b761272c565b6001600160a01b0384166000908152600a602052604090205460ff1680156128f857506001600160a01b0383166000908152600a602052604090205460ff16155b1561290d57612908848484612fa5565b6129b9565b6001600160a01b0384166000908152600a602052604090205460ff1615801561294e57506001600160a01b0383166000908152600a602052604090205460ff165b1561295e576129088484846130cb565b6001600160a01b0384166000908152600a602052604090205460ff16801561299e57506001600160a01b0383166000908152600a602052604090205460ff165b156129ae57612908848484613174565b6129b98484846131e7565b806129cf576129cf601454601355601654601555565b50505050565b600e54600d54600b5460009283929091603211612a2c5760405162461bcd60e51b81526020600482015260156024820152744578636c75646564206c69737420746f6f2062696760581b6044820152606401610c5d565b60005b600b54811015612b74578260056000600b8481548110612a5157612a51613725565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612abc57508160066000600b8481548110612a9557612a95613725565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ad257600e54600d54945094505050509091565b612b1860056000600b8481548110612aec57612aec613725565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126b9565b9250612b6060066000600b8481548110612b3457612b34613725565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126b9565b915080612b6c816136de565b915050612a2f565b50600d54600e54612b84916125c9565b821015612b9b57600e54600d549350935050509091565b90939092509050565b60008183612bc55760405162461bcd60e51b8152600401610c5d919061354c565b50600061259d848661364b565b600080600080612be18561322b565b90506000612bee86613247565b90506000612c0682612c0089866126b9565b906126b9565b979296509094509092505050565b6000808080612c238886612c64565b90506000612c318887612c64565b90506000612c3f8888612c64565b90506000612c5182612c0086866126b9565b939b939a50919850919650505050505050565b600082612c7357506000610c9a565b6000612c7f838561366d565b905082612c8c858361364b565b14610e2d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c5d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d1857612d18613725565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d6b57600080fd5b505afa158015612d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da3919061333c565b81600181518110612db657612db6613725565b6001600160a01b0392831660209182029290920181019190915254612dde9130911684611eda565b60205460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e179085906000908690309042906004016135f7565b600060405180830381600087803b158015612e3157600080fd5b505af1158015612e45573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e7a9291906135d6565b60405180910390a15050565b602054612e9e9030906001600160a01b031684611eda565b6020546001600160a01b031663f305d719823085600080612ec76000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612f2a57600080fd5b505af1158015612f3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f6391906134da565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612fa0573d6000803e3d6000fd5b505050565b600080600080600080612fb78761266a565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150612fe990886126b9565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461301890876126b9565b6001600160a01b03808b1660009081526005602052604080822093909355908a1681522054613047908661260b565b6001600160a01b03891660009081526005602052604090205561306981613263565b61307384836132eb565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130b891815260200190565b60405180910390a3505050505050505050565b6000806000806000806130dd8761266a565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061310f90876126b9565b6001600160a01b03808b16600090815260056020908152604080832094909455918b16815260069091522054613145908461260b565b6001600160a01b038916600090815260066020908152604080832093909355600590522054613047908661260b565b6000806000806000806131868761266a565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506131b890886126b9565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461310f90876126b9565b6000806000806000806131f98761266a565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061301890876126b9565b6000610c9a60646127b660135485612c6490919063ffffffff16565b6000610c9a60646127b660155485612c6490919063ffffffff16565b600061326d6125a6565b9050600061327b8383612c64565b30600090815260056020526040902054909150613298908261260b565b30600090815260056020908152604080832093909355600a9052205460ff1615612fa057306000908152600660205260409020546132d6908461260b565b30600090815260066020526040902055505050565b600e546132f890836126b9565b600e55600f54613308908261260b565b600f555050565b80358015158114610c8457600080fd5b60006020828403121561333157600080fd5b8135610e2d8161373b565b60006020828403121561334e57600080fd5b8151610e2d8161373b565b6000806040838503121561336c57600080fd5b82356133778161373b565b915060208301356133878161373b565b809150509250929050565b6000806000606084860312156133a757600080fd5b83356133b28161373b565b925060208401356133c28161373b565b929592945050506040919091013590565b600080604083850312156133e657600080fd5b82356133f18161373b565b946020939093013593505050565b60008060006040848603121561341457600080fd5b833567ffffffffffffffff8082111561342c57600080fd5b818601915086601f83011261344057600080fd5b81358181111561344f57600080fd5b8760208260051b850101111561346457600080fd5b6020928301989097509590910135949350505050565b60006020828403121561348c57600080fd5b610e2d8261330f565b6000602082840312156134a757600080fd5b5035919050565b600080604083850312156134c157600080fd5b823591506134d16020840161330f565b90509250929050565b6000806000606084860312156134ef57600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156135415781516001600160a01b03168752958201959082019060010161351c565b509495945050505050565b600060208083528351808285015260005b818110156135795785810183015185820160400152820161355d565b8181111561358b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006135ef6040830184613508565b949350505050565b85815284602082015260a06040820152600061361660a0830186613508565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613646576136466136f9565b500190565b60008261366857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613687576136876136f9565b500290565b60008282101561369e5761369e6136f9565b500390565b600181811c908216806136b757607f821691505b602082108114156136d857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136f2576136f26136f9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461272957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122077695a2a57f3aaf33e943b2611f994313578658a14fea5c6fbedc6d08fb6039c64736f6c63430008070033

Deployed Bytecode Sourcemap

15689:24703:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18813:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21186:122;;;;;;;;;;-1:-1:-1;21186:122:0;;;;;:::i;:::-;;:::i;:::-;;;5473:14:1;;5466:22;5448:41;;5436:2;5421:18;21186:122:0;5308:187:1;19725:161:0;;;;;;;;;;-1:-1:-1;19725:161:0;;;;;:::i;:::-;;:::i;36628:110::-;;;;;;;;;;-1:-1:-1;36628:110:0;;;;;:::i;:::-;;:::i;:::-;;20846:87;;;;;;;;;;-1:-1:-1;20915:10:0;;20846:87;;;14211:25:1;;;14199:2;14184:18;20846:87:0;14065:177:1;17525:41:0;;;;;;;;;;-1:-1:-1;17525:41:0;;;;-1:-1:-1;;;;;17525:41:0;;;;;;-1:-1:-1;;;;;4119:32:1;;;4101:51;;4089:2;4074:18;17525:41:0;3955:203:1;19090:95:0;;;;;;;;;;-1:-1:-1;19170:7:0;;19090:95;;17151:30;;;;;;;;;;;;;;;;19894:313;;;;;;;;;;-1:-1:-1;19894:313:0;;;;;:::i;:::-;;:::i;16053:81::-;;;;;;;;;;;;;;;39329:442;;;;;;;;;;;;;:::i;22159:253::-;;;;;;;;;;-1:-1:-1;22159:253:0;;;;;:::i;:::-;;:::i;18999:83::-;;;;;;;;;;-1:-1:-1;19065:9:0;;18999:83;;19065:9;;;;15313:36:1;;15301:2;15286:18;18999:83:0;15171:184:1;22763:545:0;;;;;;;;;;-1:-1:-1;22763:545:0;;;;;:::i;:::-;;:::i;37951:107::-;;;;;;;;;;-1:-1:-1;37951:107:0;;;;;:::i;:::-;;:::i;20215:218::-;;;;;;;;;;-1:-1:-1;20215:218:0;;;;;:::i;:::-;;:::i;16879:26::-;;;;;;;;;;;;;;;;21326:377;;;;;;;;;;-1:-1:-1;21326:377:0;;;;;:::i;:::-;;:::i;37836:103::-;;;;;;;;;;-1:-1:-1;37836:103:0;;;;;:::i;:::-;;:::i;36383:111::-;;;;;;;;;;-1:-1:-1;36383:111:0;;;;;:::i;:::-;;:::i;21715:436::-;;;;;;;;;;-1:-1:-1;21715:436:0;;;;;:::i;:::-;;:::i;17573:28::-;;;;;;;;;;-1:-1:-1;17573:28:0;;;;-1:-1:-1;;;;;17573:28:0;;;17642:41;;;;;;;;;;-1:-1:-1;17642:41:0;;;;-1:-1:-1;;;17642:41:0;;;;;;38944:373;;;;;;;;;;;;;:::i;22420:335::-;;;;;;;;;;-1:-1:-1;22420:335:0;;;;;:::i;:::-;;:::i;36248:123::-;;;;;;;;;;-1:-1:-1;36248:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;36336:27:0;36312:4;36336:27;;;:18;:27;;;;;;;;;36248:123;7079:90;;;;;;;;;;-1:-1:-1;7146:15:0;7079:90;;37012:138;;;;;;;;;;-1:-1:-1;37012:138:0;;;;;:::i;:::-;;:::i;38215:537::-;;;;;;;;;;-1:-1:-1;38215:537:0;;;;;:::i;:::-;;:::i;6977:90::-;;;;;;;;;;-1:-1:-1;7050:9:0;;6977:90;;16966:32;;;;;;;;;;;;;;;;19193:198;;;;;;;;;;-1:-1:-1;19193:198:0;;;;;:::i;:::-;;:::i;6569:148::-;;;;;;;;;;;;;:::i;17327:53::-;;;;;;;;;;;;;;;;39779:374;;;;;;;;;;-1:-1:-1;39779:374:0;;;;;:::i;:::-;;:::i;17188:36::-;;;;;;;;;;;;;;;;20718:120;;;;;;;;;;-1:-1:-1;20718:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20810:20:0;20786:4;20810:20;;;:11;:20;;;;;;;;;20718:120;6344:79;;;;;;;;;;-1:-1:-1;6382:7:0;6409:6;-1:-1:-1;;;;;6409:6:0;6344:79;;38066:141;;;;;;;;;;-1:-1:-1;38066:141:0;;;;;:::i;:::-;;:::i;37405:108::-;;;;;;;;;;-1:-1:-1;37405:108:0;;;;;:::i;:::-;;:::i;18904:87::-;;;;;;;;;;;;;:::i;36870:134::-;;;;;;;;;;-1:-1:-1;36870:134:0;;;;;:::i;:::-;;:::i;20945:120::-;;;;;;;;;;-1:-1:-1;21034:23:0;;20945:120;;20441:269;;;;;;;;;;-1:-1:-1;20441:269:0;;;;;:::i;:::-;;:::i;15809:93::-;;;;;;;;;;-1:-1:-1;15809:93:0;;;;-1:-1:-1;;;;;15809:93:0;;;7415:305;;;;;;;;;;;;;:::i;19399:167::-;;;;;;;;;;-1:-1:-1;19399:167:0;;;;;:::i;:::-;;:::i;15930:91::-;;;;;;;;;;-1:-1:-1;15930:91:0;;;;-1:-1:-1;;;;;15930:91:0;;;37285:112;;;;;;;;;;-1:-1:-1;37285:112:0;;;;;:::i;:::-;;:::i;38760:171::-;;;;;;;;;;-1:-1:-1;38760:171:0;;;;;:::i;:::-;;:::i;21073:101::-;;;;;;;;;;;;;:::i;37695:129::-;;;;;;;;;;-1:-1:-1;37695:129:0;;;;;:::i;:::-;;:::i;36746:114::-;;;;;;;;;;-1:-1:-1;36746:114:0;;;;;:::i;:::-;;:::i;17239:35::-;;;;;;;;;;;;;;;;17103;;;;;;;;;;;;;;;;7177:226;;;;;;;;;;-1:-1:-1;7177:226:0;;;;;:::i;:::-;;:::i;19574:143::-;;;;;;;;;;-1:-1:-1;19574:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19682:18:0;;;19655:7;19682:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19574:143;36506:110;;;;;;;;;;-1:-1:-1;36506:110:0;;;;;:::i;:::-;;:::i;17281:33::-;;;;;;;;;;;;;;;;37162:111;;;;;;;;;;-1:-1:-1;37162:111:0;;;;;:::i;:::-;;:::i;17067:29::-;;;;;;;;;;;;;;;;37521:166;;;;;;;;;;-1:-1:-1;37521:166:0;;;;;:::i;:::-;;:::i;6725:244::-;;;;;;;;;;-1:-1:-1;6725:244:0;;;;;:::i;:::-;;:::i;17459:57::-;;;;;;;;;;;;;;;;18813:83;18850:13;18883:5;18876:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18813:83;:::o;21186:122::-;21257:4;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;21281:18:0;::::1;;::::0;;;:10:::1;:18;::::0;;;;;::::1;;6548:1;21186:122:::0;;;:::o;19725:161::-;19800:4;19817:39;728:10;19840:7;19849:6;19817:8;:39::i;:::-;-1:-1:-1;19874:4:0;19725:161;;;;;:::o;36628:110::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;36708:10:::1;:22:::0;36628:110::o;19894:313::-;19992:4;20009:36;20019:6;20027:9;20038:6;20009:9;:36::i;:::-;20056:121;20065:6;728:10;20087:89;20125:6;20087:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20087:19:0;;;;;;:11;:19;;;;;;;;728:10;20087:33;;;;;;;;;;:37;:89::i;:::-;20056:8;:121::i;:::-;-1:-1:-1;20195:4:0;19894:313;;;;;:::o;39329:442::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;39377:30:::1;39402:4;39377:24;:30::i;:::-;39428:1;39418:7;:11:::0;;;39440:15:::1;:25:::0;;;39492:1:::1;39476:13;:17:::0;;;39504:21:::1;:37:::0;;;39565:1:::1;39552:10;:14:::0;;;39596:1:::1;39577:16;:20:::0;39608:11:::1;:15:::0;;;;39634:17:::1;:21:::0;39666:16:::1;:20:::0;;;39697:14:::1;:17:::0;39740:23:::1;39725:12;:38:::0;39329:442::o;22159:253::-;22225:7;22264;;22253;:18;;22245:73;;;;-1:-1:-1;;;22245:73:0;;6943:2:1;22245:73:0;;;6925:21:1;6982:2;6962:18;;;6955:30;7021:34;7001:18;;;6994:62;-1:-1:-1;;;7072:18:1;;;7065:40;7122:19;;22245:73:0;6741:406:1;22245:73:0;22329:19;22352:10;:8;:10::i;:::-;22329:33;-1:-1:-1;22380:24:0;:7;22329:33;22380:11;:24::i;:::-;22373:31;22159:253;-1:-1:-1;;;22159:253:0:o;22763:545::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22845:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22837:60;;;::::0;-1:-1:-1;;;22837:60:0;;8520:2:1;22837:60:0::1;::::0;::::1;8502:21:1::0;8559:2;8539:18;;;8532:30;8598:29;8578:18;;;8571:57;8645:18;;22837:60:0::1;8318:351:1::0;22837:60:0::1;22916:9;:16:::0;22935:2:::1;-1:-1:-1::0;22908:55:0::1;;;::::0;-1:-1:-1;;;22908:55:0;;9222:2:1;22908:55:0::1;::::0;::::1;9204:21:1::0;9261:2;9241:18;;;9234:30;-1:-1:-1;;;9280:18:1;;;9273:51;9341:18;;22908:55:0::1;9020:345:1::0;22908:55:0::1;22979:9;22974:327;22998:9;:16:::0;22994:20;::::1;22974:327;;;23056:7;-1:-1:-1::0;;;;;23040:23:0::1;:9;23050:1;23040:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23040:12:0::1;:23;23036:254;;;23099:9;23109:16:::0;;:20:::1;::::0;23128:1:::1;::::0;23109:20:::1;:::i;:::-;23099:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23084:9:::1;:12:::0;;-1:-1:-1;;;;;23099:31:0;;::::1;::::0;23094:1;;23084:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23084:46:0::1;-1:-1:-1::0;;;;;23084:46:0;;::::1;;::::0;;23149:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23188:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23188:28:0::1;::::0;;23235:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23235:15:0;;;;;-1:-1:-1;;;;;;23235:15:0::1;::::0;;;;;22974:327:::1;22763:545:::0;:::o;23036:254::-:1;23016:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22974:327;;;;22763:545:::0;:::o;37951:107::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38024:18:0::1;38045:5;38024:18:::0;;;:10:::1;:18;::::0;;;;:26;;-1:-1:-1;;38024:26:0::1;::::0;;37951:107::o;20215:218::-;728:10;20303:4;20352:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20352:34:0;;;;;;;;;;20303:4;;20320:83;;20343:7;;20352:50;;20391:10;20352:38;:50::i;21326:377::-;728:10;21378:14;21427:19;;;:11;:19;;;;;;;;21426:20;21418:77;;;;-1:-1:-1;;;21418:77:0;;13450:2:1;21418:77:0;;;13432:21:1;13489:2;13469:18;;;13462:30;13528:34;13508:18;;;13501:62;-1:-1:-1;;;13579:18:1;;;13572:42;13631:19;;21418:77:0;13248:408:1;21418:77:0;21507:15;21531:19;21542:7;21531:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21579:15:0;;;;;;:7;:15;;;;;;21506:44;;-1:-1:-1;21579:28:0;;:15;-1:-1:-1;21506:44:0;21579:19;:28::i;:::-;-1:-1:-1;;;;;21561:15:0;;;;;;:7;:15;;;;;:46;21628:7;;:20;;21640:7;21628:11;:20::i;:::-;21618:7;:30;21672:10;;:23;;21687:7;21672:14;:23::i;:::-;21659:10;:36;-1:-1:-1;;;21326:377:0:o;37836:103::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;37909:10:::1;:22:::0;37836:103::o;36383:111::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36452:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36452:34:0::1;36482:4;36452:34;::::0;;36383:111::o;21715:436::-;21805:7;21844;;21833;:18;;21825:62;;;;-1:-1:-1;;;21825:62:0;;9572:2:1;21825:62:0;;;9554:21:1;9611:2;9591:18;;;9584:30;9650:33;9630:18;;;9623:61;9701:18;;21825:62:0;9370:355:1;21825:62:0;21903:17;21898:246;;21938:15;21962:19;21973:7;21962:10;:19::i;:::-;-1:-1:-1;21937:44:0;;-1:-1:-1;21996:14:0;;-1:-1:-1;;;;;21996:14:0;21898:246;22045:23;22076:19;22087:7;22076:10;:19::i;:::-;-1:-1:-1;22043:52:0;;-1:-1:-1;22110:22:0;;-1:-1:-1;;;;;22110:22:0;38944:373;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;39003:31:::1;39028:5;39003:24;:31::i;:::-;39055:1;39045:7;:11:::0;;;39067:13:::1;:17:::0;;;39095:10:::1;:14:::0;;;39120:16:::1;:20:::0;;;39151:11:::1;:15:::0;;;39177:17:::1;:21:::0;;;39209:16:::1;:20:::0;;;39240:14:::1;:17:::0;39283:26:::1;39268:12;:41:::0;38944:373::o;22420:335::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22505:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22504:21;22496:61;;;::::0;-1:-1:-1;;;22496:61:0;;8520:2:1;22496:61:0::1;::::0;::::1;8502:21:1::0;8559:2;8539:18;;;8532:30;8598:29;8578:18;;;8571:57;8645:18;;22496:61:0::1;8318:351:1::0;22496:61:0::1;-1:-1:-1::0;;;;;22571:16:0;::::1;22590:1;22571:16:::0;;;:7:::1;:16;::::0;;;;;:20;22568:108:::1;;-1:-1:-1::0;;;;;22647:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22627:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22608:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22568:108:::1;-1:-1:-1::0;;;;;22686:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22686:27:0::1;22709:4;22686:27:::0;;::::1;::::0;;;22724:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22724:23:0::1;::::0;;::::1;::::0;;22420:335::o;37012:138::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;37106:17:::1;:36:::0;37012:138::o;38215:537::-;38286:13;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;38312:35:::1;38369:7;38312:65;;38414:16;-1:-1:-1::0;;;;;38414:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38396:53:0::1;;38458:4;38465:16;-1:-1:-1::0;;;;;38465:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38396:93;::::0;-1:-1:-1;;;;;;38396:93:0::1;::::0;;;;;;-1:-1:-1;;;;;4617:15:1;;;38396:93:0::1;::::0;::::1;4599:34:1::0;4669:15;;4649:18;;;4642:43;4534:18;;38396:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38388:101:::0;-1:-1:-1;;;;;;38503:19:0;::::1;38500:168;;38564:16;-1:-1:-1::0;;;;;38564:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38546:70:0::1;;38625:4;38632:16;-1:-1:-1::0;;;;;38632:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38546:110;::::0;-1:-1:-1;;;;;;38546:110:0::1;::::0;;;;;;-1:-1:-1;;;;;4617:15:1;;;38546:110:0::1;::::0;::::1;4599:34:1::0;4669:15;;4649:18;;;4642:43;4534:18;;38546:110:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38538:118;;38500:168;38678:13;:21:::0;;-1:-1:-1;;;;;38678:21:0;;::::1;-1:-1:-1::0;;;;;;38678:21:0;;::::1;;::::0;;;38710:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;38694:5;38215:537;-1:-1:-1;38215:537:0:o;19193:198::-;-1:-1:-1;;;;;19283:20:0;;19259:7;19283:20;;;:11;:20;;;;;;;;19279:49;;;-1:-1:-1;;;;;;19312:16:0;;;;;:7;:16;;;;;;;19193:198::o;19279:49::-;-1:-1:-1;;;;;19366:16:0;;;;;;:7;:16;;;;;;19346:37;;:19;:37::i;6569:148::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;6676:1:::1;6660:6:::0;;6639:40:::1;::::0;-1:-1:-1;;;;;6660:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6639:40:0;6676:1;;6639:40:::1;6707:1;6690:19:::0;;-1:-1:-1;;;;;;6690:19:0::1;::::0;;6569:148::o;39779:374::-;39850:4;39874:15;39866:24;;;;;;39924:3;39909:18;;;39901:49;;;;-1:-1:-1;;;39901:49:0;;11920:2:1;39901:49:0;;;11902:21:1;11959:2;11939:18;;;11932:30;-1:-1:-1;;;11978:18:1;;;11971:48;12036:18;;39901:49:0;11718:342:1;39901:49:0;728:10;39961:14;40009:26;;;:18;:26;;;;;;;;40001:35;;;;;;40051:6;40047:77;40060:13;;;40047:77;;;40093:19;40102:4;;40107:1;40102:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;40110:1;40093:8;:19::i;:::-;-1:-1:-1;40074:3:0;;;;:::i;:::-;;;;40047:77;;;-1:-1:-1;40141:4:0;;39779:374;-1:-1:-1;;;;;39779:374:0:o;38066:141::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;38154:16:::1;:45:::0;;-1:-1:-1;;;;;;38154:45:0::1;-1:-1:-1::0;;;;;38154:45:0;;;::::1;::::0;;;::::1;::::0;;38066:141::o;37405:108::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;37481:14:::1;:24:::0;37405:108::o;18904:87::-;18943:13;18976:7;18969:14;;;;;:::i;36870:134::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;36962:16:::1;:34:::0;36870:134::o;20441:269::-;20534:4;20551:129;728:10;20574:7;20583:96;20622:15;20583:96;;;;;;;;;;;;;;;;;728:10;20583:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20583:34:0;;;;;;;;;;;;:38;:96::i;7415:305::-;7467:14;;-1:-1:-1;;;;;7467:14:0;7485:10;7467:28;7459:76;;;;-1:-1:-1;;;7459:76:0;;13863:2:1;7459:76:0;;;13845:21:1;13902:2;13882:18;;;13875:30;13941:34;13921:18;;;13914:62;-1:-1:-1;;;13992:18:1;;;13985:33;14035:19;;7459:76:0;13661:399:1;7459:76:0;7572:9;;7554:15;:27;7546:72;;;;-1:-1:-1;;;7546:72:0;;13090:2:1;7546:72:0;;;13072:21:1;13129:2;13109:18;;;13102:30;13168:33;13148:18;;;13141:61;13219:18;;7546:72:0;12888:355:1;7546:72:0;7663:14;;;7655:6;;7634:44;;-1:-1:-1;;;;;7663:14:0;;;;7655:6;;;;-1:-1:-1;;;;;;;;;;;7634:44:0;;7698:14;;;7689:23;;-1:-1:-1;;;;;;7689:23:0;-1:-1:-1;;;;;7698:14:0;;;7689:23;;;;;;7415:305::o;19399:167::-;19477:4;19494:42;728:10;19518:9;19529:6;19494:9;:42::i;37285:112::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;37363:16:::1;:26:::0;37285:112::o;38760:171::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;38837:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38837:32:0::1;-1:-1:-1::0;;;;38837:32:0;;::::1;;::::0;;38885:38:::1;::::0;::::1;::::0;::::1;::::0;38861:8;5473:14:1;5466:22;5448:41;;5436:2;5421:18;;5308:187;38885:38:0::1;;;;;;;;38760:171:::0;:::o;21073:101::-;21128:7;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;-1:-1:-1;21155:10:0::1;::::0;21073:101;:::o;37695:129::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;37781:15:::1;:35:::0;37695:129::o;36746:114::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;36828:11:::1;:24:::0;36746:114::o;7177:226::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;7258:6:::1;::::0;;;7241:23;;-1:-1:-1;;;;;;7241:23:0;;::::1;-1:-1:-1::0;;;;;7258:6:0;::::1;7241:23;::::0;;;7275:19:::1;::::0;;7317:22:::1;7335:4:::0;7317:15:::1;:22;:::i;:::-;7305:9;:34:::0;7392:1:::1;7376:6:::0;;7355:40:::1;::::0;-1:-1:-1;;;;;7376:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7355:40:0;7392:1;;7355:40:::1;7177:226:::0;:::o;36506:110::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36573:27:0::1;36603:5;36573:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36573:35:0::1;::::0;;36506:110::o;37162:111::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;37239:12:::1;:26:::0;37162:111::o;37521:166::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;37629:23:::1;:50:::0;37521:166::o;6725:244::-;6478:6;;-1:-1:-1;;;;;6478:6:0;728:10;6478:22;6470:67;;;;-1:-1:-1;;;6470:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6814:22:0;::::1;6806:73;;;::::0;-1:-1:-1;;;6806:73:0;;7354:2:1;6806:73:0::1;::::0;::::1;7336:21:1::0;7393:2;7373:18;;;7366:30;7432:34;7412:18;;;7405:62;-1:-1:-1;;;7483:18:1;;;7476:36;7529:19;;6806:73:0::1;7152:402:1::0;6806:73:0::1;6916:6;::::0;;6895:38:::1;::::0;-1:-1:-1;;;;;6895:38:0;;::::1;::::0;6916:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6895:38:0;::::1;6944:6;:17:::0;;-1:-1:-1;;;;;;6944:17:0::1;-1:-1:-1::0;;;;;6944:17:0;;;::::1;::::0;;;::::1;::::0;;6725:244::o;23316:337::-;-1:-1:-1;;;;;23409:19:0;;23401:68;;;;-1:-1:-1;;;23401:68:0;;12267:2:1;23401:68:0;;;12249:21:1;12306:2;12286:18;;;12279:30;12345:34;12325:18;;;12318:62;-1:-1:-1;;;12396:18:1;;;12389:34;12440:19;;23401:68:0;12065:400:1;23401:68:0;-1:-1:-1;;;;;23488:21:0;;23480:68;;;;-1:-1:-1;;;23480:68:0;;7761:2:1;23480:68:0;;;7743:21:1;7800:2;7780:18;;;7773:30;7839:34;7819:18;;;7812:62;-1:-1:-1;;;7890:18:1;;;7883:32;7932:19;;23480:68:0;7559:398:1;23480:68:0;-1:-1:-1;;;;;23561:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23613:32;;14211:25:1;;;23613:32:0;;14184:18:1;23613:32:0;;;;;;;23316:337;;;:::o;23817:2539::-;-1:-1:-1;;;;;23939:18:0;;23931:68;;;;-1:-1:-1;;;23931:68:0;;11514:2:1;23931:68:0;;;11496:21:1;11553:2;11533:18;;;11526:30;11592:34;11572:18;;;11565:62;-1:-1:-1;;;11643:18:1;;;11636:35;11688:19;;23931:68:0;11312:401:1;23931:68:0;-1:-1:-1;;;;;24018:16:0;;24010:64;;;;-1:-1:-1;;;24010:64:0;;6539:2:1;24010:64:0;;;6521:21:1;6578:2;6558:18;;;6551:30;6617:34;6597:18;;;6590:62;-1:-1:-1;;;6668:18:1;;;6661:33;6711:19;;24010:64:0;6337:399:1;24010:64:0;24102:1;24093:6;:10;24085:64;;;;-1:-1:-1;;;24085:64:0;;11104:2:1;24085:64:0;;;11086:21:1;11143:2;11123:18;;;11116:30;11182:34;11162:18;;;11155:62;-1:-1:-1;;;11233:18:1;;;11226:39;11282:19;;24085:64:0;10902:405:1;24085:64:0;6382:7;6409:6;-1:-1:-1;;;;;24174:15:0;;;6409:6;;24174:15;;;;:32;;-1:-1:-1;6382:7:0;6409:6;-1:-1:-1;;;;;24193:13:0;;;6409:6;;24193:13;;24174:32;24170:345;;;24233:13;;-1:-1:-1;;;;;24225:21:0;;;24233:13;;24225:21;24222:282;;;-1:-1:-1;;;;;24275:14:0;;;;;;:10;:14;;;;;;;;24274:15;24266:45;;;;-1:-1:-1;;;24266:45:0;;8876:2:1;24266:45:0;;;8858:21:1;8915:2;8895:18;;;8888:30;-1:-1:-1;;;8934:18:1;;;8927:47;8991:18;;24266:45:0;8674:341:1;24266:45:0;24330:11;24338:2;24330:7;:11::i;:::-;24222:282;;;24374:13;;-1:-1:-1;;;;;24368:19:0;;;24374:13;;24368:19;24364:140;;;-1:-1:-1;;;;;24416:16:0;;;;;;:10;:16;;;;;;;;24415:17;24407:47;;;;-1:-1:-1;;;24407:47:0;;8876:2:1;24407:47:0;;;8858:21:1;8915:2;8895:18;;;8888:30;-1:-1:-1;;;8934:18:1;;;8927:47;8991:18;;24407:47:0;8674:341:1;24407:47:0;24473:13;24481:4;24473:7;:13::i;:::-;24536;;-1:-1:-1;;;;;24528:21:0;;;24536:13;;24528:21;:40;;;;-1:-1:-1;6382:7:0;6409:6;-1:-1:-1;;;;;24553:15:0;;;6409:6;;24553:15;;24528:40;:57;;;;-1:-1:-1;6382:7:0;6409:6;-1:-1:-1;;;;;24572:13:0;;;6409:6;;24572:13;;24528:57;24525:193;;;24637:15;;24609:25;24627:6;24609:13;24619:2;24609:9;:13::i;:::-;:17;;:25::i;:::-;:43;24601:105;;;;-1:-1:-1;;;24601:105:0;;12672:2:1;24601:105:0;;;12654:21:1;12711:2;12691:18;;;12684:30;12750:34;12730:18;;;12723:62;-1:-1:-1;;;12801:18:1;;;12794:47;12858:19;;24601:105:0;12470:413:1;24601:105:0;6382:7;6409:6;-1:-1:-1;;;;;24731:15:0;;;6409:6;;24731:15;;;;:32;;-1:-1:-1;6382:7:0;6409:6;-1:-1:-1;;;;;24750:13:0;;;6409:6;;24750:13;;24731:32;24728:139;;;24798:12;;24788:6;:22;;24780:75;;;;-1:-1:-1;;;24780:75:0;;9932:2:1;24780:75:0;;;9914:21:1;9971:2;9951:18;;;9944:30;10010:34;9990:18;;;9983:62;-1:-1:-1;;;10061:18:1;;;10054:38;10109:19;;24780:75:0;9730:404:1;24780:75:0;24879:28;24910:24;24928:4;24910:9;:24::i;:::-;25000:23;;-1:-1:-1;;;;;25067:24:0;;24945:28;25067:24;;;:18;:24;;;;;;24879:55;;-1:-1:-1;24976:47:0;;;;25049:4;;25067:24;;;:50;;-1:-1:-1;;;;;;25095:22:0;;;;;;:18;:22;;;;;;;;25067:50;25064:96;;;-1:-1:-1;25143:5:0;25064:96;25181:13;;-1:-1:-1;;;;;25173:21:0;;;25181:13;;25173:21;25170:148;;;25210:14;:12;:14::i;:::-;25249:10;;25239:7;:20;25290:16;;25274:13;:32;25170:148;25337:13;;-1:-1:-1;;;;;25331:19:0;;;25337:13;;25331:19;25328:148;;;25366:14;:12;:14::i;:::-;25405:11;;25395:7;:21;25447:17;;25431:13;:33;25328:148;25495:16;;-1:-1:-1;;;25495:16:0;;;;25494:17;:42;;;;-1:-1:-1;25515:21:0;;-1:-1:-1;;;25515:21:0;;;;25494:42;:65;;;;-1:-1:-1;25546:13:0;;-1:-1:-1;;;;;25540:19:0;;;25546:13;;25540:19;25494:65;25490:300;;;25580:23;25576:203;;;25647:23;;25624:46;;25727:32;25738:20;25727:10;:32::i;:::-;-1:-1:-1;;;;;25889:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;25917:22:0;;;;;;:18;:22;;;;;;;;25889:50;25886:96;;;-1:-1:-1;25965:5:0;25886:96;26003:13;;-1:-1:-1;;;;;25995:21:0;;;26003:13;;25995:21;25992:148;;;26032:14;:12;:14::i;:::-;26071:10;;26061:7;:20;26112:16;;26096:13;:32;25992:148;26159:13;;-1:-1:-1;;;;;26153:19:0;;;26159:13;;26153:19;26150:148;;;26188:14;:12;:14::i;:::-;26227:11;;26217:7;:21;26269:17;;26253:13;:33;26150:148;26310:38;26325:4;26330:2;26333:6;26340:7;26310:14;:38::i;:::-;23920:2436;;;23817:2539;;;:::o;2043:192::-;2129:7;2165:12;2157:6;;;;2149:29;;;;-1:-1:-1;;;2149:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2189:9:0;2201:5;2205:1;2201;:5;:::i;:::-;2189:17;2043:192;-1:-1:-1;;;;;2043:192:0:o;34332:163::-;34373:7;34394:15;34411;34430:19;:17;:19::i;:::-;34393:56;;-1:-1:-1;34393:56:0;-1:-1:-1;34467:20:0;34393:56;;34467:11;:20::i;:::-;34460:27;;;;34332:163;:::o;2503:132::-;2561:7;2588:39;2592:1;2595;2588:39;;;;;;;;;;;;;;;;;:3;:39::i;1710:181::-;1768:7;;1800:5;1804:1;1800;:5;:::i;:::-;1788:17;;1829:1;1824;:6;;1816:46;;;;-1:-1:-1;;;1816:46:0;;8164:2:1;1816:46:0;;;8146:21:1;8203:2;8183:18;;;8176:30;8242:29;8222:18;;;8215:57;8289:18;;1816:46:0;7962:351:1;33130:419:0;33189:7;33198;33207;33216;33225;33234;33255:23;33280:12;33294:18;33316:20;33328:7;33316:11;:20::i;:::-;33254:82;;;;;;33348:15;33365:23;33390:12;33406:50;33418:7;33427:4;33433:10;33445;:8;:10::i;:::-;33406:11;:50::i;:::-;33347:109;;;;-1:-1:-1;33347:109:0;;-1:-1:-1;33507:15:0;;-1:-1:-1;33524:4:0;;-1:-1:-1;33530:10:0;;-1:-1:-1;33130:419:0;;-1:-1:-1;;;;;33130:419:0:o;1899:136::-;1957:7;1984:43;1988:1;1991;1984:43;;;;;;;;;;;;;;;;;:3;:43::i;23665:144::-;23738:10;;23720:15;:28;23717:85;;;-1:-1:-1;;;;;23765:18:0;;;;;;:10;:18;;;;;:25;;-1:-1:-1;;23765:25:0;23786:4;23765:25;;;23717:85;23665:144;:::o;35853:250::-;35899:7;;:12;:34;;;;-1:-1:-1;35915:13:0;;:18;35899:34;35896:46;;;35853:250::o;35896:46::-;35980:7;;;35962:15;:25;36022:13;;;35998:21;:37;-1:-1:-1;36056:11:0;;;;36078:17;35853:250::o;26364:1779::-;18168:16;:23;;-1:-1:-1;;;;18168:23:0;-1:-1:-1;;;18168:23:0;;;26496:14:::1;::::0;26475:16:::1;::::0;18168:23;;26475:36:::1;::::0;:16;:20:::1;:36::i;:::-;26447:64;;26554:24;26581:36;26599:17;26581:13;;:17;;:36;;;;:::i;:::-;26554:63;;26640:21;26664:61;26711:13;;26664:42;26689:16;26664:20;:24;;:42;;;;:::i;:::-;:46:::0;::::1;:61::i;:::-;26640:85:::0;-1:-1:-1;26736:22:0::1;26761:39;:20:::0;26640:85;26761:24:::1;:39::i;:::-;26736:64:::0;-1:-1:-1;26865:12:0::1;26880:20;:13:::0;26898:1:::1;26880:17;:20::i;:::-;26865:35:::0;-1:-1:-1;26911:17:0::1;26931:23;:13:::0;26865:35;26931:17:::1;:23::i;:::-;26911:43:::0;-1:-1:-1;27267:21:0::1;27333:42;27350:24;:4:::0;27359:14;27350:8:::1;:24::i;:::-;27333:16;:42::i;:::-;27506:18;27527:41;:21;27553:14:::0;27527:25:::1;:41::i;:::-;27506:62:::0;-1:-1:-1;27579:22:0::1;27604:85;27642:46;27670:17:::0;27642:23:::1;:16:::0;27663:1:::1;27642:20;:23::i;:46::-;27604:33;:10:::0;27619:17;27604:14:::1;:33::i;:85::-;27579:110:::0;-1:-1:-1;27739:55:0::1;27752:9:::0;27763:30:::1;:10:::0;27579:110;27763:14:::1;:30::i;:::-;27739:12;:55::i;:::-;27807:25;27835:59;27876:17;27835:36;27854:16;;27835:14;:18;;:36;;;;:::i;:59::-;27965:16;::::0;27807:87;;-1:-1:-1;27944:56:0::1;::::0;-1:-1:-1;;;;;27965:16:0::1;27807:87:::0;27944:20:::1;:56::i;:::-;28071:14;::::0;28050:75:::1;::::0;-1:-1:-1;;;;;28071:14:0::1;28086:37;:14:::0;28105:17;28086:18:::1;:37::i;:::-;28050:20;:75::i;:::-;-1:-1:-1::0;;18214:16:0;:24;;-1:-1:-1;;;;18214:24:0;;;-1:-1:-1;;;;;;;;;26364:1779:0:o;29944:704::-;30055:7;30051:40;;30077:14;:12;:14::i;:::-;-1:-1:-1;;;;;30116:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30140:22:0;;;;;;:11;:22;;;;;;;;30139:23;30116:46;30112:467;;;30179:48;30201:6;30209:9;30220:6;30179:21;:48::i;:::-;30112:467;;;-1:-1:-1;;;;;30250:19:0;;;;;;:11;:19;;;;;;;;30249:20;:46;;;;-1:-1:-1;;;;;;30273:22:0;;;;;;:11;:22;;;;;;;;30249:46;30245:334;;;30312:46;30332:6;30340:9;30351:6;30312:19;:46::i;30245:334::-;-1:-1:-1;;;;;30380:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;30403:22:0;;;;;;:11;:22;;;;;;;;30380:45;30376:203;;;30442:48;30464:6;30472:9;30483:6;30442:21;:48::i;30376:203::-;30523:44;30541:6;30549:9;30560:6;30523:17;:44::i;:::-;30603:7;30599:41;;30625:15;36169;;36159:7;:25;36211:21;;36195:13;:37;36115:125;30625:15;29944:704;;;;:::o;34503:627::-;34600:7;;34636;;34666:9;:16;34553:7;;;;34600;;34685:2;-1:-1:-1;34658:55:0;;;;-1:-1:-1;;;34658:55:0;;9222:2:1;34658:55:0;;;9204:21:1;9261:2;9241:18;;;9234:30;-1:-1:-1;;;9280:18:1;;;9273:51;9341:18;;34658:55:0;9020:345:1;34658:55:0;34731:9;34726:289;34750:9;:16;34746:20;;34726:289;;;34816:7;34792;:21;34800:9;34810:1;34800:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34800:12:0;34792:21;;;;;;;;;;;;;:31;;:66;;;34851:7;34827;:21;34835:9;34845:1;34835:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34835:12:0;34827:21;;;;;;;;;;;;;:31;34792:66;34788:97;;;34868:7;;34877;;34860:25;;;;;;;34503:627;;:::o;34788:97::-;34910:34;34922:7;:21;34930:9;34940:1;34930:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34930:12:0;34922:21;;;;;;;;;;;;;34910:7;;:11;:34::i;:::-;34900:44;;34969:34;34981:7;:21;34989:9;34999:1;34989:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34989:12:0;34981:21;;;;;;;;;;;;;34969:7;;:11;:34::i;:::-;34959:44;-1:-1:-1;34768:3:0;;;;:::i;:::-;;;;34726:289;;;-1:-1:-1;35051:7:0;;35039;;:20;;:11;:20::i;:::-;35029:7;:30;35025:61;;;35069:7;;35078;;35061:25;;;;;;34503:627;;:::o;35025:61::-;35105:7;;35114;;-1:-1:-1;34503:627:0;-1:-1:-1;34503:627:0:o;2643:278::-;2729:7;2764:12;2757:5;2749:28;;;;-1:-1:-1;;;2749:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2788:9:0;2800:5;2804:1;2800;:5;:::i;33557:330::-;33617:7;33626;33635;33655:12;33670:24;33686:7;33670:15;:24::i;:::-;33655:39;;33705:18;33726:30;33748:7;33726:21;:30::i;:::-;33705:51;-1:-1:-1;33767:23:0;33793:33;33705:51;33793:17;:7;33805:4;33793:11;:17::i;:::-;:21;;:33::i;:::-;33767:59;33862:4;;-1:-1:-1;33868:10:0;;-1:-1:-1;33557:330:0;;-1:-1:-1;;;33557:330:0:o;33895:429::-;34010:7;;;;34066:24;:7;34078:11;34066;:24::i;:::-;34048:42;-1:-1:-1;34101:12:0;34116:21;:4;34125:11;34116:8;:21::i;:::-;34101:36;-1:-1:-1;34148:18:0;34169:27;:10;34184:11;34169:14;:27::i;:::-;34148:48;-1:-1:-1;34207:23:0;34233:33;34148:48;34233:17;:7;34245:4;34233:11;:17::i;:33::-;34285:7;;;;-1:-1:-1;34311:4:0;;-1:-1:-1;33895:429:0;;-1:-1:-1;;;;;;;33895:429:0:o;2243:250::-;2301:7;2325:6;2321:47;;-1:-1:-1;2355:1:0;2348:8;;2321:47;2380:9;2392:5;2396:1;2392;:5;:::i;:::-;2380:17;-1:-1:-1;2425:1:0;2416:5;2420:1;2380:17;2416:5;:::i;:::-;:10;2408:56;;;;-1:-1:-1;;;2408:56:0;;10341:2:1;2408:56:0;;;10323:21:1;10380:2;10360:18;;;10353:30;10419:34;10399:18;;;10392:62;-1:-1:-1;;;10470:18:1;;;10463:31;10511:19;;2408:56:0;10139:397:1;28155:666:0;28305:16;;;28319:1;28305:16;;;;;;;;28281:21;;28305:16;;;;;;;;;;-1:-1:-1;28305:16:0;28281:40;;28350:4;28332;28337:1;28332:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28332:23:0;;;:7;;;;;;;;;;:23;;;;28376:15;;:22;;;-1:-1:-1;;;28376:22:0;;;;:15;;;;;:20;;:22;;;;;28332:7;;28376:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28366:4;28371:1;28366:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28366:32:0;;;:7;;;;;;;;;;:32;;;;28443:15;28411:62;;28428:4;;28443:15;28461:11;28411:8;:62::i;:::-;28512:15;;:240;;-1:-1:-1;;;28512:240:0;;-1:-1:-1;;;;;28512:15:0;;;;:66;;:240;;28593:11;;28512:15;;28663:4;;28690;;28726:15;;28512:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28778:35;28795:11;28808:4;28778:35;;;;;;;:::i;:::-;;;;;;;;28210:611;28155:666;:::o;29423:513::-;29603:15;;29571:62;;29588:4;;-1:-1:-1;;;;;29603:15:0;29621:11;29571:8;:62::i;:::-;29676:15;;-1:-1:-1;;;;;29676:15:0;:31;29715:9;29748:4;29768:11;29676:15;;29880:7;6382;6409:6;-1:-1:-1;;;;;6409:6:0;;6344:79;29880:7;29676:252;;;;;;-1:-1:-1;;;;;;29676:252:0;;;-1:-1:-1;;;;;5055:15:1;;;29676:252:0;;;5037:34:1;5087:18;;;5080:34;;;;5130:18;;;5123:34;;;;5173:18;;;5166:34;5237:15;;;5216:19;;;5209:44;29902:15:0;5269:19:1;;;5262:35;4971:19;;29676:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29423:513;;:::o;40165:126::-;40257:26;;-1:-1:-1;;;;;40257:18:0;;;:26;;;;;40276:6;;40257:26;;;;40276:6;40257:18;:26;;;;;;;;;;;;;;;;;;;;;40165:126;;:::o;31757:563::-;31860:15;31877:23;31902:12;31916:23;31941:12;31955:18;31977:19;31988:7;31977:10;:19::i;:::-;-1:-1:-1;;;;;32022:15:0;;;;;;:7;:15;;;;;;31859:137;;-1:-1:-1;31859:137:0;;-1:-1:-1;31859:137:0;;-1:-1:-1;31859:137:0;-1:-1:-1;31859:137:0;-1:-1:-1;31859:137:0;-1:-1:-1;32022:28:0;;32042:7;32022:19;:28::i;:::-;-1:-1:-1;;;;;32004:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32079:7;:15;;;;:28;;32099:7;32079:19;:28::i;:::-;-1:-1:-1;;;;;32061:15:0;;;;;;;:7;:15;;;;;;:46;;;;32139:18;;;;;;;:39;;32162:15;32139:22;:39::i;:::-;-1:-1:-1;;;;;32118:18:0;;;;;;:7;:18;;;;;:60;32192:26;32207:10;32192:14;:26::i;:::-;32229:23;32241:4;32247;32229:11;:23::i;:::-;32285:9;-1:-1:-1;;;;;32268:44:0;32277:6;-1:-1:-1;;;;;32268:44:0;;32296:15;32268:44;;;;14211:25:1;;14199:2;14184:18;;14065:177;32268:44:0;;;;;;;;31848:472;;;;;;31757:563;;;:::o;31166:583::-;31267:15;31284:23;31309:12;31323:23;31348:12;31362:18;31384:19;31395:7;31384:10;:19::i;:::-;-1:-1:-1;;;;;31429:15:0;;;;;;:7;:15;;;;;;31266:137;;-1:-1:-1;31266:137:0;;-1:-1:-1;31266:137:0;;-1:-1:-1;31266:137:0;-1:-1:-1;31266:137:0;-1:-1:-1;31266:137:0;-1:-1:-1;31429:28:0;;31266:137;31429:19;:28::i;:::-;-1:-1:-1;;;;;31411:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;31489:18;;;;;:7;:18;;;;;:39;;31512:15;31489:22;:39::i;:::-;-1:-1:-1;;;;;31468:18:0;;;;;;:7;:18;;;;;;;;:60;;;;31560:7;:18;;;;:39;;31583:15;31560:22;:39::i;32328:639::-;32431:15;32448:23;32473:12;32487:23;32512:12;32526:18;32548:19;32559:7;32548:10;:19::i;:::-;-1:-1:-1;;;;;32593:15:0;;;;;;:7;:15;;;;;;32430:137;;-1:-1:-1;32430:137:0;;-1:-1:-1;32430:137:0;;-1:-1:-1;32430:137:0;-1:-1:-1;32430:137:0;-1:-1:-1;32430:137:0;-1:-1:-1;32593:28:0;;32613:7;32593:19;:28::i;:::-;-1:-1:-1;;;;;32575:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32650:7;:15;;;;:28;;32670:7;32650:19;:28::i;30656:502::-;30755:15;30772:23;30797:12;30811:23;30836:12;30850:18;30872:19;30883:7;30872:10;:19::i;:::-;-1:-1:-1;;;;;30920:15:0;;;;;;:7;:15;;;;;;30754:137;;-1:-1:-1;30754:137:0;;-1:-1:-1;30754:137:0;;-1:-1:-1;30754:137:0;-1:-1:-1;30754:137:0;-1:-1:-1;30754:137:0;-1:-1:-1;30920:28:0;;30754:137;30920:19;:28::i;35509:154::-;35573:7;35600:55;35639:5;35600:20;35612:7;;35600;:11;;:20;;;;:::i;35675:166::-;35745:7;35772:61;35817:5;35772:26;35784:13;;35772:7;:11;;:26;;;;:::i;35142:355::-;35205:19;35228:10;:8;:10::i;:::-;35205:33;-1:-1:-1;35249:18:0;35270:27;:10;35205:33;35270:14;:27::i;:::-;35349:4;35333:22;;;;:7;:22;;;;;;35249:48;;-1:-1:-1;35333:38:0;;35249:48;35333:26;:38::i;:::-;35324:4;35308:22;;;;:7;:22;;;;;;;;:63;;;;35385:11;:26;;;;;;35382:107;;;35467:4;35451:22;;;;:7;:22;;;;;;:38;;35478:10;35451:26;:38::i;:::-;35442:4;35426:22;;;;:7;:22;;;;;:63;35194:303;;35142:355;:::o;32975:147::-;33053:7;;:17;;33065:4;33053:11;:17::i;:::-;33043:7;:27;33094:10;;:20;;33109:4;33094:14;:20::i;:::-;33081:10;:33;-1:-1:-1;;32975:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;179:247;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:689::-;1956:6;1964;1972;2025:2;2013:9;2004:7;2000:23;1996:32;1993:52;;;2041:1;2038;2031:12;1993:52;2081:9;2068:23;2110:18;2151:2;2143:6;2140:14;2137:34;;;2167:1;2164;2157:12;2137:34;2205:6;2194:9;2190:22;2180:32;;2250:7;2243:4;2239:2;2235:13;2231:27;2221:55;;2272:1;2269;2262:12;2221:55;2312:2;2299:16;2338:2;2330:6;2327:14;2324:34;;;2354:1;2351;2344:12;2324:34;2409:7;2402:4;2392:6;2389:1;2385:14;2381:2;2377:23;2373:34;2370:47;2367:67;;;2430:1;2427;2420:12;2367:67;2461:4;2453:13;;;;2485:6;;-1:-1:-1;2523:20:1;;;;2510:34;;1861:689;-1:-1:-1;;;;1861:689:1:o;2555:180::-;2611:6;2664:2;2652:9;2643:7;2639:23;2635:32;2632:52;;;2680:1;2677;2670:12;2632:52;2703:26;2719:9;2703:26;:::i;2740:180::-;2799:6;2852:2;2840:9;2831:7;2827:23;2823:32;2820:52;;;2868:1;2865;2858:12;2820:52;-1:-1:-1;2891:23:1;;2740:180;-1:-1:-1;2740:180:1:o;2925:248::-;2990:6;2998;3051:2;3039:9;3030:7;3026:23;3022:32;3019:52;;;3067:1;3064;3057:12;3019:52;3103:9;3090:23;3080:33;;3132:35;3163:2;3152:9;3148:18;3132:35;:::i;:::-;3122:45;;2925:248;;;;;:::o;3178:306::-;3266:6;3274;3282;3335:2;3323:9;3314:7;3310:23;3306:32;3303:52;;;3351:1;3348;3341:12;3303:52;3380:9;3374:16;3364:26;;3430:2;3419:9;3415:18;3409:25;3399:35;;3474:2;3463:9;3459:18;3453:25;3443:35;;3178:306;;;;;:::o;3489:461::-;3542:3;3580:5;3574:12;3607:6;3602:3;3595:19;3633:4;3662:2;3657:3;3653:12;3646:19;;3699:2;3692:5;3688:14;3720:1;3730:195;3744:6;3741:1;3738:13;3730:195;;;3809:13;;-1:-1:-1;;;;;3805:39:1;3793:52;;3865:12;;;;3900:15;;;;3841:1;3759:9;3730:195;;;-1:-1:-1;3941:3:1;;3489:461;-1:-1:-1;;;;;3489:461:1:o;5735:597::-;5847:4;5876:2;5905;5894:9;5887:21;5937:6;5931:13;5980:6;5975:2;5964:9;5960:18;5953:34;6005:1;6015:140;6029:6;6026:1;6023:13;6015:140;;;6124:14;;;6120:23;;6114:30;6090:17;;;6109:2;6086:26;6079:66;6044:10;;6015:140;;;6173:6;6170:1;6167:13;6164:91;;;6243:1;6238:2;6229:6;6218:9;6214:22;6210:31;6203:42;6164:91;-1:-1:-1;6316:2:1;6295:15;-1:-1:-1;;6291:29:1;6276:45;;;;6323:2;6272:54;;5735:597;-1:-1:-1;;;5735:597:1:o;10541:356::-;10743:2;10725:21;;;10762:18;;;10755:30;10821:34;10816:2;10801:18;;10794:62;10888:2;10873:18;;10541:356::o;14247:332::-;14454:6;14443:9;14436:25;14497:2;14492;14481:9;14477:18;14470:30;14417:4;14517:56;14569:2;14558:9;14554:18;14546:6;14517:56;:::i;:::-;14509:64;14247:332;-1:-1:-1;;;;14247:332:1:o;14584:582::-;14883:6;14872:9;14865:25;14926:6;14921:2;14910:9;14906:18;14899:34;14969:3;14964:2;14953:9;14949:18;14942:31;14846:4;14990:57;15042:3;15031:9;15027:19;15019:6;14990:57;:::i;:::-;-1:-1:-1;;;;;15083:32:1;;;;15078:2;15063:18;;15056:60;-1:-1:-1;15147:3:1;15132:19;15125:35;14982:65;14584:582;-1:-1:-1;;;14584:582:1:o;15360:128::-;15400:3;15431:1;15427:6;15424:1;15421:13;15418:39;;;15437:18;;:::i;:::-;-1:-1:-1;15473:9:1;;15360:128::o;15493:217::-;15533:1;15559;15549:132;;15603:10;15598:3;15594:20;15591:1;15584:31;15638:4;15635:1;15628:15;15666:4;15663:1;15656:15;15549:132;-1:-1:-1;15695:9:1;;15493:217::o;15715:168::-;15755:7;15821:1;15817;15813:6;15809:14;15806:1;15803:21;15798:1;15791:9;15784:17;15780:45;15777:71;;;15828:18;;:::i;:::-;-1:-1:-1;15868:9:1;;15715:168::o;15888:125::-;15928:4;15956:1;15953;15950:8;15947:34;;;15961:18;;:::i;:::-;-1:-1:-1;15998:9:1;;15888:125::o;16018:380::-;16097:1;16093:12;;;;16140;;;16161:61;;16215:4;16207:6;16203:17;16193:27;;16161:61;16268:2;16260:6;16257:14;16237:18;16234:38;16231:161;;;16314:10;16309:3;16305:20;16302:1;16295:31;16349:4;16346:1;16339:15;16377:4;16374:1;16367:15;16231:161;;16018:380;;;:::o;16403:135::-;16442:3;-1:-1:-1;;16463:17:1;;16460:43;;;16483:18;;:::i;:::-;-1:-1:-1;16530:1:1;16519:13;;16403:135::o;16543:127::-;16604:10;16599:3;16595:20;16592:1;16585:31;16635:4;16632:1;16625:15;16659:4;16656:1;16649:15;16675:127;16736:10;16731:3;16727:20;16724:1;16717:31;16767:4;16764:1;16757:15;16791:4;16788:1;16781:15;16807:127;16868:10;16863:3;16859:20;16856:1;16849:31;16899:4;16896:1;16889:15;16923:4;16920:1;16913:15;17071:131;-1:-1:-1;;;;;17146:31:1;;17136:42;;17126:70;;17192:1;17189;17182:12

Swarm Source

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