ETH Price: $3,277.81 (+0.82%)
Gas: 1 Gwei

Token

MoonTube (MTUBE)
 

Overview

Max Total Supply

100,000,000,000,000 MTUBE

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
suckmyfeet.eth
Balance
1,231,657,227,516.706991836138562939 MTUBE

Value
$0.00
0xe56a354b83a748a2aaa6b8fdaa293d9f891bd388
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:
MoonTube

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-12
*/

/**
 *Submitted for verification at Etherscan.io on 2022-04-12
*/

// File: Moontest_flat_flat.sol


// File: Moontest_flat.sol


// File: Moontest.sol


pragma solidity ^0.8.4;
 
interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  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);
}
 
/**
 * SafeMath
 */
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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        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;
    }
}
 
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;
    }
}
 
/**
 * @dev Collection of functions related to the address type
 */
library Address {
 
    function isContract(address account) internal view returns (bool) {
 
        return account.code.length > 0;
    }
 
    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");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");
 
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
 
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
/**
 * Basic access control mechanism
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
 
}
 
/**
 * DEX Interfaces
 */
interface IPancakeRouter01 {
    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 factory() external pure returns (address);
    function WETH() external pure returns (address);
    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 IPancakeRouter02 is IPancakeRouter01 {
    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;
}
interface IPancakeERC20 {
    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;
}
interface IPancakeFactory {
    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;
}
 

contract MoonTube is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
   
