ETH Price: $3,388.15 (+1.28%)

Token

Mini-Stars (STARS)
 

Overview

Max Total Supply

1,000,000,000 STARS

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
*🇵🇱pl.eth
Balance
2,000,200 STARS

Value
$0.00
0xc1cad6df277106222dd45cf5b0300fbd4d1193d5
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:
MiniStars

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-10
*/

/*
Mini-Stars $STARS

Website: https://ministars.club
Telegram: https://t.me/ministarsportal
Twitter: https://twitter.com/ministarseth
Discord: https://discord.gg/ministars

    ________________________________________________________________________________
    ______________________________________________________________g ________________
    ____________________________________________________________a$$r________________
    __________________________________________________________,$$$$r________________
    ________________________________________________________,$$$$$$r________________
    ________________________________________________________$$$$$$@`________________
    ______________ @________________________________________|$$$$$@`________________
    ______________ $N___________________________________g@__]$$$$@*_________________
    ______________ $$$ _______________________________g$$[__]$$@F__ ________________
    _______________$$$&,____________________________,$$$$@__]@F___;_________________
    _______________$$$$&w____,._____________________]$$$$[__'___,&&_________________
    _______________$$$$$$w__g$$@;___________________]$$$$H____,$$$$_________________
    _______________$$$$$$$@g$$$$$@_.`_________,,____]$$$$U___@$$$$@_________________
    _______________$$$$$$$$$$$$$$[_]$N,_____g$$&L___j$$$$U__j$$$$$@_________________
    _______________$$$R$$$$$$$$$$@_]$$$$__]$$$$$&m__j$$$$U__j$$$$$@_________________
    _______________$$$["$$$$$$$$$@_]&&@@__|$$$$$$$w_]$$$$U__j$$$$$[_________________
    _______________$$$[_]$$$$F]$$@_ |L____|$$$$$$$$@j$$$$H__j$$$$$[_________________
    _______________$$$[__]$N__]$$@_j$$$$__]$$$$$$$$$$$$$$[__j$$$$$[_________________
    _______________$$$[__,|___j$$@_j$$$$__]$$$[R$$$$$$$$$[__]$$$$$@_________________
    _______________RRRM!!!`___j$$@_j$$$$__]$$$h_*$$$$$$$$@__]$$$$$@_________________
    ____________________... __"&$$_j$$$M,.T$$$L___T$$$$@F___ RMMRRN_________________
    ________________,$$$$$$[_@;_]T_jM*!'_,,gQR@_____BN*_____....____________________
    ________________$$$NRRRh_$$&w '|r.,@@@@@%&&gr_______,g$$$$$$$$@_________________
    _______________j$$@__';___7&$$Wg|]@@M*%@@%gWgy/`___)$$$$$$$$$$[_________________
    ________________$$$&w,'!;:.|$$@$H%@@  %@@@$$MR&$@__&$$$N____"""_________________
    ________________J$$$$$$W___]$$@:"]@%@@@@@K$$r_ $$H_$$$$@.___ ___________________
    __________________T&$$$$@__]$$m|,#@NK@@%N@$$$@$$N _&$$$$$&@g,   ________________
    _______________,gg __]$$$__]$$@''#@@ _]@@@$$H $&,___&$$$$$$$$$@ ________________
    _______________]$$&w;g$$$________"_______*T&U_]$@   __T&$$$$$$$@ _______________
    ________________]$$$$$$$C________________________`,,,; _ ^7&$$$$@_______________
    __________________?TMMF___________________________]$$$N,____$$$$@_______________
    ___________________________________________________$$$$$@@@$$$$$H_______________
    ____________________________________________________J$$$$$$$$$$M________________
    ______________________________________________________"TMRRRM*__________________
    ________________________________________________________________________________
    ________________________________________________________________________________

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.16;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * C U ON THE MOON
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
            }
        }
    }
}

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDEXPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    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");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to 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;
    }
}

interface IAntiSnipe {
  function setTokenOwner(address owner, address pair) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract MiniStars is IERC20, Ownable {
    using Address for address;
    
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "Mini-Stars";
    string constant _symbol = "STARS";
    uint8 constant _decimals = 9;

    uint256 constant _totalSupply = 1_000_000_000 * (10 ** _decimals);

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) protectedWallet;

    uint256 NBAFee = 10;
    uint256 marketingFee = 30;
    uint256 stakingFee = 30;
    uint256 NBASellFee = 10;
    uint256 marketingSellFee = 85;
    uint256 stakingSellFee = 75;
    uint256 totalFee = 70;
    uint256 totalSellFee = 170;

    uint256 constant feeDenominator = 1000;

    address public NBAReceiver;
    address public marketingReceiver;
    address public stakingReceiver;

    IDEXRouter public router;
    
    address constant routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
 
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400; //0.25%
    uint256 public swapMinimum = _totalSupply / 10000; //0.01%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (address _nba, address _marketing, address _staking) {
        NBAReceiver = _nba;
        marketingReceiver = _marketing;
        stakingReceiver = _staking;
      
        isFeeExempt[owner()] = true;

        uint256 contractBalance = _totalSupply / 10;
        uint256 ownerBalance = _totalSupply - contractBalance;

        _balances[owner()] = ownerBalance;
        emit Transfer(address(0), owner(), ownerBalance);
        _balances[address(this)] = contractBalance;
        emit Transfer(address(0), address(this), contractBalance);
    }

    receive() external payable { }

    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "Zero amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        _balances[sender] -= amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(sender, recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] += amountReceived;
            
        if(launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        require(!isProtectedWallet(sender), "Wallet protection enabled, please contact support");

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

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if (selling) return totalSellFee;
        return totalFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = (amount * getTotalFee(liquidityPools[recipient])) / feeDenominator;
        
        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        if(liquidityPools[sender] && block.number <= launchedAt + 2){ protectedWallet[recipient] = true; }

        return amount - feeAmount;
    }

    function shouldSwapBack(address sender, address recipient) internal view returns (bool) {
        return !liquidityPools[sender]
        && !isFeeExempt[sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum && 
        (totalFee > 0 || totalSellFee > 0);
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        //Guaranteed swap desired to prevent trade blockages
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        uint256 totalETHFee = totalFee + totalSellFee;

        uint256 amountNBA = (contractBalance * (NBAFee + NBASellFee)) / totalETHFee;
        uint256 amountStaking = (contractBalance * (stakingFee + stakingSellFee)) / totalETHFee;
        uint256 amountMarketing = contractBalance - (amountNBA + amountStaking);
        
        if (amountNBA > 0) {
            (bool sentNBA, ) = NBAReceiver.call{value: amountNBA}("");
            require(sentNBA, "Failed to transfer funds to NBA wallet");
        }
        if (amountStaking > 0) {
            (bool sentStaking, ) = stakingReceiver.call{value: amountStaking}("");
            require(sentStaking, "Failed to transfer funds to staking wallet");
        }
        if (amountMarketing > 0) {
            (bool sentMarketing, ) = marketingReceiver.call{value: amountMarketing}("");
            require(sentMarketing, "Failed to transfer funds to marketing wallet");
        }
    }

    function extractStuckETH() external onlyOwner {
        (bool extracted, ) = owner().call{value: address(this).balance}("");
        require(extracted, "Failed to transfer funds");
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(address(0)));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function transferOwnership(address newOwner) public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.transferOwnership(newOwner);
        isFeeExempt[newOwner] = true;
        liquidityProviders[newOwner] = true;
        _allowances[newOwner][routerAddress] = type(uint256).max;
    }

    function renounceOwnership() public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.renounceOwnership();
    }

    function setProtectionEnabled(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled, "Protection disabled");
        protectionEnabled = _protect;
        emit ProtectionToggle(_protect);
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled, "Protection disabled");
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(address(this), pair);
        
        emit ProtectionSet(_protection);
    }
    
    function disableProtection() external onlyOwner {
        protectionEnabled = false;
        protectionDisabled = true;
        emit ProtectionDisabled();
    }

    function isProtectedWallet(address _wallet) public view returns(bool) {
        return protectedWallet[_wallet];
    }

    function removeProtectedWallet(address _wallet) external onlyOwner {
        if (isProtectedWallet(_wallet)) protectedWallet[_wallet] = false;
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        require(_provider != pair && _provider != routerAddress, "Can't alter trading contracts in this manner.");
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        emit LiquidityProviderSet(_provider);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isFeeExempt[holder] = exempt;
        emit FeeExemptSet(holder, exempt);
    }

    function setBuyFees(uint256 _NBAFee, uint256 _marketingFee, uint256 _stakingFee) external onlyOwner {
        NBAFee = _NBAFee;
        marketingFee = _marketingFee;
        stakingFee = _stakingFee;
        totalFee = _NBAFee + _marketingFee + _stakingFee;
        require(totalFee * 100 / feeDenominator <= 15 , "Fees too high");
        emit FeesSet(totalFee, feeDenominator);
    }

    function setSellFees(uint256 _NBAFee, uint256 _marketingFee, uint256 _stakingFee) external onlyOwner {
        NBASellFee = _NBAFee;
        marketingSellFee = _marketingFee;
        stakingSellFee = _stakingFee;
        totalSellFee = _NBAFee + _marketingFee + _stakingFee;
        require(totalSellFee * 100 / feeDenominator <= 20, "Fees too high");
        emit FeesSet(totalSellFee, feeDenominator);
    }

    function setNBAReceiver(address _nba) external onlyOwner {
        NBAReceiver = _nba;
        emit UpdatedFeeReceiver(_nba);
    }

    function setMarketingReceiver(address _marketing) external onlyOwner {
        marketingReceiver = _marketing;
        emit UpdatedFeeReceiver(_marketing);
    }

    function setStakingReceiver(address _staking) external onlyOwner {
        stakingReceiver = _staking;
        emit UpdatedFeeReceiver(_staking);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0, "Denominators must be greater than 0");
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
        emit SwapSettingsSet(swapMinimum, swapThreshold, swapEnabled);
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        require(_pool != address(0), "Invalid address");
        liquidityPools[_pool] = _enabled;
        emit LiquidityPoolSet(_pool, _enabled);
    }

    function addLP() external payable onlyOwner() {
        require(!launched(), "Liquidity already added"); 
        require(msg.value > 0, "Insufficient funds");
        uint256 toLP = msg.value;

        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(address(this),router.WETH());
        liquidityPools[pair] = true;

        liquidityProviders[address(this)] = true;
        isFeeExempt[address(this)] = true;
        _allowances[address(this)][routerAddress] = type(uint256).max;

        router.addLiquidityETH{value: toLP}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);

        launchedAt = block.number;
        launchedTime = block.timestamp;
        emit TradingLaunched();
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length, "Array lengths don't match");

        //This function may run out of gas intentionally to prevent partial airdrops
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]] && _addresses[i] != address(0), "Can't airdrop the liquidity pool or address 0");
            _basicTransfer(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
        }

        emit AirdropSent(msg.sender);
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    event ProtectionSet(address indexed protection);
    event ProtectionDisabled();
    event LiquidityProviderSet(address indexed provider);
    event TradingLaunched();
    event FeeExemptSet(address indexed wallet, bool isExempt);
    event FeesSet(uint256 totalFees, uint256 denominator);
    event UpdatedFeeReceiver(address indexed wallet);
    event SwapSettingsSet(uint256 minimum, uint256 maximum, bool enabled);
    event LiquidityPoolSet(address indexed pool, bool enabled);
    event AirdropSent(address indexed from);
    event ProtectionToggle(bool isEnabled);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_nba","type":"address"},{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"}],"name":"AirdropSent","type":"event"},{"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":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"FeeExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LiquidityPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"}],"name":"LiquidityProviderSet","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":[],"name":"ProtectionDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protection","type":"address"}],"name":"ProtectionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"ProtectionToggle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minimum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maximum","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapSettingsSet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingLaunched","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"UpdatedFeeReceiver","type":"event"},{"inputs":[],"name":"NBAReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":"spender","type":"address"}],"name":"approveMax","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extractStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"isProtectedWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"removeProtectedWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NBAFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"}],"name":"setMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nba","type":"address"}],"name":"setNBAReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_NBAFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"}]

6080604052600a6005819055601e6006819055600755600881905560556009908155604b82556046600b5560aa600c556016805462ffffff60a01b19166201000160a01b179055610190916200005691906200039f565b6200006690633b9aca00620003b7565b620000729190620003d9565b601755612710620000866009600a6200039f565b6200009690633b9aca00620003b7565b620000a29190620003d9565b601855348015620000b257600080fd5b50604051620036a3380380620036a3833981016040819052620000d59162000419565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d80546001600160a01b038581166001600160a01b031992831617909255600e8054858416908316179055600f80548484169216919091179055600080549091168152600360205260408120805460ff19166001179055600a6200017d6009826200039f565b6200018d90633b9aca00620003b7565b620001999190620003d9565b9050600081620001ac6009600a6200039f565b620001bc90633b9aca00620003b7565b620001c8919062000463565b90508060016000620001e26000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556200020f6000546001600160a01b031690565b6001600160a01b031660006001600160a01b031660008051602062003683833981519152836040516200024491815260200190565b60405180910390a33060008181526001602090815260408083208690555185815260008051602062003683833981519152910160405180910390a3505050505062000479565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002e1578160001904821115620002c557620002c56200028a565b80851615620002d357918102915b93841c9390800290620002a5565b509250929050565b600082620002fa5750600162000399565b81620003095750600062000399565b81600181146200032257600281146200032d576200034d565b600191505062000399565b60ff8411156200034157620003416200028a565b50506001821b62000399565b5060208310610133831016604e8410600b841016171562000372575081810a62000399565b6200037e8383620002a0565b80600019048211156200039557620003956200028a565b0290505b92915050565b6000620003b060ff841683620002e9565b9392505050565b6000816000190483118215151615620003d457620003d46200028a565b500290565b600082620003f757634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b03811681146200041457600080fd5b919050565b6000806000606084860312156200042f57600080fd5b6200043a84620003fc565b92506200044a60208501620003fc565b91506200045a60408501620003fc565b90509250925092565b818103818111156200039957620003996200028a565b6131fa80620004896000396000f3fe6080604052600436106102cd5760003560e01c80637516baec11610175578063c5363caa116100dc578063dd62ed3e11610095578063f24364cd1161006f578063f24364cd146108c5578063f2fde38b146108e5578063f8821a6214610905578063f887ea401461091b57600080fd5b8063dd62ed3e1461083f578063e624c4bc14610885578063f1f3bca3146108a557600080fd5b8063c5363caa1461077e578063cb3966eb1461079f578063ceafd6da146107bf578063d0889358146107df578063d51ed1c8146107ff578063d5d035f51461081f57600080fd5b8063a457c2d71161012e578063a457c2d7146106e0578063a5949bcf14610700578063a8aa1b3114610720578063a9059cbb14610740578063bc37e1a314610760578063bf56b3711461076857600080fd5b80637516baec1461063357806375b6253214610654578063882cfb3f14610674578063893d20e8146106945780638da5cb5b1461069457806395d89b41146106b257600080fd5b806327a6053911610234578063571ac8b0116101ed57806367243482116101c757806367243482146105a75780636ddd1713146105c757806370a08231146105e8578063715018a61461061e57600080fd5b8063571ac8b0146105515780635804f1e414610571578063658d4b7f1461058757600080fd5b806327a60539146104935780632b112e49146104cb578063313ce567146104e057806339509351146104fc578063421dd7c71461051c578063492a937b1461053157600080fd5b80630f683e90116102865780630f683e90146103de5780631161ae39146103fe57806313b78cde1461041e5780631652d2b11461043e57806318160ddd1461045e57806323b872dd1461047357600080fd5b806302cc315e146102d95780630445b667146102f057806306fdde0314610319578063095ea7b3146103555780630ccdc90a146103855780630d075d9c146103be57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee61093b565b005b3480156102fc57600080fd5b5061030660175481565b6040519081526020015b60405180910390f35b34801561032557600080fd5b5060408051808201909152600a8152694d696e692d537461727360b01b60208201525b6040516103109190612c44565b34801561036157600080fd5b50610375610370366004612ca7565b610a14565b6040519015158152602001610310565b34801561039157600080fd5b506103756103a0366004612cd3565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156103ca57600080fd5b506102ee6103d9366004612cf0565b610a2e565b3480156103ea57600080fd5b506102ee6103f9366004612cf0565b610b1e565b34801561040a57600080fd5b50610375610419366004612d1c565b610c05565b34801561042a57600080fd5b506102ee610439366004612cd3565b610c19565b34801561044a57600080fd5b506102ee610459366004612cd3565b610c85565b34801561046a57600080fd5b50610306610cf9565b34801561047f57600080fd5b5061037561048e366004612d3e565b610d1a565b34801561049f57600080fd5b50600d546104b3906001600160a01b031681565b6040516001600160a01b039091168152602001610310565b3480156104d757600080fd5b50610306610daf565b3480156104ec57600080fd5b5060405160098152602001610310565b34801561050857600080fd5b50610375610517366004612ca7565b610e2f565b34801561052857600080fd5b506102ee610e74565b34801561053d57600080fd5b506102ee61054c366004612d8d565b610edd565b34801561055d57600080fd5b5061037561056c366004612cd3565b610faf565b34801561057d57600080fd5b5061030660155481565b34801561059357600080fd5b506102ee6105a2366004612d8d565b610fbd565b3480156105b357600080fd5b506102ee6105c2366004612e12565b611087565b3480156105d357600080fd5b5060165461037590600160b01b900460ff1681565b3480156105f457600080fd5b50610306610603366004612cd3565b6001600160a01b031660009081526001602052604090205490565b34801561062a57600080fd5b506102ee611296565b34801561063f57600080fd5b5060165461037590600160a01b900460ff1681565b34801561066057600080fd5b506102ee61066f366004612cd3565b6113a1565b34801561068057600080fd5b506016546104b3906001600160a01b031681565b3480156106a057600080fd5b506000546001600160a01b03166104b3565b3480156106be57600080fd5b50604080518082019091526005815264535441525360d81b6020820152610348565b3480156106ec57600080fd5b506103756106fb366004612ca7565b611415565b34801561070c57600080fd5b50600e546104b3906001600160a01b031681565b34801561072c57600080fd5b506013546104b3906001600160a01b031681565b34801561074c57600080fd5b5061037561075b366004612ca7565b6114a4565b6102ee6114b1565b34801561077457600080fd5b5061030660145481565b34801561078a57600080fd5b5060165461037590600160a81b900460ff1681565b3480156107ab57600080fd5b50600f546104b3906001600160a01b031681565b3480156107cb57600080fd5b506102ee6107da366004612e7e565b611858565b3480156107eb57600080fd5b506102ee6107fa366004612e9b565b611930565b34801561080b57600080fd5b5061030661081a366004612ed0565b611a7d565b34801561082b57600080fd5b506102ee61083a366004612d8d565b611ab6565b34801561084b57600080fd5b5061030661085a366004612ee9565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561089157600080fd5b506102ee6108a0366004612cd3565b611c07565b3480156108b157600080fd5b506103066108c0366004612e7e565b611d31565b3480156108d157600080fd5b506102ee6108e0366004612cd3565b611d49565b3480156108f157600080fd5b506102ee610900366004612cd3565b611dbd565b34801561091157600080fd5b5061030660185481565b34801561092757600080fd5b506010546104b3906001600160a01b031681565b6000546001600160a01b0316331461096e5760405162461bcd60e51b815260040161096590612f17565b60405180910390fd5b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146109bb576040519150601f19603f3d011682016040523d82523d6000602084013e6109c0565b606091505b5050905080610a115760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207472616e736665722066756e647300000000000000006044820152606401610965565b50565b600033610a22818585611f2b565b60019150505b92915050565b6000546001600160a01b03163314610a585760405162461bcd60e51b815260040161096590612f17565b60058390556006829055600781905580610a728385612f62565b610a7c9190612f62565b600b819055600f906103e890610a93906064612f75565b610a9d9190612f94565b1115610adb5760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610965565b600b54604080519182526103e860208301527f93525d3c7f4fafe56faedbca6d501a13c63f47857d8b30d8282ec2dd806259a791015b60405180910390a1505050565b6000546001600160a01b03163314610b485760405162461bcd60e51b815260040161096590612f17565b60088390556009829055600a81905580610b628385612f62565b610b6c9190612f62565b600c8190556014906103e890610b83906064612f75565b610b8d9190612f94565b1115610bcb5760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610965565b600c54604080519182526103e860208301527f93525d3c7f4fafe56faedbca6d501a13c63f47857d8b30d8282ec2dd806259a79101610b11565b600082610c1183611a7d565b119392505050565b6000546001600160a01b03163314610c435760405162461bcd60e51b815260040161096590612f17565b6001600160a01b03811660009081526004602052604090205460ff1615610a11576001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314610caf5760405162461bcd60e51b815260040161096590612f17565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517fb4280c2c6d34a766a6e479b994060c3b1390228520ecfccc63ce21cd32ebbc6490600090a250565b6000610d076009600a61309a565b610d1590633b9aca00612f75565b905090565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610d9a576001600160a01b0384166000908152600260209081526040808320338452909152902054610d759083906130a9565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610da584848461204f565b90505b9392505050565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d549091610e0b91612f62565b610e176009600a61309a565b610e2590633b9aca00612f75565b610d1591906130a9565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610e6b918590610e66908690612f62565b611f2b565b50600192915050565b6000546001600160a01b03163314610e9e5760405162461bcd60e51b815260040161096590612f17565b6016805461ffff60a01b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b03163314610f075760405162461bcd60e51b815260040161096590612f17565b6001600160a01b038216610f4f5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610965565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610a2882600019610a14565b6000546001600160a01b03163314610fe75760405162461bcd60e51b815260040161096590612f17565b6001600160a01b03821661102f5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610965565b6001600160a01b038216600081815260036020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101610fa3565b6000546001600160a01b031633146110b15760405162461bcd60e51b815260040161096590612f17565b8281146111005760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610965565b60005b838110156112645760116000868684818110611121576111216130bc565b90506020020160208101906111369190612cd3565b6001600160a01b0316815260208101919091526040016000205460ff161580156111905750600085858381811061116f5761116f6130bc565b90506020020160208101906111849190612cd3565b6001600160a01b031614155b6111f25760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b6064820152608401610965565b61125133868684818110611208576112086130bc565b905060200201602081019061121d9190612cd3565b6112296009600a61309a565b86868681811061123b5761123b6130bc565b9050602002013561124c9190612f75565b6123f9565b508061125c816130d2565b915050611103565b5060405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a250505050565b6000546001600160a01b031633146112c05760405162461bcd60e51b815260040161096590612f17565b6000600360006112d86000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560128161131a6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560028161135c6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d825290925290205561139f6124ae565b565b6000546001600160a01b031633146113cb5760405162461bcd60e51b815260040161096590612f17565b600e80546001600160a01b0319166001600160a01b0383169081179091556040517fb4280c2c6d34a766a6e479b994060c3b1390228520ecfccc63ce21cd32ebbc6490600090a250565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156114975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610965565b610a223385858403611f2b565b6000610da833848461204f565b6000546001600160a01b031633146114db5760405162461bcd60e51b815260040161096590612f17565b6014541561152b5760405162461bcd60e51b815260206004820152601760248201527f4c697175696469747920616c72656164792061646465640000000000000000006044820152606401610965565b600034116115705760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610965565b601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905134929163c45a01559160048083019260209291908290030181865afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa91906130eb565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168091906130eb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156116cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f191906130eb565b601380546001600160a01b0319166001600160a01b039283169081179091556000908152601160209081526040808320805460ff19908116600190811790925530808652601285528386208054831684179055600385528386208054909216831790915560028452828520737a250d5630b4cf539739df2c5dacb4c659f2488d86528452828520600019905560105481865291909352922054919092169163f305d719918491906040516001600160e01b031960e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201524260a482015260c40160606040518083038185885af11580156117fc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118219190613108565b50504360145550426015556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a150565b6000546001600160a01b031633146118825760405162461bcd60e51b815260040161096590612f17565b80156118d857601654600160a81b900460ff16156118d85760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610965565b60168054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a9669061192590831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461195a5760405162461bcd60e51b815260040161096590612f17565b60008211801561196a5750600081115b6119c25760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608401610965565b6016805460ff60b01b1916600160b01b85151502179055806119e66009600a61309a565b6119f490633b9aca00612f75565b6119fe9190612f94565b60185581611a0e6009600a61309a565b611a1c90633b9aca00612f75565b611a269190612f94565b6017819055601854601654604080519283526020830193909352600160b01b900460ff161515918101919091527faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f990606001610b11565b6000611a87610daf565b6013546001600160a01b0316600090815260016020526040902054611aac9084612f75565b610a289190612f94565b6000546001600160a01b03163314611ae05760405162461bcd60e51b815260040161096590612f17565b6016546001600160a01b03838116911614611b6157601654600160a81b900460ff1615611b455760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610965565b601680546001600160a01b0319166001600160a01b0384161790555b8015611bcf576016546013546040516366812dbb60e11b81523060048201526001600160a01b03918216602482015291169063cd025b7690604401600060405180830381600087803b158015611bb657600080fd5b505af1158015611bca573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b03163314611c315760405162461bcd60e51b815260040161096590612f17565b6013546001600160a01b03828116911614801590611c6c57506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b611cce5760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b6064820152608401610965565b6001600160a01b03811660008181526003602090815260408083208054600160ff1991821681179092556012909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b60008115611d41575050600c5490565b5050600b5490565b6000546001600160a01b03163314611d735760405162461bcd60e51b815260040161096590612f17565b600f80546001600160a01b0319166001600160a01b0383169081179091556040517fb4280c2c6d34a766a6e479b994060c3b1390228520ecfccc63ce21cd32ebbc6490600090a250565b6000546001600160a01b03163314611de75760405162461bcd60e51b815260040161096590612f17565b600060036000611dff6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601281611e416000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600281611e836000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d8252909252902055611ec781612522565b6001600160a01b031660009081526003602090815260408083208054600160ff199182168117909255601284528285208054909116909117905560028252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6001600160a01b038316611f8d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610965565b6001600160a01b038216611fee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610965565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152600160205260408120548211156120ae5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610965565b600082116120fe5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e736665727265640000000000000000006044820152606401610965565b60195460ff161561211b576121148484846123f9565b9050610da8565b6014546121ad576001600160a01b03841660009081526012602052604090205460ff168061216157506001600160a01b03831660009081526012602052604090205460ff165b6121ad5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610965565b6001600160a01b038416600090815260016020526040812080548492906121d59084906130a9565b90915550506001600160a01b03841660009081526003602052604081205460ff1615801561221c57506001600160a01b03841660009081526003602052604090205460ff16155b6122265782612231565b61223185858561260c565b905061223d8585612725565b1561225157821561225157612251836127eb565b6001600160a01b03841660009081526001602052604081208054839290612279908490612f62565b9091555050601454151580156122985750601654600160a01b900460ff165b1561231e5760165460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af11580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c9190613136565b505b6001600160a01b03851660009081526004602052604090205460ff16156123a15760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b6064820152608401610965565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123e691815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166000908152600160205260408120805483919083906124239084906130a9565b90915550506001600160a01b03831660009081526001602052604081208054849290612450908490612f62565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161249c91815260200190565b60405180910390a35060019392505050565b6000546001600160a01b031633146124d85760405162461bcd60e51b815260040161096590612f17565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461254c5760405162461bcd60e51b815260040161096590612f17565b6001600160a01b0381166125b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610965565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526011602052604081205481906103e8906126379060ff16611d31565b6126419085612f75565b61264b9190612f94565b3060009081526001602052604081208054929350839290919061266f908490612f62565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36001600160a01b03851660009081526011602052604090205460ff1680156126e957506014546126e5906002612f62565b4311155b15612712576001600160a01b0384166000908152600460205260409020805460ff191660011790555b61271c81846130a9565b95945050505050565b6001600160a01b03821660009081526011602052604081205460ff1615801561276757506001600160a01b03831660009081526003602052604090205460ff16155b8015612776575060195460ff16155b801561278b5750601654600160b01b900460ff165b80156127af57506001600160a01b03821660009081526011602052604090205460ff165b80156127cc57506018543060009081526001602052604090205410155b8015610da857506000600b541180610da8575050600c54151592915050565b6019805460ff19166001179055601754600090821061280c5760175461280e565b815b3060009081526001602052604090205490915081111561283a5750306000908152600160205260409020545b604080516002808252606082018352600092602083019080368337019050509050308160008151811061286f5761286f6130bc565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ec91906130eb565b816001815181106128ff576128ff6130bc565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b815291169063791ac94790612945908590600090869030904290600401613153565b600060405180830381600087803b15801561295f57600080fd5b505af1158015612973573d6000803e3d6000fd5b5050600c54600b544793506000925061298c9190612f62565b90506000816008546005546129a19190612f62565b6129ab9085612f75565b6129b59190612f94565b9050600082600a546007546129ca9190612f62565b6129d49086612f75565b6129de9190612f94565b905060006129ec8284612f62565b6129f690866130a9565b90508215612ab257600d546040516000916001600160a01b03169085908381818185875af1925050503d8060008114612a4b576040519150601f19603f3d011682016040523d82523d6000602084013e612a50565b606091505b5050905080612ab05760405162461bcd60e51b815260206004820152602660248201527f4661696c656420746f207472616e736665722066756e647320746f204e4241206044820152651dd85b1b195d60d21b6064820152608401610965565b505b8115612b7057600f546040516000916001600160a01b03169084908381818185875af1925050503d8060008114612b05576040519150601f19603f3d011682016040523d82523d6000602084013e612b0a565b606091505b5050905080612b6e5760405162461bcd60e51b815260206004820152602a60248201527f4661696c656420746f207472616e736665722066756e647320746f207374616b6044820152691a5b99c81dd85b1b195d60b21b6064820152608401610965565b505b8015612c3057600e546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612bc3576040519150601f19603f3d011682016040523d82523d6000602084013e612bc8565b606091505b5050905080612c2e5760405162461bcd60e51b815260206004820152602c60248201527f4661696c656420746f207472616e736665722066756e647320746f206d61726b60448201526b195d1a5b99c81dd85b1b195d60a21b6064820152608401610965565b505b50506019805460ff19169055505050505050565b600060208083528351808285015260005b81811015612c7157858101830151858201604001528201612c55565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a1157600080fd5b60008060408385031215612cba57600080fd5b8235612cc581612c92565b946020939093013593505050565b600060208284031215612ce557600080fd5b8135610da881612c92565b600080600060608486031215612d0557600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612d2f57600080fd5b50508035926020909101359150565b600080600060608486031215612d5357600080fd5b8335612d5e81612c92565b92506020840135612d6e81612c92565b929592945050506040919091013590565b8015158114610a1157600080fd5b60008060408385031215612da057600080fd5b8235612dab81612c92565b91506020830135612dbb81612d7f565b809150509250929050565b60008083601f840112612dd857600080fd5b50813567ffffffffffffffff811115612df057600080fd5b6020830191508360208260051b8501011115612e0b57600080fd5b9250929050565b60008060008060408587031215612e2857600080fd5b843567ffffffffffffffff80821115612e4057600080fd5b612e4c88838901612dc6565b90965094506020870135915080821115612e6557600080fd5b50612e7287828801612dc6565b95989497509550505050565b600060208284031215612e9057600080fd5b8135610da881612d7f565b600080600060608486031215612eb057600080fd5b8335612ebb81612d7f565b95602085013595506040909401359392505050565b600060208284031215612ee257600080fd5b5035919050565b60008060408385031215612efc57600080fd5b8235612f0781612c92565b91506020830135612dbb81612c92565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a2857610a28612f4c565b6000816000190483118215151615612f8f57612f8f612f4c565b500290565b600082612fb157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612ff1578160001904821115612fd757612fd7612f4c565b80851615612fe457918102915b93841c9390800290612fbb565b509250929050565b60008261300857506001610a28565b8161301557506000610a28565b816001811461302b576002811461303557613051565b6001915050610a28565b60ff84111561304657613046612f4c565b50506001821b610a28565b5060208310610133831016604e8410600b8410161715613074575081810a610a28565b61307e8383612fb6565b806000190482111561309257613092612f4c565b029392505050565b6000610da860ff841683612ff9565b81810381811115610a2857610a28612f4c565b634e487b7160e01b600052603260045260246000fd5b6000600182016130e4576130e4612f4c565b5060010190565b6000602082840312156130fd57600080fd5b8151610da881612c92565b60008060006060848603121561311d57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561314857600080fd5b8151610da881612d7f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131a35784516001600160a01b03168352938301939183019160010161317e565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212206076ee8e5974eb2e830234fb746b6c8fc56d288bc09104def868d4cc68f07b4f64736f6c63430008100033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef000000000000000000000000864b6995ee3829c73fbd65773a0eabf593674d420000000000000000000000008c9ecad9bee52615479ffccfe61bd8de79a5d23c00000000000000000000000028dca2edc266ef69617c7b05fdc4357c104e13fe

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80637516baec11610175578063c5363caa116100dc578063dd62ed3e11610095578063f24364cd1161006f578063f24364cd146108c5578063f2fde38b146108e5578063f8821a6214610905578063f887ea401461091b57600080fd5b8063dd62ed3e1461083f578063e624c4bc14610885578063f1f3bca3146108a557600080fd5b8063c5363caa1461077e578063cb3966eb1461079f578063ceafd6da146107bf578063d0889358146107df578063d51ed1c8146107ff578063d5d035f51461081f57600080fd5b8063a457c2d71161012e578063a457c2d7146106e0578063a5949bcf14610700578063a8aa1b3114610720578063a9059cbb14610740578063bc37e1a314610760578063bf56b3711461076857600080fd5b80637516baec1461063357806375b6253214610654578063882cfb3f14610674578063893d20e8146106945780638da5cb5b1461069457806395d89b41146106b257600080fd5b806327a6053911610234578063571ac8b0116101ed57806367243482116101c757806367243482146105a75780636ddd1713146105c757806370a08231146105e8578063715018a61461061e57600080fd5b8063571ac8b0146105515780635804f1e414610571578063658d4b7f1461058757600080fd5b806327a60539146104935780632b112e49146104cb578063313ce567146104e057806339509351146104fc578063421dd7c71461051c578063492a937b1461053157600080fd5b80630f683e90116102865780630f683e90146103de5780631161ae39146103fe57806313b78cde1461041e5780631652d2b11461043e57806318160ddd1461045e57806323b872dd1461047357600080fd5b806302cc315e146102d95780630445b667146102f057806306fdde0314610319578063095ea7b3146103555780630ccdc90a146103855780630d075d9c146103be57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee61093b565b005b3480156102fc57600080fd5b5061030660175481565b6040519081526020015b60405180910390f35b34801561032557600080fd5b5060408051808201909152600a8152694d696e692d537461727360b01b60208201525b6040516103109190612c44565b34801561036157600080fd5b50610375610370366004612ca7565b610a14565b6040519015158152602001610310565b34801561039157600080fd5b506103756103a0366004612cd3565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156103ca57600080fd5b506102ee6103d9366004612cf0565b610a2e565b3480156103ea57600080fd5b506102ee6103f9366004612cf0565b610b1e565b34801561040a57600080fd5b50610375610419366004612d1c565b610c05565b34801561042a57600080fd5b506102ee610439366004612cd3565b610c19565b34801561044a57600080fd5b506102ee610459366004612cd3565b610c85565b34801561046a57600080fd5b50610306610cf9565b34801561047f57600080fd5b5061037561048e366004612d3e565b610d1a565b34801561049f57600080fd5b50600d546104b3906001600160a01b031681565b6040516001600160a01b039091168152602001610310565b3480156104d757600080fd5b50610306610daf565b3480156104ec57600080fd5b5060405160098152602001610310565b34801561050857600080fd5b50610375610517366004612ca7565b610e2f565b34801561052857600080fd5b506102ee610e74565b34801561053d57600080fd5b506102ee61054c366004612d8d565b610edd565b34801561055d57600080fd5b5061037561056c366004612cd3565b610faf565b34801561057d57600080fd5b5061030660155481565b34801561059357600080fd5b506102ee6105a2366004612d8d565b610fbd565b3480156105b357600080fd5b506102ee6105c2366004612e12565b611087565b3480156105d357600080fd5b5060165461037590600160b01b900460ff1681565b3480156105f457600080fd5b50610306610603366004612cd3565b6001600160a01b031660009081526001602052604090205490565b34801561062a57600080fd5b506102ee611296565b34801561063f57600080fd5b5060165461037590600160a01b900460ff1681565b34801561066057600080fd5b506102ee61066f366004612cd3565b6113a1565b34801561068057600080fd5b506016546104b3906001600160a01b031681565b3480156106a057600080fd5b506000546001600160a01b03166104b3565b3480156106be57600080fd5b50604080518082019091526005815264535441525360d81b6020820152610348565b3480156106ec57600080fd5b506103756106fb366004612ca7565b611415565b34801561070c57600080fd5b50600e546104b3906001600160a01b031681565b34801561072c57600080fd5b506013546104b3906001600160a01b031681565b34801561074c57600080fd5b5061037561075b366004612ca7565b6114a4565b6102ee6114b1565b34801561077457600080fd5b5061030660145481565b34801561078a57600080fd5b5060165461037590600160a81b900460ff1681565b3480156107ab57600080fd5b50600f546104b3906001600160a01b031681565b3480156107cb57600080fd5b506102ee6107da366004612e7e565b611858565b3480156107eb57600080fd5b506102ee6107fa366004612e9b565b611930565b34801561080b57600080fd5b5061030661081a366004612ed0565b611a7d565b34801561082b57600080fd5b506102ee61083a366004612d8d565b611ab6565b34801561084b57600080fd5b5061030661085a366004612ee9565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561089157600080fd5b506102ee6108a0366004612cd3565b611c07565b3480156108b157600080fd5b506103066108c0366004612e7e565b611d31565b3480156108d157600080fd5b506102ee6108e0366004612cd3565b611d49565b3480156108f157600080fd5b506102ee610900366004612cd3565b611dbd565b34801561091157600080fd5b5061030660185481565b34801561092757600080fd5b506010546104b3906001600160a01b031681565b6000546001600160a01b0316331461096e5760405162461bcd60e51b815260040161096590612f17565b60405180910390fd5b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146109bb576040519150601f19603f3d011682016040523d82523d6000602084013e6109c0565b606091505b5050905080610a115760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207472616e736665722066756e647300000000000000006044820152606401610965565b50565b600033610a22818585611f2b565b60019150505b92915050565b6000546001600160a01b03163314610a585760405162461bcd60e51b815260040161096590612f17565b60058390556006829055600781905580610a728385612f62565b610a7c9190612f62565b600b819055600f906103e890610a93906064612f75565b610a9d9190612f94565b1115610adb5760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610965565b600b54604080519182526103e860208301527f93525d3c7f4fafe56faedbca6d501a13c63f47857d8b30d8282ec2dd806259a791015b60405180910390a1505050565b6000546001600160a01b03163314610b485760405162461bcd60e51b815260040161096590612f17565b60088390556009829055600a81905580610b628385612f62565b610b6c9190612f62565b600c8190556014906103e890610b83906064612f75565b610b8d9190612f94565b1115610bcb5760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610965565b600c54604080519182526103e860208301527f93525d3c7f4fafe56faedbca6d501a13c63f47857d8b30d8282ec2dd806259a79101610b11565b600082610c1183611a7d565b119392505050565b6000546001600160a01b03163314610c435760405162461bcd60e51b815260040161096590612f17565b6001600160a01b03811660009081526004602052604090205460ff1615610a11576001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314610caf5760405162461bcd60e51b815260040161096590612f17565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517fb4280c2c6d34a766a6e479b994060c3b1390228520ecfccc63ce21cd32ebbc6490600090a250565b6000610d076009600a61309a565b610d1590633b9aca00612f75565b905090565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610d9a576001600160a01b0384166000908152600260209081526040808320338452909152902054610d759083906130a9565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610da584848461204f565b90505b9392505050565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d549091610e0b91612f62565b610e176009600a61309a565b610e2590633b9aca00612f75565b610d1591906130a9565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610e6b918590610e66908690612f62565b611f2b565b50600192915050565b6000546001600160a01b03163314610e9e5760405162461bcd60e51b815260040161096590612f17565b6016805461ffff60a01b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b03163314610f075760405162461bcd60e51b815260040161096590612f17565b6001600160a01b038216610f4f5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610965565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610a2882600019610a14565b6000546001600160a01b03163314610fe75760405162461bcd60e51b815260040161096590612f17565b6001600160a01b03821661102f5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610965565b6001600160a01b038216600081815260036020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101610fa3565b6000546001600160a01b031633146110b15760405162461bcd60e51b815260040161096590612f17565b8281146111005760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d61746368000000000000006044820152606401610965565b60005b838110156112645760116000868684818110611121576111216130bc565b90506020020160208101906111369190612cd3565b6001600160a01b0316815260208101919091526040016000205460ff161580156111905750600085858381811061116f5761116f6130bc565b90506020020160208101906111849190612cd3565b6001600160a01b031614155b6111f25760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b6064820152608401610965565b61125133868684818110611208576112086130bc565b905060200201602081019061121d9190612cd3565b6112296009600a61309a565b86868681811061123b5761123b6130bc565b9050602002013561124c9190612f75565b6123f9565b508061125c816130d2565b915050611103565b5060405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a250505050565b6000546001600160a01b031633146112c05760405162461bcd60e51b815260040161096590612f17565b6000600360006112d86000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560128161131a6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560028161135c6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d825290925290205561139f6124ae565b565b6000546001600160a01b031633146113cb5760405162461bcd60e51b815260040161096590612f17565b600e80546001600160a01b0319166001600160a01b0383169081179091556040517fb4280c2c6d34a766a6e479b994060c3b1390228520ecfccc63ce21cd32ebbc6490600090a250565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156114975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610965565b610a223385858403611f2b565b6000610da833848461204f565b6000546001600160a01b031633146114db5760405162461bcd60e51b815260040161096590612f17565b6014541561152b5760405162461bcd60e51b815260206004820152601760248201527f4c697175696469747920616c72656164792061646465640000000000000000006044820152606401610965565b600034116115705760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610965565b601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905134929163c45a01559160048083019260209291908290030181865afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa91906130eb565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168091906130eb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156116cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f191906130eb565b601380546001600160a01b0319166001600160a01b039283169081179091556000908152601160209081526040808320805460ff19908116600190811790925530808652601285528386208054831684179055600385528386208054909216831790915560028452828520737a250d5630b4cf539739df2c5dacb4c659f2488d86528452828520600019905560105481865291909352922054919092169163f305d719918491906040516001600160e01b031960e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201524260a482015260c40160606040518083038185885af11580156117fc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118219190613108565b50504360145550426015556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a150565b6000546001600160a01b031633146118825760405162461bcd60e51b815260040161096590612f17565b80156118d857601654600160a81b900460ff16156118d85760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610965565b60168054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a9669061192590831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461195a5760405162461bcd60e51b815260040161096590612f17565b60008211801561196a5750600081115b6119c25760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608401610965565b6016805460ff60b01b1916600160b01b85151502179055806119e66009600a61309a565b6119f490633b9aca00612f75565b6119fe9190612f94565b60185581611a0e6009600a61309a565b611a1c90633b9aca00612f75565b611a269190612f94565b6017819055601854601654604080519283526020830193909352600160b01b900460ff161515918101919091527faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f990606001610b11565b6000611a87610daf565b6013546001600160a01b0316600090815260016020526040902054611aac9084612f75565b610a289190612f94565b6000546001600160a01b03163314611ae05760405162461bcd60e51b815260040161096590612f17565b6016546001600160a01b03838116911614611b6157601654600160a81b900460ff1615611b455760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b6044820152606401610965565b601680546001600160a01b0319166001600160a01b0384161790555b8015611bcf576016546013546040516366812dbb60e11b81523060048201526001600160a01b03918216602482015291169063cd025b7690604401600060405180830381600087803b158015611bb657600080fd5b505af1158015611bca573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b03163314611c315760405162461bcd60e51b815260040161096590612f17565b6013546001600160a01b03828116911614801590611c6c57506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b611cce5760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b6064820152608401610965565b6001600160a01b03811660008181526003602090815260408083208054600160ff1991821681179092556012909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b60008115611d41575050600c5490565b5050600b5490565b6000546001600160a01b03163314611d735760405162461bcd60e51b815260040161096590612f17565b600f80546001600160a01b0319166001600160a01b0383169081179091556040517fb4280c2c6d34a766a6e479b994060c3b1390228520ecfccc63ce21cd32ebbc6490600090a250565b6000546001600160a01b03163314611de75760405162461bcd60e51b815260040161096590612f17565b600060036000611dff6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155601281611e416000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff1990931692909217909155600281611e836000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d8252909252902055611ec781612522565b6001600160a01b031660009081526003602090815260408083208054600160ff199182168117909255601284528285208054909116909117905560028252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6001600160a01b038316611f8d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610965565b6001600160a01b038216611fee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610965565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152600160205260408120548211156120ae5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610965565b600082116120fe5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e736665727265640000000000000000006044820152606401610965565b60195460ff161561211b576121148484846123f9565b9050610da8565b6014546121ad576001600160a01b03841660009081526012602052604090205460ff168061216157506001600160a01b03831660009081526012602052604090205460ff165b6121ad5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e0000000000006044820152606401610965565b6001600160a01b038416600090815260016020526040812080548492906121d59084906130a9565b90915550506001600160a01b03841660009081526003602052604081205460ff1615801561221c57506001600160a01b03841660009081526003602052604090205460ff16155b6122265782612231565b61223185858561260c565b905061223d8585612725565b1561225157821561225157612251836127eb565b6001600160a01b03841660009081526001602052604081208054839290612279908490612f62565b9091555050601454151580156122985750601654600160a01b900460ff165b1561231e5760165460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af11580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c9190613136565b505b6001600160a01b03851660009081526004602052604090205460ff16156123a15760405162461bcd60e51b815260206004820152603160248201527f57616c6c65742070726f74656374696f6e20656e61626c65642c20706c656173604482015270194818dbdb9d1858dd081cdd5c1c1bdc9d607a1b6064820152608401610965565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123e691815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166000908152600160205260408120805483919083906124239084906130a9565b90915550506001600160a01b03831660009081526001602052604081208054849290612450908490612f62565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161249c91815260200190565b60405180910390a35060019392505050565b6000546001600160a01b031633146124d85760405162461bcd60e51b815260040161096590612f17565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461254c5760405162461bcd60e51b815260040161096590612f17565b6001600160a01b0381166125b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610965565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821660009081526011602052604081205481906103e8906126379060ff16611d31565b6126419085612f75565b61264b9190612f94565b3060009081526001602052604081208054929350839290919061266f908490612f62565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36001600160a01b03851660009081526011602052604090205460ff1680156126e957506014546126e5906002612f62565b4311155b15612712576001600160a01b0384166000908152600460205260409020805460ff191660011790555b61271c81846130a9565b95945050505050565b6001600160a01b03821660009081526011602052604081205460ff1615801561276757506001600160a01b03831660009081526003602052604090205460ff16155b8015612776575060195460ff16155b801561278b5750601654600160b01b900460ff165b80156127af57506001600160a01b03821660009081526011602052604090205460ff165b80156127cc57506018543060009081526001602052604090205410155b8015610da857506000600b541180610da8575050600c54151592915050565b6019805460ff19166001179055601754600090821061280c5760175461280e565b815b3060009081526001602052604090205490915081111561283a5750306000908152600160205260409020545b604080516002808252606082018352600092602083019080368337019050509050308160008151811061286f5761286f6130bc565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ec91906130eb565b816001815181106128ff576128ff6130bc565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b815291169063791ac94790612945908590600090869030904290600401613153565b600060405180830381600087803b15801561295f57600080fd5b505af1158015612973573d6000803e3d6000fd5b5050600c54600b544793506000925061298c9190612f62565b90506000816008546005546129a19190612f62565b6129ab9085612f75565b6129b59190612f94565b9050600082600a546007546129ca9190612f62565b6129d49086612f75565b6129de9190612f94565b905060006129ec8284612f62565b6129f690866130a9565b90508215612ab257600d546040516000916001600160a01b03169085908381818185875af1925050503d8060008114612a4b576040519150601f19603f3d011682016040523d82523d6000602084013e612a50565b606091505b5050905080612ab05760405162461bcd60e51b815260206004820152602660248201527f4661696c656420746f207472616e736665722066756e647320746f204e4241206044820152651dd85b1b195d60d21b6064820152608401610965565b505b8115612b7057600f546040516000916001600160a01b03169084908381818185875af1925050503d8060008114612b05576040519150601f19603f3d011682016040523d82523d6000602084013e612b0a565b606091505b5050905080612b6e5760405162461bcd60e51b815260206004820152602a60248201527f4661696c656420746f207472616e736665722066756e647320746f207374616b6044820152691a5b99c81dd85b1b195d60b21b6064820152608401610965565b505b8015612c3057600e546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612bc3576040519150601f19603f3d011682016040523d82523d6000602084013e612bc8565b606091505b5050905080612c2e5760405162461bcd60e51b815260206004820152602c60248201527f4661696c656420746f207472616e736665722066756e647320746f206d61726b60448201526b195d1a5b99c81dd85b1b195d60a21b6064820152608401610965565b505b50506019805460ff19169055505050505050565b600060208083528351808285015260005b81811015612c7157858101830151858201604001528201612c55565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a1157600080fd5b60008060408385031215612cba57600080fd5b8235612cc581612c92565b946020939093013593505050565b600060208284031215612ce557600080fd5b8135610da881612c92565b600080600060608486031215612d0557600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612d2f57600080fd5b50508035926020909101359150565b600080600060608486031215612d5357600080fd5b8335612d5e81612c92565b92506020840135612d6e81612c92565b929592945050506040919091013590565b8015158114610a1157600080fd5b60008060408385031215612da057600080fd5b8235612dab81612c92565b91506020830135612dbb81612d7f565b809150509250929050565b60008083601f840112612dd857600080fd5b50813567ffffffffffffffff811115612df057600080fd5b6020830191508360208260051b8501011115612e0b57600080fd5b9250929050565b60008060008060408587031215612e2857600080fd5b843567ffffffffffffffff80821115612e4057600080fd5b612e4c88838901612dc6565b90965094506020870135915080821115612e6557600080fd5b50612e7287828801612dc6565b95989497509550505050565b600060208284031215612e9057600080fd5b8135610da881612d7f565b600080600060608486031215612eb057600080fd5b8335612ebb81612d7f565b95602085013595506040909401359392505050565b600060208284031215612ee257600080fd5b5035919050565b60008060408385031215612efc57600080fd5b8235612f0781612c92565b91506020830135612dbb81612c92565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a2857610a28612f4c565b6000816000190483118215151615612f8f57612f8f612f4c565b500290565b600082612fb157634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612ff1578160001904821115612fd757612fd7612f4c565b80851615612fe457918102915b93841c9390800290612fbb565b509250929050565b60008261300857506001610a28565b8161301557506000610a28565b816001811461302b576002811461303557613051565b6001915050610a28565b60ff84111561304657613046612f4c565b50506001821b610a28565b5060208310610133831016604e8410600b8410161715613074575081810a610a28565b61307e8383612fb6565b806000190482111561309257613092612f4c565b029392505050565b6000610da860ff841683612ff9565b81810381811115610a2857610a28612f4c565b634e487b7160e01b600052603260045260246000fd5b6000600182016130e4576130e4612f4c565b5060010190565b6000602082840312156130fd57600080fd5b8151610da881612c92565b60008060006060848603121561311d57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561314857600080fd5b8151610da881612d7f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131a35784516001600160a01b03168352938301939183019160010161317e565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212206076ee8e5974eb2e830234fb746b6c8fc56d288bc09104def868d4cc68f07b4f64736f6c63430008100033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000864b6995ee3829c73fbd65773a0eabf593674d420000000000000000000000008c9ecad9bee52615479ffccfe61bd8de79a5d23c00000000000000000000000028dca2edc266ef69617c7b05fdc4357c104e13fe

-----Decoded View---------------
Arg [0] : _nba (address): 0x864b6995ee3829c73FbD65773A0eABF593674D42
Arg [1] : _marketing (address): 0x8C9eCad9BeE52615479FFCcfE61bD8DE79A5d23C
Arg [2] : _staking (address): 0x28dCa2EDc266Ef69617C7b05Fdc4357c104E13fe

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000864b6995ee3829c73fbd65773a0eabf593674d42
Arg [1] : 0000000000000000000000008c9ecad9bee52615479ffccfe61bd8de79a5d23c
Arg [2] : 00000000000000000000000028dca2edc266ef69617c7b05fdc4357c104e13fe


Deployed Bytecode Sourcemap

16440:16031:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25319:189;;;;;;;;;;;;;:::i;:::-;;17889:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;17889:49:0;;;;;;;;18970:71;;;;;;;;;;-1:-1:-1;19033:5:0;;;;;;;;;;;;-1:-1:-1;;;19033:5:0;;;;18970:71;;;;;;;:::i;19376:193::-;;;;;;;;;;-1:-1:-1;19376:193:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;19376:193:0;1205:187:1;27592:120:0;;;;;;;;;;-1:-1:-1;27592:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27680:24:0;27656:4;27680:24;;;:15;:24;;;;;;;;;27592:120;28446:392;;;;;;;;;;-1:-1:-1;28446:392:0;;;;;:::i;:::-;;:::i;28846:416::-;;;;;;;;;;-1:-1:-1;28846:416:0;;;;;:::i;:::-;;:::i;25930:150::-;;;;;;;;;;-1:-1:-1;25930:150:0;;;;;:::i;:::-;;:::i;27720:::-;;;;;;;;;;-1:-1:-1;27720:150:0;;;;;:::i;:::-;;:::i;29270:134::-;;;;;;;;;;-1:-1:-1;29270:134:0;;;;;:::i;:::-;;:::i;18718:88::-;;;;;;;;;;;;;:::i;20865:341::-;;;;;;;;;;-1:-1:-1;20865:341:0;;;;;:::i;:::-;;:::i;17299:26::-;;;;;;;;;;-1:-1:-1;17299:26:0;;;;-1:-1:-1;;;;;17299:26:0;;;;;;-1:-1:-1;;;;;2848:32:1;;;2830:51;;2818:2;2803:18;17299:26:0;2684:203:1;25614:144:0;;;;;;;;;;;;;:::i;18812:71::-;;;;;;;;;;-1:-1:-1;18812:71:0;;16708:1;3034:36:1;;3022:2;3007:18;18812:71:0;2892:184:1;19577:213:0;;;;;;;;;;-1:-1:-1;19577:213:0;;;;;:::i;:::-;;:::i;27420:164::-;;;;;;;;;;;;;:::i;30184:233::-;;;;;;;;;;-1:-1:-1;30184:233:0;;;;;:::i;:::-;;:::i;20571:122::-;;;;;;;;;;-1:-1:-1;20571:122:0;;;;;:::i;:::-;;:::i;17691:27::-;;;;;;;;;;;;;;;;28216:222;;;;;;;;;;-1:-1:-1;28216:222:0;;;;;:::i;:::-;;:::i;31205:613::-;;;;;;;;;;-1:-1:-1;31205:613:0;;;;;:::i;:::-;;:::i;17852:30::-;;;;;;;;;;-1:-1:-1;17852:30:0;;;;-1:-1:-1;;;17852:30:0;;;;;;19124:105;;;;;;;;;;-1:-1:-1;19124:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;19208:18:0;19190:7;19208:18;;;:9;:18;;;;;;;19124:105;26514:242;;;;;;;;;;;;;:::i;17762:36::-;;;;;;;;;;-1:-1:-1;17762:36:0;;;;-1:-1:-1;;;17762:36:0;;;;;;29412:164;;;;;;;;;;-1:-1:-1;29412:164:0;;;;;:::i;:::-;;:::i;17728:27::-;;;;;;;;;;-1:-1:-1;17728:27:0;;;;-1:-1:-1;;;;;17728:27:0;;;19047:71;;;;;;;;;;-1:-1:-1;19090:7:0;15088:6;-1:-1:-1;;;;;15088:6:0;19047:71;18718:88;18889:75;;;;;;;;;;-1:-1:-1;18954:7:0;;;;;;;;;;;;-1:-1:-1;;;18954:7:0;;;;18889:75;;19798:411;;;;;;;;;;-1:-1:-1;19798:411:0;;;;;:::i;:::-;;:::i;17332:32::-;;;;;;;;;;-1:-1:-1;17332:32:0;;;;-1:-1:-1;;;;;17332:32:0;;;17631:19;;;;;;;;;;-1:-1:-1;17631:19:0;;;;-1:-1:-1;;;;;17631:19:0;;;20701:156;;;;;;;;;;-1:-1:-1;20701:156:0;;;;;:::i;:::-;;:::i;30425:775::-;;;:::i;17659:25::-;;;;;;;;;;;;;;;;17805:38;;;;;;;;;;-1:-1:-1;17805:38:0;;;;-1:-1:-1;;;17805:38:0;;;;;;17371:30;;;;;;;;;;-1:-1:-1;17371:30:0;;;;-1:-1:-1;;;;;17371:30:0;;;26764:242;;;;;;;;;;-1:-1:-1;26764:242:0;;;;;:::i;:::-;;:::i;29746:430::-;;;;;;;;;;-1:-1:-1;29746:430:0;;;;;:::i;:::-;;:::i;25766:156::-;;;;;;;;;;-1:-1:-1;25766:156:0;;;;;:::i;:::-;;:::i;27018:390::-;;;;;;;;;;-1:-1:-1;27018:390:0;;;;;:::i;:::-;;:::i;19235:133::-;;;;;;;;;;-1:-1:-1;19235:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;19337:19:0;;;19319:7;19337:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19235:133;27882:326;;;;;;;;;;-1:-1:-1;27882:326:0;;;;;:::i;:::-;;:::i;22689:142::-;;;;;;;;;;-1:-1:-1;22689:142:0;;;;;:::i;:::-;;:::i;29584:154::-;;;;;;;;;;-1:-1:-1;29584:154:0;;;;;:::i;:::-;;:::i;26088:418::-;;;;;;;;;;-1:-1:-1;26088:418:0;;;;;:::i;:::-;;:::i;17953:49::-;;;;;;;;;;;;;;;;17410:24;;;;;;;;;;-1:-1:-1;17410:24:0;;;;-1:-1:-1;;;;;17410:24:0;;;25319:189;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;;;;;;;;;25377:14:::1;15088:6:::0;;25397:46:::1;::::0;-1:-1:-1;;;;;15088:6:0;;;;25417:21:::1;::::0;25377:14;25397:46;25377:14;25397:46;25417:21;15088:6;25397:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25376:67;;;25462:9;25454:46;;;::::0;-1:-1:-1;;;25454:46:0;;7172:2:1;25454:46:0::1;::::0;::::1;7154:21:1::0;7211:2;7191:18;;;7184:30;7250:26;7230:18;;;7223:54;7294:18;;25454:46:0::1;6970:348:1::0;25454:46:0::1;25365:143;25319:189::o:0;19376:193::-;19451:4;9583:10;19507:32;9583:10;19523:7;19532:6;19507:8;:32::i;:::-;19557:4;19550:11;;;19376:193;;;;;:::o;28446:392::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;28557:6:::1;:16:::0;;;28584:12:::1;:28:::0;;;28623:10:::1;:24:::0;;;28636:11;28669:23:::1;28599:13:::0;28566:7;28669:23:::1;:::i;:::-;:37;;;;:::i;:::-;28658:8;:48:::0;;;28760:2:::1;::::0;17286:4:::1;::::0;28725:14:::1;::::0;28736:3:::1;28725:14;:::i;:::-;:31;;;;:::i;:::-;:37;;28717:64;;;::::0;-1:-1:-1;;;28717:64:0;;8182:2:1;28717:64:0::1;::::0;::::1;8164:21:1::0;8221:2;8201:18;;;8194:30;-1:-1:-1;;;8240:18:1;;;8233:43;8293:18;;28717:64:0::1;7980:337:1::0;28717:64:0::1;28805:8;::::0;28797:33:::1;::::0;;8496:25:1;;;17286:4:0::1;8552:2:1::0;8537:18;;8530:34;28797:33:0::1;::::0;8469:18:1;28797:33:0::1;;;;;;;;28446:392:::0;;;:::o;28846:416::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;28958:10:::1;:20:::0;;;28989:16:::1;:32:::0;;;29032:14:::1;:28:::0;;;29049:11;29086:23:::1;29008:13:::0;28971:7;29086:23:::1;:::i;:::-;:37;;;;:::i;:::-;29071:12;:52:::0;;;29181:2:::1;::::0;17286:4:::1;::::0;29142:18:::1;::::0;29157:3:::1;29142:18;:::i;:::-;:35;;;;:::i;:::-;:41;;29134:67;;;::::0;-1:-1:-1;;;29134:67:0;;8182:2:1;29134:67:0::1;::::0;::::1;8164:21:1::0;8221:2;8201:18;;;8194:30;-1:-1:-1;;;8240:18:1;;;8233:43;8293:18;;29134:67:0::1;7980:337:1::0;29134:67:0::1;29225:12;::::0;29217:37:::1;::::0;;8496:25:1;;;17286:4:0::1;8552:2:1::0;8537:18;;8530:34;29217:37:0::1;::::0;8469:18:1;29217:37:0::1;8322:248:1::0;25930:150:0;26010:4;26066:6;26034:29;26054:8;26034:19;:29::i;:::-;:38;;25930:150;-1:-1:-1;;;25930:150:0:o;27720:::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27680:24:0;;27656:4;27680:24;;;:15;:24;;;;;;;;27798:64:::1;;;-1:-1:-1::0;;;;;27830:24:0::1;27857:5;27830:24:::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;27830:32:0::1;::::0;;27720:150::o;29270:134::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;29338:11:::1;:18:::0;;-1:-1:-1;;;;;;29338:18:0::1;-1:-1:-1::0;;;;;29338:18:0;::::1;::::0;;::::1;::::0;;;29372:24:::1;::::0;::::1;::::0;-1:-1:-1;;29372:24:0::1;29270:134:::0;:::o;18718:88::-;18773:7;16767:15;16708:1;16767:2;:15;:::i;:::-;16750:33;;:13;:33;:::i;:::-;18784:19;;18718:88;:::o;20865:341::-;-1:-1:-1;;;;;20985:19:0;;20965:4;20985:19;;;:11;:19;;;;;;;;21005:10;20985:31;;;;;;;;-1:-1:-1;;20985:52:0;20982:157;;-1:-1:-1;;;;;21087:19:0;;;;;;:11;:19;;;;;;;;21107:10;21087:31;;;;;;;;:40;;21121:6;;21087:40;:::i;:::-;-1:-1:-1;;;;;21053:19:0;;;;;;:11;:19;;;;;;;;21073:10;21053:31;;;;;;;:74;20982:157;21158:40;21172:6;21180:9;21191:6;21158:13;:40::i;:::-;21151:47;;20865:341;;;;;;:::o;25614:144::-;19208:9;:18;;;;16547:42;25667:7;19208:18;;;;;25667:7;;25710:39;;;:::i;:::-;16767:15;16708:1;16767:2;:15;:::i;:::-;16750:33;;:13;:33;:::i;:::-;25694:56;;;;:::i;19577:213::-;19693:10;19667:4;19714:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;19714:32:0;;;;;;;;;;19667:4;;19684:76;;19705:7;;19714:45;;19749:10;;19714:45;:::i;:::-;19684:8;:76::i;:::-;-1:-1:-1;19778:4:0;19577:213;;;;:::o;27420:164::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;27479:17:::1;:25:::0;;-1:-1:-1;;;;27515:25:0;-1:-1:-1;;;27515:25:0::1;::::0;;27556:20:::1;::::0;::::1;::::0;27499:5:::1;::::0;27556:20:::1;27420:164::o:0;30184:233::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30278:19:0;::::1;30270:47;;;::::0;-1:-1:-1;;;30270:47:0;;10293:2:1;30270:47:0::1;::::0;::::1;10275:21:1::0;10332:2;10312:18;;;10305:30;-1:-1:-1;;;10351:18:1;;;10344:45;10406:18;;30270:47:0::1;10091:339:1::0;30270:47:0::1;-1:-1:-1::0;;;;;30328:21:0;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;30328:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30376:33;;1345:41:1;;;30376:33:0::1;::::0;1318:18:1;30376:33:0::1;;;;;;;;30184:233:::0;;:::o;20571:122::-;20626:4;20650:35;20658:7;-1:-1:-1;;20650:7:0;:35::i;28216:222::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28307:20:0;::::1;28299:48;;;::::0;-1:-1:-1;;;28299:48:0;;10293:2:1;28299:48:0::1;::::0;::::1;10275:21:1::0;10332:2;10312:18;;;10305:30;-1:-1:-1;;;10351:18:1;;;10344:45;10406:18;;28299:48:0::1;10091:339:1::0;28299:48:0::1;-1:-1:-1::0;;;;;28358:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;28358:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28402;;1345:41:1;;;28402:28:0::1;::::0;1318:18:1;28402:28:0::1;1205:187:1::0;31205:613:0;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;31324:35;;::::1;31316:73;;;::::0;-1:-1:-1;;;31316:73:0;;10637:2:1;31316:73:0::1;::::0;::::1;10619:21:1::0;10676:2;10656:18;;;10649:30;10715:27;10695:18;;;10688:55;10760:18;;31316:73:0::1;10435:349:1::0;31316:73:0::1;31493:9;31488:282;31508:21:::0;;::::1;31488:282;;;31560:14;:29;31575:10;;31586:1;31575:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31560:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;31560:29:0;;::::1;;31559:30;:61:::0;::::1;;;-1:-1:-1::0;31618:1:0::1;31593:10:::0;;31604:1;31593:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31593:27:0::1;;;31559:61;31551:119;;;::::0;-1:-1:-1;;;31551:119:0;;11123:2:1;31551:119:0::1;::::0;::::1;11105:21:1::0;11162:2;11142:18;;;11135:30;11201:34;11181:18;;;11174:62;-1:-1:-1;;;11252:18:1;;;11245:43;11305:19;;31551:119:0::1;10921:409:1::0;31551:119:0::1;31685:73;31700:10;31712;;31723:1;31712:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;31741:15;16708:1;31741:2;:15;:::i;:::-;31727:7;;31735:1;31727:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;31685:14;:73::i;:::-;-1:-1:-1::0;31531:3:0;::::1;::::0;::::1;:::i;:::-;;;;31488:282;;;-1:-1:-1::0;31787:23:0::1;::::0;31799:10:::1;::::0;31787:23:::1;::::0;;;::::1;31205:613:::0;;;;:::o;26514:242::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;26611:5:::1;26588:11;:20;26600:7;15061::::0;15088:6;-1:-1:-1;;;;;15088:6:0;;15023:79;26600:7:::1;-1:-1:-1::0;;;;;26588:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26588:20:0;;;:28;;;::::1;;-1:-1:-1::0;;26588:28:0;;::::1;::::0;;;::::1;::::0;;;26627:18:::1;-1:-1:-1::0;26646:7:0::1;15061::::0;15088:6;-1:-1:-1;;;;;15088:6:0;;15023:79;26646:7:::1;-1:-1:-1::0;;;;;26627:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26627:27:0;;;:35;;;::::1;;-1:-1:-1::0;;26627:35:0;;::::1;::::0;;;::::1;::::0;;;26673:11:::1;-1:-1:-1::0;26685:7:0::1;15061::::0;15088:6;-1:-1:-1;;;;;15088:6:0;;15023:79;26685:7:::1;-1:-1:-1::0;;;;;26673:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;26673:20:0;;;17480:42:::1;26673:35:::0;;;;;;;:39;26723:25:::1;:23;:25::i;:::-;26514:242::o:0;29412:164::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;29492:17:::1;:30:::0;;-1:-1:-1;;;;;;29492:30:0::1;-1:-1:-1::0;;;;;29492:30:0;::::1;::::0;;::::1;::::0;;;29538::::1;::::0;::::1;::::0;-1:-1:-1;;29538:30:0::1;29412:164:::0;:::o;19798:411::-;19949:10;19893:4;19937:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;19937:32:0;;;;;;;;;;19988:35;;;;19980:85;;;;-1:-1:-1;;;19980:85:0;;11677:2:1;19980:85:0;;;11659:21:1;11716:2;11696:18;;;11689:30;11755:34;11735:18;;;11728:62;-1:-1:-1;;;11806:18:1;;;11799:35;11851:19;;19980:85:0;11475:401:1;19980:85:0;20101:65;20110:10;20122:7;20150:15;20131:16;:34;20101:8;:65::i;20701:156::-;20781:4;20805:44;20819:10;20831:9;20842:6;20805:13;:44::i;30425:775::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;25583:10;;:15;30482:47:::1;;;::::0;-1:-1:-1;;;30482:47:0;;12083:2:1;30482:47:0::1;::::0;::::1;12065:21:1::0;12122:2;12102:18;;;12095:30;12161:25;12141:18;;;12134:53;12204:18;;30482:47:0::1;11881:347:1::0;30482:47:0::1;30561:1;30549:9;:13;30541:44;;;::::0;-1:-1:-1;;;30541:44:0;;12435:2:1;30541:44:0::1;::::0;::::1;12417:21:1::0;12474:2;12454:18;;;12447:30;-1:-1:-1;;;12493:18:1;;;12486:48;12551:18;;30541:44:0::1;12233:342:1::0;30541:44:0::1;30633:6;:34:::0;;-1:-1:-1;;;;;;30633:34:0::1;17480:42;30633:34:::0;;::::1;::::0;;;30697:16:::1;::::0;;-1:-1:-1;;;30697:16:0;;;;30611:9:::1;::::0;17480:42;30697:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;17480:42;30697:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30685:40:0::1;;30734:4;30740:6;;;;;;;;;-1:-1:-1::0;;;;;30740:6:0::1;-1:-1:-1::0;;;;;30740:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30685:69;::::0;-1:-1:-1;;;;;;30685:69:0::1;::::0;;;;;;-1:-1:-1;;;;;13066:15:1;;;30685:69:0::1;::::0;::::1;13048:34:1::0;13118:15;;13098:18;;;13091:43;12983:18;;30685:69:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30678:4;:76:::0;;-1:-1:-1;;;;;;30678:76:0::1;-1:-1:-1::0;;;;;30678:76:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;30765:20:0;;;:14:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;30765:27:0;;::::1;-1:-1:-1::0;30765:27:0;;::::1;::::0;;;30832:4:::1;30805:33:::0;;;:18:::1;:33:::0;;;;;:40;;;::::1;::::0;::::1;::::0;;30856:11:::1;:26:::0;;;;;:33;;;;::::1;::::0;::::1;::::0;;;30900:11:::1;:26:::0;;;;;17480:42:::1;30900:41:::0;;;;;;;-1:-1:-1;;30900:61:0;;30974:6:::1;::::0;19208:18;;;;;;;;;;30974:6;;;::::1;::::0;:22:::1;::::0;31004:4;;30832;30974:106:::1;::::0;-1:-1:-1;;;;;;30974:106:0::1;::::0;;;;;;-1:-1:-1;;;;;13504:15:1;;;30974:106:0::1;::::0;::::1;13486:34:1::0;13536:18;;;13529:34;31049:1:0::1;13579:18:1::0;;;13572:34;;;13622:18;;;13615:34;31053:10:0::1;13665:19:1::0;;;13658:44;31064:15:0::1;13718:19:1::0;;;13711:35;13420:19;;30974:106:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;31106:12:0::1;31093:10;:25:::0;-1:-1:-1;31144:15:0::1;31129:12;:30:::0;31175:17:::1;::::0;::::1;::::0;-1:-1:-1;;31175:17:0::1;30471:729;30425:775::o:0;26764:242::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;26843:8:::1;26839:78;;;26875:18;::::0;-1:-1:-1;;;26875:18:0;::::1;;;26874:19;26866:51;;;::::0;-1:-1:-1;;;26866:51:0;;14270:2:1;26866:51:0::1;::::0;::::1;14252:21:1::0;14309:2;14289:18;;;14282:30;-1:-1:-1;;;14328:18:1;;;14321:49;14387:18;;26866:51:0::1;14068:343:1::0;26866:51:0::1;26928:17;:28:::0;;;::::1;;-1:-1:-1::0;;;26928:28:0::1;-1:-1:-1::0;;;;26928:28:0;;::::1;;::::0;;26972:26:::1;::::0;::::1;::::0;::::1;::::0;26948:8;1370:14:1;1363:22;1345:41;;1333:2;1318:18;;1205:187;26972:26:0::1;;;;;;;;26764:242:::0;:::o;29746:430::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;29890:1:::1;29875:12;:16;:39;;;;;29913:1;29895:15;:19;29875:39;29867:87;;;::::0;-1:-1:-1;;;29867:87:0;;14618:2:1;29867:87:0::1;::::0;::::1;14600:21:1::0;14657:2;14637:18;;;14630:30;14696:34;14676:18;;;14669:62;-1:-1:-1;;;14747:18:1;;;14740:33;14790:19;;29867:87:0::1;14416:399:1::0;29867:87:0::1;29965:11;:22:::0;;-1:-1:-1;;;;29965:22:0::1;-1:-1:-1::0;;;29965:22:0;::::1;;;;::::0;;30027:15;16767::::1;16708:1;16767:2;:15;:::i;:::-;16750:33;::::0;:13:::1;:33;:::i;:::-;30012:30;;;;:::i;:::-;29998:11;:44:::0;30084:12;16767:15:::1;16708:1;16767:2;:15;:::i;:::-;16750:33;::::0;:13:::1;:33;:::i;:::-;30069:27;;;;:::i;:::-;30053:13;:43:::0;;;30128:11:::1;::::0;30156::::1;::::0;30112:56:::1;::::0;;15016:25:1;;;15072:2;15057:18;;15050:34;;;;-1:-1:-1;;;30156:11:0;::::1;;;15127:14:1::0;15120:22;15100:18;;;15093:50;;;;30112:56:0::1;::::0;15004:2:1;14989:18;30112:56:0::1;14820:329:1::0;25766:156:0;25834:7;25892:22;:20;:22::i;:::-;25883:4;;-1:-1:-1;;;;;25883:4:0;19190:7;19208:18;;;:9;:18;;;;;;25862:26;;:8;:26;:::i;:::-;25861:53;;;;:::i;27018:390::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;27131:9:::1;::::0;-1:-1:-1;;;;;27108:33:0;;::::1;27131:9:::0;::::1;27108:33;27104:166;;27166:18;::::0;-1:-1:-1;;;27166:18:0;::::1;;;27165:19;27157:51;;;::::0;-1:-1:-1;;;27157:51:0;;14270:2:1;27157:51:0::1;::::0;::::1;14252:21:1::0;14309:2;14289:18;;;14282:30;-1:-1:-1;;;14328:18:1;;;14321:49;14387:18;;27157:51:0::1;14068:343:1::0;27157:51:0::1;27223:9;:35:::0;;-1:-1:-1;;;;;;27223:35:0::1;-1:-1:-1::0;;;;;27223:35:0;::::1;;::::0;;27104:166:::1;27284:5;27280:68;;;27304:9;::::0;27343:4:::1;::::0;27304:44:::1;::::0;-1:-1:-1;;;27304:44:0;;27336:4:::1;27304:44;::::0;::::1;13048:34:1::0;-1:-1:-1;;;;;27343:4:0;;::::1;13098:18:1::0;;;13091:43;27304:9:0;::::1;::::0;:23:::1;::::0;12983:18:1;;27304:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27280:68;27374:26;::::0;-1:-1:-1;;;;;27374:26:0;::::1;::::0;::::1;::::0;;;::::1;27018:390:::0;;:::o;27882:326::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;27982:4:::1;::::0;-1:-1:-1;;;;;27969:17:0;;::::1;27982:4:::0;::::1;27969:17;::::0;::::1;::::0;:47:::1;;-1:-1:-1::0;;;;;;27990:26:0;::::1;17480:42;27990:26;;27969:47;27961:105;;;::::0;-1:-1:-1;;;27961:105:0;;15356:2:1;27961:105:0::1;::::0;::::1;15338:21:1::0;15395:2;15375:18;;;15368:30;15434:34;15414:18;;;15407:62;-1:-1:-1;;;15485:18:1;;;15478:43;15538:19;;27961:105:0::1;15154:409:1::0;27961:105:0::1;-1:-1:-1::0;;;;;28077:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;28102:4:::1;-1:-1:-1::0;;28077:29:0;;::::1;::::0;::::1;::::0;;;28117:18:::1;:29:::0;;;;;;:36;;;;::::1;;::::0;;;28169:31;::::1;::::0;28077:22;28169:31:::1;27882:326:::0;:::o;22689:142::-;22745:7;22769;22765:32;;;-1:-1:-1;;22785:12:0;;;22689:142::o;22765:32::-;-1:-1:-1;;22815:8:0;;;22689:142::o;29584:154::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;29660:15:::1;:26:::0;;-1:-1:-1;;;;;;29660:26:0::1;-1:-1:-1::0;;;;;29660:26:0;::::1;::::0;;::::1;::::0;;;29702:28:::1;::::0;::::1;::::0;-1:-1:-1;;29702:28:0::1;29584:154:::0;:::o;26088:418::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;26201:5:::1;26178:11;:20;26190:7;15061::::0;15088:6;-1:-1:-1;;;;;15088:6:0;;15023:79;26190:7:::1;-1:-1:-1::0;;;;;26178:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26178:20:0;;;:28;;;::::1;;-1:-1:-1::0;;26178:28:0;;::::1;::::0;;;::::1;::::0;;;26217:18:::1;-1:-1:-1::0;26236:7:0::1;15061::::0;15088:6;-1:-1:-1;;;;;15088:6:0;;15023:79;26236:7:::1;-1:-1:-1::0;;;;;26217:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26217:27:0;;;:35;;;::::1;;-1:-1:-1::0;;26217:35:0;;::::1;::::0;;;::::1;::::0;;;26263:11:::1;-1:-1:-1::0;26275:7:0::1;15061::::0;15088:6;-1:-1:-1;;;;;15088:6:0;;15023:79;26275:7:::1;-1:-1:-1::0;;;;;26263:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;26263:20:0;;;17480:42:::1;26263:35:::0;;;;;;;:39;26313:33:::1;26337:8:::0;26313:23:::1;:33::i;:::-;-1:-1:-1::0;;;;;26357:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:28;;26381:4:::1;-1:-1:-1::0;;26357:28:0;;::::1;::::0;::::1;::::0;;;26396:18:::1;:28:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;26442:11:::1;:21:::0;;;;;17480:42:::1;26442:36:::0;;;;;;;-1:-1:-1;;26442:56:0;;26088:418::o;20217:346::-;-1:-1:-1;;;;;20319:19:0;;20311:68;;;;-1:-1:-1;;;20311:68:0;;15770:2:1;20311:68:0;;;15752:21:1;15809:2;15789:18;;;15782:30;15848:34;15828:18;;;15821:62;-1:-1:-1;;;15899:18:1;;;15892:34;15943:19;;20311:68:0;15568:400:1;20311:68:0;-1:-1:-1;;;;;20398:21:0;;20390:68;;;;-1:-1:-1;;;20390:68:0;;16175:2:1;20390:68:0;;;16157:21:1;16214:2;16194:18;;;16187:30;16253:34;16233:18;;;16226:62;-1:-1:-1;;;16304:18:1;;;16297:32;16346:19;;20390:68:0;15973:398:1;20390:68:0;-1:-1:-1;;;;;20471:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20523:32;;160:25:1;;;20523:32:0;;133:18:1;20523:32:0;;;;;;;20217:346;;;:::o;21214:1078::-;-1:-1:-1;;;;;21331:17:0;;21306:4;21331:17;;;:9;:17;;;;;;:27;-1:-1:-1;21331:27:0;21323:60;;;;-1:-1:-1;;;21323:60:0;;16578:2:1;21323:60:0;;;16560:21:1;16617:2;16597:18;;;16590:30;-1:-1:-1;;;16636:18:1;;;16629:50;16696:18;;21323:60:0;16376:344:1;21323:60:0;21411:1;21402:6;:10;21394:46;;;;-1:-1:-1;;;21394:46:0;;16927:2:1;21394:46:0;;;16909:21:1;16966:2;16946:18;;;16939:30;17005:25;16985:18;;;16978:53;17048:18;;21394:46:0;16725:347:1;21394:46:0;21456:6;;;;21453:63;;;21472:41;21487:6;21495:9;21506:6;21472:14;:41::i;:::-;21465:48;;;;21453:63;25583:10;;21528:118;;-1:-1:-1;;;;;21553:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;21583:29:0;;;;;;:18;:29;;;;;;;;21553:59;21545:98;;;;-1:-1:-1;;;21545:98:0;;17279:2:1;21545:98:0;;;17261:21:1;17318:2;17298:18;;;17291:30;17357:28;17337:18;;;17330:56;17403:18;;21545:98:0;17077:350:1;21545:98:0;-1:-1:-1;;;;;21658:17:0;;;;;;:9;:17;;;;;:27;;21679:6;;21658:17;:27;;21679:6;;21658:27;:::i;:::-;;;;-1:-1:-1;;;;;;;22654:19:0;;21698:22;22654:19;;;:11;:19;;;;;;;;22653:20;21723:49;;;;-1:-1:-1;;;;;;22654:19:0;;22629:4;22654:19;;;:11;:19;;;;;;;;22653:20;21748:24;21723:95;;21812:6;21723:95;;;21775:34;21783:6;21791:9;21802:6;21775:7;:34::i;:::-;21698:120;;21842:33;21857:6;21865:9;21842:14;:33::i;:::-;21839:74;;;21882:10;;21878:32;;21894:16;21903:6;21894:8;:16::i;:::-;-1:-1:-1;;;;;21933:20:0;;;;;;:9;:20;;;;;:38;;21957:14;;21933:20;:38;;21957:14;;21933:38;:::i;:::-;;;;-1:-1:-1;;25583:10:0;;:15;;21999:31;;;;-1:-1:-1;22013:17:0;;-1:-1:-1;;;22013:17:0;;;;21999:31;21996:104;;;22045:9;;:55;;-1:-1:-1;;;22045:55:0;;-1:-1:-1;;;;;17690:15:1;;;22045:55:0;;;17672:34:1;17742:15;;;17722:18;;;17715:43;17774:18;;;17767:34;;;22045:9:0;;;;:28;;17607:18:1;;22045:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21996:104;-1:-1:-1;;;;;27680:24:0;;27656:4;27680:24;;;:15;:24;;;;;;;;22121:26;22113:88;;;;-1:-1:-1;;;22113:88:0;;18264:2:1;22113:88:0;;;18246:21:1;18303:2;18283:18;;;18276:30;18342:34;18322:18;;;18315:62;-1:-1:-1;;;18393:18:1;;;18386:47;18450:19;;22113:88:0;18062:413:1;22113:88:0;22236:9;-1:-1:-1;;;;;22219:43:0;22228:6;-1:-1:-1;;;;;22219:43:0;;22247:14;22219:43;;;;160:25:1;;148:2;133:18;;14:177;22219:43:0;;;;;;;;-1:-1:-1;22280:4:0;;21214:1078;-1:-1:-1;;;;21214:1078:0:o;22300:259::-;-1:-1:-1;;;;;22410:17:0;;22393:4;22410:17;;;:9;:17;;;;;:27;;22431:6;;22410:17;22393:4;;22410:27;;22431:6;;22410:27;:::i;:::-;;;;-1:-1:-1;;;;;;;22448:20:0;;;;;;:9;:20;;;;;:30;;22472:6;;22448:20;:30;;22472:6;;22448:30;:::i;:::-;;;;;;;;22511:9;-1:-1:-1;;;;;22494:35:0;22503:6;-1:-1:-1;;;;;22494:35:0;;22522:6;22494:35;;;;160:25:1;;148:2;133:18;;14:177;22494:35:0;;;;;;;;-1:-1:-1;22547:4:0;22300:259;;;;;:::o;15664:148::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;15771:1:::1;15755:6:::0;;15734:40:::1;::::0;-1:-1:-1;;;;;15755:6:0;;::::1;::::0;15734:40:::1;::::0;15771:1;;15734:40:::1;15802:1;15785:19:::0;;-1:-1:-1;;;;;;15785:19:0::1;::::0;;15664:148::o;15967:244::-;15235:6;;-1:-1:-1;;;;;15235:6:0;9583:10;15235:22;15227:67;;;;-1:-1:-1;;;15227:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16056:22:0;::::1;16048:73;;;::::0;-1:-1:-1;;;16048:73:0;;18682:2:1;16048:73:0::1;::::0;::::1;18664:21:1::0;18721:2;18701:18;;;18694:30;18760:34;18740:18;;;18733:62;-1:-1:-1;;;18811:18:1;;;18804:36;18857:19;;16048:73:0::1;18480:402:1::0;16048:73:0::1;16158:6;::::0;;16137:38:::1;::::0;-1:-1:-1;;;;;16137:38:0;;::::1;::::0;16158:6;::::1;::::0;16137:38:::1;::::0;::::1;16186:6;:17:::0;;-1:-1:-1;;;;;;16186:17:0::1;-1:-1:-1::0;;;;;16186:17:0;;;::::1;::::0;;;::::1;::::0;;15967:244::o;22839:464::-;-1:-1:-1;;;;;22987:25:0;;22925:7;22987:25;;;:14;:25;;;;;;22925:7;;17286:4;;22975:38;;22987:25;;22975:11;:38::i;:::-;22966:47;;:6;:47;:::i;:::-;22965:66;;;;:::i;:::-;23070:4;23052:24;;;;:9;:24;;;;;:37;;22945:86;;-1:-1:-1;22945:86:0;;23052:24;;;:37;;22945:86;;23052:37;:::i;:::-;;;;-1:-1:-1;;23105:42:0;;160:25:1;;;23130:4:0;;-1:-1:-1;;;;;23105:42:0;;;;;148:2:1;133:18;23105:42:0;;;;;;;-1:-1:-1;;;;;23163:22:0;;;;;;:14;:22;;;;;;;;:56;;;;-1:-1:-1;23205:10:0;;:14;;23218:1;23205:14;:::i;:::-;23189:12;:30;;23163:56;23160:98;;;-1:-1:-1;;;;;23222:26:0;;;;;;:15;:26;;;;;:33;;-1:-1:-1;;23222:33:0;23251:4;23222:33;;;23160:98;23277:18;23286:9;23277:6;:18;:::i;:::-;23270:25;22839:464;-1:-1:-1;;;;;22839:464:0:o;23311:352::-;-1:-1:-1;;;;;23418:22:0;;23393:4;23418:22;;;:14;:22;;;;;;;;23417:23;:56;;;;-1:-1:-1;;;;;;23454:19:0;;;;;;:11;:19;;;;;;;;23453:20;23417:56;:76;;;;-1:-1:-1;23487:6:0;;;;23486:7;23417:76;:100;;;;-1:-1:-1;23506:11:0;;-1:-1:-1;;;23506:11:0;;;;23417:100;:138;;;;-1:-1:-1;;;;;;23530:25:0;;;;;;:14;:25;;;;;;;;23417:138;:190;;;;-1:-1:-1;23596:11:0;;23586:4;23568:24;;;;:9;:24;;;;;;:39;;23417:190;:238;;;;;23633:1;23622:8;;:12;:32;;;-1:-1:-1;;23638:12:0;;:16;;;23311:352;-1:-1:-1;;23311:352:0:o;23671:1640::-;18057:6;:13;;-1:-1:-1;;18057:13:0;18066:4;18057:13;;;23766::::1;::::0;18057:6;;23757:22;::::1;:47;;23791:13;;23757:47;;;23782:6;23757:47;23837:4;23819:24;::::0;;;:9:::1;:24;::::0;;;;;23734:70;;-1:-1:-1;23819:39:0;-1:-1:-1;23815:84:0::1;;;-1:-1:-1::0;23893:4:0::1;23875:24;::::0;;;:9:::1;:24;::::0;;;;;23815:84:::1;23936:16;::::0;;23950:1:::1;23936:16:::0;;;;;::::1;::::0;;23912:21:::1;::::0;23936:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23936:16:0::1;23912:40;;23981:4;23963;23968:1;23963:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23963:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24007:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;24007:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;23963:7;;24007:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23997:4;24002:1;23997:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23997:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24103:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;24103:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;24175:12;;24103:6:::1;::::0;24218:4;;24245::::1;::::0;24265:15:::1;::::0;24103:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24395:12:0::1;::::0;24384:8:::1;::::0;24330:21:::1;::::0;-1:-1:-1;24304:23:0::1;::::0;-1:-1:-1;24384:23:0::1;::::0;24395:12;24384:23:::1;:::i;:::-;24362:45;;24420:17;24484:11;24469:10;;24460:6;;:19;;;;:::i;:::-;24441:39;::::0;:15;:39:::1;:::i;:::-;24440:55;;;;:::i;:::-;24420:75;;24506:21;24582:11;24563:14;;24550:10;;:27;;;;:::i;:::-;24531:47;::::0;:15;:47:::1;:::i;:::-;24530:63;;;;:::i;:::-;24506:87:::0;-1:-1:-1;24604:23:0::1;24649:25;24506:87:::0;24649:9;:25:::1;:::i;:::-;24630:45;::::0;:15;:45:::1;:::i;:::-;24604:71:::0;-1:-1:-1;24700:13:0;;24696:176:::1;;24749:11;::::0;:38:::1;::::0;24731:12:::1;::::0;-1:-1:-1;;;;;24749:11:0::1;::::0;24773:9;;24731:12;24749:38;24731:12;24749:38;24773:9;24749:11;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24730:57;;;24810:7;24802:58;;;::::0;-1:-1:-1;;;24802:58:0;;20206:2:1;24802:58:0::1;::::0;::::1;20188:21:1::0;20245:2;20225:18;;;20218:30;20284:34;20264:18;;;20257:62;-1:-1:-1;;;20335:18:1;;;20328:36;20381:19;;24802:58:0::1;20004:402:1::0;24802:58:0::1;24715:157;24696:176;24886:17:::0;;24882:200:::1;;24943:15;::::0;:46:::1;::::0;24921:16:::1;::::0;-1:-1:-1;;;;;24943:15:0::1;::::0;24971:13;;24921:16;24943:46;24921:16;24943:46;24971:13;24943:15;:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24920:69;;;25012:11;25004:66;;;::::0;-1:-1:-1;;;25004:66:0;;20613:2:1;25004:66:0::1;::::0;::::1;20595:21:1::0;20652:2;20632:18;;;20625:30;20691:34;20671:18;;;20664:62;-1:-1:-1;;;20742:18:1;;;20735:40;20792:19;;25004:66:0::1;20411:406:1::0;25004:66:0::1;24905:177;24882:200;25096:19:::0;;25092:212:::1;;25157:17;::::0;:50:::1;::::0;25133:18:::1;::::0;-1:-1:-1;;;;;25157:17:0::1;::::0;25187:15;;25133:18;25157:50;25133:18;25157:50;25187:15;25157:17;:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25132:75;;;25230:13;25222:70;;;::::0;-1:-1:-1;;;25222:70:0;;21024:2:1;25222:70:0::1;::::0;::::1;21006:21:1::0;21063:2;21043:18;;;21036:30;21102:34;21082:18;;;21075:62;-1:-1:-1;;;21153:18:1;;;21146:42;21205:19;;25222:70:0::1;20822:408:1::0;25222:70:0::1;25117:187;25092:212;-1:-1:-1::0;;18075:6:0;:14;;-1:-1:-1;;18075:14:0;;;-1:-1:-1;;;;;;23671:1640:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1649:316::-;1726:6;1734;1742;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;-1:-1:-1;;1834:23:1;;;1904:2;1889:18;;1876:32;;-1:-1:-1;1955:2:1;1940:18;;;1927:32;;1649:316;-1:-1:-1;1649:316:1:o;1970:248::-;2038:6;2046;2099:2;2087:9;2078:7;2074:23;2070:32;2067:52;;;2115:1;2112;2105:12;2067:52;-1:-1:-1;;2138:23:1;;;2208:2;2193:18;;;2180:32;;-1:-1:-1;1970:248:1:o;2223:456::-;2300:6;2308;2316;2369:2;2357:9;2348:7;2344:23;2340:32;2337:52;;;2385:1;2382;2375:12;2337:52;2424:9;2411:23;2443:31;2468:5;2443:31;:::i;:::-;2493:5;-1:-1:-1;2550:2:1;2535:18;;2522:32;2563:33;2522:32;2563:33;:::i;:::-;2223:456;;2615:7;;-1:-1:-1;;;2669:2:1;2654:18;;;;2641:32;;2223:456::o;3081:118::-;3167:5;3160:13;3153:21;3146:5;3143:32;3133:60;;3189:1;3186;3179:12;3204:382;3269:6;3277;3330:2;3318:9;3309:7;3305:23;3301:32;3298:52;;;3346:1;3343;3336:12;3298:52;3385:9;3372:23;3404:31;3429:5;3404:31;:::i;:::-;3454:5;-1:-1:-1;3511:2:1;3496:18;;3483:32;3524:30;3483:32;3524:30;:::i;:::-;3573:7;3563:17;;;3204:382;;;;;:::o;3591:367::-;3654:8;3664:6;3718:3;3711:4;3703:6;3699:17;3695:27;3685:55;;3736:1;3733;3726:12;3685:55;-1:-1:-1;3759:20:1;;3802:18;3791:30;;3788:50;;;3834:1;3831;3824:12;3788:50;3871:4;3863:6;3859:17;3847:29;;3931:3;3924:4;3914:6;3911:1;3907:14;3899:6;3895:27;3891:38;3888:47;3885:67;;;3948:1;3945;3938:12;3885:67;3591:367;;;;;:::o;3963:773::-;4085:6;4093;4101;4109;4162:2;4150:9;4141:7;4137:23;4133:32;4130:52;;;4178:1;4175;4168:12;4130:52;4218:9;4205:23;4247:18;4288:2;4280:6;4277:14;4274:34;;;4304:1;4301;4294:12;4274:34;4343:70;4405:7;4396:6;4385:9;4381:22;4343:70;:::i;:::-;4432:8;;-1:-1:-1;4317:96:1;-1:-1:-1;4520:2:1;4505:18;;4492:32;;-1:-1:-1;4536:16:1;;;4533:36;;;4565:1;4562;4555:12;4533:36;;4604:72;4668:7;4657:8;4646:9;4642:24;4604:72;:::i;:::-;3963:773;;;;-1:-1:-1;4695:8:1;-1:-1:-1;;;;3963:773:1:o;4967:241::-;5023:6;5076:2;5064:9;5055:7;5051:23;5047:32;5044:52;;;5092:1;5089;5082:12;5044:52;5131:9;5118:23;5150:28;5172:5;5150:28;:::i;5213:377::-;5287:6;5295;5303;5356:2;5344:9;5335:7;5331:23;5327:32;5324:52;;;5372:1;5369;5362:12;5324:52;5411:9;5398:23;5430:28;5452:5;5430:28;:::i;:::-;5477:5;5529:2;5514:18;;5501:32;;-1:-1:-1;5580:2:1;5565:18;;;5552:32;;5213:377;-1:-1:-1;;;5213:377:1:o;5595:180::-;5654:6;5707:2;5695:9;5686:7;5682:23;5678:32;5675:52;;;5723:1;5720;5713:12;5675:52;-1:-1:-1;5746:23:1;;5595:180;-1:-1:-1;5595:180:1:o;5780:388::-;5848:6;5856;5909:2;5897:9;5888:7;5884:23;5880:32;5877:52;;;5925:1;5922;5915:12;5877:52;5964:9;5951:23;5983:31;6008:5;5983:31;:::i;:::-;6033:5;-1:-1:-1;6090:2:1;6075:18;;6062:32;6103:33;6062:32;6103:33;:::i;6399:356::-;6601:2;6583:21;;;6620:18;;;6613:30;6679:34;6674:2;6659:18;;6652:62;6746:2;6731:18;;6399:356::o;7323:127::-;7384:10;7379:3;7375:20;7372:1;7365:31;7415:4;7412:1;7405:15;7439:4;7436:1;7429:15;7455:125;7520:9;;;7541:10;;;7538:36;;;7554:18;;:::i;7585:168::-;7625:7;7691:1;7687;7683:6;7679:14;7676:1;7673:21;7668:1;7661:9;7654:17;7650:45;7647:71;;;7698:18;;:::i;:::-;-1:-1:-1;7738:9:1;;7585:168::o;7758:217::-;7798:1;7824;7814:132;;7868:10;7863:3;7859:20;7856:1;7849:31;7903:4;7900:1;7893:15;7931:4;7928:1;7921:15;7814:132;-1:-1:-1;7960:9:1;;7758:217::o;8575:422::-;8664:1;8707:5;8664:1;8721:270;8742:7;8732:8;8729:21;8721:270;;;8801:4;8797:1;8793:6;8789:17;8783:4;8780:27;8777:53;;;8810:18;;:::i;:::-;8860:7;8850:8;8846:22;8843:55;;;8880:16;;;;8843:55;8959:22;;;;8919:15;;;;8721:270;;;8725:3;8575:422;;;;;:::o;9002:806::-;9051:5;9081:8;9071:80;;-1:-1:-1;9122:1:1;9136:5;;9071:80;9170:4;9160:76;;-1:-1:-1;9207:1:1;9221:5;;9160:76;9252:4;9270:1;9265:59;;;;9338:1;9333:130;;;;9245:218;;9265:59;9295:1;9286:10;;9309:5;;;9333:130;9370:3;9360:8;9357:17;9354:43;;;9377:18;;:::i;:::-;-1:-1:-1;;9433:1:1;9419:16;;9448:5;;9245:218;;9547:2;9537:8;9534:16;9528:3;9522:4;9519:13;9515:36;9509:2;9499:8;9496:16;9491:2;9485:4;9482:12;9478:35;9475:77;9472:159;;;-1:-1:-1;9584:19:1;;;9616:5;;9472:159;9663:34;9688:8;9682:4;9663:34;:::i;:::-;9733:6;9729:1;9725:6;9721:19;9712:7;9709:32;9706:58;;;9744:18;;:::i;:::-;9782:20;;9002:806;-1:-1:-1;;;9002:806:1:o;9813:140::-;9871:5;9900:47;9941:4;9931:8;9927:19;9921:4;9900:47;:::i;9958:128::-;10025:9;;;10046:11;;;10043:37;;;10060:18;;:::i;10789:127::-;10850:10;10845:3;10841:20;10838:1;10831:31;10881:4;10878:1;10871:15;10905:4;10902:1;10895:15;11335:135;11374:3;11395:17;;;11392:43;;11415:18;;:::i;:::-;-1:-1:-1;11462:1:1;11451:13;;11335:135::o;12580:251::-;12650:6;12703:2;12691:9;12682:7;12678:23;12674:32;12671:52;;;12719:1;12716;12709:12;12671:52;12751:9;12745:16;12770:31;12795:5;12770:31;:::i;13757:306::-;13845:6;13853;13861;13914:2;13902:9;13893:7;13889:23;13885:32;13882:52;;;13930:1;13927;13920:12;13882:52;13959:9;13953:16;13943:26;;14009:2;13998:9;13994:18;13988:25;13978:35;;14053:2;14042:9;14038:18;14032:25;14022:35;;13757:306;;;;;:::o;17812:245::-;17879:6;17932:2;17920:9;17911:7;17907:23;17903:32;17900:52;;;17948:1;17945;17938:12;17900:52;17980:9;17974:16;17999:28;18021:5;17999:28;:::i;19019:980::-;19281:4;19329:3;19318:9;19314:19;19360:6;19349:9;19342:25;19386:2;19424:6;19419:2;19408:9;19404:18;19397:34;19467:3;19462:2;19451:9;19447:18;19440:31;19491:6;19526;19520:13;19557:6;19549;19542:22;19595:3;19584:9;19580:19;19573:26;;19634:2;19626:6;19622:15;19608:29;;19655:1;19665:195;19679:6;19676:1;19673:13;19665:195;;;19744:13;;-1:-1:-1;;;;;19740:39:1;19728:52;;19835:15;;;;19800:12;;;;19776:1;19694:9;19665:195;;;-1:-1:-1;;;;;;;19916:32:1;;;;19911:2;19896:18;;19889:60;-1:-1:-1;;;19980:3:1;19965:19;19958:35;19877:3;19019:980;-1:-1:-1;;;19019:980:1:o

Swarm Source

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