ETH Price: $2,508.23 (-0.66%)

Token

XPRO (XPRO)
 

Overview

Max Total Supply

500,000,000,000,000 XPRO

Holders

89

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000487286 XPRO

Value
$0.00
0x835804dAFB911451EBAc7294895802BAFb90A9C3
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:
XPRO

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-28
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;

abstract contract Context {

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

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

interface IERC20 {

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {

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

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

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

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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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

    bool public isLaunch = false;
    address payable public marketingWalletAddress = payable(0x0d3097bf1fcb28cb40a452B438A0ca0785D0A238); 
    address payable public teamWalletAddress = payable(0x0d3097bf1fcb28cb40a452B438A0ca0785D0A238); 
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    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 = 0;
    uint256 public _buyMarketingFee = 1;
    uint256 public _buyTeamFee = 0;
    
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 1;
    uint256 public _sellTeamFee = 0;
    
    uint256 public _sellReserveFee = 0;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 100;
    uint256 public _teamShare = 0;

    uint256 public _totalTaxIfBuying = 1;
    uint256 public _totalTaxIfSelling = 1;
    uint256 public _totalDistributionShares = 2;

    uint256 private _totalSupply = 500000000000000 * 10**_decimals;
    uint256 public _maxTxAmount =  5000000000000 * 10**_decimals; 
    uint256 public _walletMax =    5000000000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 500000000000 * 5 **_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 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 Launch() public onlyOwner {
        isLaunch = true;
    }

    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 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 setTeamWalletAddress(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");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if (!isExcludedFromFee[sender] && !isExcludedFromFee[recipient] && _sellReserveFee > 0) {
                uint _sellReserveFeeAmount = amount.div(100).mul(_sellReserveFee);
                amount = amount.sub(_sellReserveFeeAmount);
            }

            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;
            if (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) {
                finalAmount = amount;
            } else {
                require(isLaunch, "Swap not open");
                finalAmount = 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
            deadAddress,
            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":"Launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"_sellReserveFee","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":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunch","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":"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":"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":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","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":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600460a0908152635850524f60e01b60c052600390620000259082620006ba565b50604080518082019091526004808252635850524f60e01b6020830152906200004f9082620006ba565b5060058054750d3097bf1fcb28cb40a452b438a0ca0785d0a23800096001600160b01b0319909116179055600680546001600160a01b031916730d3097bf1fcb28cb40a452b438a0ca0785d0a23817905561dead6080525f600d8190556001600e819055600f82905560108290556011819055601282905560138290556014829055606460155560169190915560178190556018556002601955620000f76009600a6200088f565b6200010a906601c6bf52634000620008a6565b601a55600554620001209060ff16600a6200088f565b620001329065048c27395000620008a6565b601b55600554620001489060ff16600a6200088f565b6200015a9065048c27395000620008a6565b601c5560058054620001729160ff909116906200088f565b620001839064746a528800620008a6565b601d55601f805462ffffff60a81b19166201000160a81b179055348015620001a9575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002659190620008c0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d79190620008c0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000322573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003489190620008c0565b601f80546001600160a01b039283166001600160a01b031991821617909155601e80549284169290911682179055601a54305f90815260086020908152604080832094835293905291822055600190600990620003ac5f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526009909252902080549091166001179055600f54600e54600d546200040d9291620004069190620005ac565b90620005ac565b6017556012546011546010546200042b9291620004069190620005ac565b601855601654601554601454620004499291620004069190620005ac565b6019556001600a5f620004635f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055601f549091168152600a90925280822080548416600190811790915530835290822080549093168117909255600b90620004d15f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055308152600b8452828120805486166001908117909155601f549092168152600c909352908220805490931617909155601a54906007906200053c3390565b6001600160a01b0316815260208101919091526040015f2055336001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601a546040516200059d91815260200190565b60405180910390a350620008fe565b5f80620005ba8385620008e8565b905083811015620006115760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200064357607f821691505b6020821081036200066257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620006b5575f81815260208120601f850160051c81016020861015620006905750805b601f850160051c820191505b81811015620006b1578281556001016200069c565b5050505b505050565b81516001600160401b03811115620006d657620006d66200061a565b620006ee81620006e784546200062e565b8462000668565b602080601f83116001811462000724575f84156200070c5750858301515b5f19600386901b1c1916600185901b178555620006b1565b5f85815260208120601f198616915b82811015620007545788860151825594840194600190910190840162000733565b50858210156200077257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620007d657815f1904821115620007ba57620007ba62000782565b80851615620007c857918102915b93841c93908002906200079b565b509250929050565b5f82620007ee5750600162000614565b81620007fc57505f62000614565b8160018114620008155760028114620008205762000840565b600191505062000614565b60ff84111562000834576200083462000782565b50506001821b62000614565b5060208310610133831016604e8410600b841016171562000865575081810a62000614565b62000871838362000796565b805f190482111562000887576200088762000782565b029392505050565b5f6200089f60ff841683620007de565b9392505050565b808202811582820484141762000614576200061462000782565b5f60208284031215620008d1575f80fd5b81516001600160a01b038116811462000611575f80fd5b8082018082111562000614576200061462000782565b6080516127c5620009255f395f81816104fc01528181610cf0015261233801526127c55ff3fe6080604052600436106103a0575f3560e01c80638b42507f116101de578063c860795211610108578063ec28438a1161009d578063f2fde38b1161006d578063f2fde38b14610a86578063f5d588f514610aa5578063f84ba65d14610ac3578063f872858a14610ae2575f80fd5b8063ec28438a14610a14578063ef422a1814610a33578063f0cd1dac14610a52578063f1d5f51714610a67575f80fd5b8063da00097d116100d8578063da00097d1461097c578063dc44b6a01461099c578063dd467064146109b1578063dd62ed3e146109d0575f80fd5b8063c8607952146108ff578063c867d60b14610914578063cab0347114610942578063d158272d14610957575f80fd5b8063a5d69d1f1161017e578063c469b6dd1161014e578063c469b6dd14610897578063c49b9a80146108ac578063c5d24189146108cb578063c816841b146108e0575f80fd5b8063a5d69d1f14610830578063a69df4b51461084f578063a83f53a714610863578063a9059cbb14610878575f80fd5b806395d89b41116101b957806395d89b41146107d4578063a073d37f146107e8578063a08e671f146107fc578063a457c2d714610811575f80fd5b80638b42507f146107765780638da5cb5b146107a4578063914eb66a146107c0575f80fd5b80633ecad271116102ca578063602bc62b1161025f578063807c2d9c1161022f578063807c2d9c1461071857806382eefb431461072d578063844d591c1461074257806388790a6814610761575f80fd5b8063602bc62b146106a657806361a23c69146106ba57806370a08231146106cf5780637d1db4a514610703575f80fd5b806355724fc21161029a57806355724fc21461064b578063557ed1ba1461066057806357a5802f146106725780635881f3ef14610687575f80fd5b80633ecad271146105b05780634a74bb02146105de5780634cb80fd5146105fe5780635342acb41461061d575f80fd5b806323b872dd116103405780632c4b2334116103105780632c4b233414610532578063313ce5671461055157806339509351146105725780633b97084a14610591575f80fd5b806323b872dd146104ad5780632563ae83146104cc57806327c8f835146104eb5780632b112e491461051e575f80fd5b80631245e3471161037b5780631245e3471461041a5780631694505e1461045157806318160ddd146104705780632198cf6c1461048e575f80fd5b806302ac8168146103ab57806306fdde03146103c1578063095ea7b3146103eb575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103bf610b02565b005b3480156103cc575f80fd5b506103d5610b45565b6040516103e291906123bb565b60405180910390f35b3480156103f6575f80fd5b5061040a61040536600461241d565b610bd5565b60405190151581526020016103e2565b348015610425575f80fd5b50600654610439906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b34801561045c575f80fd5b50601e54610439906001600160a01b031681565b34801561047b575f80fd5b50601a545b6040519081526020016103e2565b348015610499575f80fd5b506103bf6104a836600461245b565b610beb565b3480156104b8575f80fd5b5061040a6104c736600461248e565b610c3e565b3480156104d7575f80fd5b506103bf6104e63660046124cc565b610ca7565b3480156104f6575f80fd5b506104397f000000000000000000000000000000000000000000000000000000000000000081565b348015610529575f80fd5b50610480610cee565b34801561053d575f80fd5b506103bf61054c3660046124e5565b610d37565b34801561055c575f80fd5b5060055460405160ff90911681526020016103e2565b34801561057d575f80fd5b5061040a61058c36600461241d565b610d82565b34801561059c575f80fd5b506103bf6105ab366004612500565b610db7565b3480156105bb575f80fd5b5061040a6105ca3660046124e5565b600c6020525f908152604090205460ff1681565b3480156105e9575f80fd5b50601f5461040a90600160a81b900460ff1681565b348015610609575f80fd5b506103bf6106183660046124e5565b610de5565b348015610628575f80fd5b5061040a6106373660046124e5565b60096020525f908152604090205460ff1681565b348015610656575f80fd5b5061048060135481565b34801561066b575f80fd5b5042610480565b34801561067d575f80fd5b5061048060145481565b348015610692575f80fd5b506104396106a13660046124e5565b610e38565b3480156106b1575f80fd5b50600254610480565b3480156106c5575f80fd5b5061048060155481565b3480156106da575f80fd5b506104806106e93660046124e5565b6001600160a01b03165f9081526007602052604090205490565b34801561070e575f80fd5b50610480601b5481565b348015610723575f80fd5b50610480601c5481565b348015610738575f80fd5b5061048060185481565b34801561074d575f80fd5b506103bf61075c36600461245b565b611160565b34801561076c575f80fd5b5061048060105481565b348015610781575f80fd5b5061040a6107903660046124e5565b600b6020525f908152604090205460ff1681565b3480156107af575f80fd5b505f546001600160a01b0316610439565b3480156107cb575f80fd5b506103bf6111b3565b3480156107df575f80fd5b506103d5611217565b3480156107f3575f80fd5b50601d54610480565b348015610807575f80fd5b5061048060195481565b34801561081c575f80fd5b5061040a61082b36600461241d565b611226565b34801561083b575f80fd5b506103bf61084a3660046124cc565b611273565b34801561085a575f80fd5b506103bf6112ba565b34801561086e575f80fd5b5061048060165481565b348015610883575f80fd5b5061040a61089236600461241d565b6113bd565b3480156108a2575f80fd5b50610480600f5481565b3480156108b7575f80fd5b506103bf6108c63660046124cc565b6113c9565b3480156108d6575f80fd5b50610480600e5481565b3480156108eb575f80fd5b50601f54610439906001600160a01b031681565b34801561090a575f80fd5b5061048060115481565b34801561091f575f80fd5b5061040a61092e3660046124e5565b600a6020525f908152604090205460ff1681565b34801561094d575f80fd5b5061048060125481565b348015610962575f80fd5b50600554610439906201000090046001600160a01b031681565b348015610987575f80fd5b50601f5461040a90600160b01b900460ff1681565b3480156109a7575f80fd5b50610480600d5481565b3480156109bc575f80fd5b506103bf6109cb366004612500565b61144a565b3480156109db575f80fd5b506104806109ea366004612517565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b348015610a1f575f80fd5b506103bf610a2e366004612500565b6114cb565b348015610a3e575f80fd5b506103bf610a4d36600461245b565b6114f9565b348015610a5d575f80fd5b5061048060175481565b348015610a72575f80fd5b506103bf610a81366004612500565b61154c565b348015610a91575f80fd5b506103bf610aa03660046124e5565b61157a565b348015610ab0575f80fd5b5060055461040a90610100900460ff1681565b348015610ace575f80fd5b506103bf610add36600461245b565b61164e565b348015610aed575f80fd5b50601f5461040a90600160b81b900460ff1681565b5f546001600160a01b03163314610b345760405162461bcd60e51b8152600401610b2b9061254e565b60405180910390fd5b6005805461ff001916610100179055565b606060038054610b5490612583565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8090612583565b8015610bcb5780601f10610ba257610100808354040283529160200191610bcb565b820191905f5260205f20905b815481529060010190602001808311610bae57829003601f168201915b5050505050905090565b5f610be13384846116a1565b5060015b92915050565b5f546001600160a01b03163314610c145760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b5f610c4a8484846117c4565b50610c9c8433610c9785604051806060016040528060288152602001612723602891396001600160a01b038a165f9081526008602090815260408083203384529091529020549190611c50565b6116a1565b5060015b9392505050565b5f546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610b2b9061254e565b601f8054911515600160b81b0260ff60b81b19909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f90815260076020526040812054601a54610d3291611c88565b905090565b5f546001600160a01b03163314610d605760405162461bcd60e51b8152600401610b2b9061254e565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b335f8181526008602090815260408083206001600160a01b03871684529091528120549091610be1918590610c979086611cc9565b5f546001600160a01b03163314610de05760405162461bcd60e51b8152600401610b2b9061254e565b601d55565b5f546001600160a01b03163314610e0e5760405162461bcd60e51b8152600401610b2b9061254e565b600580546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b5f80546001600160a01b03163314610e625760405162461bcd60e51b8152600401610b2b9061254e565b5f829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec691906125bb565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3591906125bb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa291906125bb565b91506001600160a01b0382166110f257806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101291906125bb565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561105d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108191906125bb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156110cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ef91906125bb565b91505b601f80546001600160a01b03199081166001600160a01b038581169182178455601e8054909316948116949094179091555f908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b5f546001600160a01b031633146111895760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146111dc5760405162461bcd60e51b8152600401610b2b9061254e565b5f805460405161dead926001600160a01b03909216915f8051602061274b83398151915291a35f80546001600160a01b03191661dead179055565b606060048054610b5490612583565b5f610be13384610c978560405180606001604052806025815260200161276b60259139335f9081526008602090815260408083206001600160a01b038d1684529091529020549190611c50565b5f546001600160a01b0316331461129c5760405162461bcd60e51b8152600401610b2b9061254e565b601f8054911515600160b01b0260ff60b01b19909216919091179055565b6001546001600160a01b031633146113205760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b2b565b60025442116113715760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b2b565b6001545f80546040516001600160a01b0393841693909116915f8051602061274b83398151915291a36001545f80546001600160a01b0319166001600160a01b03909216919091179055565b5f610c9c3384846117c4565b5f546001600160a01b031633146113f25760405162461bcd60e51b8152600401610b2b9061254e565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061143f90831515815260200190565b60405180910390a150565b5f546001600160a01b031633146114735760405162461bcd60e51b8152600401610b2b9061254e565b5f8054600180546001600160a01b03199081166001600160a01b038416179091551690556114a181426125ea565b6002555f80546040516001600160a01b03909116905f8051602061274b833981519152908390a350565b5f546001600160a01b031633146114f45760405162461bcd60e51b8152600401610b2b9061254e565b601b55565b5f546001600160a01b031633146115225760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146115755760405162461bcd60e51b8152600401610b2b9061254e565b601c55565b5f546001600160a01b031633146115a35760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b0381166116085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2b565b5f80546040516001600160a01b03808516939216915f8051602061274b83398151915291a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146116775760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b0383166117035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b2b565b6001600160a01b0382166117645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b2b565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b0384166118295760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b2b565b6001600160a01b03831661188b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b2b565b601f54600160a01b900460ff16156118af576118a8848484611d27565b9050610ca0565b6001600160a01b0384165f9081526009602052604090205460ff161580156118ef57506001600160a01b0383165f9081526009602052604090205460ff16155b80156118fc57505f601354115b1561192b576013545f9061191b90611915856064611e0a565b90611e4b565b90506119278382611c88565b9250505b6001600160a01b0384165f908152600b602052604090205460ff1615801561196b57506001600160a01b0383165f908152600b602052604090205460ff16155b156119d357601b548211156119d35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b2b565b305f90815260076020526040902054601d5481108015908190611a005750601f54600160a01b900460ff16155b8015611a2457506001600160a01b0386165f908152600c602052604090205460ff16155b8015611a395750601f54600160a81b900460ff165b15611a5f57601f54600160b01b900460ff1615611a5657601d5491505b611a5f82611ec9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f90815260079091529190912054611ab0918690611c50565b6001600160a01b0387165f90815260076020908152604080832093909355600990529081205460ff1680611afb57506001600160a01b0386165f9081526009602052604090205460ff165b15611b07575083611b5c565b600554610100900460ff16611b4e5760405162461bcd60e51b815260206004820152600d60248201526c29bbb0b8103737ba1037b832b760991b6044820152606401610b2b565b611b59878787611ffd565b90505b601f54600160b81b900460ff168015611b8d57506001600160a01b0386165f908152600a602052604090205460ff16155b15611bc757601c54611bbd82611bb7896001600160a01b03165f9081526007602052604090205490565b90611cc9565b1115611bc7575f80fd5b6001600160a01b0386165f90815260076020526040902054611be99082611cc9565b6001600160a01b038088165f8181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c3c9085815260200190565b60405180910390a360019350505050610ca0565b5f8184841115611c735760405162461bcd60e51b8152600401610b2b91906123bb565b505f611c7f84866125fd565b95945050505050565b5f610ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c50565b5f80611cd583856125ea565b905083811015610ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b2b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600790915291822054611d77918490611c50565b6001600160a01b038086165f908152600760205260408082209390935590851681522054611da59083611cc9565b6001600160a01b038085165f8181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df89086815260200190565b60405180910390a35060019392505050565b5f610ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120ff565b5f825f03611e5a57505f610be5565b5f611e658385612610565b905082611e728583612627565b14610ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2b565b601f805460ff60a01b1916600160a01b1790556019546014545f91611efe91600291611ef89182908790611e4b565b90611e0a565b90505f611f0b8383611c88565b9050611f168161212b565b60145447905f90611f3590611f2c906002611e0a565b60195490611c88565b90505f611f566002611ef884611ef860145488611e4b90919063ffffffff16565b90505f611f7283611ef860165487611e4b90919063ffffffff16565b90505f611f8982611f838786611c88565b90611c88565b90508015611fad57600554611fad906201000090046001600160a01b0316826122b4565b8115611fc957600654611fc9906001600160a01b0316836122b4565b5f83118015611fd757505f87115b15611fe657611fe687846122ec565b5050601f805460ff60a01b19169055505050505050565b6001600160a01b0383165f908152600c6020526040812054819060ff1615612040576120396064611ef860175486611e4b90919063ffffffff16565b905061207d565b6001600160a01b0384165f908152600c602052604090205460ff161561207d5761207a6064611ef860185486611e4b90919063ffffffff16565b90505b80156120f557305f9081526007602052604090205461209c9082611cc9565b305f81815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120ec9085815260200190565b60405180910390a35b611c7f8382611c88565b5f818361211f5760405162461bcd60e51b8152600401610b2b91906123bb565b505f611c7f8486612627565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061215e5761215e612646565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d991906125bb565b816001815181106121ec576121ec612646565b6001600160a01b039283166020918202929092010152601e5461221291309116846116a1565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061224a9085905f9086903090429060040161269c565b5f604051808303815f87803b158015612261575f80fd5b505af1158015612273573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516122a89291906126d7565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156122e7573d5f803e3d5ffd5b505050565b601e546123049030906001600160a01b0316846116a1565b601e5460405163f305d71960e01b8152306004820152602481018490525f6044820181905260648201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af115801561238f573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906123b491906126f7565b5050505050565b5f6020808352835180828501525f5b818110156123e6578581018301518582016040015282016123ca565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461241a575f80fd5b50565b5f806040838503121561242e575f80fd5b823561243981612406565b946020939093013593505050565b80358015158114612456575f80fd5b919050565b5f806040838503121561246c575f80fd5b823561247781612406565b915061248560208401612447565b90509250929050565b5f805f606084860312156124a0575f80fd5b83356124ab81612406565b925060208401356124bb81612406565b929592945050506040919091013590565b5f602082840312156124dc575f80fd5b610ca082612447565b5f602082840312156124f5575f80fd5b8135610ca081612406565b5f60208284031215612510575f80fd5b5035919050565b5f8060408385031215612528575f80fd5b823561253381612406565b9150602083013561254381612406565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061259757607f821691505b6020821081036125b557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156125cb575f80fd5b8151610ca081612406565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610be557610be56125d6565b81810381811115610be557610be56125d6565b8082028115828204841417610be557610be56125d6565b5f8261264157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156126915781516001600160a01b03168752958201959082019060010161266c565b509495945050505050565b85815284602082015260a060408201525f6126ba60a083018661265a565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f6126ef604083018461265a565b949350505050565b5f805f60608486031215612709575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a22258aab0a50a7b71205f372168800e797945703271972565e1ddaa414acda664736f6c63430008150033

Deployed Bytecode

0x6080604052600436106103a0575f3560e01c80638b42507f116101de578063c860795211610108578063ec28438a1161009d578063f2fde38b1161006d578063f2fde38b14610a86578063f5d588f514610aa5578063f84ba65d14610ac3578063f872858a14610ae2575f80fd5b8063ec28438a14610a14578063ef422a1814610a33578063f0cd1dac14610a52578063f1d5f51714610a67575f80fd5b8063da00097d116100d8578063da00097d1461097c578063dc44b6a01461099c578063dd467064146109b1578063dd62ed3e146109d0575f80fd5b8063c8607952146108ff578063c867d60b14610914578063cab0347114610942578063d158272d14610957575f80fd5b8063a5d69d1f1161017e578063c469b6dd1161014e578063c469b6dd14610897578063c49b9a80146108ac578063c5d24189146108cb578063c816841b146108e0575f80fd5b8063a5d69d1f14610830578063a69df4b51461084f578063a83f53a714610863578063a9059cbb14610878575f80fd5b806395d89b41116101b957806395d89b41146107d4578063a073d37f146107e8578063a08e671f146107fc578063a457c2d714610811575f80fd5b80638b42507f146107765780638da5cb5b146107a4578063914eb66a146107c0575f80fd5b80633ecad271116102ca578063602bc62b1161025f578063807c2d9c1161022f578063807c2d9c1461071857806382eefb431461072d578063844d591c1461074257806388790a6814610761575f80fd5b8063602bc62b146106a657806361a23c69146106ba57806370a08231146106cf5780637d1db4a514610703575f80fd5b806355724fc21161029a57806355724fc21461064b578063557ed1ba1461066057806357a5802f146106725780635881f3ef14610687575f80fd5b80633ecad271146105b05780634a74bb02146105de5780634cb80fd5146105fe5780635342acb41461061d575f80fd5b806323b872dd116103405780632c4b2334116103105780632c4b233414610532578063313ce5671461055157806339509351146105725780633b97084a14610591575f80fd5b806323b872dd146104ad5780632563ae83146104cc57806327c8f835146104eb5780632b112e491461051e575f80fd5b80631245e3471161037b5780631245e3471461041a5780631694505e1461045157806318160ddd146104705780632198cf6c1461048e575f80fd5b806302ac8168146103ab57806306fdde03146103c1578063095ea7b3146103eb575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103bf610b02565b005b3480156103cc575f80fd5b506103d5610b45565b6040516103e291906123bb565b60405180910390f35b3480156103f6575f80fd5b5061040a61040536600461241d565b610bd5565b60405190151581526020016103e2565b348015610425575f80fd5b50600654610439906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b34801561045c575f80fd5b50601e54610439906001600160a01b031681565b34801561047b575f80fd5b50601a545b6040519081526020016103e2565b348015610499575f80fd5b506103bf6104a836600461245b565b610beb565b3480156104b8575f80fd5b5061040a6104c736600461248e565b610c3e565b3480156104d7575f80fd5b506103bf6104e63660046124cc565b610ca7565b3480156104f6575f80fd5b506104397f000000000000000000000000000000000000000000000000000000000000dead81565b348015610529575f80fd5b50610480610cee565b34801561053d575f80fd5b506103bf61054c3660046124e5565b610d37565b34801561055c575f80fd5b5060055460405160ff90911681526020016103e2565b34801561057d575f80fd5b5061040a61058c36600461241d565b610d82565b34801561059c575f80fd5b506103bf6105ab366004612500565b610db7565b3480156105bb575f80fd5b5061040a6105ca3660046124e5565b600c6020525f908152604090205460ff1681565b3480156105e9575f80fd5b50601f5461040a90600160a81b900460ff1681565b348015610609575f80fd5b506103bf6106183660046124e5565b610de5565b348015610628575f80fd5b5061040a6106373660046124e5565b60096020525f908152604090205460ff1681565b348015610656575f80fd5b5061048060135481565b34801561066b575f80fd5b5042610480565b34801561067d575f80fd5b5061048060145481565b348015610692575f80fd5b506104396106a13660046124e5565b610e38565b3480156106b1575f80fd5b50600254610480565b3480156106c5575f80fd5b5061048060155481565b3480156106da575f80fd5b506104806106e93660046124e5565b6001600160a01b03165f9081526007602052604090205490565b34801561070e575f80fd5b50610480601b5481565b348015610723575f80fd5b50610480601c5481565b348015610738575f80fd5b5061048060185481565b34801561074d575f80fd5b506103bf61075c36600461245b565b611160565b34801561076c575f80fd5b5061048060105481565b348015610781575f80fd5b5061040a6107903660046124e5565b600b6020525f908152604090205460ff1681565b3480156107af575f80fd5b505f546001600160a01b0316610439565b3480156107cb575f80fd5b506103bf6111b3565b3480156107df575f80fd5b506103d5611217565b3480156107f3575f80fd5b50601d54610480565b348015610807575f80fd5b5061048060195481565b34801561081c575f80fd5b5061040a61082b36600461241d565b611226565b34801561083b575f80fd5b506103bf61084a3660046124cc565b611273565b34801561085a575f80fd5b506103bf6112ba565b34801561086e575f80fd5b5061048060165481565b348015610883575f80fd5b5061040a61089236600461241d565b6113bd565b3480156108a2575f80fd5b50610480600f5481565b3480156108b7575f80fd5b506103bf6108c63660046124cc565b6113c9565b3480156108d6575f80fd5b50610480600e5481565b3480156108eb575f80fd5b50601f54610439906001600160a01b031681565b34801561090a575f80fd5b5061048060115481565b34801561091f575f80fd5b5061040a61092e3660046124e5565b600a6020525f908152604090205460ff1681565b34801561094d575f80fd5b5061048060125481565b348015610962575f80fd5b50600554610439906201000090046001600160a01b031681565b348015610987575f80fd5b50601f5461040a90600160b01b900460ff1681565b3480156109a7575f80fd5b50610480600d5481565b3480156109bc575f80fd5b506103bf6109cb366004612500565b61144a565b3480156109db575f80fd5b506104806109ea366004612517565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b348015610a1f575f80fd5b506103bf610a2e366004612500565b6114cb565b348015610a3e575f80fd5b506103bf610a4d36600461245b565b6114f9565b348015610a5d575f80fd5b5061048060175481565b348015610a72575f80fd5b506103bf610a81366004612500565b61154c565b348015610a91575f80fd5b506103bf610aa03660046124e5565b61157a565b348015610ab0575f80fd5b5060055461040a90610100900460ff1681565b348015610ace575f80fd5b506103bf610add36600461245b565b61164e565b348015610aed575f80fd5b50601f5461040a90600160b81b900460ff1681565b5f546001600160a01b03163314610b345760405162461bcd60e51b8152600401610b2b9061254e565b60405180910390fd5b6005805461ff001916610100179055565b606060038054610b5490612583565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8090612583565b8015610bcb5780601f10610ba257610100808354040283529160200191610bcb565b820191905f5260205f20905b815481529060010190602001808311610bae57829003601f168201915b5050505050905090565b5f610be13384846116a1565b5060015b92915050565b5f546001600160a01b03163314610c145760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b5f610c4a8484846117c4565b50610c9c8433610c9785604051806060016040528060288152602001612723602891396001600160a01b038a165f9081526008602090815260408083203384529091529020549190611c50565b6116a1565b5060015b9392505050565b5f546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610b2b9061254e565b601f8054911515600160b81b0260ff60b81b19909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b03165f90815260076020526040812054601a54610d3291611c88565b905090565b5f546001600160a01b03163314610d605760405162461bcd60e51b8152600401610b2b9061254e565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b335f8181526008602090815260408083206001600160a01b03871684529091528120549091610be1918590610c979086611cc9565b5f546001600160a01b03163314610de05760405162461bcd60e51b8152600401610b2b9061254e565b601d55565b5f546001600160a01b03163314610e0e5760405162461bcd60e51b8152600401610b2b9061254e565b600580546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b5f80546001600160a01b03163314610e625760405162461bcd60e51b8152600401610b2b9061254e565b5f829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec691906125bb565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3591906125bb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa291906125bb565b91506001600160a01b0382166110f257806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101291906125bb565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561105d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108191906125bb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156110cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ef91906125bb565b91505b601f80546001600160a01b03199081166001600160a01b038581169182178455601e8054909316948116949094179091555f908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b5f546001600160a01b031633146111895760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146111dc5760405162461bcd60e51b8152600401610b2b9061254e565b5f805460405161dead926001600160a01b03909216915f8051602061274b83398151915291a35f80546001600160a01b03191661dead179055565b606060048054610b5490612583565b5f610be13384610c978560405180606001604052806025815260200161276b60259139335f9081526008602090815260408083206001600160a01b038d1684529091529020549190611c50565b5f546001600160a01b0316331461129c5760405162461bcd60e51b8152600401610b2b9061254e565b601f8054911515600160b01b0260ff60b01b19909216919091179055565b6001546001600160a01b031633146113205760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b2b565b60025442116113715760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b2b565b6001545f80546040516001600160a01b0393841693909116915f8051602061274b83398151915291a36001545f80546001600160a01b0319166001600160a01b03909216919091179055565b5f610c9c3384846117c4565b5f546001600160a01b031633146113f25760405162461bcd60e51b8152600401610b2b9061254e565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061143f90831515815260200190565b60405180910390a150565b5f546001600160a01b031633146114735760405162461bcd60e51b8152600401610b2b9061254e565b5f8054600180546001600160a01b03199081166001600160a01b038416179091551690556114a181426125ea565b6002555f80546040516001600160a01b03909116905f8051602061274b833981519152908390a350565b5f546001600160a01b031633146114f45760405162461bcd60e51b8152600401610b2b9061254e565b601b55565b5f546001600160a01b031633146115225760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146115755760405162461bcd60e51b8152600401610b2b9061254e565b601c55565b5f546001600160a01b031633146115a35760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b0381166116085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b2b565b5f80546040516001600160a01b03808516939216915f8051602061274b83398151915291a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146116775760405162461bcd60e51b8152600401610b2b9061254e565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b0383166117035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b2b565b6001600160a01b0382166117645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b2b565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b0384166118295760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b2b565b6001600160a01b03831661188b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b2b565b601f54600160a01b900460ff16156118af576118a8848484611d27565b9050610ca0565b6001600160a01b0384165f9081526009602052604090205460ff161580156118ef57506001600160a01b0383165f9081526009602052604090205460ff16155b80156118fc57505f601354115b1561192b576013545f9061191b90611915856064611e0a565b90611e4b565b90506119278382611c88565b9250505b6001600160a01b0384165f908152600b602052604090205460ff1615801561196b57506001600160a01b0383165f908152600b602052604090205460ff16155b156119d357601b548211156119d35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b2b565b305f90815260076020526040902054601d5481108015908190611a005750601f54600160a01b900460ff16155b8015611a2457506001600160a01b0386165f908152600c602052604090205460ff16155b8015611a395750601f54600160a81b900460ff165b15611a5f57601f54600160b01b900460ff1615611a5657601d5491505b611a5f82611ec9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f90815260079091529190912054611ab0918690611c50565b6001600160a01b0387165f90815260076020908152604080832093909355600990529081205460ff1680611afb57506001600160a01b0386165f9081526009602052604090205460ff165b15611b07575083611b5c565b600554610100900460ff16611b4e5760405162461bcd60e51b815260206004820152600d60248201526c29bbb0b8103737ba1037b832b760991b6044820152606401610b2b565b611b59878787611ffd565b90505b601f54600160b81b900460ff168015611b8d57506001600160a01b0386165f908152600a602052604090205460ff16155b15611bc757601c54611bbd82611bb7896001600160a01b03165f9081526007602052604090205490565b90611cc9565b1115611bc7575f80fd5b6001600160a01b0386165f90815260076020526040902054611be99082611cc9565b6001600160a01b038088165f8181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c3c9085815260200190565b60405180910390a360019350505050610ca0565b5f8184841115611c735760405162461bcd60e51b8152600401610b2b91906123bb565b505f611c7f84866125fd565b95945050505050565b5f610ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c50565b5f80611cd583856125ea565b905083811015610ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b2b565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600790915291822054611d77918490611c50565b6001600160a01b038086165f908152600760205260408082209390935590851681522054611da59083611cc9565b6001600160a01b038085165f8181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df89086815260200190565b60405180910390a35060019392505050565b5f610ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120ff565b5f825f03611e5a57505f610be5565b5f611e658385612610565b905082611e728583612627565b14610ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2b565b601f805460ff60a01b1916600160a01b1790556019546014545f91611efe91600291611ef89182908790611e4b565b90611e0a565b90505f611f0b8383611c88565b9050611f168161212b565b60145447905f90611f3590611f2c906002611e0a565b60195490611c88565b90505f611f566002611ef884611ef860145488611e4b90919063ffffffff16565b90505f611f7283611ef860165487611e4b90919063ffffffff16565b90505f611f8982611f838786611c88565b90611c88565b90508015611fad57600554611fad906201000090046001600160a01b0316826122b4565b8115611fc957600654611fc9906001600160a01b0316836122b4565b5f83118015611fd757505f87115b15611fe657611fe687846122ec565b5050601f805460ff60a01b19169055505050505050565b6001600160a01b0383165f908152600c6020526040812054819060ff1615612040576120396064611ef860175486611e4b90919063ffffffff16565b905061207d565b6001600160a01b0384165f908152600c602052604090205460ff161561207d5761207a6064611ef860185486611e4b90919063ffffffff16565b90505b80156120f557305f9081526007602052604090205461209c9082611cc9565b305f81815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120ec9085815260200190565b60405180910390a35b611c7f8382611c88565b5f818361211f5760405162461bcd60e51b8152600401610b2b91906123bb565b505f611c7f8486612627565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061215e5761215e612646565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d991906125bb565b816001815181106121ec576121ec612646565b6001600160a01b039283166020918202929092010152601e5461221291309116846116a1565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061224a9085905f9086903090429060040161269c565b5f604051808303815f87803b158015612261575f80fd5b505af1158015612273573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516122a89291906126d7565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156122e7573d5f803e3d5ffd5b505050565b601e546123049030906001600160a01b0316846116a1565b601e5460405163f305d71960e01b8152306004820152602481018490525f6044820181905260648201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af115801561238f573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906123b491906126f7565b5050505050565b5f6020808352835180828501525f5b818110156123e6578581018301518582016040015282016123ca565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461241a575f80fd5b50565b5f806040838503121561242e575f80fd5b823561243981612406565b946020939093013593505050565b80358015158114612456575f80fd5b919050565b5f806040838503121561246c575f80fd5b823561247781612406565b915061248560208401612447565b90509250929050565b5f805f606084860312156124a0575f80fd5b83356124ab81612406565b925060208401356124bb81612406565b929592945050506040919091013590565b5f602082840312156124dc575f80fd5b610ca082612447565b5f602082840312156124f5575f80fd5b8135610ca081612406565b5f60208284031215612510575f80fd5b5035919050565b5f8060408385031215612528575f80fd5b823561253381612406565b9150602083013561254381612406565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061259757607f821691505b6020821081036125b557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156125cb575f80fd5b8151610ca081612406565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610be557610be56125d6565b81810381811115610be557610be56125d6565b8082028115828204841417610be557610be56125d6565b5f8261264157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156126915781516001600160a01b03168752958201959082019060010161266c565b509495945050505050565b85815284602082015260a060408201525f6126ba60a083018661265a565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f6126ef604083018461265a565b949350505050565b5f805f60608486031215612709575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a22258aab0a50a7b71205f372168800e797945703271972565e1ddaa414acda664736f6c63430008150033

Deployed Bytecode Sourcemap

15016:14334:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20575:69;;;;;;;;;;;;;:::i;:::-;;18767:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20061:161;;;;;;;;;;-1:-1:-1;20061:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;20061:161:0;1023:187:1;15394:94:0;;;;;;;;;;-1:-1:-1;15394:94:0;;;;-1:-1:-1;;;;;15394:94:0;;;;;;-1:-1:-1;;;;;1395:32:1;;;1377:51;;1365:2;1350:18;15394:94:0;1215:219:1;16787:41:0;;;;;;;;;;-1:-1:-1;16787:41:0;;;;-1:-1:-1;;;;;16787:41:0;;;19044:100;;;;;;;;;;-1:-1:-1;19124:12:0;;19044:100;;;1820:25:1;;;1808:2;1793:18;19044:100:0;1674:177:1;21315:135:0;;;;;;;;;;-1:-1:-1;21315:135:0;;;;;:::i;:::-;;:::i;23658:313::-;;;;;;;;;;-1:-1:-1;23658:313:0;;;;;:::i;:::-;;:::i;21194:113::-;;;;;;;;;;-1:-1:-1;21194:113:0;;;;;:::i;:::-;;:::i;15496:81::-;;;;;;;;;;;;;;;22300:128;;;;;;;;;;;;;:::i;21847:129::-;;;;;;;;;;-1:-1:-1;21847:129:0;;;;;:::i;:::-;;:::i;18953:83::-;;;;;;;;;;-1:-1:-1;19019:9:0;;18953:83;;19019:9;;;;3589:36:1;;3577:2;3562:18;18953:83:0;3447:184:1;19430:218:0;;;;;;;;;;-1:-1:-1;19430:218:0;;;;;:::i;:::-;;:::i;21568:124::-;;;;;;;;;;-1:-1:-1;21568:124:0;;;;;:::i;:::-;;:::i;15888:45::-;;;;;;;;;;-1:-1:-1;15888:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16902:40;;;;;;;;;;-1:-1:-1;16902:40:0;;;;-1:-1:-1;;;16902:40:0;;;;;;21700:139;;;;;;;;;;-1:-1:-1;21700:139:0;;;;;:::i;:::-;;:::i;15717:50::-;;;;;;;;;;-1:-1:-1;15717:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16199:34;;;;;;;;;;;;;;;;6536:90;;;;;;;;;;-1:-1:-1;6603:15:0;6536:90;;16242:34;;;;;;;;;;;;;;;;22574:807;;;;;;;;;;-1:-1:-1;22574:807:0;;;;;:::i;:::-;;:::i;6434:90::-;;;;;;;;;;-1:-1:-1;6507:9:0;;6434:90;;16283:36;;;;;;;;;;;;;;;;19152:119;;;;;;;;;;-1:-1:-1;19152:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;19245:18:0;19218:7;19245:18;;;:9;:18;;;;;;;19152:119;16572:60;;;;;;;;;;;;;;;;16640;;;;;;;;;;;;;;;;16407:37;;;;;;;;;;;;;;;;20652:129;;;;;;;;;;-1:-1:-1;20652:129:0;;;;;:::i;:::-;;:::i;16069:36::-;;;;;;;;;;;;;;;;15833:48;;;;;;;;;;-1:-1:-1;15833:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5794:79;;;;;;;;;;-1:-1:-1;5832:7:0;5859:6;-1:-1:-1;;;;;5859:6:0;5794:79;;6019:155;;;;;;;;;;;;;:::i;18858:87::-;;;;;;;;;;;;;:::i;19933:120::-;;;;;;;;;;-1:-1:-1;20022:23:0;;19933:120;;16451:43;;;;;;;;;;;;;;;;19656:269;;;;;;;;;;-1:-1:-1;19656:269:0;;;;;:::i;:::-;;:::i;22163:125::-;;;;;;;;;;-1:-1:-1;22163:125:0;;;;;:::i;:::-;;:::i;6872:305::-;;;;;;;;;;;;;:::i;16326:29::-;;;;;;;;;;;;;;;;23483:167;;;;;;;;;;-1:-1:-1;23483:167:0;;;;;:::i;:::-;;:::i;16026:30::-;;;;;;;;;;;;;;;;21984:171;;;;;;;;;;-1:-1:-1;21984:171:0;;;;;:::i;:::-;;:::i;15984:35::-;;;;;;;;;;;;;;;;16835:26;;;;;;;;;;-1:-1:-1;16835:26:0;;;;-1:-1:-1;;;;;16835:26:0;;;16112:36;;;;;;;;;;;;;;;;15774:52;;;;;;;;;;-1:-1:-1;15774:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16155:31;;;;;;;;;;;;;;;;15287:99;;;;;;;;;;-1:-1:-1;15287:99:0;;;;;;;-1:-1:-1;;;;;15287:99:0;;;16949:45;;;;;;;;;;-1:-1:-1;16949:45:0;;;;-1:-1:-1;;;16949:45:0;;;;;;15942:35;;;;;;;;;;;;;;;;6634:226;;;;;;;;;;-1:-1:-1;6634:226:0;;;;;:::i;:::-;;:::i;19279:143::-;;;;;;;;;;-1:-1:-1;19279:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19387:18:0;;;19360:7;19387:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19279:143;21075:111;;;;;;;;;;-1:-1:-1;21075:111:0;;;;;:::i;:::-;;:::i;20928:135::-;;;;;;;;;;-1:-1:-1;20928:135:0;;;;;:::i;:::-;;:::i;16364:36::-;;;;;;;;;;;;;;;;21458:102;;;;;;;;;;-1:-1:-1;21458:102:0;;;;;:::i;:::-;;:::i;6182:244::-;;;;;;;;;;-1:-1:-1;6182:244:0;;;;;:::i;:::-;;:::i;15252:28::-;;;;;;;;;;-1:-1:-1;15252:28:0;;;;;;;;;;;20789:127;;;;;;;;;;-1:-1:-1;20789:127:0;;;;;:::i;:::-;;:::i;17001:35::-;;;;;;;;;;-1:-1:-1;17001:35:0;;;;-1:-1:-1;;;17001:35:0;;;;;;20575:69;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;;;;;;;;;20621:8:::1;:15:::0;;-1:-1:-1;;20621:15:0::1;;;::::0;;20575:69::o;18767:83::-;18804:13;18837:5;18830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18767:83;:::o;20061:161::-;20136:4;20153:39;192:10;20176:7;20185:6;20153:8;:39::i;:::-;-1:-1:-1;20210:4:0;20061:161;;;;;:::o;21315:135::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21406:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;21406:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21315:135::o;23658:313::-;23756:4;23773:36;23783:6;23791:9;23802:6;23773:9;:36::i;:::-;-1:-1:-1;23820:121:0;23829:6;192:10;23851:89;23889:6;23851:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23851:19:0;;;;;;:11;:19;;;;;;;;192:10;23851:33;;;;;;;;;;:37;:89::i;:::-;23820:8;:121::i;:::-;-1:-1:-1;23959:4:0;23658:313;;;;;;:::o;21194:113::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21272:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;21272:27:0::1;-1:-1:-1::0;;;;21272:27:0;;::::1;::::0;;;::::1;::::0;;21194:113::o;22300:128::-;22407:11;-1:-1:-1;;;;;19245:18:0;22353:7;19245:18;;;:9;:18;;;;;;22380:12;;:40;;:16;:40::i;:::-;22373:47;;22300:128;:::o;21847:129::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21929:17:::1;:39:::0;;-1:-1:-1;;;;;;21929:39:0::1;-1:-1:-1::0;;;;;21929:39:0;;;::::1;::::0;;;::::1;::::0;;21847:129::o;19430:218::-;192:10;19518:4;19567:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19567:34:0;;;;;;;;;;19518:4;;19535:83;;19558:7;;19567:50;;19606:10;19567:38;:50::i;21568:124::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21650:23:::1;:34:::0;21568:124::o;21700:139::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21787:22:::1;:44:::0;;-1:-1:-1;;;;;21787:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;21787:44:0;;::::1;::::0;;;::::1;::::0;;21700:139::o;22574:807::-;22654:22;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;22691:35:::1;22748:16;22691:74;;22814:16;-1:-1:-1::0;;;;;22814:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22796:53:0::1;;22858:4;22865:16;-1:-1:-1::0;;;;;22865:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22796:93;::::0;-1:-1:-1;;;;;;22796:93:0::1;::::0;;;;;;-1:-1:-1;;;;;5446:15:1;;;22796:93:0::1;::::0;::::1;5428:34:1::0;5498:15;;5478:18;;;5471:43;5363:18;;22796:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22779:110:::0;-1:-1:-1;;;;;;22905:28:0;::::1;22902:225;;23019:16;-1:-1:-1::0;;;;;23019:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23001:74:0::1;;23084:4;23091:16;-1:-1:-1::0;;;;;23091:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23001:114;::::0;-1:-1:-1;;;;;;23001:114:0::1;::::0;;;;;;-1:-1:-1;;;;;5446:15:1;;;23001:114:0::1;::::0;::::1;5428:34:1::0;5498:15;;5478:18;;;5471:43;5363:18;;23001:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22984:131;;22902:225;23139:11;:28:::0;;-1:-1:-1;;;;;;23139:28:0;;::::1;-1:-1:-1::0;;;;;23139:28:0;;::::1;::::0;;::::1;::::0;;23201:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;23273:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;23273:48:0;;::::1;-1:-1:-1::0;23273:48:0;;::::1;::::0;;;23353:11;;;;::::1;23332:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;23139:28;23153:14;-1:-1:-1;22574:807:0:o;20652:129::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20741:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;20741:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20652:129::o;6019:155::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;6107:6:::1;::::0;;6086:45:::1;::::0;6123:6:::1;::::0;-1:-1:-1;;;;;6107:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6086:45:0;::::1;6142:6;:24:::0;;-1:-1:-1;;;;;;6142:24:0::1;6159:6;6142:24;::::0;;6019:155::o;18858:87::-;18897:13;18930:7;18923:14;;;;;:::i;19656:269::-;19749:4;19766:129;192:10;19789:7;19798:96;19837:15;19798:96;;;;;;;;;;;;;;;;;192:10;19798:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19798:34:0;;;;;;;;;;;;:38;:96::i;22163:125::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;22244:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;22244:36:0::1;-1:-1:-1::0;;;;22244:36:0;;::::1;::::0;;;::::1;::::0;;22163:125::o;6872:305::-;6924:14;;-1:-1:-1;;;;;6924:14:0;6942:10;6924:28;6916:76;;;;-1:-1:-1;;;6916:76:0;;5727:2:1;6916:76:0;;;5709:21:1;5766:2;5746:18;;;5739:30;5805:34;5785:18;;;5778:62;-1:-1:-1;;;5856:18:1;;;5849:33;5899:19;;6916:76:0;5525:399:1;6916:76:0;7029:9;;7011:15;:27;7003:72;;;;-1:-1:-1;;;7003:72:0;;6131:2:1;7003:72:0;;;6113:21:1;6170:2;6150:18;;;6143:30;6209:33;6189:18;;;6182:61;6260:18;;7003:72:0;5929:355:1;7003:72:0;7120:14;;;7112:6;;7091:44;;-1:-1:-1;;;;;7120:14:0;;;;7112:6;;;;-1:-1:-1;;;;;;;;;;;7091:44:0;;7155:14;;;7146:23;;-1:-1:-1;;;;;;7146:23:0;-1:-1:-1;;;;;7155:14:0;;;7146:23;;;;;;6872:305::o;23483:167::-;23561:4;23578:42;192:10;23602:9;23613:6;23578:9;:42::i;21984:171::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;22061:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;22061:32:0::1;-1:-1:-1::0;;;;22061:32:0;;::::1;;::::0;;22109:38:::1;::::0;::::1;::::0;::::1;::::0;22085:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;22109:38:0::1;;;;;;;;21984:171:::0;:::o;6634:226::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;6715:6:::1;::::0;;;6698:23;;-1:-1:-1;;;;;;6698:23:0;;::::1;-1:-1:-1::0;;;;;6715:6:0;::::1;6698:23;::::0;;;6732:19:::1;::::0;;6774:22:::1;6792:4:::0;6774:15:::1;:22;:::i;:::-;6762:9;:34:::0;6849:1:::1;6833:6:::0;;6812:40:::1;::::0;-1:-1:-1;;;;;6833:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6812:40:0;6849:1;;6812:40:::1;6634:226:::0;:::o;21075:111::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21152:12:::1;:26:::0;21075:111::o;20928:135::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21018:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;21018:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20928:135::o;21458:102::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;21530:10:::1;:22:::0;21458:102::o;6182:244::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6271:22:0;::::1;6263:73;;;::::0;-1:-1:-1;;;6263:73:0;;6753:2:1;6263:73:0::1;::::0;::::1;6735:21:1::0;6792:2;6772:18;;;6765:30;6831:34;6811:18;;;6804:62;-1:-1:-1;;;6882:18:1;;;6875:36;6928:19;;6263:73:0::1;6551:402:1::0;6263:73:0::1;6373:6;::::0;;6352:38:::1;::::0;-1:-1:-1;;;;;6352:38:0;;::::1;::::0;6373:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6352:38:0;::::1;6401:6;:17:::0;;-1:-1:-1;;;;;;6401:17:0::1;-1:-1:-1::0;;;;;6401:17:0;;;::::1;::::0;;;::::1;::::0;;6182:244::o;20789:127::-;5928:6;;-1:-1:-1;;;;;5928:6:0;192:10;5928:22;5920:67;;;;-1:-1:-1;;;5920:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20876:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;20876:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20789:127::o;20230:337::-;-1:-1:-1;;;;;20323:19:0;;20315:68;;;;-1:-1:-1;;;20315:68:0;;7160:2:1;20315:68:0;;;7142:21:1;7199:2;7179:18;;;7172:30;7238:34;7218:18;;;7211:62;-1:-1:-1;;;7289:18:1;;;7282:34;7333:19;;20315:68:0;6958:400:1;20315:68:0;-1:-1:-1;;;;;20402:21:0;;20394:68;;;;-1:-1:-1;;;20394:68:0;;7565:2:1;20394:68:0;;;7547:21:1;7604:2;7584:18;;;7577:30;7643:34;7623:18;;;7616:62;-1:-1:-1;;;7694:18:1;;;7687:32;7736:19;;20394:68:0;7363:398:1;20394:68:0;-1:-1:-1;;;;;20475:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20527:32;;1820:25:1;;;20527:32:0;;1793:18:1;20527:32:0;;;;;;;20230:337;;;:::o;23979:2135::-;24066:4;-1:-1:-1;;;;;24093:20:0;;24085:70;;;;-1:-1:-1;;;24085:70:0;;7968:2:1;24085:70:0;;;7950:21:1;8007:2;7987:18;;;7980:30;8046:34;8026:18;;;8019:62;-1:-1:-1;;;8097:18:1;;;8090:35;8142:19;;24085:70:0;7766:401:1;24085:70:0;-1:-1:-1;;;;;24174:23:0;;24166:71;;;;-1:-1:-1;;;24166:71:0;;8374:2:1;24166:71:0;;;8356:21:1;8413:2;8393:18;;;8386:30;8452:34;8432:18;;;8425:62;-1:-1:-1;;;8503:18:1;;;8496:33;8546:19;;24166:71:0;8172:399:1;24166:71:0;24253:16;;-1:-1:-1;;;24253:16:0;;;;24250:1857;;;24303:41;24318:6;24326:9;24337:6;24303:14;:41::i;:::-;24296:48;;;;24250:1857;-1:-1:-1;;;;;24401:25:0;;;;;;:17;:25;;;;;;;;24400:26;:59;;;;-1:-1:-1;;;;;;24431:28:0;;;;;;:17;:28;;;;;;;;24430:29;24400:59;:82;;;;;24481:1;24463:15;;:19;24400:82;24396:249;;;24552:15;;24503:26;;24532:36;;:15;:6;24543:3;24532:10;:15::i;:::-;:19;;:36::i;:::-;24503:65;-1:-1:-1;24596:33:0;:6;24503:65;24596:10;:33::i;:::-;24587:42;;24484:161;24396:249;-1:-1:-1;;;;;24665:23:0;;;;;;:15;:23;;;;;;;;24664:24;:55;;;;-1:-1:-1;;;;;;24693:26:0;;;;;;:15;:26;;;;;;;;24692:27;24664:55;24661:170;;;24758:12;;24748:6;:22;;24740:75;;;;-1:-1:-1;;;24740:75:0;;8778:2:1;24740:75:0;;;8760:21:1;8817:2;8797:18;;;8790:30;8856:34;8836:18;;;8829:62;-1:-1:-1;;;8907:18:1;;;8900:38;8955:19;;24740:75:0;8576:404:1;24740:75:0;24936:4;24887:28;19245:18;;;:9;:18;;;;;;25012:23;;24988:47;;;;;;;25068:44;;-1:-1:-1;25096:16:0;;-1:-1:-1;;;25096:16:0;;;;25095:17;25068:44;:69;;;;-1:-1:-1;;;;;;25117:20:0;;;;;;:12;:20;;;;;;;;25116:21;25068:69;:94;;;;-1:-1:-1;25141:21:0;;-1:-1:-1;;;25141:21:0;;;;25068:94;25064:305;;;25200:25;;-1:-1:-1;;;25200:25:0;;;;25197:97;;;25271:23;;25248:46;;25197:97;25313:36;25328:20;25313:14;:36::i;:::-;25405:53;;;;;;;;;;;-1:-1:-1;;;25405:53:0;;;;;;;;-1:-1:-1;;;;;25405:17:0;;-1:-1:-1;25405:17:0;;;:9;:17;;;;;;;;:53;;25427:6;;25405:21;:53::i;:::-;-1:-1:-1;;;;;25385:17:0;;;;;;:9;:17;;;;;;;;:73;;;;25511:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;25540:28:0;;;;;;:17;:28;;;;;;;;25511:57;25507:260;;;-1:-1:-1;25603:6:0;25507:260;;;25658:8;;;;;;;25650:34;;;;-1:-1:-1;;;25650:34:0;;9187:2:1;25650:34:0;;;9169:21:1;9226:2;9206:18;;;9199:30;-1:-1:-1;;;9245:18:1;;;9238:43;9298:18;;25650:34:0;8985:337:1;25650:34:0;25717;25725:6;25733:9;25744:6;25717:7;:34::i;:::-;25703:48;;25507:260;25786:16;;-1:-1:-1;;;25786:16:0;;;;:51;;;;-1:-1:-1;;;;;;25807:30:0;;;;;;:19;:30;;;;;;;;25806:31;25786:51;25783:133;;;25905:10;;25864:37;25889:11;25864:20;25874:9;-1:-1:-1;;;;;19245:18:0;19218:7;19245:18;;;:9;:18;;;;;;;19152:119;25864:20;:24;;:37::i;:::-;:51;;25856:60;;;;;;-1:-1:-1;;;;;25956:20:0;;;;;;:9;:20;;;;;;:37;;25981:11;25956:24;:37::i;:::-;-1:-1:-1;;;;;25933:20:0;;;;;;;:9;:20;;;;;;;:60;;;;26015:40;;;;;;;;;;26043:11;1820:25:1;;1808:2;1793:18;;1674:177;26015:40:0;;;;;;;;26077:4;26070:11;;;;;;;1497:192;1583:7;1619:12;1611:6;;;;1603:29;;;;-1:-1:-1;;;1603:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1643:9:0;1655:5;1659:1;1655;:5;:::i;:::-;1643:17;1497:192;-1:-1:-1;;;;;1497:192:0:o;1353:136::-;1411:7;1438:43;1442:1;1445;1438:43;;;;;;;;;;;;;;;;;:3;:43::i;1164:181::-;1222:7;;1254:5;1258:1;1254;:5;:::i;:::-;1242:17;;1283:1;1278;:6;;1270:46;;;;-1:-1:-1;;;1270:46:0;;9662:2:1;1270:46:0;;;9644:21:1;9701:2;9681:18;;;9674:30;9740:29;9720:18;;;9713:57;9787:18;;1270:46:0;9460:351:1;26122:330:0;26252:53;;;;;;;;;;;-1:-1:-1;;;26252:53:0;;;;;;;;-1:-1:-1;;;;;26252:17:0;;26215:4;26252:17;;;:9;:17;;;;;;;:53;;26274:6;;26252:21;:53::i;:::-;-1:-1:-1;;;;;26232:17:0;;;;;;;:9;:17;;;;;;:73;;;;26339:20;;;;;;;:32;;26364:6;26339:24;:32::i;:::-;-1:-1:-1;;;;;26316:20:0;;;;;;;:9;:20;;;;;;;:55;;;;26387:35;;;;;;;;;;26415:6;1820:25:1;;1808:2;1793:18;;1674:177;26387:35:0;;;;;;;;-1:-1:-1;26440:4:0;26122:330;;;;;:::o;1955:132::-;2013:7;2040:39;2044:1;2047;2040:39;;;;;;;;;;;;;;;;;:3;:39::i;1697:250::-;1755:7;1779:1;1784;1779:6;1775:47;;-1:-1:-1;1809:1:0;1802:8;;1775:47;1834:9;1846:5;1850:1;1846;:5;:::i;:::-;1834:17;-1:-1:-1;1879:1:0;1870:5;1874:1;1834:17;1870:5;:::i;:::-;:10;1862:56;;;;-1:-1:-1;;;1862:56:0;;10413:2:1;1862:56:0;;;10395:21:1;10452:2;10432:18;;;10425:30;10491:34;10471:18;;;10464:62;-1:-1:-1;;;10542:18:1;;;10535:31;10583:19;;1862:56:0;10211:397:1;26460:1048:0;17460:16;:23;;-1:-1:-1;;;;17460:23:0;-1:-1:-1;;;17460:23:0;;;26597:24:::1;::::0;17460:16;26576:15;17460:23;;26564:65:::1;::::0;26627:1:::1;::::0;26564:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;26542:87:::0;-1:-1:-1;26640:21:0::1;26664:24;:7:::0;26542:87;26664:11:::1;:24::i;:::-;26640:48;;26701:31;26718:13;26701:16;:31::i;:::-;26853:15;::::0;26768:21:::1;::::0;26743:22:::1;::::0;26824:52:::1;::::0;26853:22:::1;::::0;26873:1:::1;26853:19;:22::i;:::-;26824:24;::::0;;:28:::1;:52::i;:::-;26802:74;;26897:26;26926:59;26983:1;26926:52;26966:11;26926:35;26945:15;;26926:14;:18;;:35;;;;:::i;:59::-;26897:88;;26996:21;27020:47;27055:11;27020:30;27039:10;;27020:14;:18;;:30;;;;:::i;:47::-;26996:71:::0;-1:-1:-1;27078:26:0::1;27107:57;26996:71:::0;27107:38:::1;:14:::0;27126:18;27107::::1;:38::i;:::-;:42:::0;::::1;:57::i;:::-;27078:86:::0;-1:-1:-1;27180:22:0;;27177:104:::1;;27238:22;::::0;27217:64:::1;::::0;27238:22;;::::1;-1:-1:-1::0;;;;;27238:22:0::1;27262:18:::0;27217:20:::1;:64::i;:::-;27297:17:::0;;27294:89:::1;;27350:17;::::0;27329:54:::1;::::0;-1:-1:-1;;;;;27350:17:0::1;27369:13:::0;27329:20:::1;:54::i;:::-;27420:1;27399:18;:22;:41;;;;;27439:1;27425:11;:15;27399:41;27396:104;;;27455:45;27468:11;27481:18;27455:12;:45::i;:::-;-1:-1:-1::0;;17506:16:0;:24;;-1:-1:-1;;;;17506:24:0;;;-1:-1:-1;;;;;;26460:1048:0:o;28719:622::-;-1:-1:-1;;;;;28880:20:0;;28805:7;28880:20;;;:12;:20;;;;;;28805:7;;28880:20;;28877:223;;;28929:38;28963:3;28929:29;28940:17;;28929:6;:10;;:29;;;;:::i;:38::-;28917:50;;28877:223;;;-1:-1:-1;;;;;28997:23:0;;;;;;:12;:23;;;;;;;;28994:106;;;29049:39;29084:3;29049:30;29060:18;;29049:6;:10;;:30;;;;:::i;:39::-;29037:51;;28994:106;29123:13;;29120:173;;29198:4;29180:24;;;;:9;:24;;;;;;:39;;29209:9;29180:28;:39::i;:::-;29171:4;29153:24;;;;:9;:24;;;;;;;:66;;;;29239:42;;-1:-1:-1;;;;;29239:42:0;;;;;;;29271:9;1820:25:1;;1808:2;1793:18;;1674:177;29239:42:0;;;;;;;;29120:173;29312:21;:6;29323:9;29312:10;:21::i;2095:278::-;2181:7;2216:12;2209:5;2201:28;;;;-1:-1:-1;;;2201:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2240:9:0;2252:5;2256:1;2252;:5;:::i;27520:666::-;27670:16;;;27684:1;27670:16;;;;;;;;27646:21;;27670:16;;;;;;;;;;-1:-1:-1;27670:16:0;27646:40;;27715:4;27697;27702:1;27697:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27697:23:0;;;:7;;;;;;;;;;:23;;;;27741:15;;:22;;;-1:-1:-1;;;27741:22:0;;;;:15;;;;;:20;;:22;;;;;27697:7;;27741:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27731:4;27736:1;27731:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27731:32:0;;;:7;;;;;;;;;:32;27808:15;;27776:62;;27793:4;;27808:15;27826:11;27776:8;:62::i;:::-;27877:15;;:240;;-1:-1:-1;;;27877:240:0;;-1:-1:-1;;;;;27877:15:0;;;;:66;;:240;;27958:11;;27877:15;;28028:4;;28055;;28091:15;;27877:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28143:35;28160:11;28173:4;28143:35;;;;;;;:::i;:::-;;;;;;;;27575:611;27520:666;:::o;22436:126::-;22528:26;;-1:-1:-1;;;;;22528:18:0;;;:26;;;;;22547:6;;22528:26;;;;22547:6;22528:18;:26;;;;;;;;;;;;;;;;;;;;;22436:126;;:::o;28194:517::-;28374:15;;28342:62;;28359:4;;-1:-1:-1;;;;;28374:15:0;28392:11;28342:8;:62::i;:::-;28447:15;;:256;;-1:-1:-1;;;28447:256:0;;28519:4;28447:256;;;12608:34:1;12658:18;;;12651:34;;;-1:-1:-1;12701:18:1;;;12694:34;;;12744:18;;;12737:34;-1:-1:-1;;;;;28651:11:0;12808:15:1;;12787:19;;;12780:44;28677:15:0;12840:19:1;;;12833:35;28447:15:0;;;;:31;;28486:9;;12542:19:1;;28447:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28194:517;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1856:160::-;1921:20;;1977:13;;1970:21;1960:32;;1950:60;;2006:1;2003;1996:12;1950:60;1856:160;;;:::o;2021:315::-;2086:6;2094;2147:2;2135:9;2126:7;2122:23;2118:32;2115:52;;;2163:1;2160;2153:12;2115:52;2202:9;2189:23;2221:31;2246:5;2221:31;:::i;:::-;2271:5;-1:-1:-1;2295:35:1;2326:2;2311:18;;2295:35;:::i;:::-;2285:45;;2021:315;;;;;:::o;2341:456::-;2418:6;2426;2434;2487:2;2475:9;2466:7;2462:23;2458:32;2455:52;;;2503:1;2500;2493:12;2455:52;2542:9;2529:23;2561:31;2586:5;2561:31;:::i;:::-;2611:5;-1:-1:-1;2668:2:1;2653:18;;2640:32;2681:33;2640:32;2681:33;:::i;:::-;2341:456;;2733:7;;-1:-1:-1;;;2787:2:1;2772:18;;;;2759:32;;2341:456::o;2802:180::-;2858:6;2911:2;2899:9;2890:7;2886:23;2882:32;2879:52;;;2927:1;2924;2917:12;2879:52;2950:26;2966:9;2950:26;:::i;3195:247::-;3254:6;3307:2;3295:9;3286:7;3282:23;3278:32;3275:52;;;3323:1;3320;3313:12;3275:52;3362:9;3349:23;3381:31;3406:5;3381:31;:::i;3636:180::-;3695:6;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;-1:-1:-1;3787:23:1;;3636:180;-1:-1:-1;3636:180:1:o;3821:388::-;3889:6;3897;3950:2;3938:9;3929:7;3925:23;3921:32;3918:52;;;3966:1;3963;3956:12;3918:52;4005:9;3992:23;4024:31;4049:5;4024:31;:::i;:::-;4074:5;-1:-1:-1;4131:2:1;4116:18;;4103:32;4144:33;4103:32;4144:33;:::i;:::-;4196:7;4186:17;;;3821:388;;;;;:::o;4214:356::-;4416:2;4398:21;;;4435:18;;;4428:30;4494:34;4489:2;4474:18;;4467:62;4561:2;4546:18;;4214:356::o;4575:380::-;4654:1;4650:12;;;;4697;;;4718:61;;4772:4;4764:6;4760:17;4750:27;;4718:61;4825:2;4817:6;4814:14;4794:18;4791:38;4788:161;;4871:10;4866:3;4862:20;4859:1;4852:31;4906:4;4903:1;4896:15;4934:4;4931:1;4924:15;4788:161;;4575:380;;;:::o;4960:251::-;5030:6;5083:2;5071:9;5062:7;5058:23;5054:32;5051:52;;;5099:1;5096;5089:12;5051:52;5131:9;5125:16;5150:31;5175:5;5150:31;:::i;6289:127::-;6350:10;6345:3;6341:20;6338:1;6331:31;6381:4;6378:1;6371:15;6405:4;6402:1;6395:15;6421:125;6486:9;;;6507:10;;;6504:36;;;6520:18;;:::i;9327:128::-;9394:9;;;9415:11;;;9412:37;;;9429:18;;:::i;9816:168::-;9889:9;;;9920;;9937:15;;;9931:22;;9917:37;9907:71;;9958:18;;:::i;9989:217::-;10029:1;10055;10045:132;;10099:10;10094:3;10090:20;10087:1;10080:31;10134:4;10131:1;10124:15;10162:4;10159:1;10152:15;10045:132;-1:-1:-1;10191:9:1;;9989:217::o;10745:127::-;10806:10;10801:3;10797:20;10794:1;10787:31;10837:4;10834:1;10827:15;10861:4;10858:1;10851:15;10877:461;10930:3;10968:5;10962:12;10995:6;10990:3;10983:19;11021:4;11050:2;11045:3;11041:12;11034:19;;11087:2;11080:5;11076:14;11108:1;11118:195;11132:6;11129:1;11126:13;11118:195;;;11197:13;;-1:-1:-1;;;;;11193:39:1;11181:52;;11253:12;;;;11288:15;;;;11229:1;11147:9;11118:195;;;-1:-1:-1;11329:3:1;;10877:461;-1:-1:-1;;;;;10877:461:1:o;11343:582::-;11642:6;11631:9;11624:25;11685:6;11680:2;11669:9;11665:18;11658:34;11728:3;11723:2;11712:9;11708:18;11701:31;11605:4;11749:57;11801:3;11790:9;11786:19;11778:6;11749:57;:::i;:::-;-1:-1:-1;;;;;11842:32:1;;;;11837:2;11822:18;;11815:60;-1:-1:-1;11906:3:1;11891:19;11884:35;11741:65;11343:582;-1:-1:-1;;;11343:582:1:o;11930:332::-;12137:6;12126:9;12119:25;12180:2;12175;12164:9;12160:18;12153:30;12100:4;12200:56;12252:2;12241:9;12237:18;12229:6;12200:56;:::i;:::-;12192:64;11930:332;-1:-1:-1;;;;11930:332:1:o;12879:306::-;12967:6;12975;12983;13036:2;13024:9;13015:7;13011:23;13007:32;13004:52;;;13052:1;13049;13042:12;13004:52;13081:9;13075:16;13065:26;;13131:2;13120:9;13116:18;13110:25;13100:35;;13175:2;13164:9;13160:18;13154:25;13144:35;;12879:306;;;;;:::o

Swarm Source

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