    event OwnerUpdateTaxes(uint8 reflectionTax,uint8 secondaryTax);
    event OwnerRemoveLPPercent(uint8 LPPercent);
    event OwnerExtendLPLock(uint256 timeSeconds);
    event OwnerLockLP(uint256 liquidityUnlockSeconds);
    event OwnerUpdateSwapThreshold(uint8 _swapThreshold);
    event OwnerTriggerSwap(uint8 _swapThreshold,bool ignoreLimits);
    event OwnerCreateLP(uint256 LPtokens,uint256 amountWei);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 liquidityTokens,uint256 LPETH);
    // Mappings
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping(address=>bool) private _blacklisted;
    mapping(address=>bool)private _marketMakers;
    // Basic Contract Info
    address[] private _excluded;
    string private _name = "MoonTube";
    string private _symbol = "MTUBE";
    uint8 private _decimals = 18;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100_000_000_000_000*(10**_decimals); // 100 T, 18 decimals
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    // Wallets
    address public burnWallet=0x000000000000000000000000000000000000dEaD;
    address public marketingWallet=0xC2cAc95654f701931FF9d59Ed39b82aa4AFc3838;
    
    uint256 public totalLPETH;
    uint256 public totalMarketingETH;
    
    uint256 public _reflectFee=5;
    uint256 private _previousReflectFee=_reflectFee;
    uint256 public _secondaryTax=10;
    uint256 private _previousSecondaryFee=_secondaryTax;
    // Max Transaction
    uint256 private _maxTransaction=2_000_000_000_000*(10**_decimals);
    // Max Wallets
    uint256 private maxWallet = 0;
    // Taxes
    Taxes private _taxes;
    struct Taxes {
        uint8 liquidityTax;
        uint8 marketingTax;
    }
    // PancakeSwap
    IPancakeRouter02 private _pancakeRouter;
    address public _pancakeRouterAddress=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public _pancakePairAddress;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    uint8 private swapThreshold=5;
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor () {
        _rOwned[msg.sender]=_rTotal;
        emit Transfer(address(0),msg.sender,_tTotal);
        _isExcludedFromFee[msg.sender]=_isExcludedFromFee[burnWallet]=_isExcludedFromFee[address(this)]=true;
        _taxes.liquidityTax=40;
        _taxes.marketingTax=60;
        _pancakeRouter=IPancakeRouter02(_pancakeRouterAddress);
        _pancakePairAddress=IPancakeFactory(_pancakeRouter.factory()).createPair(address(this),_pancakeRouter.WETH());
        _approve(address(this),address(_pancakeRouter),type(uint256).max);
        excludeFromReward(address(_pancakePairAddress));
        excludeFromReward(address(burnWallet));
        excludeFromReward(address(this));
        _marketMakers[_pancakePairAddress]=true;
    }
    // Basic Internal Functions
    function name() public view override returns (string memory) {
        return _name;
    }
    function symbol() public view override returns (string memory) {
        return _symbol;
    }
    function decimals() public view override returns (uint8) {
        return _decimals;
    }
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    function getOwner() external view override returns (address) { return owner();}
 
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    receive() external payable {
        require(msg.sender==owner()||msg.sender==_pancakeRouterAddress);
    }
 
    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);
    }
 
    // Reflections
    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tSecondary) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tSecondary, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tSecondary);
    }
    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateReflectFee(tAmount);
        uint256 tSecondary = calculateSecondaryFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tSecondary);
        return (tTransferAmount, tFee, tSecondary);
    }
    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tSecondary, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rSecondary = tSecondary.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rSecondary);
        return (rAmount, rTransferAmount, rFee);
    }
    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
 
    // Taxes
    function calculateReflectFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectFee).div(
            10**2
        );
    }
    function calculateSecondaryFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_secondaryTax).div(
            10**2
        );
    }
    function removeAllFee() private {
        if(_reflectFee == 0 && _secondaryTax == 0) return;
 
        _previousReflectFee = _reflectFee;
        _previousSecondaryFee = _secondaryTax;
 
        _reflectFee = 0;
        _secondaryTax = 0;
    }
    function restoreAllFee() private {
        _reflectFee = _previousReflectFee;
        _secondaryTax = _previousSecondaryFee;
    }
    function _takeFees(uint256 tSecondary, uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
        uint256 currentRate =  _getRate();
        uint256 rSecondary = tSecondary.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rSecondary);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tSecondary);
    }

    function changeMaxTrans(uint256 newMaxTransaction) public onlyOwner {
        _maxTransaction = newMaxTransaction;
    }

    function setMaxWallet(uint256 _maxWallet) public onlyOwner {
        maxWallet = _maxWallet;    }


 
    // Swap and distribution
    function swapAndLiquify(uint8 _swapThreshold,bool ignoreLimits) private lockTheSwap {
        uint256 toSwap=_swapThreshold*balanceOf(_pancakePairAddress)/1000;
        // Get balance of contract
        uint256 contractBalance = balanceOf(address(this));
        // 1% of 100T
        uint256 maxSwapSize=(100_000_000_000_000*(10**_decimals))/100;
        // toSwap cannot exceed 1 %
        toSwap = toSwap > maxSwapSize ? maxSwapSize : toSwap;
        //
        if (contractBalance < toSwap) {
            if (ignoreLimits)
                toSwap = contractBalance;
            else return;
        }
        uint256 totalLiquidityTokens=toSwap*_taxes.liquidityTax/100;
        uint256 tokensLeft=toSwap-totalLiquidityTokens;
        uint256 liquidityTokens=totalLiquidityTokens/2;
        uint256 liquidityETHTokens=totalLiquidityTokens-liquidityTokens;
        toSwap=liquidityETHTokens+tokensLeft;
        uint256 oldETH=address(this).balance;
        uint256 newETH = address(this).balance-oldETH;
        uint256 LPETH = (newETH*liquidityETHTokens)/toSwap;
        addLiquidity(liquidityTokens, LPETH);
        uint256 remainingETH=address(this).balance-oldETH;
        payable(marketingWallet).transfer(remainingETH);
        emit SwapAndLiquify(liquidityTokens,LPETH);
    }
    function swapTokensForBNB(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        // WBNB
        path[1] = _pancakeRouter.WETH();
        _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            // Receiver address
            address(this),
            block.timestamp
        );
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 amountWei) private {
        totalLPETH+=amountWei;
        _pancakeRouter.addLiquidityETH{value: amountWei}(
            // Liquidity Tokens are sent from contract, NOT OWNER!
            address(this),
            tokenAmount,
            0,
            0,
            // contract receives CAKE-LP, NOT OWNER!
            address(this),
            block.timestamp
        );
    }
    function _removeLiquidityPercent(uint8 percent) private {
        IPancakeERC20 lpToken = IPancakeERC20(_pancakePairAddress);
        uint256 amount = lpToken.balanceOf(address(this)) * percent / 100;
        lpToken.approve(address(_pancakeRouter), amount);
        _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(
            address(this),
            amount,
            0,
            0,
            // Receiver address
            address(this),
            block.timestamp
        );
    }
 
    // Transfer
    function _transfer(address from,address to,uint256 amount) private {
        bool isBuy=_marketMakers[from];
        bool isSell=_marketMakers[to];
        bool takeFee = true;
        if(_isExcludedFromFee[from]||_isExcludedFromFee[to]){
            takeFee = false;
        } else {
            if(isBuy||isSell) {
                require(amount<=_maxTransaction);
                if(isSell&&!inSwapAndLiquify&&swapAndLiquifyEnabled)
                    swapAndLiquify(swapThreshold,false);
            }
        }
        _tokenTransfer(from,to,amount,takeFee);
    }
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if(!takeFee)
            restoreAllFee();
    }
   function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tSecondary) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeFees(tSecondary, rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tSecondary) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeFees(tSecondary, rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tSecondary) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeFees(tSecondary, rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tSecondary) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeFees(tSecondary, rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    // View Functions
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / (currentRate);
    }
    // Owner Functions
    function excludeFromReward(address account) public onlyOwner {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    // Use this incase new marketing wallet
    function ownerChangeMarketingWallet(address newWallet) public onlyOwner {
        marketingWallet=newWallet;
    }
    function excludeFromFee(address account,bool excluded) public onlyOwner {
        _isExcludedFromFee[account]=excluded;
    }
    function ownerWithdrawMarketingBNB() public onlyOwner {
        (bool success,) = marketingWallet.call{value: (address(this).balance)}("");
        require(success);
    }
    function ownerUpdateTaxes(uint8 reflectFee, uint8 secondaryTaxFee) public onlyOwner {
        require((reflectFee+secondaryTaxFee)<=15);
        _reflectFee=reflectFee;
        _secondaryTax=secondaryTaxFee;
        emit OwnerUpdateTaxes(reflectFee,secondaryTaxFee);
    }
    // Cannot withdraw token, or LP-token from contract
    function ownerWithdrawCakeLP(address cakeLP) public onlyOwner {
        require(cakeLP!=address(this));
        IERC20 token=IERC20(cakeLP);
        token.transfer(msg.sender, token.balanceOf(address(this)));
    }
    function ownerTriggerSwap(uint8 _swapThreshold,bool ignoreLimits) public onlyOwner {
        swapAndLiquify(_swapThreshold,ignoreLimits);
        emit OwnerTriggerSwap(_swapThreshold,ignoreLimits);
    }
    function ownerSwitchSwapAndLiquify(bool enabled) public onlyOwner {
        swapAndLiquifyEnabled=enabled;
        emit SwapAndLiquifyEnabledUpdated(enabled);
    }
    function ownerUpdateAMM(address marketMaker,bool enabled) public onlyOwner {
        _marketMakers[marketMaker]=enabled;
        // excludeFromRewards when adding new AMM
    }
    function ownerUpdateSecondaryTaxes(uint8 marketingTax,uint8 liquidityTax) public onlyOwner {
        require((liquidityTax+marketingTax)<=100);
        _taxes.liquidityTax=liquidityTax;
        _taxes.marketingTax=marketingTax;
    }
    function ownerUpdateSwapThreshold(uint8 _swapThreshold) public onlyOwner {
        require(_swapThreshold<=50);
        swapThreshold=_swapThreshold;
        emit OwnerUpdateSwapThreshold(_swapThreshold);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"LPtokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWei","type":"uint256"}],"name":"OwnerCreateLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timeSeconds","type":"uint256"}],"name":"OwnerExtendLPLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityUnlockSeconds","type":"uint256"}],"name":"OwnerLockLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"LPPercent","type":"uint8"}],"name":"OwnerRemoveLPPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_swapThreshold","type":"uint8"},{"indexed":false,"internalType":"bool","name":"ignoreLimits","type":"bool"}],"name":"OwnerTriggerSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_swapThreshold","type":"uint8"}],"name":"OwnerUpdateSwapThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"reflectionTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"secondaryTax","type":"uint8"}],"name":"OwnerUpdateTaxes","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":"liquidityTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"LPETH","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":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":"_pancakePairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pancakeRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_secondaryTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTransaction","type":"uint256"}],"name":"changeMaxTrans","outputs":[],"stateMutability":"nonpayable","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"newWallet","type":"address"}],"name":"ownerChangeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"ownerSwitchSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_swapThreshold","type":"uint8"},{"internalType":"bool","name":"ignoreLimits","type":"bool"}],"name":"ownerTriggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketMaker","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"ownerUpdateAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"marketingTax","type":"uint8"},{"internalType":"uint8","name":"liquidityTax","type":"uint8"}],"name":"ownerUpdateSecondaryTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_swapThreshold","type":"uint8"}],"name":"ownerUpdateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"reflectFee","type":"uint8"},{"internalType":"uint8","name":"secondaryTaxFee","type":"uint8"}],"name":"ownerUpdateTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cakeLP","type":"address"}],"name":"ownerWithdrawCakeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ownerWithdrawMarketingBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMarketingETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260086080819052674d6f6f6e5475626560c01b60a09081526200002b91600b919062000b0b565b50604080518082019091526005808252644d5455424560d81b60209092019182526200005a91600c9162000b0b565b50600d805460ff191660129081179091556200007890600a62000c90565b6200008a90655af3107a400062000d4f565b600e8190556200009d9060001962000de6565b620000ab9060001962000d71565b600f55601180546001600160a01b031990811661dead179091556012805490911673c2cac95654f701931ff9d59ed39b82aa4afc383817905560056015819055601655600a60178190556018819055600d546200010e9160ff9091169062000c90565b62000120906501d1a94a200062000d4f565b6019556000601a55601d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055601e8054600560b01b61ffff60a81b199091161790553480156200017157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600f5433600081815260036020908152604080832094909455600e549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a33060009081526006602090815260408083208054600160ff1991821681179092556011546001600160a01b03908116865283862080548316841790553386529483902080549091169091179055601b805461ffff1916613c28179055601d54601c8054919094166001600160a01b03199091168117909355805163c45a015560e01b8152905163c45a015592600480840193919291829003018186803b158015620002ad57600080fd5b505afa158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000bb1565b6001600160a01b031663c9c6539630601c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034657600080fd5b505afa1580156200035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000381919062000bb1565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003ca57600080fd5b505af1158015620003df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000405919062000bb1565b601e80546001600160a01b0319166001600160a01b03928316179055601c54620004359130911660001962000499565b601e546200044c906001600160a01b0316620005c5565b60115462000463906001600160a01b0316620005c5565b6200046e30620005c5565b601e546001600160a01b03166000908152600960205260409020805460ff1916600117905562000e29565b6001600160a01b038316620005015760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004f8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314620006215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004f8565b6001600160a01b03811660009081526007602052604090205460ff16156200068c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620004f8565b6001600160a01b03811660009081526003602052604090205415620006e9576001600160a01b038116600090815260036020526040902054620006cf906200074f565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600f54821115620007b85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620004f8565b6000620007c4620007d9565b9050620007d2818462000c30565b9392505050565b60008080620007e76200080c565b91509150620008058183620009fc60201b6200156d1790919060201c565b9250505090565b600f54600e546000918291825b600a54811015620009bc578260036000600a84815481106200084b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620008c657508160046000600a84815481106200089f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620008dd57600f54600e54945094505050509091565b6200094060036000600a84815481106200090757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548591620015af62000a4f821b17901c565b9250620009a560046000600a84815481106200096c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548491620015af62000a4f821b17901c565b915080620009b38162000dc8565b91505062000819565b50620009db600e54600f54620009fc60201b6200156d1790919060201c565b821015620009f357600f54600e549350935050509091565b90939092509050565b600062000a4683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000a9960201b60201c565b90505b92915050565b600062000a4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000ad560201b60201c565b6000818362000abd5760405162461bcd60e51b8152600401620004f8919062000bda565b50600062000acc848662000c30565b95945050505050565b6000818484111562000afc5760405162461bcd60e51b8152600401620004f8919062000bda565b50600062000acc848662000d71565b82805462000b199062000d8b565b90600052602060002090601f01602090048101928262000b3d576000855562000b88565b82601f1062000b5857805160ff191683800117855562000b88565b8280016001018555821562000b88579182015b8281111562000b8857825182559160200191906001019062000b6b565b5062000b9692915062000b9a565b5090565b5b8082111562000b96576000815560010162000b9b565b60006020828403121562000bc3578081fd5b81516001600160a01b0381168114620007d2578182fd5b6000602080835283518082850152825b8181101562000c085785810183015185820160400152820162000bea565b8181111562000c1a5783604083870101525b50601f01601f1916929092016040019392505050565b60008262000c425762000c4262000e13565b500490565b600181815b8085111562000c8857816000190482111562000c6c5762000c6c62000dfd565b8085161562000c7a57918102915b93841c939080029062000c4c565b509250929050565b600062000a4660ff84168360008262000cac5750600162000a49565b8162000cbb5750600062000a49565b816001811462000cd4576002811462000cdf5762000cff565b600191505062000a49565b60ff84111562000cf35762000cf362000dfd565b50506001821b62000a49565b5060208310610133831016604e8410600b841016171562000d24575081810a62000a49565b62000d30838362000c47565b806000190482111562000d475762000d4762000dfd565b029392505050565b600081600019048311821515161562000d6c5762000d6c62000dfd565b500290565b60008282101562000d865762000d8662000dfd565b500390565b600181811c9082168062000da057607f821691505b6020821081141562000dc257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000ddf5762000ddf62000dfd565b5060010190565b60008262000df85762000df862000e13565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6128e28062000e396000396000f3fe6080604052600436106102605760003560e01c806370a082311161014457806399c6e8ef116100b6578063d8c61c0f1161007a578063d8c61c0f1461072f578063dad7c7121461074f578063dd62ed3e1461076f578063df8408fe146107b5578063e2126154146107d5578063f2fde38b146107eb57600080fd5b806399c6e8ef146106995780639cc7ab43146106b9578063a457c2d7146106cf578063a9059cbb146106ef578063d4bfc0c91461070f57600080fd5b806387ba11661161010857806387ba1166146105ed57806388f820201461060d578063893d20e8146106465780638c336a25146106645780638da5cb5b1461064657806395d89b411461068457600080fd5b806370a082311461055857806370cf6ac714610578578063715018a61461059857806375f0a874146105ad5780637cacdbf4146105cd57600080fd5b80632c768020116101dd5780633cc39b7a116101a15780633cc39b7a146104885780634549b0391461049e5780634a74bb02146104be57806352390c02146104df5780635342acb4146104ff5780635d0044ca1461053857600080fd5b80632c768020146103e65780632d83811914610406578063313ce567146104265780633685d41914610448578063395093511461046857600080fd5b806309d4b7601161022457806309d4b7601461036757806313114a9d1461037c57806315639c1b1461039b57806318160ddd146103b157806323b872dd146103c657600080fd5b80630149be6a146102985780630426ac9d146102b857806306228749146102d857806306fdde0314610315578063095ea7b31461033757600080fd5b36610293576000546001600160a01b03163314806102885750601d546001600160a01b031633145b61029157600080fd5b005b600080fd5b3480156102a457600080fd5b506102916102b336600461257e565b61080b565b3480156102c457600080fd5b506102916102d33660046123df565b6108a4565b3480156102e457600080fd5b506011546102f8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561032157600080fd5b5061032a6109ea565b60405161030c91906125dc565b34801561034357600080fd5b5061035761035236600461249c565b610a7c565b604051901515815260200161030c565b34801561037357600080fd5b50610291610a93565b34801561038857600080fd5b506010545b60405190815260200161030c565b3480156103a757600080fd5b5061038d60155481565b3480156103bd57600080fd5b50600e5461038d565b3480156103d257600080fd5b506103576103e136600461242b565b610b20565b3480156103f257600080fd5b50610291610401366004612466565b610b89565b34801561041257600080fd5b5061038d6104213660046124fd565b610bde565b34801561043257600080fd5b50600d5460405160ff909116815260200161030c565b34801561045457600080fd5b506102916104633660046123df565b610c62565b34801561047457600080fd5b5061035761048336600461249c565b610e51565b34801561049457600080fd5b5061038d60135481565b3480156104aa57600080fd5b5061038d6104b936600461252d565b610e87565b3480156104ca57600080fd5b50601e5461035790600160a81b900460ff1681565b3480156104eb57600080fd5b506102916104fa3660046123df565b610f14565b34801561050b57600080fd5b5061035761051a3660046123df565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561054457600080fd5b506102916105533660046124fd565b611067565b34801561056457600080fd5b5061038d6105733660046123df565b611096565b34801561058457600080fd5b506102916105933660046124fd565b6110f5565b3480156105a457600080fd5b50610291611124565b3480156105b957600080fd5b506012546102f8906001600160a01b031681565b3480156105d957600080fd5b506102916105e83660046125b3565b611198565b3480156105f957600080fd5b506102916106083660046125b3565b61122d565b34801561061957600080fd5b506103576106283660046123df565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561065257600080fd5b506000546001600160a01b03166102f8565b34801561067057600080fd5b50601d546102f8906001600160a01b031681565b34801561069057600080fd5b5061032a611292565b3480156106a557600080fd5b506102916106b43660046124c5565b6112a1565b3480156106c557600080fd5b5061038d60175481565b3480156106db57600080fd5b506103576106ea36600461249c565b611318565b3480156106fb57600080fd5b5061035761070a36600461249c565b611367565b34801561071b57600080fd5b5061029161072a366004612598565b611374565b34801561073b57600080fd5b50601e546102f8906001600160a01b031681565b34801561075b57600080fd5b5061029161076a3660046123df565b6113e2565b34801561077b57600080fd5b5061038d61078a3660046123f9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107c157600080fd5b506102916107d0366004612466565b61142e565b3480156107e157600080fd5b5061038d60145481565b3480156107f757600080fd5b506102916108063660046123df565b611483565b6000546001600160a01b0316331461083e5760405162461bcd60e51b81526004016108359061262f565b60405180910390fd5b60328160ff16111561084f57600080fd5b601e805460ff60b01b1916600160b01b60ff8416908102919091179091556040519081527f91e4113abea973ab87b8fbcde4f34701aa5fbe0bd89e87a676f0aebdd21bb672906020015b60405180910390a150565b6000546001600160a01b031633146108ce5760405162461bcd60e51b81526004016108359061262f565b6001600160a01b0381163014156108e457600080fd5b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561092f57600080fd5b505afa158015610943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109679190612515565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e591906124e1565b505050565b6060600b80546109f9906127e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a25906127e5565b8015610a725780601f10610a4757610100808354040283529160200191610a72565b820191906000526020600020905b815481529060010190602001808311610a5557829003601f168201915b5050505050905090565b6000610a893384846115f1565b5060015b92915050565b6000546001600160a01b03163314610abd5760405162461bcd60e51b81526004016108359061262f565b6012546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610b0a576040519150601f19603f3d011682016040523d82523d6000602084013e610b0f565b606091505b5050905080610b1d57600080fd5b50565b6000610b2d848484611715565b610b7f8433610b7a85604051806060016040528060288152602001612860602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906117fe565b6115f1565b5060019392505050565b6000546001600160a01b03163314610bb35760405162461bcd60e51b81526004016108359061262f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000600f54821115610c455760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610835565b6000610c4f611838565b9050610c5b81846126a1565b9392505050565b6000546001600160a01b03163314610c8c5760405162461bcd60e51b81526004016108359061262f565b6001600160a01b03811660009081526007602052604090205460ff16610cf45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610835565b60005b600a54811015610e4d57816001600160a01b0316600a8281548110610d2c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e3b57600a8054610d57906001906127ce565b81548110610d7557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b039092169183908110610daf57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600a805480610e1557634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e4581612820565b915050610cf7565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a89918590610b7a908661185b565b6000600e54831115610edb5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610835565b81610efa576000610eeb846118ba565b50939550610a8d945050505050565b6000610f05846118ba565b50929550610a8d945050505050565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b81526004016108359061262f565b6001600160a01b03811660009081526007602052604090205460ff1615610fa75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610835565b6001600160a01b03811660009081526003602052604090205415611001576001600160a01b038116600090815260036020526040902054610fe790610bde565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146110915760405162461bcd60e51b81526004016108359061262f565b601a55565b6001600160a01b03811660009081526007602052604081205460ff16156110d357506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a8d90610bde565b6000546001600160a01b0316331461111f5760405162461bcd60e51b81526004016108359061262f565b601955565b6000546001600160a01b0316331461114e5760405162461bcd60e51b81526004016108359061262f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111c25760405162461bcd60e51b81526004016108359061262f565b600f6111ce828461267c565b60ff1611156111dc57600080fd5b60ff828116601581905590821660178190556040805192835260208301919091527f6227e9e249b31b74cddcebb78ebdebd4bc928310e5f89c8e9890450891c3c94b91015b60405180910390a15050565b6000546001600160a01b031633146112575760405162461bcd60e51b81526004016108359061262f565b6064611263838361267c565b60ff16111561127157600080fd5b601b805460ff9384166101000261ffff199091169390921692909217179055565b6060600c80546109f9906127e5565b6000546001600160a01b031633146112cb5760405162461bcd60e51b81526004016108359061262f565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061089990831515815260200190565b6000610a893384610b7a85604051806060016040528060258152602001612888602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906117fe565b6000610a89338484611715565b6000546001600160a01b0316331461139e5760405162461bcd60e51b81526004016108359061262f565b6113a88282611909565b6040805160ff8416815282151560208201527f1bf291f8da3345cae8ecd59f40dbc4206833371bad91ca381d83203b82d4278d9101611221565b6000546001600160a01b0316331461140c5760405162461bcd60e51b81526004016108359061262f565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114585760405162461bcd60e51b81526004016108359061262f565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114ad5760405162461bcd60e51b81526004016108359061262f565b6001600160a01b0381166115125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610835565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ae9565b6000610c5b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117fe565b6001600160a01b0383166116535760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610835565b6001600160a01b0382166116b45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610835565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03808416600081815260096020908152604080832054948716835280832054938352600690915290205460ff9283169291821691600191168061177757506001600160a01b03851660009081526006602052604090205460ff165b15611784575060006117ea565b828061178d5750815b156117ea576019548411156117a157600080fd5b8180156117b85750601e54600160a01b900460ff16155b80156117cd5750601e54600160a81b900460ff165b156117ea57601e546117ea90600160b01b900460ff166000611909565b6117f686868684611b17565b505050505050565b600081848411156118225760405162461bcd60e51b815260040161083591906125dc565b50600061182f84866127ce565b95945050505050565b6000806000611845611c94565b9092509050611854828261156d565b9250505090565b6000806118688385612664565b905083811015610c5b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610835565b60008060008060008060008060006118d18a611e4e565b92509250925060008060006118ef8d86866118ea611838565b611e90565b919f909e50909c50959a5093985091965092945050505050565b601e805460ff60a01b198116600160a01b179091556000906103e890611937906001600160a01b0316611096565b6119449060ff86166127af565b61194e91906126a1565b9050600061195b30611096565b600d549091506000906064906119759060ff16600a612704565b61198590655af3107a40006127af565b61198f91906126a1565b905080831161199e57826119a0565b805b9250828210156119c05783156119b8578192506119c0565b505050611ad8565b601b546000906064906119d69060ff16866127af565b6119e091906126a1565b905060006119ee82866127ce565b905060006119fd6002846126a1565b90506000611a0b82856127ce565b9050611a178382612664565b9650476000611a2682476127ce565b9050600089611a3585846127af565b611a3f91906126a1565b9050611a4b8582611ee0565b6000611a5784476127ce565b6012546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611a92573d6000803e3d6000fd5b5060408051878152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150505050505050505050505b5050601e805460ff60a01b19169055565b60008183611b0a5760405162461bcd60e51b815260040161083591906125dc565b50600061182f84866126a1565b80611b2457611b24611f9f565b6001600160a01b03841660009081526007602052604090205460ff168015611b6557506001600160a01b03831660009081526007602052604090205460ff16155b15611b7a57611b75848484611fcd565b611c78565b6001600160a01b03841660009081526007602052604090205460ff16158015611bbb57506001600160a01b03831660009081526007602052604090205460ff165b15611bcb57611b758484846120eb565b6001600160a01b03841660009081526007602052604090205460ff16158015611c0d57506001600160a01b03831660009081526007602052604090205460ff16155b15611c1d57611b75848484612194565b6001600160a01b03841660009081526007602052604090205460ff168015611c5d57506001600160a01b03831660009081526007602052604090205460ff165b15611c6d57611b758484846121d8565b611c78848484612194565b80611c8e57611c8e601654601555601854601755565b50505050565b600f54600e546000918291825b600a54811015611e1e578260036000600a8481548110611cd157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611d4a57508160046000600a8481548110611d2357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d6057600f54600e54945094505050509091565b611db460036000600a8481548110611d8857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906115af565b9250611e0a60046000600a8481548110611dde57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906115af565b915080611e1681612820565b915050611ca1565b50600e54600f54611e2e9161156d565b821015611e4557600f54600e549350935050509091565b90939092509050565b600080600080611e5d8561224b565b90506000611e6a8661226d565b90506000611e8282611e7c89866115af565b906115af565b979296509094509092505050565b6000808080611e9f8886612289565b90506000611ead8887612289565b90506000611ebb8888612289565b90506000611ecd82611e7c86866115af565b939b939a50919850919650505050505050565b8060136000828254611ef29190612664565b9091555050601c5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015611f5f57600080fd5b505af1158015611f73573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f989190612551565b5050505050565b601554158015611faf5750601754155b15611fb657565b601580546016556017805460185560009182905555565b600080600080600080611fdf876118ba565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061201190886115af565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461204090876115af565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461206f908661185b565b6001600160a01b038916600090815260036020526040902055612093818584612308565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120d891815260200190565b60405180910390a3505050505050505050565b6000806000806000806120fd876118ba565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061212f90876115af565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612165908461185b565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461206f908661185b565b6000806000806000806121a6876118ba565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061204090876115af565b6000806000806000806121ea876118ba565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061221c90886115af565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461212f90876115af565b6000610a8d60646122676015548561228990919063ffffffff16565b9061156d565b6000610a8d60646122676017548561228990919063ffffffff16565b60008261229857506000610a8d565b60006122a483856127af565b9050826122b185836126a1565b14610c5b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610835565b600f5461231590836115af565b600f55601054612325908261185b565b6010556000612332611838565b905060006123408583612289565b3060009081526003602052604090205490915061235d908261185b565b3060009081526003602090815260408083209390935560079052205460ff1615611f98573060009081526004602052604090205461239b908661185b565b306000908152600460205260409020555050505050565b80356001600160a01b03811681146123c957600080fd5b919050565b803560ff811681146123c957600080fd5b6000602082840312156123f0578081fd5b610c5b826123b2565b6000806040838503121561240b578081fd5b612414836123b2565b9150612422602084016123b2565b90509250929050565b60008060006060848603121561243f578081fd5b612448846123b2565b9250612456602085016123b2565b9150604084013590509250925092565b60008060408385031215612478578182fd5b612481836123b2565b9150602083013561249181612851565b809150509250929050565b600080604083850312156124ae578182fd5b6124b7836123b2565b946020939093013593505050565b6000602082840312156124d6578081fd5b8135610c5b81612851565b6000602082840312156124f2578081fd5b8151610c5b81612851565b60006020828403121561250e578081fd5b5035919050565b600060208284031215612526578081fd5b5051919050565b6000806040838503121561253f578182fd5b82359150602083013561249181612851565b600080600060608486031215612565578283fd5b8351925060208401519150604084015190509250925092565b60006020828403121561258f578081fd5b610c5b826123ce565b600080604083850312156125aa578182fd5b612481836123ce565b600080604083850312156125c5578182fd5b6125ce836123ce565b9150612422602084016123ce565b6000602080835283518082850152825b81811015612608578581018301518582016040015282016125ec565b818111156126195783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156126775761267761283b565b500190565b600060ff821660ff84168060ff038211156126995761269961283b565b019392505050565b6000826126bc57634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156126fc5781600019048211156126e2576126e261283b565b808516156126ef57918102915b93841c93908002906126c6565b509250929050565b6000610c5b60ff84168360008261271d57506001610a8d565b8161272a57506000610a8d565b8160018114612740576002811461274a57612766565b6001915050610a8d565b60ff84111561275b5761275b61283b565b50506001821b610a8d565b5060208310610133831016604e8410600b8410161715612789575081810a610a8d565b61279383836126c1565b80600019048211156127a7576127a761283b565b029392505050565b60008160001904831182151516156127c9576127c961283b565b500290565b6000828210156127e0576127e061283b565b500390565b600181811c908216806127f957607f821691505b6020821081141561281a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128345761283461283b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114610b1d57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b9934d919425aad8985f97fcde3d49f1b9174d0e4392856cbaae87bf93ecbf2864736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806370a082311161014457806399c6e8ef116100b6578063d8c61c0f1161007a578063d8c61c0f1461072f578063dad7c7121461074f578063dd62ed3e1461076f578063df8408fe146107b5578063e2126154146107d5578063f2fde38b146107eb57600080fd5b806399c6e8ef146106995780639cc7ab43146106b9578063a457c2d7146106cf578063a9059cbb146106ef578063d4bfc0c91461070f57600080fd5b806387ba11661161010857806387ba1166146105ed57806388f820201461060d578063893d20e8146106465780638c336a25146106645780638da5cb5b1461064657806395d89b411461068457600080fd5b806370a082311461055857806370cf6ac714610578578063715018a61461059857806375f0a874146105ad5780637cacdbf4146105cd57600080fd5b80632c768020116101dd5780633cc39b7a116101a15780633cc39b7a146104885780634549b0391461049e5780634a74bb02146104be57806352390c02146104df5780635342acb4146104ff5780635d0044ca1461053857600080fd5b80632c768020146103e65780632d83811914610406578063313ce567146104265780633685d41914610448578063395093511461046857600080fd5b806309d4b7601161022457806309d4b7601461036757806313114a9d1461037c57806315639c1b1461039b57806318160ddd146103b157806323b872dd146103c657600080fd5b80630149be6a146102985780630426ac9d146102b857806306228749146102d857806306fdde0314610315578063095ea7b31461033757600080fd5b36610293576000546001600160a01b03163314806102885750601d546001600160a01b031633145b61029157600080fd5b005b600080fd5b3480156102a457600080fd5b506102916102b336600461257e565b61080b565b3480156102c457600080fd5b506102916102d33660046123df565b6108a4565b3480156102e457600080fd5b506011546102f8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561032157600080fd5b5061032a6109ea565b60405161030c91906125dc565b34801561034357600080fd5b5061035761035236600461249c565b610a7c565b604051901515815260200161030c565b34801561037357600080fd5b50610291610a93565b34801561038857600080fd5b506010545b60405190815260200161030c565b3480156103a757600080fd5b5061038d60155481565b3480156103bd57600080fd5b50600e5461038d565b3480156103d257600080fd5b506103576103e136600461242b565b610b20565b3480156103f257600080fd5b50610291610401366004612466565b610b89565b34801561041257600080fd5b5061038d6104213660046124fd565b610bde565b34801561043257600080fd5b50600d5460405160ff909116815260200161030c565b34801561045457600080fd5b506102916104633660046123df565b610c62565b34801561047457600080fd5b5061035761048336600461249c565b610e51565b34801561049457600080fd5b5061038d60135481565b3480156104aa57600080fd5b5061038d6104b936600461252d565b610e87565b3480156104ca57600080fd5b50601e5461035790600160a81b900460ff1681565b3480156104eb57600080fd5b506102916104fa3660046123df565b610f14565b34801561050b57600080fd5b5061035761051a3660046123df565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561054457600080fd5b506102916105533660046124fd565b611067565b34801561056457600080fd5b5061038d6105733660046123df565b611096565b34801561058457600080fd5b506102916105933660046124fd565b6110f5565b3480156105a457600080fd5b50610291611124565b3480156105b957600080fd5b506012546102f8906001600160a01b031681565b3480156105d957600080fd5b506102916105e83660046125b3565b611198565b3480156105f957600080fd5b506102916106083660046125b3565b61122d565b34801561061957600080fd5b506103576106283660046123df565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561065257600080fd5b506000546001600160a01b03166102f8565b34801561067057600080fd5b50601d546102f8906001600160a01b031681565b34801561069057600080fd5b5061032a611292565b3480156106a557600080fd5b506102916106b43660046124c5565b6112a1565b3480156106c557600080fd5b5061038d60175481565b3480156106db57600080fd5b506103576106ea36600461249c565b611318565b3480156106fb57600080fd5b5061035761070a36600461249c565b611367565b34801561071b57600080fd5b5061029161072a366004612598565b611374565b34801561073b57600080fd5b50601e546102f8906001600160a01b031681565b34801561075b57600080fd5b5061029161076a3660046123df565b6113e2565b34801561077b57600080fd5b5061038d61078a3660046123f9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107c157600080fd5b506102916107d0366004612466565b61142e565b3480156107e157600080fd5b5061038d60145481565b3480156107f757600080fd5b506102916108063660046123df565b611483565b6000546001600160a01b0316331461083e5760405162461bcd60e51b81526004016108359061262f565b60405180910390fd5b60328160ff16111561084f57600080fd5b601e805460ff60b01b1916600160b01b60ff8416908102919091179091556040519081527f91e4113abea973ab87b8fbcde4f34701aa5fbe0bd89e87a676f0aebdd21bb672906020015b60405180910390a150565b6000546001600160a01b031633146108ce5760405162461bcd60e51b81526004016108359061262f565b6001600160a01b0381163014156108e457600080fd5b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561092f57600080fd5b505afa158015610943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109679190612515565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e591906124e1565b505050565b6060600b80546109f9906127e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a25906127e5565b8015610a725780601f10610a4757610100808354040283529160200191610a72565b820191906000526020600020905b815481529060010190602001808311610a5557829003601f168201915b5050505050905090565b6000610a893384846115f1565b5060015b92915050565b6000546001600160a01b03163314610abd5760405162461bcd60e51b81526004016108359061262f565b6012546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610b0a576040519150601f19603f3d011682016040523d82523d6000602084013e610b0f565b606091505b5050905080610b1d57600080fd5b50565b6000610b2d848484611715565b610b7f8433610b7a85604051806060016040528060288152602001612860602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906117fe565b6115f1565b5060019392505050565b6000546001600160a01b03163314610bb35760405162461bcd60e51b81526004016108359061262f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000600f54821115610c455760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610835565b6000610c4f611838565b9050610c5b81846126a1565b9392505050565b6000546001600160a01b03163314610c8c5760405162461bcd60e51b81526004016108359061262f565b6001600160a01b03811660009081526007602052604090205460ff16610cf45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610835565b60005b600a54811015610e4d57816001600160a01b0316600a8281548110610d2c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e3b57600a8054610d57906001906127ce565b81548110610d7557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b039092169183908110610daf57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600a805480610e1557634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e4581612820565b915050610cf7565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a89918590610b7a908661185b565b6000600e54831115610edb5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610835565b81610efa576000610eeb846118ba565b50939550610a8d945050505050565b6000610f05846118ba565b50929550610a8d945050505050565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b81526004016108359061262f565b6001600160a01b03811660009081526007602052604090205460ff1615610fa75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610835565b6001600160a01b03811660009081526003602052604090205415611001576001600160a01b038116600090815260036020526040902054610fe790610bde565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146110915760405162461bcd60e51b81526004016108359061262f565b601a55565b6001600160a01b03811660009081526007602052604081205460ff16156110d357506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a8d90610bde565b6000546001600160a01b0316331461111f5760405162461bcd60e51b81526004016108359061262f565b601955565b6000546001600160a01b0316331461114e5760405162461bcd60e51b81526004016108359061262f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111c25760405162461bcd60e51b81526004016108359061262f565b600f6111ce828461267c565b60ff1611156111dc57600080fd5b60ff828116601581905590821660178190556040805192835260208301919091527f6227e9e249b31b74cddcebb78ebdebd4bc928310e5f89c8e9890450891c3c94b91015b60405180910390a15050565b6000546001600160a01b031633146112575760405162461bcd60e51b81526004016108359061262f565b6064611263838361267c565b60ff16111561127157600080fd5b601b805460ff9384166101000261ffff199091169390921692909217179055565b6060600c80546109f9906127e5565b6000546001600160a01b031633146112cb5760405162461bcd60e51b81526004016108359061262f565b601e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061089990831515815260200190565b6000610a893384610b7a85604051806060016040528060258152602001612888602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906117fe565b6000610a89338484611715565b6000546001600160a01b0316331461139e5760405162461bcd60e51b81526004016108359061262f565b6113a88282611909565b6040805160ff8416815282151560208201527f1bf291f8da3345cae8ecd59f40dbc4206833371bad91ca381d83203b82d4278d9101611221565b6000546001600160a01b0316331461140c5760405162461bcd60e51b81526004016108359061262f565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114585760405162461bcd60e51b81526004016108359061262f565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114ad5760405162461bcd60e51b81526004016108359061262f565b6001600160a01b0381166115125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610835565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ae9565b6000610c5b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117fe565b6001600160a01b0383166116535760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610835565b6001600160a01b0382166116b45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610835565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03808416600081815260096020908152604080832054948716835280832054938352600690915290205460ff9283169291821691600191168061177757506001600160a01b03851660009081526006602052604090205460ff165b15611784575060006117ea565b828061178d5750815b156117ea576019548411156117a157600080fd5b8180156117b85750601e54600160a01b900460ff16155b80156117cd5750601e54600160a81b900460ff165b156117ea57601e546117ea90600160b01b900460ff166000611909565b6117f686868684611b17565b505050505050565b600081848411156118225760405162461bcd60e51b815260040161083591906125dc565b50600061182f84866127ce565b95945050505050565b6000806000611845611c94565b9092509050611854828261156d565b9250505090565b6000806118688385612664565b905083811015610c5b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610835565b60008060008060008060008060006118d18a611e4e565b92509250925060008060006118ef8d86866118ea611838565b611e90565b919f909e50909c50959a5093985091965092945050505050565b601e805460ff60a01b198116600160a01b179091556000906103e890611937906001600160a01b0316611096565b6119449060ff86166127af565b61194e91906126a1565b9050600061195b30611096565b600d549091506000906064906119759060ff16600a612704565b61198590655af3107a40006127af565b61198f91906126a1565b905080831161199e57826119a0565b805b9250828210156119c05783156119b8578192506119c0565b505050611ad8565b601b546000906064906119d69060ff16866127af565b6119e091906126a1565b905060006119ee82866127ce565b905060006119fd6002846126a1565b90506000611a0b82856127ce565b9050611a178382612664565b9650476000611a2682476127ce565b9050600089611a3585846127af565b611a3f91906126a1565b9050611a4b8582611ee0565b6000611a5784476127ce565b6012546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611a92573d6000803e3d6000fd5b5060408051878152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150505050505050505050505b5050601e805460ff60a01b19169055565b60008183611b0a5760405162461bcd60e51b815260040161083591906125dc565b50600061182f84866126a1565b80611b2457611b24611f9f565b6001600160a01b03841660009081526007602052604090205460ff168015611b6557506001600160a01b03831660009081526007602052604090205460ff16155b15611b7a57611b75848484611fcd565b611c78565b6001600160a01b03841660009081526007602052604090205460ff16158015611bbb57506001600160a01b03831660009081526007602052604090205460ff165b15611bcb57611b758484846120eb565b6001600160a01b03841660009081526007602052604090205460ff16158015611c0d57506001600160a01b03831660009081526007602052604090205460ff16155b15611c1d57611b75848484612194565b6001600160a01b03841660009081526007602052604090205460ff168015611c5d57506001600160a01b03831660009081526007602052604090205460ff165b15611c6d57611b758484846121d8565b611c78848484612194565b80611c8e57611c8e601654601555601854601755565b50505050565b600f54600e546000918291825b600a54811015611e1e578260036000600a8481548110611cd157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611d4a57508160046000600a8481548110611d2357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d6057600f54600e54945094505050509091565b611db460036000600a8481548110611d8857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906115af565b9250611e0a60046000600a8481548110611dde57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906115af565b915080611e1681612820565b915050611ca1565b50600e54600f54611e2e9161156d565b821015611e4557600f54600e549350935050509091565b90939092509050565b600080600080611e5d8561224b565b90506000611e6a8661226d565b90506000611e8282611e7c89866115af565b906115af565b979296509094509092505050565b6000808080611e9f8886612289565b90506000611ead8887612289565b90506000611ebb8888612289565b90506000611ecd82611e7c86866115af565b939b939a50919850919650505050505050565b8060136000828254611ef29190612664565b9091555050601c5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015611f5f57600080fd5b505af1158015611f73573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f989190612551565b5050505050565b601554158015611faf5750601754155b15611fb657565b601580546016556017805460185560009182905555565b600080600080600080611fdf876118ba565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061201190886115af565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461204090876115af565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461206f908661185b565b6001600160a01b038916600090815260036020526040902055612093818584612308565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120d891815260200190565b60405180910390a3505050505050505050565b6000806000806000806120fd876118ba565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061212f90876115af565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612165908461185b565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461206f908661185b565b6000806000806000806121a6876118ba565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061204090876115af565b6000806000806000806121ea876118ba565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061221c90886115af565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461212f90876115af565b6000610a8d60646122676015548561228990919063ffffffff16565b9061156d565b6000610a8d60646122676017548561228990919063ffffffff16565b60008261229857506000610a8d565b60006122a483856127af565b9050826122b185836126a1565b14610c5b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610835565b600f5461231590836115af565b600f55601054612325908261185b565b6010556000612332611838565b905060006123408583612289565b3060009081526003602052604090205490915061235d908261185b565b3060009081526003602090815260408083209390935560079052205460ff1615611f98573060009081526004602052604090205461239b908661185b565b306000908152600460205260409020555050505050565b80356001600160a01b03811681146123c957600080fd5b919050565b803560ff811681146123c957600080fd5b6000602082840312156123f0578081fd5b610c5b826123b2565b6000806040838503121561240b578081fd5b612414836123b2565b9150612422602084016123b2565b90509250929050565b60008060006060848603121561243f578081fd5b612448846123b2565b9250612456602085016123b2565b9150604084013590509250925092565b60008060408385031215612478578182fd5b612481836123b2565b9150602083013561249181612851565b809150509250929050565b600080604083850312156124ae578182fd5b6124b7836123b2565b946020939093013593505050565b6000602082840312156124d6578081fd5b8135610c5b81612851565b6000602082840312156124f2578081fd5b8151610c5b81612851565b60006020828403121561250e578081fd5b5035919050565b600060208284031215612526578081fd5b5051919050565b6000806040838503121561253f578182fd5b82359150602083013561249181612851565b600080600060608486031215612565578283fd5b8351925060208401519150604084015190509250925092565b60006020828403121561258f578081fd5b610c5b826123ce565b600080604083850312156125aa578182fd5b612481836123ce565b600080604083850312156125c5578182fd5b6125ce836123ce565b9150612422602084016123ce565b6000602080835283518082850152825b81811015612608578581018301518582016040015282016125ec565b818111156126195783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156126775761267761283b565b500190565b600060ff821660ff84168060ff038211156126995761269961283b565b019392505050565b6000826126bc57634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156126fc5781600019048211156126e2576126e261283b565b808516156126ef57918102915b93841c93908002906126c6565b509250929050565b6000610c5b60ff84168360008261271d57506001610a8d565b8161272a57506000610a8d565b8160018114612740576002811461274a57612766565b6001915050610a8d565b60ff84111561275b5761275b61283b565b50506001821b610a8d565b5060208310610133831016604e8410600b8410161715612789575081810a610a8d565b61279383836126c1565b80600019048211156127a7576127a761283b565b029392505050565b60008160001904831182151516156127c9576127c961283b565b500290565b6000828210156127e0576127e061283b565b500390565b600181811c908216806127f957607f821691505b6020821081141561281a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128345761283461283b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114610b1d57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b9934d919425aad8985f97fcde3d49f1b9174d0e4392856cbaae87bf93ecbf2864736f6c63430008040033

Deployed Bytecode Sourcemap

14191:19882:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6714:7;6741:6;-1:-1:-1;;;;;6741:6:0;19707:10;:19;;:54;;-1:-1:-1;19740:21:0;;-1:-1:-1;;;;;19740:21:0;19728:10;:33;19707:54;19699:63;;;;;;14191:19882;;;;;33856:214;;;;;;;;;;-1:-1:-1;33856:214:0;;;;;:::i;:::-;;:::i;32819:218::-;;;;;;;;;;-1:-1:-1;32819:218:0;;;;;:::i;:::-;;:::i;15745:68::-;;;;;;;;;;-1:-1:-1;15745:68:0;;;;-1:-1:-1;;;;;15745:68:0;;;;;;-1:-1:-1;;;;;4490:32:1;;;4472:51;;4460:2;4445:18;15745:68:0;;;;;;;;17660:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18673:161::-;;;;;;;;;;-1:-1:-1;18673:161:0;;;;;:::i;:::-;;:::i;:::-;;;5590:14:1;;5583:22;5565:41;;5553:2;5538:18;18673:161:0;5520:92:1;32299:174:0;;;;;;;;;;;;;:::i;30119:87::-;;;;;;;;;;-1:-1:-1;30188:10:0;;30119:87;;;9832:25:1;;;9820:2;9805:18;30119:87:0;9787:76:1;15983:28:0;;;;;;;;;;;;;;;;17958:95;;;;;;;;;;-1:-1:-1;18038:7:0;;17958:95;;18840:313;;;;;;;;;;-1:-1:-1;18840:313:0;;;;;:::i;:::-;;:::i;33428:179::-;;;;;;;;;;-1:-1:-1;33428:179:0;;;;;:::i;:::-;;:::i;30783:252::-;;;;;;;;;;-1:-1:-1;30783:252:0;;;;;:::i;:::-;;:::i;17860:92::-;;;;;;;;;;-1:-1:-1;17935:9:0;;17860:92;;17935:9;;;;10263:36:1;;10251:2;10236:18;17860:92:0;10218:87:1;31516:477:0;;;;;;;;;;-1:-1:-1;31516:477:0;;;;;:::i;:::-;;:::i;19159:218::-;;;;;;;;;;-1:-1:-1;19159:218:0;;;;;:::i;:::-;;:::i;15906:25::-;;;;;;;;;;;;;;;;30341:436;;;;;;;;;;-1:-1:-1;30341:436:0;;;;;:::i;:::-;;:::i;16667:41::-;;;;;;;;;;-1:-1:-1;16667:41:0;;;;-1:-1:-1;;;16667:41:0;;;;;;31065:445;;;;;;;;;;-1:-1:-1;31065:445:0;;;;;:::i;:::-;;:::i;30212:123::-;;;;;;;;;;-1:-1:-1;30212:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;30300:27:0;30276:4;30300:27;;;:18;:27;;;;;;;;;30212:123;23434:98;;;;;;;;;;-1:-1:-1;23434:98:0;;;;;:::i;:::-;;:::i;18147:198::-;;;;;;;;;;-1:-1:-1;18147:198:0;;;;;:::i;:::-;;:::i;23304:122::-;;;;;;;;;;-1:-1:-1;23304:122:0;;;;;:::i;:::-;;:::i;6974:148::-;;;;;;;;;;;;;:::i;15820:73::-;;;;;;;;;;-1:-1:-1;15820:73:0;;;;-1:-1:-1;;;;;15820:73:0;;;32479:277;;;;;;;;;;-1:-1:-1;32479:277:0;;;;;:::i;:::-;;:::i;33613:237::-;;;;;;;;;;-1:-1:-1;33613:237:0;;;;;:::i;:::-;;:::i;29993:120::-;;;;;;;;;;-1:-1:-1;29993:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30085:20:0;30061:4;30085:20;;;:11;:20;;;;;;;;;29993:120;18059:79;;;;;;;;;;-1:-1:-1;18111:7:0;6741:6;-1:-1:-1;;;;;6741:6:0;18059:79;;16512;;;;;;;;;;-1:-1:-1;16512:79:0;;;;-1:-1:-1;;;;;16512:79:0;;;17758:96;;;;;;;;;;;;;:::i;33255:167::-;;;;;;;;;;-1:-1:-1;33255:167:0;;;;;:::i;:::-;;:::i;16072:31::-;;;;;;;;;;;;;;;;19383:269;;;;;;;;;;-1:-1:-1;19383:269:0;;;;;:::i;:::-;;:::i;18351:167::-;;;;;;;;;;-1:-1:-1;18351:167:0;;;;;:::i;:::-;;:::i;33043:206::-;;;;;;;;;;-1:-1:-1;33043:206:0;;;;;:::i;:::-;;:::i;16598:34::-;;;;;;;;;;-1:-1:-1;16598:34:0;;;;-1:-1:-1;;;;;16598:34:0;;;32044:116;;;;;;;;;;-1:-1:-1;32044:116:0;;;;;:::i;:::-;;:::i;18524:143::-;;;;;;;;;;-1:-1:-1;18524:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18632:18:0;;;18605:7;18632:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18524:143;32166:127;;;;;;;;;;-1:-1:-1;32166:127:0;;;;;:::i;:::-;;:::i;15938:32::-;;;;;;;;;;;;;;;;7278:244;;;;;;;;;;-1:-1:-1;7278:244:0;;;;;:::i;:::-;;:::i;33856:214::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;;;;;;;;;33964:2:::1;33948:14;:18;;;;33940:27;;;::::0;::::1;;33978:13;:28:::0;;-1:-1:-1;;;;33978:28:0::1;-1:-1:-1::0;;;33978:28:0::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;34022:40:::1;::::0;10263:36:1;;;34022:40:0::1;::::0;10251:2:1;10236:18;34022:40:0::1;;;;;;;;33856:214:::0;:::o;32819:218::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32900:21:0;::::1;32916:4;32900:21;;32892:30;;;::::0;::::1;;32998;::::0;-1:-1:-1;;;32998:30:0;;33022:4:::1;32998:30;::::0;::::1;4472:51:1::0;32953:6:0;;-1:-1:-1;;;;;32971:14:0;::::1;::::0;::::1;::::0;32986:10:::1;::::0;32971:14;;32998:15:::1;::::0;4445:18:1;;32998:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32971:58;::::0;-1:-1:-1;;;;;;32971:58:0::1;::::0;;;;;;-1:-1:-1;;;;;4726:32:1;;;32971:58:0::1;::::0;::::1;4708:51:1::0;4775:18;;;4768:34;4681:18;;32971:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6959:1;32819:218:::0;:::o;17660:92::-;17706:13;17739:5;17732:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17660:92;:::o;18673:161::-;18748:4;18765:39;3003:10;18788:7;18797:6;18765:8;:39::i;:::-;-1:-1:-1;18822:4:0;18673:161;;;;;:::o;32299:174::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;32382:15:::1;::::0;:56:::1;::::0;32365:12:::1;::::0;-1:-1:-1;;;;;32382:15:0::1;::::0;32411:21:::1;::::0;32365:12;32382:56;32365:12;32382:56;32411:21;32382:15;:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32364:74;;;32457:7;32449:16;;;::::0;::::1;;6959:1;32299:174::o:0;18840:313::-;18938:4;18955:36;18965:6;18973:9;18984:6;18955:9;:36::i;:::-;19002:121;19011:6;3003:10;19033:89;19071:6;19033:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19033:19:0;;;;;;:11;:19;;;;;;;;3003:10;19033:33;;;;;;;;;;:37;:89::i;:::-;19002:8;:121::i;:::-;-1:-1:-1;19141:4:0;18840:313;;;;;:::o;33428:179::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33514:26:0;;;::::1;;::::0;;;:13:::1;:26;::::0;;;;:34;;-1:-1:-1;;33514:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33428:179::o;30783:252::-;30849:7;30888;;30877;:18;;30869:73;;;;-1:-1:-1;;;30869:73:0;;6427:2:1;30869:73:0;;;6409:21:1;6466:2;6446:18;;;6439:30;6505:34;6485:18;;;6478:62;-1:-1:-1;;;6556:18:1;;;6549:40;6606:19;;30869:73:0;6399:232:1;30869:73:0;30953:19;30976:10;:8;:10::i;:::-;30953:33;-1:-1:-1;31004:23:0;30953:33;31004:7;:23;:::i;:::-;30997:30;30783:252;-1:-1:-1;;;30783:252:0:o;31516:477::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31596:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31588:60;;;::::0;-1:-1:-1;;;31588:60:0;;8004:2:1;31588:60:0::1;::::0;::::1;7986:21:1::0;8043:2;8023:18;;;8016:30;8082:29;8062:18;;;8055:57;8129:18;;31588:60:0::1;7976:177:1::0;31588:60:0::1;31664:9;31659:327;31683:9;:16:::0;31679:20;::::1;31659:327;;;31741:7;-1:-1:-1::0;;;;;31725:23:0::1;:9;31735:1;31725:12;;;;;;-1:-1:-1::0;;;31725:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31725:12:0::1;:23;31721:254;;;31784:9;31794:16:::0;;:20:::1;::::0;31813:1:::1;::::0;31794:20:::1;:::i;:::-;31784:31;;;;;;-1:-1:-1::0;;;31784:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;31769:9:::1;:12:::0;;-1:-1:-1;;;;;31784:31:0;;::::1;::::0;31779:1;;31769:12;::::1;;;-1:-1:-1::0;;;31769:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31769:46:0::1;-1:-1:-1::0;;;;;31769:46:0;;::::1;;::::0;;31834:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31873:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31873:28:0::1;::::0;;31920:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;31920:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31920:15:0;;;;;-1:-1:-1;;;;;;31920:15:0::1;::::0;;;;;31659:327:::1;31516:477:::0;:::o;31721:254::-:1;31701:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31659:327;;;;31516:477:::0;:::o;19159:218::-;3003:10;19247:4;19296:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19296:34:0;;;;;;;;;;19247:4;;19264:83;;19287:7;;19296:50;;19335:10;19296:38;:50::i;30341:436::-;30431:7;30470;;30459;:18;;30451:62;;;;-1:-1:-1;;;30451:62:0;;8360:2:1;30451:62:0;;;8342:21:1;8399:2;8379:18;;;8372:30;8438:33;8418:18;;;8411:61;8489:18;;30451:62:0;8332:181:1;30451:62:0;30529:17;30524:246;;30564:15;30588:19;30599:7;30588:10;:19::i;:::-;-1:-1:-1;30563:44:0;;-1:-1:-1;30622:14:0;;-1:-1:-1;;;;;30622:14:0;30524:246;30671:23;30702:19;30713:7;30702:10;:19::i;:::-;-1:-1:-1;30669:52:0;;-1:-1:-1;30736:22:0;;-1:-1:-1;;;;;30736:22:0;31065:445;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31260:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31259:21;31251:61;;;::::0;-1:-1:-1;;;31251:61:0;;8004:2:1;31251:61:0::1;::::0;::::1;7986:21:1::0;8043:2;8023:18;;;8016:30;8082:29;8062:18;;;8055:57;8129:18;;31251:61:0::1;7976:177:1::0;31251:61:0::1;-1:-1:-1::0;;;;;31326:16:0;::::1;31345:1;31326:16:::0;;;:7:::1;:16;::::0;;;;;:20;31323:108:::1;;-1:-1:-1::0;;;;;31402:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31382:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31363:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31323:108:::1;-1:-1:-1::0;;;;;31441:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31441:27:0::1;31464:4;31441:27:::0;;::::1;::::0;;;31479:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31479:23:0::1;::::0;;::::1;::::0;;31065:445::o;23434:98::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;23504:9:::1;:22:::0;23434:98::o;18147:198::-;-1:-1:-1;;;;;18237:20:0;;18213:7;18237:20;;;:11;:20;;;;;;;;18233:49;;;-1:-1:-1;;;;;;18266:16:0;;;;;:7;:16;;;;;;;18147:198::o;18233:49::-;-1:-1:-1;;;;;18320:16:0;;;;;;:7;:16;;;;;;18300:37;;:19;:37::i;23304:122::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;23383:15:::1;:35:::0;23304:122::o;6974:148::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;7081:1:::1;7065:6:::0;;7044:40:::1;::::0;-1:-1:-1;;;;;7065:6:0;;::::1;::::0;7044:40:::1;::::0;7081:1;;7044:40:::1;7112:1;7095:19:::0;;-1:-1:-1;;;;;;7095:19:0::1;::::0;;6974:148::o;32479:277::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;32612:2:::1;32583:26;32594:15:::0;32583:10;:26:::1;:::i;:::-;32582:32;;;;32574:41;;;::::0;::::1;;32626:22;::::0;;::::1;:11;:22:::0;;;32659:29;;::::1;:13;:29:::0;;;32704:44:::1;::::0;;10746:36:1;;;10813:2;10798:18;;10791:45;;;;32704:44:0::1;::::0;10719:18:1;32704:44:0::1;;;;;;;;32479:277:::0;;:::o;33613:237::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;33752:3:::1;33724:25;33737:12:::0;33724;:25:::1;:::i;:::-;33723:32;;;;33715:41;;;::::0;::::1;;33767:6;:32:::0;;::::1;33810::::0;;::::1;33767;33810;-1:-1:-1::0;;33810:32:0;;;33767;;;::::1;33810::::0;;;;::::1;::::0;;33613:237::o;17758:96::-;17806:13;17839:7;17832:14;;;;;:::i;33255:167::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;33332:21:::1;:29:::0;;;::::1;;-1:-1:-1::0;;;33332:29:0::1;-1:-1:-1::0;;;;33332:29:0;;::::1;;::::0;;33377:37:::1;::::0;::::1;::::0;::::1;::::0;33354:7;5590:14:1;5583:22;5565:41;;5553:2;5538:18;;5520:92;19383:269:0;19476:4;19493:129;3003:10;19516:7;19525:96;19564:15;19525:96;;;;;;;;;;;;;;;;;3003:10;19525:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19525:34:0;;;;;;;;;;;;:38;:96::i;18351:167::-;18429:4;18446:42;3003:10;18470:9;18481:6;18446:9;:42::i;33043:206::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;33137:43:::1;33152:14;33167:12;33137:14;:43::i;:::-;33196:45;::::0;;10504:4:1;10492:17;;10474:36;;10553:14;;10546:22;10541:2;10526:18;;10519:50;33196:45:0::1;::::0;10447:18:1;33196:45:0::1;10429:146:1::0;32044:116:0;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;32127:15:::1;:25:::0;;-1:-1:-1;;;;;;32127:25:0::1;-1:-1:-1::0;;;;;32127:25:0;;;::::1;::::0;;;::::1;::::0;;32044:116::o;32166:127::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32249:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;32249:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32166:127::o;7278:244::-;6889:6;;-1:-1:-1;;;;;6889:6:0;3003:10;6889:22;6881:67;;;;-1:-1:-1;;;6881:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7367:22:0;::::1;7359:73;;;::::0;-1:-1:-1;;;7359:73:0;;6838:2:1;7359:73:0::1;::::0;::::1;6820:21:1::0;6877:2;6857:18;;;6850:30;6916:34;6896:18;;;6889:62;-1:-1:-1;;;6967:18:1;;;6960:36;7013:19;;7359:73:0::1;6810:228:1::0;7359:73:0::1;7469:6;::::0;;7448:38:::1;::::0;-1:-1:-1;;;;;7448:38:0;;::::1;::::0;7469:6;::::1;::::0;7448:38:::1;::::0;::::1;7497:6;:17:::0;;-1:-1:-1;;;;;;7497:17:0::1;-1:-1:-1::0;;;;;7497:17:0;;;::::1;::::0;;;::::1;::::0;;7278:244::o;2141:132::-;2199:7;2226:39;2230:1;2233;2226:39;;;;;;;;;;;;;;;;;:3;:39::i;1321:136::-;1379:7;1406:43;1410:1;1413;1406:43;;;;;;;;;;;;;;;;;:3;:43::i;19779:338::-;-1:-1:-1;;;;;19872:19:0;;19864:68;;;;-1:-1:-1;;;19864:68:0;;9483:2:1;19864:68:0;;;9465:21:1;9522:2;9502:18;;;9495:30;9561:34;9541:18;;;9534:62;-1:-1:-1;;;9612:18:1;;;9605:34;9656:19;;19864:68:0;9455:226:1;19864:68:0;-1:-1:-1;;;;;19951:21:0;;19943:68;;;;-1:-1:-1;;;19943:68:0;;7245:2:1;19943:68:0;;;7227:21:1;7284:2;7264:18;;;7257:30;7323:34;7303:18;;;7296:62;-1:-1:-1;;;7374:18:1;;;7367:32;7416:19;;19943:68:0;7217:224:1;19943:68:0;-1:-1:-1;;;;;20025:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20077:32;;9832:25:1;;;20077:32:0;;9805:18:1;20077:32:0;;;;;;;19779:338;;;:::o;26349:584::-;-1:-1:-1;;;;;26438:19:0;;;26427:10;26438:19;;;:13;:19;;;;;;;;;26480:17;;;;;;;;;26541:24;;;:18;:24;;;;;;26438:19;;;;;26480:17;;;;26438:19;;26541:24;;:48;;-1:-1:-1;;;;;;26567:22:0;;;;;;:18;:22;;;;;;;;26541:48;26538:339;;;-1:-1:-1;26615:5:0;26538:339;;;26656:5;:13;;;;26663:6;26656:13;26653:213;;;26706:15;;26698:6;:23;;26690:32;;;;;;26744:6;:25;;;;-1:-1:-1;26753:16:0;;-1:-1:-1;;;26753:16:0;;;;26752:17;26744:25;:48;;;;-1:-1:-1;26771:21:0;;-1:-1:-1;;;26771:21:0;;;;26744:48;26741:109;;;26830:13;;26815:35;;-1:-1:-1;;;26830:13:0;;;;26844:5;26815:14;:35::i;:::-;26887:38;26902:4;26907:2;26910:6;26917:7;26887:14;:38::i;:::-;26349:584;;;;;;:::o;1463:193::-;1549:7;1585:12;1577:6;;;;1569:29;;;;-1:-1:-1;;;1569:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1609:9:0;1621:5;1625:1;1621;:5;:::i;:::-;1609:17;1463:193;-1:-1:-1;;;;;1463:193:0:o;21346:163::-;21387:7;21408:15;21425;21444:19;:17;:19::i;:::-;21407:56;;-1:-1:-1;21407:56:0;-1:-1:-1;21481:20:0;21407:56;;21481:11;:20::i;:::-;21474:27;;;;21346:163;:::o;1133:182::-;1191:7;;1223:5;1227:1;1223;:5;:::i;:::-;1211:17;;1252:1;1247;:6;;1239:46;;;;-1:-1:-1;;;1239:46:0;;7648:2:1;1239:46:0;;;7630:21:1;7687:2;7667:18;;;7660:30;7726:29;7706:18;;;7699:57;7773:18;;1239:46:0;7620:177:1;20146:419:0;20205:7;20214;20223;20232;20241;20250;20271:23;20296:12;20310:18;20332:20;20344:7;20332:11;:20::i;:::-;20270:82;;;;;;20364:15;20381:23;20406:12;20422:50;20434:7;20443:4;20449:10;20461;:8;:10::i;:::-;20422:11;:50::i;:::-;20363:109;;;;-1:-1:-1;20363:109:0;;-1:-1:-1;20523:15:0;;-1:-1:-1;20540:4:0;;-1:-1:-1;20546:10:0;;-1:-1:-1;20146:419:0;;-1:-1:-1;;;;;20146:419:0:o;23575:1311::-;16783:16;:23;;-1:-1:-1;;;;16783:23:0;;-1:-1:-1;;;16783:23:0;;;;;;23731:4:::1;::::0;23700:30:::1;::::0;-1:-1:-1;;;;;23710:19:0;23700:9:::1;:30::i;:::-;23685:45;::::0;::::1;::::0;::::1;;:::i;:::-;:50;;;;:::i;:::-;23670:65;;23782:23;23808:24;23826:4;23808:9;:24::i;:::-;23912:9;::::0;23782:50;;-1:-1:-1;23866:19:0::1;::::0;23924:3:::1;::::0;23908:13:::1;::::0;23912:9:::1;;23908:2;:13;:::i;:::-;23887:35;::::0;:19:::1;:35;:::i;:::-;23886:41;;;;:::i;:::-;23866:61;;23993:11;23984:6;:20;:43;;24021:6;23984:43;;;24007:11;23984:43;23975:52;;24072:6;24054:15;:24;24050:142;;;24099:12;24095:86;;;24139:15;24130:24;;24095:86;;;24174:7;;;;;24095:86;24238:6;:19:::0;24202:28:::1;::::0;24258:3:::1;::::0;24231:26:::1;::::0;24238:19:::1;;24231:6:::0;:26:::1;:::i;:::-;:30;;;;:::i;:::-;24202:59:::0;-1:-1:-1;24272:18:0::1;24291:27;24202:59:::0;24291:6;:27:::1;:::i;:::-;24272:46:::0;-1:-1:-1;24329:23:0::1;24353:22;24374:1;24353:20:::0;:22:::1;:::i;:::-;24329:46:::0;-1:-1:-1;24386:26:0::1;24413:36;24329:46:::0;24413:20;:36:::1;:::i;:::-;24386:63:::0;-1:-1:-1;24467:29:0::1;24486:10:::0;24386:63;24467:29:::1;:::i;:::-;24460:36:::0;-1:-1:-1;24522:21:0::1;24507:14;24571:28;24522:21:::0;24571::::1;:28;:::i;:::-;24554:45:::0;-1:-1:-1;24610:13:0::1;24654:6:::0;24627:25:::1;24634:18:::0;24554:45;24627:25:::1;:::i;:::-;24626:34;;;;:::i;:::-;24610:50;;24671:36;24684:15;24701:5;24671:12;:36::i;:::-;24718:20;24739:28;24761:6:::0;24739:21:::1;:28;:::i;:::-;24786:15;::::0;24778:47:::1;::::0;24718:49;;-1:-1:-1;;;;;;24786:15:0::1;::::0;24778:47;::::1;;;::::0;24718:49;;24786:15:::1;24778:47:::0;24786:15;24778:47;24718:49;24786:15;24778:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24841:37:0::1;::::0;;10042:25:1;;;10098:2;10083:18;;10076:34;;;24841:37:0::1;::::0;10015:18:1;24841:37:0::1;;;;;;;16817:1;;;;;;;;;;;;-1:-1:-1::0;;16829:16:0;:24;;-1:-1:-1;;;;16829:24:0;;;23575:1311::o;2279:279::-;2365:7;2400:12;2393:5;2385:28;;;;-1:-1:-1;;;2385:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2424:9:0;2436:5;2440:1;2436;:5;:::i;26939:814::-;27050:7;27046:40;;27072:14;:12;:14::i;:::-;-1:-1:-1;;;;;27101:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27125:22:0;;;;;;:11;:22;;;;;;;;27124:23;27101:46;27097:597;;;27164:48;27186:6;27194:9;27205:6;27164:21;:48::i;:::-;27097:597;;;-1:-1:-1;;;;;27235:19:0;;;;;;:11;:19;;;;;;;;27234:20;:46;;;;-1:-1:-1;;;;;;27258:22:0;;;;;;:11;:22;;;;;;;;27234:46;27230:464;;;27297:46;27317:6;27325:9;27336:6;27297:19;:46::i;27230:464::-;-1:-1:-1;;;;;27366:19:0;;;;;;:11;:19;;;;;;;;27365:20;:47;;;;-1:-1:-1;;;;;;27390:22:0;;;;;;:11;:22;;;;;;;;27389:23;27365:47;27361:333;;;27429:44;27447:6;27455:9;27466:6;27429:17;:44::i;27361:333::-;-1:-1:-1;;;;;27495:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27518:22:0;;;;;;:11;:22;;;;;;;;27495:45;27491:203;;;27557:48;27579:6;27587:9;27598:6;27557:21;:48::i;27491:203::-;27638:44;27656:6;27664:9;27675:6;27638:17;:44::i;:::-;27708:7;27704:41;;27730:15;22755:19;;22741:11;:33;22801:21;;22785:13;:37;22697:133;27730:15;26939:814;;;;:::o;21515:561::-;21612:7;;21648;;21565;;;;;21672:289;21696:9;:16;21692:20;;21672:289;;;21762:7;21738;:21;21746:9;21756:1;21746:12;;;;;;-1:-1:-1;;;21746:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21746:12:0;21738:21;;;;;;;;;;;;;:31;;:66;;;21797:7;21773;:21;21781:9;21791:1;21781:12;;;;;;-1:-1:-1;;;21781:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21781:12:0;21773:21;;;;;;;;;;;;;:31;21738:66;21734:97;;;21814:7;;21823;;21806:25;;;;;;;21515:561;;:::o;21734:97::-;21856:34;21868:7;:21;21876:9;21886:1;21876:12;;;;;;-1:-1:-1;;;21876:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21876:12:0;21868:21;;;;;;;;;;;;;21856:7;;:11;:34::i;:::-;21846:44;;21915:34;21927:7;:21;21935:9;21945:1;21935:12;;;;;;-1:-1:-1;;;21935:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21935:12:0;21927:21;;;;;;;;;;;;;21915:7;;:11;:34::i;:::-;21905:44;-1:-1:-1;21714:3:0;;;;:::i;:::-;;;;21672:289;;;-1:-1:-1;21997:7:0;;21985;;:20;;:11;:20::i;:::-;21975:7;:30;21971:61;;;22015:7;;22024;;22007:25;;;;;;21515:561;;:::o;21971:61::-;22051:7;;22060;;-1:-1:-1;21515:561:0;-1:-1:-1;21515:561:0:o;20571:334::-;20631:7;20640;20649;20669:12;20684:28;20704:7;20684:19;:28::i;:::-;20669:43;;20723:18;20744:30;20766:7;20744:21;:30::i;:::-;20723:51;-1:-1:-1;20785:23:0;20811:33;20723:51;20811:17;:7;20823:4;20811:11;:17::i;:::-;:21;;:33::i;:::-;20785:59;20880:4;;-1:-1:-1;20886:10:0;;-1:-1:-1;20571:334:0;;-1:-1:-1;;;20571:334:0:o;20911:429::-;21026:7;;;;21082:24;:7;21094:11;21082;:24::i;:::-;21064:42;-1:-1:-1;21117:12:0;21132:21;:4;21141:11;21132:8;:21::i;:::-;21117:36;-1:-1:-1;21164:18:0;21185:27;:10;21200:11;21185:14;:27::i;:::-;21164:48;-1:-1:-1;21223:23:0;21249:33;21164:48;21249:17;:7;21261:4;21249:11;:17::i;:33::-;21301:7;;;;-1:-1:-1;21327:4:0;;-1:-1:-1;20911:429:0;;-1:-1:-1;;;;;;;20911:429:0:o;25347:446::-;25440:9;25428:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;25460:14:0;;:325;;-1:-1:-1;;;25460:325:0;;25599:4;25460:325;;;5154:34:1;;;5204:18;;;5197:34;;;25460:14:0;5247:18:1;;;5240:34;;;5290:18;;;5283:34;5333:19;;;5326:44;25759:15:0;5386:19:1;;;5379:35;-1:-1:-1;;;;;25460:14:0;;;;:30;;25498:9;;5088:19:1;;25460:325:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25347:446;;:::o;22439:252::-;22485:11;;:16;:38;;;;-1:-1:-1;22505:13:0;;:18;22485:38;22482:50;;;22439:252::o;22482:50::-;22567:11;;;22545:19;:33;22613:13;;;22589:21;:37;-1:-1:-1;22640:15:0;;;;22666:17;22439:252::o;28804:539::-;28907:15;28924:23;28949:12;28963:23;28988:12;29002:18;29024:19;29035:7;29024:10;:19::i;:::-;-1:-1:-1;;;;;29072:15:0;;;;;;:7;:15;;;;;;28906:137;;-1:-1:-1;28906:137:0;;-1:-1:-1;28906:137:0;;-1:-1:-1;28906:137:0;-1:-1:-1;28906:137:0;-1:-1:-1;28906:137:0;-1:-1:-1;29072:28:0;;29092:7;29072:19;:28::i;:::-;-1:-1:-1;;;;;29054:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29129:7;:15;;;;:28;;29149:7;29129:19;:28::i;:::-;-1:-1:-1;;;;;29111:15:0;;;;;;;:7;:15;;;;;;:46;;;;29189:18;;;;;;;:39;;29212:15;29189:22;:39::i;:::-;-1:-1:-1;;;;;29168:18:0;;;;;;:7;:18;;;;;:60;29242:33;29252:10;29264:4;29270;29242:9;:33::i;:::-;29308:9;-1:-1:-1;;;;;29291:44:0;29300:6;-1:-1:-1;;;;;29291:44:0;;29319:15;29291:44;;;;9832:25:1;;9820:2;9805:18;;9787:76;29291:44:0;;;;;;;;28804:539;;;;;;;;;:::o;28239:559::-;28340:15;28357:23;28382:12;28396:23;28421:12;28435:18;28457:19;28468:7;28457:10;:19::i;:::-;-1:-1:-1;;;;;28505:15:0;;;;;;:7;:15;;;;;;28339:137;;-1:-1:-1;28339:137:0;;-1:-1:-1;28339:137:0;;-1:-1:-1;28339:137:0;-1:-1:-1;28339:137:0;-1:-1:-1;28339:137:0;-1:-1:-1;28505:28:0;;28339:137;28505:19;:28::i;:::-;-1:-1:-1;;;;;28487:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;28565:18;;;;;:7;:18;;;;;:39;;28588:15;28565:22;:39::i;:::-;-1:-1:-1;;;;;28544:18:0;;;;;;:7;:18;;;;;;;;:60;;;;28636:7;:18;;;;:39;;28659:15;28636:22;:39::i;27758:475::-;27857:15;27874:23;27899:12;27913:23;27938:12;27952:18;27974:19;27985:7;27974:10;:19::i;:::-;-1:-1:-1;;;;;28022:15:0;;;;;;:7;:15;;;;;;27856:137;;-1:-1:-1;27856:137:0;;-1:-1:-1;27856:137:0;;-1:-1:-1;27856:137:0;-1:-1:-1;27856:137:0;-1:-1:-1;27856:137:0;-1:-1:-1;28022:28:0;;27856:137;28022:19;:28::i;29349:615::-;29452:15;29469:23;29494:12;29508:23;29533:12;29547:18;29569:19;29580:7;29569:10;:19::i;:::-;-1:-1:-1;;;;;29617:15:0;;;;;;:7;:15;;;;;;29451:137;;-1:-1:-1;29451:137:0;;-1:-1:-1;29451:137:0;;-1:-1:-1;29451:137:0;-1:-1:-1;29451:137:0;-1:-1:-1;29451:137:0;-1:-1:-1;29617:28:0;;29637:7;29617:19;:28::i;:::-;-1:-1:-1;;;;;29599:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29674:7;:15;;;;:28;;29694:7;29674:19;:28::i;22099:162::-;22167:7;22194:59;22237:5;22194:24;22206:11;;22194:7;:11;;:24;;;;:::i;:::-;:28;;:59::i;22267:166::-;22337:7;22364:61;22409:5;22364:26;22376:13;;22364:7;:11;;:26;;;;:::i;1662:473::-;1720:7;1965:6;1961:47;;-1:-1:-1;1995:1:0;1988:8;;1961:47;2021:9;2033:5;2037:1;2033;:5;:::i;:::-;2021:17;-1:-1:-1;2066:1:0;2057:5;2061:1;2021:17;2057:5;:::i;:::-;:10;2049:56;;;;-1:-1:-1;;;2049:56:0;;8720:2:1;2049:56:0;;;8702:21:1;8759:2;8739:18;;;8732:30;8798:34;8778:18;;;8771:62;-1:-1:-1;;;8849:18:1;;;8842:31;8890:19;;2049:56:0;8692:223:1;22836:460:0;22932:7;;:17;;22944:4;22932:11;:17::i;:::-;22922:7;:27;22973:10;;:20;;22988:4;22973:14;:20::i;:::-;22960:10;:33;23004:19;23027:10;:8;:10::i;:::-;23004:33;-1:-1:-1;23048:18:0;23069:27;:10;23004:33;23069:14;:27::i;:::-;23148:4;23132:22;;;;:7;:22;;;;;;23048:48;;-1:-1:-1;23132:38:0;;23048:48;23132:26;:38::i;:::-;23123:4;23107:22;;;;:7;:22;;;;;;;;:63;;;;23184:11;:26;;;;;;23181:107;;;23266:4;23250:22;;;;:7;:22;;;;;;:38;;23277:10;23250:26;:38::i;:::-;23241:4;23225:22;;;;:7;:22;;;;;:63;22836:460;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:156::-;258:20;;318:4;307:16;;297:27;;287:2;;338:1;335;328:12;353:196;412:6;465:2;453:9;444:7;440:23;436:32;433:2;;;486:6;478;471:22;433:2;514:29;533:9;514:29;:::i;554:270::-;622:6;630;683:2;671:9;662:7;658:23;654:32;651:2;;;704:6;696;689:22;651:2;732:29;751:9;732:29;:::i;:::-;722:39;;780:38;814:2;803:9;799:18;780:38;:::i;:::-;770:48;;641:183;;;;;:::o;829:338::-;906:6;914;922;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1024:29;1043:9;1024:29;:::i;:::-;1014:39;;1072:38;1106:2;1095:9;1091:18;1072:38;:::i;:::-;1062:48;;1157:2;1146:9;1142:18;1129:32;1119:42;;933:234;;;;;:::o;1172:325::-;1237:6;1245;1298:2;1286:9;1277:7;1273:23;1269:32;1266:2;;;1319:6;1311;1304:22;1266:2;1347:29;1366:9;1347:29;:::i;:::-;1337:39;;1426:2;1415:9;1411:18;1398:32;1439:28;1461:5;1439:28;:::i;:::-;1486:5;1476:15;;;1256:241;;;;;:::o;1502:264::-;1570:6;1578;1631:2;1619:9;1610:7;1606:23;1602:32;1599:2;;;1652:6;1644;1637:22;1599:2;1680:29;1699:9;1680:29;:::i;:::-;1670:39;1756:2;1741:18;;;;1728:32;;-1:-1:-1;;;1589:177:1:o;1771:251::-;1827:6;1880:2;1868:9;1859:7;1855:23;1851:32;1848:2;;;1901:6;1893;1886:22;1848:2;1945:9;1932:23;1964:28;1986:5;1964:28;:::i;2027:255::-;2094:6;2147:2;2135:9;2126:7;2122:23;2118:32;2115:2;;;2168:6;2160;2153:22;2115:2;2205:9;2199:16;2224:28;2246:5;2224:28;:::i;2287:190::-;2346:6;2399:2;2387:9;2378:7;2374:23;2370:32;2367:2;;;2420:6;2412;2405:22;2367:2;-1:-1:-1;2448:23:1;;2357:120;-1:-1:-1;2357:120:1:o;2482:194::-;2552:6;2605:2;2593:9;2584:7;2580:23;2576:32;2573:2;;;2626:6;2618;2611:22;2573:2;-1:-1:-1;2654:16:1;;2563:113;-1:-1:-1;2563:113:1:o;2681:319::-;2746:6;2754;2807:2;2795:9;2786:7;2782:23;2778:32;2775:2;;;2828:6;2820;2813:22;2775:2;2869:9;2856:23;2846:33;;2929:2;2918:9;2914:18;2901:32;2942:28;2964:5;2942:28;:::i;3005:316::-;3093:6;3101;3109;3162:2;3150:9;3141:7;3137:23;3133:32;3130:2;;;3183:6;3175;3168:22;3130:2;3217:9;3211:16;3201:26;;3267:2;3256:9;3252:18;3246:25;3236:35;;3311:2;3300:9;3296:18;3290:25;3280:35;;3120:201;;;;;:::o;3326:192::-;3383:6;3436:2;3424:9;3415:7;3411:23;3407:32;3404:2;;;3457:6;3449;3442:22;3404:2;3485:27;3502:9;3485:27;:::i;3523:321::-;3586:6;3594;3647:2;3635:9;3626:7;3622:23;3618:32;3615:2;;;3668:6;3660;3653:22;3615:2;3696:27;3713:9;3696:27;:::i;3849:262::-;3913:6;3921;3974:2;3962:9;3953:7;3949:23;3945:32;3942:2;;;3995:6;3987;3980:22;3942:2;4023:27;4040:9;4023:27;:::i;:::-;4013:37;;4069:36;4101:2;4090:9;4086:18;4069:36;:::i;5617:603::-;5729:4;5758:2;5787;5776:9;5769:21;5819:6;5813:13;5862:6;5857:2;5846:9;5842:18;5835:34;5887:4;5900:140;5914:6;5911:1;5908:13;5900:140;;;6009:14;;;6005:23;;5999:30;5975:17;;;5994:2;5971:26;5964:66;5929:10;;5900:140;;;6058:6;6055:1;6052:13;6049:2;;;6128:4;6123:2;6114:6;6103:9;6099:22;6095:31;6088:45;6049:2;-1:-1:-1;6204:2:1;6183:15;-1:-1:-1;;6179:29:1;6164:45;;;;6211:2;6160:54;;5738:482;-1:-1:-1;;;5738:482:1:o;8920:356::-;9122:2;9104:21;;;9141:18;;;9134:30;9200:34;9195:2;9180:18;;9173:62;9267:2;9252:18;;9094:182::o;10847:128::-;10887:3;10918:1;10914:6;10911:1;10908:13;10905:2;;;10924:18;;:::i;:::-;-1:-1:-1;10960:9:1;;10895:80::o;10980:204::-;11018:3;11054:4;11051:1;11047:12;11086:4;11083:1;11079:12;11121:3;11115:4;11111:14;11106:3;11103:23;11100:2;;;11129:18;;:::i;:::-;11165:13;;11026:158;-1:-1:-1;;;11026:158:1:o;11189:217::-;11229:1;11255;11245:2;;-1:-1:-1;;;11280:31:1;;11334:4;11331:1;11324:15;11362:4;11287:1;11352:15;11245:2;-1:-1:-1;11391:9:1;;11235:171::o;11411:422::-;11500:1;11543:5;11500:1;11557:270;11578:7;11568:8;11565:21;11557:270;;;11637:4;11633:1;11629:6;11625:17;11619:4;11616:27;11613:2;;;11646:18;;:::i;:::-;11696:7;11686:8;11682:22;11679:2;;;11716:16;;;;11679:2;11795:22;;;;11755:15;;;;11557:270;;;11561:3;11475:358;;;;;:::o;11838:140::-;11896:5;11925:47;11966:4;11956:8;11952:19;11946:4;12032:5;12062:8;12052:2;;-1:-1:-1;12103:1:1;12117:5;;12052:2;12151:4;12141:2;;-1:-1:-1;12188:1:1;12202:5;;12141:2;12233:4;12251:1;12246:59;;;;12319:1;12314:130;;;;12226:218;;12246:59;12276:1;12267:10;;12290:5;;;12314:130;12351:3;12341:8;12338:17;12335:2;;;12358:18;;:::i;:::-;-1:-1:-1;;12414:1:1;12400:16;;12429:5;;12226:218;;12528:2;12518:8;12515:16;12509:3;12503:4;12500:13;12496:36;12490:2;12480:8;12477:16;12472:2;12466:4;12463:12;12459:35;12456:77;12453:2;;;-1:-1:-1;12565:19:1;;;12597:5;;12453:2;12644:34;12669:8;12663:4;12644:34;:::i;:::-;12714:6;12710:1;12706:6;12702:19;12693:7;12690:32;12687:2;;;12725:18;;:::i;:::-;12763:20;;12042:747;-1:-1:-1;;;12042:747:1:o;12794:168::-;12834:7;12900:1;12896;12892:6;12888:14;12885:1;12882:21;12877:1;12870:9;12863:17;12859:45;12856:2;;;12907:18;;:::i;:::-;-1:-1:-1;12947:9:1;;12846:116::o;12967:125::-;13007:4;13035:1;13032;13029:8;13026:2;;;13040:18;;:::i;:::-;-1:-1:-1;13077:9:1;;13016:76::o;13097:380::-;13176:1;13172:12;;;;13219;;;13240:2;;13294:4;13286:6;13282:17;13272:27;;13240:2;13347;13339:6;13336:14;13316:18;13313:38;13310:2;;;13393:10;13388:3;13384:20;13381:1;13374:31;13428:4;13425:1;13418:15;13456:4;13453:1;13446:15;13310:2;;13152:325;;;:::o;13482:135::-;13521:3;-1:-1:-1;;13542:17:1;;13539:2;;;13562:18;;:::i;:::-;-1:-1:-1;13609:1:1;13598:13;;13529:88::o;13622:127::-;13683:10;13678:3;13674:20;13671:1;13664:31;13714:4;13711:1;13704:15;13738:4;13735:1;13728:15;13754:118;13840:5;13833:13;13826:21;13819:5;13816:32;13806:2;;13862:1;13859;13852:12

Swarm Source

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