ETH Price: $3,488.50 (+0.06%)
Gas: 2 Gwei

Token

XBOY (XBOY)
 

Overview

Max Total Supply

100,000,000 XBOY

Holders

150

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
XBOY_STEALTH

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-16
*/

// SPDX-License-Identifier: MIT
// File: XBOY/Libraries.sol



pragma solidity ^0.8.4;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

interface IUniswapRouter {
   
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

}

abstract contract Ownable {
    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 = msg.sender;
        _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() == msg.sender, "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 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 onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}





// File: XBOY/Xboy.sol



//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy
//Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy //Xboy

pragma solidity ^0.8.4;

contract XBOY_STEALTH is IERC20Metadata, Ownable
{
  
    mapping (address => uint) private _balances;
    mapping (address => mapping (address => uint)) private _allowances;
    mapping(address => bool) public excludedFromFees;
    mapping(address => bool) public excludedFromLimit;
    mapping(address=>bool) public isAMM;
    //Token Info
    string private constant _name = 'XBOY';
    string private constant _symbol = 'XBOY';
    uint8 private constant _decimals = 18;
    uint public constant InitialSupply= 100000000*10**_decimals;

    uint private constant DefaultLiquidityLockTime=7 days;
    //0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3 testnet router
    //0x10ED43C718714eb63d5aA57B78B54704E256024E mainnet router

    address private constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    //variables that track balanceLimit and sellLimit,
    //can be updated based on circulating supply and Sell- and BalanceLimitDividers
    uint private _circulatingSupply =InitialSupply;
    
    //Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer
    uint public buyTax = 50;
    uint public sellTax = 50;
    uint public transferTax = 10;
    uint public burnTax=0;
    uint public liquidityTax=0;
    uint public marketingTax=1000;
    uint constant TAX_DENOMINATOR=1000;
    uint constant MAXTAXDENOMINATOR=10;
    uint public LimitV = 50;
    uint public LimitSell = 1;
    

    address private _uniswapPairAddress; 
    IUniswapRouter private  _uniswapRouter;
    
    
    //TODO: marketingWallet
    address public marketingWallet;
    //Only marketingWallet can change marketingWallet
    function ChangeMarketingWallet(address newWallet) public{
        require(msg.sender==marketingWallet);
        marketingWallet=newWallet;
    }
    //modifier for functions only the team can call
    modifier onlyTeam() {
        require(_isTeam(msg.sender), "Caller not Team or Owner");
        _;
    }
    //Checks if address is in Team, is needed to give Team access even if contract is renounced
    //Team doesn't have access to critical Functions that could turn this into a Rugpull(Exept liquidity unlocks)
    function _isTeam(address addr) private view returns (bool){
        return addr==owner()||addr==marketingWallet;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Constructor///////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    constructor () {
        uint deployerBalance=_circulatingSupply;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);

        // Uniswap Router
        _uniswapRouter = IUniswapRouter(UniswapRouter);
        //Creates a Uniswap Pair
        _uniswapPairAddress = IUniswapFactory(_uniswapRouter.factory()).createPair(address(this), _uniswapRouter.WETH());
        isAMM[_uniswapPairAddress]=true;
        
        //contract creator is by default marketing wallet
        marketingWallet=msg.sender;
        //owner uniswap router and contract is excluded from Taxes
        excludedFromFees[msg.sender]=true;
        excludedFromFees[UniswapRouter]=true;
        excludedFromFees[address(this)]=true;
    }
    




    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Transfer functionality////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    //transfer function, every transfer runs through this function
    function _transfer(address sender, address recipient, uint amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");


        //Pick transfer
        if(excludedFromFees[sender] || excludedFromFees[recipient])
            _feelessTransfer(sender, recipient, amount);
        else if(excludedFromLimit[recipient]){ 
            //once trading is enabled, it can't be turned off again
            require(LaunchTimestamp>0,"trading not yet enabled");
            _LimitlessFonctionTransfer(sender,recipient,amount);                  
        }
        else { 
            //once trading is enabled, it can't be turned off again
            require(LaunchTimestamp>0,"trading not yet enabled");
            _taxedTransfer(sender,recipient,amount);                  
        }
    }
    
    //applies taxes, checks for limits, locks generates autoLP and stakingETH, and autostakes
    function _taxedTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        uint recipientBalance = _balances[recipient];
        require(senderBalance >= amount, "Transfer exceeds balance");
        require(senderBalance/LimitSell >= amount, "Transfer exceeds authorise sell");
        require((recipientBalance + amount ) <= InitialSupply/LimitV, "Wallet contain more than certain % Total Supply");

        bool isBuy=isAMM[sender];
        bool isSell=isAMM[recipient];

        uint tax;
        if(isSell){  
            uint SellTaxDuration=300 seconds;          
            if(block.timestamp<LaunchTimestamp+SellTaxDuration){
                tax=_getStartTax(SellTaxDuration,999);
                }else tax=sellTax;
            }
        else if(isBuy){
            uint BuyTaxDuration=300 seconds;
            if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
                tax=_getStartTax(BuyTaxDuration,490);
            }else tax=buyTax;
        } else tax=transferTax;

        if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
            _swapContractToken(false);

        //Calculates the exact token amount for each tax
        uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
        //staking and liquidity Tax get treated the same, only during conversion they get split
        uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
        //Subtract the Taxed Tokens from the amount
        uint taxedAmount=amount-(tokensToBeBurnt + contractToken);

        _balances[sender]-=amount;
        //Adds the taxed tokens to the contract wallet
        _balances[address(this)] += contractToken;
        //Burns tokens
        _circulatingSupply-=tokensToBeBurnt;
        _balances[recipient]+=taxedAmount;
        
        emit Transfer(sender,recipient,taxedAmount);
    }
    //Start tax drops depending on the time since launch, enables bot protection and Dump protection
    function _getStartTax(uint duration, uint maxTax) private view returns (uint){
        uint timeSinceLaunch=block.timestamp-LaunchTimestamp;
        return maxTax-((maxTax-50)*timeSinceLaunch/duration);
    }
    //Calculates the token that should be taxed
    function _calculateFee(uint amount, uint tax, uint taxPercent) private pure returns (uint) {
        return (amount*tax*taxPercent) / (TAX_DENOMINATOR*TAX_DENOMINATOR);
    }


    //Feeless transfer only transfers and autostakes
    function _feelessTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _balances[sender]-=amount;
        _balances[recipient]+=amount;      
        emit Transfer(sender,recipient,amount);
    }
///////////////////////////////YeaaaahBrooooooo//////////addd
    function _LimitlessFonctionTransfer (address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");

        bool isBuy=isAMM[sender];
        bool isSell=isAMM[recipient];

        uint tax;
        if(isSell){  
            uint SellTaxDuration=300 seconds;          
            if(block.timestamp<LaunchTimestamp+SellTaxDuration){
                tax=_getStartTax(SellTaxDuration,999);
                }else tax=sellTax;
            }
        else if(isBuy){
            uint BuyTaxDuration=300 seconds;
            if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
                tax=_getStartTax(BuyTaxDuration,490);
            }else tax=buyTax;
        } else tax=transferTax;

        if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
            _swapContractToken(false);

        //Calculates the exact token amount for each tax
        uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
        //staking and liquidity Tax get treated the same, only during conversion they get split
        uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
        //Subtract the Taxed Tokens from the amount
        uint taxedAmount=amount-(tokensToBeBurnt + contractToken);

        _balances[sender]-=amount;
        //Adds the taxed tokens to the contract wallet
        _balances[address(this)] += contractToken;
        //Burns tokens
        _circulatingSupply-=tokensToBeBurnt;
        _balances[recipient]+=taxedAmount;
        
        emit Transfer(sender,recipient,taxedAmount);
    }
    

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Swap Contract Tokens yeaaaaah Broo//////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    //Locks the swap if already swapping
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    //Sets the permille of uniswap pair to trigger liquifying taxed token
    uint public swapTreshold=2;
    function setSwapTreshold(uint newSwapTresholdPermille) public onlyTeam{
        require(newSwapTresholdPermille<=15);//MaxTreshold= 1.5%
        swapTreshold=newSwapTresholdPermille;
    }
    //Sets the max Liquidity where swaps for Liquidity still happen
    uint public overLiquifyTreshold=150;
    function SetOverLiquifiedTreshold(uint newOverLiquifyTresholdPermille) public onlyTeam{
        require(newOverLiquifyTresholdPermille<=1000);
        overLiquifyTreshold=newOverLiquifyTresholdPermille;
    }
    //Sets the taxes Burn+marketing+liquidity tax needs to equal the TAX_DENOMINATOR (1000)
    //buy, sell and transfer tax are limited by the MAXTAXDENOMINATOR
    event OnSetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity);
    function SetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity) public onlyTeam{
        uint maxTax=(TAX_DENOMINATOR/MAXTAXDENOMINATOR)/2;
        require(buy<=maxTax&&sell<=maxTax&&transfer_<=maxTax,"Tax exceeds maxTax");
        require(burn+marketing+liquidity==TAX_DENOMINATOR,"Taxes don't add up to denominator");
        
        buyTax=buy;
        sellTax=sell;
        transferTax=transfer_;
        marketingTax=marketing;
        liquidityTax=liquidity;
        burnTax=burn;
        emit OnSetTaxes(buy, sell, transfer_, burn, marketing,liquidity);
    }
    
    event OnSetLimit(uint LimitV2);
    function SetLimit(uint LimitV2) public onlyTeam{
        require(LimitV2<=50,"Max wallet  can't be under 2% of the total supply");
        LimitV=LimitV2;
       
        emit OnSetLimit(LimitV2);
    }

    event OnSetSell(uint LimitSell2);
    function SetSell(uint LimitSell2) public onlyTeam{
        require(LimitSell2<=2,"Dump measure can't be under 50% of the wallet");
        LimitSell=LimitSell2;
       
        emit OnSetSell(LimitSell2);
    }



    //If liquidity is over the treshold, convert 100% of Token to Marketing ETH to avoid overliquifying
    function isOverLiquified() public view returns(bool){
        return _balances[_uniswapPairAddress]>_circulatingSupply*overLiquifyTreshold/1000;
    }


    //swaps the token on the contract for Marketing ETH and LP Token.
    //always swaps a percentage of the LP pair balance to avoid price impact
    function _swapContractToken(bool ignoreLimits) private lockTheSwap{
        uint contractBalance=_balances[address(this)];
        uint totalTax=liquidityTax+marketingTax;
        //swaps each time it reaches swapTreshold of uniswap pair to avoid large prize impact
        uint tokenToSwap=_balances[_uniswapPairAddress]*swapTreshold/1000;

        //nothing to swap at no tax
        if(totalTax==0)return;
        //only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0
        //Ignore limits swaps 100% of the contractBalance
        if(ignoreLimits)
            tokenToSwap=_balances[address(this)];
        else if(contractBalance<tokenToSwap)
            return;

        //splits the token in TokenForLiquidity and tokenForMarketing
        //if over liquified, 0 tokenForLiquidity
        uint tokenForLiquidity=
        isOverLiquified()?0
        :(tokenToSwap*liquidityTax)/totalTax;

        uint tokenForMarketing= tokenToSwap-tokenForLiquidity;

        uint LiqHalf=tokenForLiquidity/2;
        //swaps marktetingToken and the liquidity token half for ETH
        uint swapToken=LiqHalf+tokenForMarketing;
        //Gets the initial ETH balance, so swap won't touch any contract ETH
        uint initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        uint newETH=(address(this).balance - initialETHBalance);

        //calculates the amount of ETH belonging to the LP-Pair and converts them to LP
        if(tokenForLiquidity>0){
            uint liqETH = (newETH*LiqHalf)/swapToken;
            _addLiquidity(LiqHalf, liqETH);
        }
        //Sends all the marketing ETH to the marketingWallet
        (bool sent,)=marketingWallet.call{value:address(this).balance}("");
        sent=true;
    }
    //swaps tokens on the contract for ETH
    function _swapTokenForETH(uint amount) private {
        _approve(address(this), address(_uniswapRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapRouter.WETH();

        try _uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        ){}
        catch{}
    }
    //Adds Liquidity directly to the contract where LP are locked
    function _addLiquidity(uint tokenamount, uint ethamount) private {
        _approve(address(this), address(_uniswapRouter), tokenamount);
        _uniswapRouter.addLiquidityETH{value: ethamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //public functions /////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////// 
    function getLiquidityReleaseTimeInSeconds() public view returns (uint){
        if(block.timestamp<_liquidityUnlockTime)
            return _liquidityUnlockTime-block.timestamp;
        return 0;
    }
    function getBurnedTokens() public view returns(uint){
        return (InitialSupply-_circulatingSupply)+_balances[address(0xdead)];
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Settings//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //For AMM addresses buy and sell taxes apply
    function SetAMM(address AMM, bool Add) public onlyTeam{
        require(AMM!=_uniswapPairAddress,"can't change uniswap");
        isAMM[AMM]=Add;
    }
    
    bool public manualSwap;
    //switches autoLiquidity and marketing ETH generation during transfers
    function SwitchManualSwap(bool manual) public onlyTeam{
        manualSwap=manual;
    }
    //manually converts contract token to LP and staking ETH
    function SwapContractToken() public onlyTeam{
    _swapContractToken(true);
    }
    event ExcludeAccount(address account, bool exclude);
    //Exclude/Include account from fees (eg. CEX)
    function ExcludeAccountFromFees(address account, bool exclude) public onlyTeam{
        require(account!=address(this),"can't Include the contract");
        excludedFromFees[account]=exclude;
        emit ExcludeAccount(account,exclude);
    }

    /////////////moussss///////////
     event ExcludeAccountLimit(address account, bool exclude);
    //Exclude/Include account from fees (eg. CEX)
    function ExcludedFromLimit(address account, bool exclude) public onlyTeam{
        require(account!=address(this),"can't Include the contract");
        excludedFromLimit[account]=exclude;
        emit ExcludeAccountLimit(account,exclude);
    }



    //Enables trading. Sets the launch timestamp to the given Value
    event OnEnableTrading();
    uint public LaunchTimestamp;
    function SetupEnableTrading() public onlyTeam{
        require(LaunchTimestamp==0,"AlreadyLaunched");
        LaunchTimestamp=block.timestamp;
        emit OnEnableTrading();
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Liquidity Lock////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //the timestamp when Liquidity unlocks
    uint _liquidityUnlockTime;
    bool public LPReleaseLimitedTo20Percent;
    //Sets Liquidity Release to 20% at a time and prolongs liquidity Lock for a Week after Release. 
    //That way autoLiquidity can be slowly released 
    function limitLiquidityReleaseTo20Percent() public onlyTeam{
        LPReleaseLimitedTo20Percent=true;
    }
    //Locks Liquidity for seconds. can only be prolonged
    function LockLiquidityForSeconds(uint secondsUntilUnlock) public onlyTeam{
        _prolongLiquidityLock(secondsUntilUnlock+block.timestamp);
    }
    event OnProlongLPLock(uint UnlockTimestamp);
    function _prolongLiquidityLock(uint newUnlockTime) private{
        // require new unlock time to be longer than old one
        require(newUnlockTime>_liquidityUnlockTime);
        _liquidityUnlockTime=newUnlockTime;
        emit OnProlongLPLock(_liquidityUnlockTime);
    }
    event OnReleaseLP();
    //Release Liquidity Tokens once unlock time is over
    function LiquidityRelease() public onlyTeam {
        //Only callable if liquidity Unlock time is over
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");

        IERC20 liquidityToken = IERC20(_uniswapPairAddress);
        uint amount = liquidityToken.balanceOf(address(this));
        if(LPReleaseLimitedTo20Percent)
        {
            _liquidityUnlockTime=block.timestamp+DefaultLiquidityLockTime;
            //regular liquidity release, only releases 50% at a time and locks liquidity for another week
            amount=amount*2/10;
        }
        liquidityToken.transfer(msg.sender, amount);
        emit OnReleaseLP();
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //external//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    receive() external payable {}

    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint) {
        return _circulatingSupply;
    }

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

    function transfer(address recipient, uint amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address _owner, address spender) external view override returns (uint) {
        return _allowances[_owner][spender];
    }

    function approve(address spender, uint amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

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

    function transferFrom(address sender, address recipient, uint amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    // IERC20 - Helpers

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

    function decreaseAllowance(address spender, uint subtractedValue) external returns (bool) {
        uint currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountLimit","type":"event"},{"anonymous":false,"inputs":[],"name":"OnEnableTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"UnlockTimestamp","type":"uint256"}],"name":"OnProlongLPLock","type":"event"},{"anonymous":false,"inputs":[],"name":"OnReleaseLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"LimitV2","type":"uint256"}],"name":"OnSetLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"LimitSell2","type":"uint256"}],"name":"OnSetSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"OnSetTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"ChangeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludedFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPReleaseLimitedTo20Percent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LaunchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityRelease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"LockLiquidityForSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AMM","type":"address"},{"internalType":"bool","name":"Add","type":"bool"}],"name":"SetAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LimitV2","type":"uint256"}],"name":"SetLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOverLiquifyTresholdPermille","type":"uint256"}],"name":"SetOverLiquifiedTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LimitSell2","type":"uint256"}],"name":"SetSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"transfer_","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapContractToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","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":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitLiquidityReleaseTo20Percent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"overLiquifyTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapTresholdPermille","type":"uint256"}],"name":"setSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTreshold","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a620003c2565b62000022906305f5e10062000483565b60065560326007556032600855600a6009556000600a556000600b556103e8600c556032600d556001600e55600260125560966013553480156200006557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600654336000818152600160209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200014e57600080fd5b505afa15801562000163573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000189919062000347565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e757600080fd5b505afa158015620001fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000222919062000347565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200026b57600080fd5b505af115801562000280573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a6919062000347565b600f80546001600160a01b03929092166001600160a01b031992831681179091556000908152600560209081526040808320805460ff1990811660019081179092556011805490961633908117909655948452600390925280832080548516831790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba88054851683179055308352909120805490921617905550620004bb565b6000602082840312156200035a57600080fd5b81516001600160a01b03811681146200037257600080fd5b9392505050565b600181815b80851115620003ba5781600019048211156200039e576200039e620004a5565b80851615620003ac57918102915b93841c93908002906200037e565b509250929050565b60006200037260ff841683600082620003de575060016200047d565b81620003ed575060006200047d565b8160018114620004065760028114620004115762000431565b60019150506200047d565b60ff841115620004255762000425620004a5565b50506001821b6200047d565b5060208310610133831016604e8410600b841016171562000456575081810a6200047d565b62000462838362000379565b8060001904821115620004795762000479620004a5565b0290505b92915050565b6000816000190483118215151615620004a057620004a0620004a5565b500290565b634e487b7160e01b600052601160045260246000fd5b61296b80620004cb6000396000f3fe6080604052600436106102cd5760003560e01c80638124f7ac11610175578063be617fa0116100dc578063d8bd2dd111610095578063e0d2f9eb1161006f578063e0d2f9eb1461085f578063e52fb9ec1461087f578063f2fde38b14610895578063f5fb756f146108b557600080fd5b8063d8bd2dd1146107b9578063dbe66ca0146107e9578063dd62ed3e1461081957600080fd5b8063be617fa014610713578063c3a3c03214610729578063c3f4f54f1461073e578063cc1776d314610753578063cfd1940e14610769578063d46b6a301461078957600080fd5b8063a457c2d71161012e578063a457c2d714610668578063a68bdac714610688578063a9059cbb1461069d578063ab64cfdc146106bd578063b40d09e2146106dd578063bc43d849146106f357600080fd5b80638124f7ac146105da578063817d4bff146105f0578063868b0141146106105780638da5cb5b1461063057806395d89b41146102f05780639b39b65f1461064e57600080fd5b806333ae8325116102345780635149f984116101ed57806370a08231116101c757806370a0823114610542578063715018a61461057857806375f0a8741461058d5780637b9e987a146105c557600080fd5b80635149f984146104f257806351bc3c8514610512578063629ece491461052c57600080fd5b806333ae832514610452578063395093511461047257806341aec3571461049257806346e35f03146104a7578063479881bf146104bc5780634f7041a5146104dc57600080fd5b80631d4eaead116102865780631d4eaead146103ab5780631eb25d13146103c157806323b872dd146103d65780632d48f84f146103f6578063313ce567146104165780633227925f1461043257600080fd5b80630612f39d146102d957806306fdde03146102f0578063095ea7b31461032c5780630eff4c641461035c57806318160ddd146103805780631d2cb02d1461039557600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee6108cb565b005b3480156102fc57600080fd5b50604080518082018252600481526358424f5960e01b602082015290516103239190612654565b60405180910390f35b34801561033857600080fd5b5061034c61034736600461254b565b610aa4565b6040519015158152602001610323565b34801561036857600080fd5b5061037260135481565b604051908152602001610323565b34801561038c57600080fd5b50600654610372565b3480156103a157600080fd5b50610372600c5481565b3480156103b757600080fd5b50610372600a5481565b3480156103cd57600080fd5b50610372610abb565b3480156103e257600080fd5b5061034c6103f13660046124dc565b610ad8565b34801561040257600080fd5b506102ee610411366004612611565b610b6f565b34801561042257600080fd5b5060405160128152602001610323565b34801561043e57600080fd5b506102ee61044d3660046125b1565b610cfa565b34801561045e57600080fd5b506102ee61046d3660046125b1565b610d34565b34801561047e57600080fd5b5061034c61048d36600461254b565b610dfc565b34801561049e57600080fd5b506102ee610e33565b3480156104b357600080fd5b5061034c610e64565b3480156104c857600080fd5b506102ee6104d73660046125b1565b610ea4565b3480156104e857600080fd5b5061037260075481565b3480156104fe57600080fd5b506102ee61050d36600461251d565b610f69565b34801561051e57600080fd5b5060145461034c9060ff1681565b34801561053857600080fd5b50610372600e5481565b34801561054e57600080fd5b5061037261055d366004612462565b6001600160a01b031660009081526001602052604090205490565b34801561058457600080fd5b506102ee61100e565b34801561059957600080fd5b506011546105ad906001600160a01b031681565b6040516001600160a01b039091168152602001610323565b3480156105d157600080fd5b506102ee6110c1565b3480156105e657600080fd5b5061037260095481565b3480156105fc57600080fd5b506102ee61060b366004612462565b611157565b34801561061c57600080fd5b506102ee61062b366004612577565b611190565b34801561063c57600080fd5b506000546001600160a01b03166105ad565b34801561065a57600080fd5b5060175461034c9060ff1681565b34801561067457600080fd5b5061034c61068336600461254b565b6111c8565b34801561069457600080fd5b506102ee611244565b3480156106a957600080fd5b5061034c6106b836600461254b565b611278565b3480156106c957600080fd5b506102ee6106d836600461251d565b611285565b3480156106e957600080fd5b5061037260155481565b3480156106ff57600080fd5b506102ee61070e3660046125b1565b611367565b34801561071f57600080fd5b50610372600b5481565b34801561073557600080fd5b506103726113a0565b34801561074a57600080fd5b506103726113c5565b34801561075f57600080fd5b5061037260085481565b34801561077557600080fd5b506102ee6107843660046125b1565b611425565b34801561079557600080fd5b5061034c6107a4366004612462565b60056020526000908152604090205460ff1681565b3480156107c557600080fd5b5061034c6107d4366004612462565b60046020526000908152604090205460ff1681565b3480156107f557600080fd5b5061034c610804366004612462565b60036020526000908152604090205460ff1681565b34801561082557600080fd5b506103726108343660046124a3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561086b57600080fd5b506102ee61087a36600461251d565b61145d565b34801561088b57600080fd5b5061037260125481565b3480156108a157600080fd5b506102ee6108b0366004612462565b611537565b3480156108c157600080fd5b50610372600d5481565b6108d433611660565b6108f95760405162461bcd60e51b81526004016108f0906126e0565b60405180910390fd5b60165442101561093e5760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b60448201526064016108f0565b600f546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b15801561098657600080fd5b505afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906125ca565b60175490915060ff16156109f6576109d962093a8042612788565b601655600a6109e98260026128b0565b6109f391906127a0565b90505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610a3e57600080fd5b505af1158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190612594565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67590600090a15050565b6000610ab133848461168d565b5060015b92915050565b610ac76012600a612805565b610ad5906305f5e1006128b0565b81565b6000610ae5848484611780565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610b505760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b60448201526064016108f0565b610b648533610b5f86856128cf565b61168d565b506001949350505050565b610b7833611660565b610b945760405162461bcd60e51b81526004016108f0906126e0565b60006002610ba5600a6103e86127a0565b610baf91906127a0565b9050808711158015610bc15750808611155b8015610bcd5750808511155b610c0e5760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b60448201526064016108f0565b6103e882610c1c8587612788565b610c269190612788565b14610c7d5760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b60648201526084016108f0565b600787905560088690556009859055600c839055600b829055600a8490556040805188815260208101889052908101869052606081018590526080810184905260a081018390527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a150505050505050565b610d0333611660565b610d1f5760405162461bcd60e51b81526004016108f0906126e0565b610d31610d2c4283612788565b611937565b50565b610d3d33611660565b610d595760405162461bcd60e51b81526004016108f0906126e0565b6002811115610dc05760405162461bcd60e51b815260206004820152602d60248201527f44756d70206d6561737572652063616e277420626520756e646572203530252060448201526c1bd9881d1a19481dd85b1b195d609a1b60648201526084016108f0565b600e8190556040518181527fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9906020015b60405180910390a150565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610ab1918590610b5f908690612788565b610e3c33611660565b610e585760405162461bcd60e51b81526004016108f0906126e0565b610e62600161197a565b565b60006103e8601354600654610e7991906128b0565b610e8391906127a0565b600f546001600160a01b031660009081526001602052604090205411919050565b610ead33611660565b610ec95760405162461bcd60e51b81526004016108f0906126e0565b6032811115610f345760405162461bcd60e51b815260206004820152603160248201527f4d61782077616c6c6574202063616e277420626520756e646572203225206f666044820152702074686520746f74616c20737570706c7960781b60648201526084016108f0565b600d8190556040518181527fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe3885590602001610df1565b610f7233611660565b610f8e5760405162461bcd60e51b81526004016108f0906126e0565b600f546001600160a01b0383811691161415610fe35760405162461bcd60e51b8152602060048201526014602482015273063616e2774206368616e676520756e69737761760641b60448201526064016108f0565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b336110216000546001600160a01b031690565b6001600160a01b0316146110775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6110ca33611660565b6110e65760405162461bcd60e51b81526004016108f0906126e0565b601554156111285760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b60448201526064016108f0565b426015556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc190600090a1565b6011546001600160a01b0316331461116e57600080fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b61119933611660565b6111b55760405162461bcd60e51b81526004016108f0906126e0565b6014805460ff1916911515919091179055565b3360009081526002602090815260408083206001600160a01b03861684529091528120548281101561122b5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b60448201526064016108f0565b61123a3385610b5f86856128cf565b5060019392505050565b61124d33611660565b6112695760405162461bcd60e51b81526004016108f0906126e0565b6017805460ff19166001179055565b6000610ab1338484611780565b61128e33611660565b6112aa5760405162461bcd60e51b81526004016108f0906126e0565b6001600160a01b0382163014156113035760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e747261637400000000000060448201526064016108f0565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d391015b60405180910390a15050565b61137033611660565b61138c5760405162461bcd60e51b81526004016108f0906126e0565b6103e881111561139b57600080fd5b601355565b60006016544210156113bf57426016546113ba91906128cf565b905090565b50600090565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d546006546114036012600a612805565b611411906305f5e1006128b0565b61141b91906128cf565b6113ba9190612788565b61142e33611660565b61144a5760405162461bcd60e51b81526004016108f0906126e0565b600f81111561145857600080fd5b601255565b61146633611660565b6114825760405162461bcd60e51b81526004016108f0906126e0565b6001600160a01b0382163014156114db5760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e747261637400000000000060448201526064016108f0565b6001600160a01b038216600081815260036020908152604091829020805460ff19168515159081179091558251938452908301527fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed4910161135b565b3361154a6000546001600160a01b031690565b6001600160a01b0316146115a05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f0565b6001600160a01b0381166116055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b0383811691161480610ab55750506011546001600160a01b0390811691161490565b6001600160a01b0383166116d75760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b60448201526064016108f0565b6001600160a01b03821661171f5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b60448201526064016108f0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117cb5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b60448201526064016108f0565b6001600160a01b0382166118145760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b60448201526064016108f0565b6001600160a01b03831660009081526003602052604090205460ff168061185357506001600160a01b03821660009081526003602052604090205460ff165b1561186857611863838383611b33565b505050565b6001600160a01b03821660009081526004602052604090205460ff16156118e0576000601554116118d55760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b60448201526064016108f0565b611863838383611c1b565b60006015541161192c5760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b60448201526064016108f0565b611863838383611e79565b601654811161194557600080fd5b60168190556040518181527f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e90602001610df1565b6011805460ff60a01b1916600160a01b17905530600090815260016020526040812054600c54600b549192916119b09190612788565b601254600f546001600160a01b0316600090815260016020526040812054929350916103e8916119df916128b0565b6119e991906127a0565b9050816119f857505050611b23565b8315611a14575030600090815260016020526040902054611a24565b80831015611a2457505050611b23565b6000611a2e610e64565b611a505782600b5483611a4191906128b0565b611a4b91906127a0565b611a53565b60005b90506000611a6182846128cf565b90506000611a706002846127a0565b90506000611a7e8383612788565b905047611a8a826121d1565b6000611a9682476128cf565b90508515611ac357600083611aab86846128b0565b611ab591906127a0565b9050611ac1858261232f565b505b6011546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611b10576040519150601f19603f3d011682016040523d82523d6000602084013e611b15565b606091505b505050505050505050505050505b506011805460ff60a01b19169055565b6001600160a01b03831660009081526001602052604090205481811015611b6c5760405162461bcd60e51b81526004016108f0906126a9565b6001600160a01b03841660009081526001602052604081208054849290611b949084906128cf565b90915550506001600160a01b03831660009081526001602052604081208054849290611bc1908490612788565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c0d91815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526001602052604090205481811015611c545760405162461bcd60e51b81526004016108f0906126a9565b6001600160a01b0380851660009081526005602052604080822054928616825281205460ff9283169216908115611cbd5760155461012c90611c97908290612788565b421015611cb157611caa816103e76123ef565b9150611cb7565b60085491505b50611cf7565b8215611cf25760155461012c90611cd5908290612788565b421015611ce857611caa816101ea6123ef565b5050600754611cf7565b506009545b600f546001600160a01b03888116911614801590611d18575060145460ff16155b8015611d2e5750601154600160a01b900460ff16155b15611d3d57611d3d600061197a565b6000611d4c8683600a54612435565b90506000611d6a8784600b54600c54611d659190612788565b612435565b90506000611d788284612788565b611d8290896128cf565b6001600160a01b038b16600090815260016020526040812080549293508a92909190611daf9084906128cf565b90915550503060009081526001602052604081208054849290611dd3908490612788565b925050819055508260066000828254611dec91906128cf565b90915550506001600160a01b03891660009081526001602052604081208054839290611e19908490612788565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e6591815260200190565b60405180910390a350505050505050505050565b6001600160a01b0380841660009081526001602052604080822054928516825290205482821015611ebc5760405162461bcd60e51b81526004016108f0906126a9565b82600e5483611ecb91906127a0565b1015611f195760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572206578636565647320617574686f726973652073656c6c0060448201526064016108f0565b600d54611f286012600a612805565b611f36906305f5e1006128b0565b611f4091906127a0565b611f4a8483612788565b1115611fb05760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60448201526e202520546f74616c20537570706c7960881b60648201526084016108f0565b6001600160a01b0380861660009081526005602052604080822054928716825281205460ff92831692169081156120195760155461012c90611ff3908290612788565b42101561200d57612006816103e76123ef565b9150612013565b60085491505b50612053565b821561204e5760155461012c90612031908290612788565b42101561204457612006816101ea6123ef565b5050600754612053565b506009545b600f546001600160a01b03898116911614801590612074575060145460ff16155b801561208a5750601154600160a01b900460ff16155b1561209957612099600061197a565b60006120a88783600a54612435565b905060006120c18884600b54600c54611d659190612788565b905060006120cf8284612788565b6120d9908a6128cf565b6001600160a01b038c16600090815260016020526040812080549293508b929091906121069084906128cf565b9091555050306000908152600160205260408120805484929061212a908490612788565b92505081905550826006600082825461214391906128cf565b90915550506001600160a01b038a1660009081526001602052604081208054839290612170908490612788565b92505081905550896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121bc91815260200190565b60405180910390a35050505050505050505050565b6010546121e99030906001600160a01b03168361168d565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061221e5761221e6128fc565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561227257600080fd5b505afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa9190612486565b816001815181106122bd576122bd6128fc565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b815291169063791ac94790612303908590600090869030904290600401612717565b600060405180830381600087803b15801561231d57600080fd5b505af192505050801561186357505050565b6010546123479030906001600160a01b03168461168d565b60105460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123e891906125e3565b5050505050565b6000806015544261240091906128cf565b9050838161240f6032866128cf565b61241991906128b0565b61242391906127a0565b61242d90846128cf565b949350505050565b60006124436103e8806128b0565b8261244e85876128b0565b61245891906128b0565b61242d91906127a0565b60006020828403121561247457600080fd5b813561247f81612912565b9392505050565b60006020828403121561249857600080fd5b815161247f81612912565b600080604083850312156124b657600080fd5b82356124c181612912565b915060208301356124d181612912565b809150509250929050565b6000806000606084860312156124f157600080fd5b83356124fc81612912565b9250602084013561250c81612912565b929592945050506040919091013590565b6000806040838503121561253057600080fd5b823561253b81612912565b915060208301356124d181612927565b6000806040838503121561255e57600080fd5b823561256981612912565b946020939093013593505050565b60006020828403121561258957600080fd5b813561247f81612927565b6000602082840312156125a657600080fd5b815161247f81612927565b6000602082840312156125c357600080fd5b5035919050565b6000602082840312156125dc57600080fd5b5051919050565b6000806000606084860312156125f857600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561262a57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b8181101561268157858101830151858201604001528201612665565b81811115612693576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526018908201527f5472616e7366657220657863656564732062616c616e63650000000000000000604082015260600190565b60208082526018908201527f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127675784516001600160a01b031683529383019391830191600101612742565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561279b5761279b6128e6565b500190565b6000826127bd57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156127fd5781600019048211156127e3576127e36128e6565b808516156127f057918102915b93841c93908002906127c7565b509250929050565b600061247f60ff84168360008261281e57506001610ab5565b8161282b57506000610ab5565b8160018114612841576002811461284b57612867565b6001915050610ab5565b60ff84111561285c5761285c6128e6565b50506001821b610ab5565b5060208310610133831016604e8410600b841016171561288a575081810a610ab5565b61289483836127c2565b80600019048211156128a8576128a86128e6565b029392505050565b60008160001904831182151516156128ca576128ca6128e6565b500290565b6000828210156128e1576128e16128e6565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610d3157600080fd5b8015158114610d3157600080fdfea2646970667358221220bb3c90c69a9019c7faddfed581530bbb068655aff2b34453902c9b35f2f42bd864736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80638124f7ac11610175578063be617fa0116100dc578063d8bd2dd111610095578063e0d2f9eb1161006f578063e0d2f9eb1461085f578063e52fb9ec1461087f578063f2fde38b14610895578063f5fb756f146108b557600080fd5b8063d8bd2dd1146107b9578063dbe66ca0146107e9578063dd62ed3e1461081957600080fd5b8063be617fa014610713578063c3a3c03214610729578063c3f4f54f1461073e578063cc1776d314610753578063cfd1940e14610769578063d46b6a301461078957600080fd5b8063a457c2d71161012e578063a457c2d714610668578063a68bdac714610688578063a9059cbb1461069d578063ab64cfdc146106bd578063b40d09e2146106dd578063bc43d849146106f357600080fd5b80638124f7ac146105da578063817d4bff146105f0578063868b0141146106105780638da5cb5b1461063057806395d89b41146102f05780639b39b65f1461064e57600080fd5b806333ae8325116102345780635149f984116101ed57806370a08231116101c757806370a0823114610542578063715018a61461057857806375f0a8741461058d5780637b9e987a146105c557600080fd5b80635149f984146104f257806351bc3c8514610512578063629ece491461052c57600080fd5b806333ae832514610452578063395093511461047257806341aec3571461049257806346e35f03146104a7578063479881bf146104bc5780634f7041a5146104dc57600080fd5b80631d4eaead116102865780631d4eaead146103ab5780631eb25d13146103c157806323b872dd146103d65780632d48f84f146103f6578063313ce567146104165780633227925f1461043257600080fd5b80630612f39d146102d957806306fdde03146102f0578063095ea7b31461032c5780630eff4c641461035c57806318160ddd146103805780631d2cb02d1461039557600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee6108cb565b005b3480156102fc57600080fd5b50604080518082018252600481526358424f5960e01b602082015290516103239190612654565b60405180910390f35b34801561033857600080fd5b5061034c61034736600461254b565b610aa4565b6040519015158152602001610323565b34801561036857600080fd5b5061037260135481565b604051908152602001610323565b34801561038c57600080fd5b50600654610372565b3480156103a157600080fd5b50610372600c5481565b3480156103b757600080fd5b50610372600a5481565b3480156103cd57600080fd5b50610372610abb565b3480156103e257600080fd5b5061034c6103f13660046124dc565b610ad8565b34801561040257600080fd5b506102ee610411366004612611565b610b6f565b34801561042257600080fd5b5060405160128152602001610323565b34801561043e57600080fd5b506102ee61044d3660046125b1565b610cfa565b34801561045e57600080fd5b506102ee61046d3660046125b1565b610d34565b34801561047e57600080fd5b5061034c61048d36600461254b565b610dfc565b34801561049e57600080fd5b506102ee610e33565b3480156104b357600080fd5b5061034c610e64565b3480156104c857600080fd5b506102ee6104d73660046125b1565b610ea4565b3480156104e857600080fd5b5061037260075481565b3480156104fe57600080fd5b506102ee61050d36600461251d565b610f69565b34801561051e57600080fd5b5060145461034c9060ff1681565b34801561053857600080fd5b50610372600e5481565b34801561054e57600080fd5b5061037261055d366004612462565b6001600160a01b031660009081526001602052604090205490565b34801561058457600080fd5b506102ee61100e565b34801561059957600080fd5b506011546105ad906001600160a01b031681565b6040516001600160a01b039091168152602001610323565b3480156105d157600080fd5b506102ee6110c1565b3480156105e657600080fd5b5061037260095481565b3480156105fc57600080fd5b506102ee61060b366004612462565b611157565b34801561061c57600080fd5b506102ee61062b366004612577565b611190565b34801561063c57600080fd5b506000546001600160a01b03166105ad565b34801561065a57600080fd5b5060175461034c9060ff1681565b34801561067457600080fd5b5061034c61068336600461254b565b6111c8565b34801561069457600080fd5b506102ee611244565b3480156106a957600080fd5b5061034c6106b836600461254b565b611278565b3480156106c957600080fd5b506102ee6106d836600461251d565b611285565b3480156106e957600080fd5b5061037260155481565b3480156106ff57600080fd5b506102ee61070e3660046125b1565b611367565b34801561071f57600080fd5b50610372600b5481565b34801561073557600080fd5b506103726113a0565b34801561074a57600080fd5b506103726113c5565b34801561075f57600080fd5b5061037260085481565b34801561077557600080fd5b506102ee6107843660046125b1565b611425565b34801561079557600080fd5b5061034c6107a4366004612462565b60056020526000908152604090205460ff1681565b3480156107c557600080fd5b5061034c6107d4366004612462565b60046020526000908152604090205460ff1681565b3480156107f557600080fd5b5061034c610804366004612462565b60036020526000908152604090205460ff1681565b34801561082557600080fd5b506103726108343660046124a3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561086b57600080fd5b506102ee61087a36600461251d565b61145d565b34801561088b57600080fd5b5061037260125481565b3480156108a157600080fd5b506102ee6108b0366004612462565b611537565b3480156108c157600080fd5b50610372600d5481565b6108d433611660565b6108f95760405162461bcd60e51b81526004016108f0906126e0565b60405180910390fd5b60165442101561093e5760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b60448201526064016108f0565b600f546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b15801561098657600080fd5b505afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906125ca565b60175490915060ff16156109f6576109d962093a8042612788565b601655600a6109e98260026128b0565b6109f391906127a0565b90505b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610a3e57600080fd5b505af1158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190612594565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67590600090a15050565b6000610ab133848461168d565b5060015b92915050565b610ac76012600a612805565b610ad5906305f5e1006128b0565b81565b6000610ae5848484611780565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610b505760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b60448201526064016108f0565b610b648533610b5f86856128cf565b61168d565b506001949350505050565b610b7833611660565b610b945760405162461bcd60e51b81526004016108f0906126e0565b60006002610ba5600a6103e86127a0565b610baf91906127a0565b9050808711158015610bc15750808611155b8015610bcd5750808511155b610c0e5760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b60448201526064016108f0565b6103e882610c1c8587612788565b610c269190612788565b14610c7d5760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b60648201526084016108f0565b600787905560088690556009859055600c839055600b829055600a8490556040805188815260208101889052908101869052606081018590526080810184905260a081018390527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a150505050505050565b610d0333611660565b610d1f5760405162461bcd60e51b81526004016108f0906126e0565b610d31610d2c4283612788565b611937565b50565b610d3d33611660565b610d595760405162461bcd60e51b81526004016108f0906126e0565b6002811115610dc05760405162461bcd60e51b815260206004820152602d60248201527f44756d70206d6561737572652063616e277420626520756e646572203530252060448201526c1bd9881d1a19481dd85b1b195d609a1b60648201526084016108f0565b600e8190556040518181527fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9906020015b60405180910390a150565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610ab1918590610b5f908690612788565b610e3c33611660565b610e585760405162461bcd60e51b81526004016108f0906126e0565b610e62600161197a565b565b60006103e8601354600654610e7991906128b0565b610e8391906127a0565b600f546001600160a01b031660009081526001602052604090205411919050565b610ead33611660565b610ec95760405162461bcd60e51b81526004016108f0906126e0565b6032811115610f345760405162461bcd60e51b815260206004820152603160248201527f4d61782077616c6c6574202063616e277420626520756e646572203225206f666044820152702074686520746f74616c20737570706c7960781b60648201526084016108f0565b600d8190556040518181527fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe3885590602001610df1565b610f7233611660565b610f8e5760405162461bcd60e51b81526004016108f0906126e0565b600f546001600160a01b0383811691161415610fe35760405162461bcd60e51b8152602060048201526014602482015273063616e2774206368616e676520756e69737761760641b60448201526064016108f0565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b336110216000546001600160a01b031690565b6001600160a01b0316146110775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6110ca33611660565b6110e65760405162461bcd60e51b81526004016108f0906126e0565b601554156111285760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b60448201526064016108f0565b426015556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc190600090a1565b6011546001600160a01b0316331461116e57600080fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b61119933611660565b6111b55760405162461bcd60e51b81526004016108f0906126e0565b6014805460ff1916911515919091179055565b3360009081526002602090815260408083206001600160a01b03861684529091528120548281101561122b5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b60448201526064016108f0565b61123a3385610b5f86856128cf565b5060019392505050565b61124d33611660565b6112695760405162461bcd60e51b81526004016108f0906126e0565b6017805460ff19166001179055565b6000610ab1338484611780565b61128e33611660565b6112aa5760405162461bcd60e51b81526004016108f0906126e0565b6001600160a01b0382163014156113035760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e747261637400000000000060448201526064016108f0565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d391015b60405180910390a15050565b61137033611660565b61138c5760405162461bcd60e51b81526004016108f0906126e0565b6103e881111561139b57600080fd5b601355565b60006016544210156113bf57426016546113ba91906128cf565b905090565b50600090565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d546006546114036012600a612805565b611411906305f5e1006128b0565b61141b91906128cf565b6113ba9190612788565b61142e33611660565b61144a5760405162461bcd60e51b81526004016108f0906126e0565b600f81111561145857600080fd5b601255565b61146633611660565b6114825760405162461bcd60e51b81526004016108f0906126e0565b6001600160a01b0382163014156114db5760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e747261637400000000000060448201526064016108f0565b6001600160a01b038216600081815260036020908152604091829020805460ff19168515159081179091558251938452908301527fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed4910161135b565b3361154a6000546001600160a01b031690565b6001600160a01b0316146115a05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f0565b6001600160a01b0381166116055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b0383811691161480610ab55750506011546001600160a01b0390811691161490565b6001600160a01b0383166116d75760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b60448201526064016108f0565b6001600160a01b03821661171f5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b60448201526064016108f0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117cb5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b60448201526064016108f0565b6001600160a01b0382166118145760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b60448201526064016108f0565b6001600160a01b03831660009081526003602052604090205460ff168061185357506001600160a01b03821660009081526003602052604090205460ff165b1561186857611863838383611b33565b505050565b6001600160a01b03821660009081526004602052604090205460ff16156118e0576000601554116118d55760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b60448201526064016108f0565b611863838383611c1b565b60006015541161192c5760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b60448201526064016108f0565b611863838383611e79565b601654811161194557600080fd5b60168190556040518181527f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e90602001610df1565b6011805460ff60a01b1916600160a01b17905530600090815260016020526040812054600c54600b549192916119b09190612788565b601254600f546001600160a01b0316600090815260016020526040812054929350916103e8916119df916128b0565b6119e991906127a0565b9050816119f857505050611b23565b8315611a14575030600090815260016020526040902054611a24565b80831015611a2457505050611b23565b6000611a2e610e64565b611a505782600b5483611a4191906128b0565b611a4b91906127a0565b611a53565b60005b90506000611a6182846128cf565b90506000611a706002846127a0565b90506000611a7e8383612788565b905047611a8a826121d1565b6000611a9682476128cf565b90508515611ac357600083611aab86846128b0565b611ab591906127a0565b9050611ac1858261232f565b505b6011546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611b10576040519150601f19603f3d011682016040523d82523d6000602084013e611b15565b606091505b505050505050505050505050505b506011805460ff60a01b19169055565b6001600160a01b03831660009081526001602052604090205481811015611b6c5760405162461bcd60e51b81526004016108f0906126a9565b6001600160a01b03841660009081526001602052604081208054849290611b949084906128cf565b90915550506001600160a01b03831660009081526001602052604081208054849290611bc1908490612788565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c0d91815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526001602052604090205481811015611c545760405162461bcd60e51b81526004016108f0906126a9565b6001600160a01b0380851660009081526005602052604080822054928616825281205460ff9283169216908115611cbd5760155461012c90611c97908290612788565b421015611cb157611caa816103e76123ef565b9150611cb7565b60085491505b50611cf7565b8215611cf25760155461012c90611cd5908290612788565b421015611ce857611caa816101ea6123ef565b5050600754611cf7565b506009545b600f546001600160a01b03888116911614801590611d18575060145460ff16155b8015611d2e5750601154600160a01b900460ff16155b15611d3d57611d3d600061197a565b6000611d4c8683600a54612435565b90506000611d6a8784600b54600c54611d659190612788565b612435565b90506000611d788284612788565b611d8290896128cf565b6001600160a01b038b16600090815260016020526040812080549293508a92909190611daf9084906128cf565b90915550503060009081526001602052604081208054849290611dd3908490612788565b925050819055508260066000828254611dec91906128cf565b90915550506001600160a01b03891660009081526001602052604081208054839290611e19908490612788565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e6591815260200190565b60405180910390a350505050505050505050565b6001600160a01b0380841660009081526001602052604080822054928516825290205482821015611ebc5760405162461bcd60e51b81526004016108f0906126a9565b82600e5483611ecb91906127a0565b1015611f195760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572206578636565647320617574686f726973652073656c6c0060448201526064016108f0565b600d54611f286012600a612805565b611f36906305f5e1006128b0565b611f4091906127a0565b611f4a8483612788565b1115611fb05760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60448201526e202520546f74616c20537570706c7960881b60648201526084016108f0565b6001600160a01b0380861660009081526005602052604080822054928716825281205460ff92831692169081156120195760155461012c90611ff3908290612788565b42101561200d57612006816103e76123ef565b9150612013565b60085491505b50612053565b821561204e5760155461012c90612031908290612788565b42101561204457612006816101ea6123ef565b5050600754612053565b506009545b600f546001600160a01b03898116911614801590612074575060145460ff16155b801561208a5750601154600160a01b900460ff16155b1561209957612099600061197a565b60006120a88783600a54612435565b905060006120c18884600b54600c54611d659190612788565b905060006120cf8284612788565b6120d9908a6128cf565b6001600160a01b038c16600090815260016020526040812080549293508b929091906121069084906128cf565b9091555050306000908152600160205260408120805484929061212a908490612788565b92505081905550826006600082825461214391906128cf565b90915550506001600160a01b038a1660009081526001602052604081208054839290612170908490612788565b92505081905550896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121bc91815260200190565b60405180910390a35050505050505050505050565b6010546121e99030906001600160a01b03168361168d565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061221e5761221e6128fc565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561227257600080fd5b505afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa9190612486565b816001815181106122bd576122bd6128fc565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b815291169063791ac94790612303908590600090869030904290600401612717565b600060405180830381600087803b15801561231d57600080fd5b505af192505050801561186357505050565b6010546123479030906001600160a01b03168461168d565b60105460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123e891906125e3565b5050505050565b6000806015544261240091906128cf565b9050838161240f6032866128cf565b61241991906128b0565b61242391906127a0565b61242d90846128cf565b949350505050565b60006124436103e8806128b0565b8261244e85876128b0565b61245891906128b0565b61242d91906127a0565b60006020828403121561247457600080fd5b813561247f81612912565b9392505050565b60006020828403121561249857600080fd5b815161247f81612912565b600080604083850312156124b657600080fd5b82356124c181612912565b915060208301356124d181612912565b809150509250929050565b6000806000606084860312156124f157600080fd5b83356124fc81612912565b9250602084013561250c81612912565b929592945050506040919091013590565b6000806040838503121561253057600080fd5b823561253b81612912565b915060208301356124d181612927565b6000806040838503121561255e57600080fd5b823561256981612912565b946020939093013593505050565b60006020828403121561258957600080fd5b813561247f81612927565b6000602082840312156125a657600080fd5b815161247f81612927565b6000602082840312156125c357600080fd5b5035919050565b6000602082840312156125dc57600080fd5b5051919050565b6000806000606084860312156125f857600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561262a57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b8181101561268157858101830151858201604001528201612665565b81811115612693576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526018908201527f5472616e7366657220657863656564732062616c616e63650000000000000000604082015260600190565b60208082526018908201527f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127675784516001600160a01b031683529383019391830191600101612742565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561279b5761279b6128e6565b500190565b6000826127bd57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156127fd5781600019048211156127e3576127e36128e6565b808516156127f057918102915b93841c93908002906127c7565b509250929050565b600061247f60ff84168360008261281e57506001610ab5565b8161282b57506000610ab5565b8160018114612841576002811461284b57612867565b6001915050610ab5565b60ff84111561285c5761285c6128e6565b50506001821b610ab5565b5060208310610133831016604e8410600b841016171561288a575081810a610ab5565b61289483836127c2565b80600019048211156128a8576128a86128e6565b029392505050565b60008160001904831182151516156128ca576128ca6128e6565b500290565b6000828210156128e1576128e16128e6565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610d3157600080fd5b8015158114610d3157600080fdfea2646970667358221220bb3c90c69a9019c7faddfed581530bbb068655aff2b34453902c9b35f2f42bd864736f6c63430008070033

Deployed Bytecode Sourcemap

4309:22809:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23749:679;;;;;;;;;;;;;:::i;:::-;;24805:94;;;;;;;;;;-1:-1:-1;24886:5:0;;;;;;;;;;;-1:-1:-1;;;24886:5:0;;;;24805:94;;;;24886:5;24805:94;:::i;:::-;;;;;;;;25678:158;;;;;;;;;;-1:-1:-1;25678:158:0;;;;;:::i;:::-;;:::i;:::-;;;5555:14:1;;5548:22;5530:41;;5518:2;5503:18;25678:158:0;5390:187:1;14840:35:0;;;;;;;;;;;;;;;;;;;13978:25:1;;;13966:2;13951:18;14840:35:0;13832:177:1;25115:105:0;;;;;;;;;;-1:-1:-1;25194:18:0;;25115:105;;5593:29;;;;;;;;;;;;;;;;5532:21;;;;;;;;;;;;;;;;4800:59;;;;;;;;;;;;;:::i;26146:386::-;;;;;;;;;;-1:-1:-1;26146:386:0;;;;;:::i;:::-;;:::i;15365:612::-;;;;;;;;;;-1:-1:-1;15365:612:0;;;;;:::i;:::-;;:::i;25013:94::-;;;;;;;;;;-1:-1:-1;25013:94:0;;4791:2;15681:36:1;;15669:2;15654:18;25013:94:0;15539:184:1;23175:149:0;;;;;;;;;;-1:-1:-1;23175:149:0;;;;;:::i;:::-;;:::i;16280:215::-;;;;;;;;;;-1:-1:-1;16280:215:0;;;;;:::i;:::-;;:::i;26567:202::-;;;;;;;;;;-1:-1:-1;26567:202:0;;;;;:::i;:::-;;:::i;21203:83::-;;;;;;;;;;;;;:::i;16612:152::-;;;;;;;;;;;;;:::i;16026:207::-;;;;;;;;;;-1:-1:-1;16026:207:0;;;;;:::i;:::-;;:::i;5436:23::-;;;;;;;;;;;;;;;;20774:154;;;;;;;;;;-1:-1:-1;20774:154:0;;;;;:::i;:::-;;:::i;20940:22::-;;;;;;;;;;-1:-1:-1;20940:22:0;;;;;;;;5741:25;;;;;;;;;;;;;;;;25228:118;;;;;;;;;;-1:-1:-1;25228:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;25320:18:0;25296:4;25320:18;;;:9;:18;;;;;;;25228:118;2923:140;;;;;;;;;;;;;:::i;5910:30::-;;;;;;;;;;-1:-1:-1;5910:30:0;;;;-1:-1:-1;;;;;5910:30:0;;;;;;-1:-1:-1;;;;;4166:32:1;;;4148:51;;4136:2;4121:18;5910:30:0;4002:203:1;22203:184:0;;;;;;;;;;;;;:::i;5497:28::-;;;;;;;;;;;;;;;;6002:147;;;;;;;;;;-1:-1:-1;6002:147:0;;;;;:::i;:::-;;:::i;21045:90::-;;;;;;;;;;-1:-1:-1;21045:90:0;;;;;:::i;:::-;;:::i;2282:79::-;;;;;;;;;;-1:-1:-1;2320:7:0;2347:6;-1:-1:-1;;;;;2347:6:0;2282:79;;22799:39;;;;;;;;;;-1:-1:-1;22799:39:0;;;;;;;;26777:336;;;;;;;;;;-1:-1:-1;26777:336:0;;;;;:::i;:::-;;:::i;23001:110::-;;;;;;;;;;;;;:::i;25354:164::-;;;;;;;;;;-1:-1:-1;25354:164:0;;;;;:::i;:::-;;:::i;21809:249::-;;;;;;;;;;-1:-1:-1;21809:249:0;;;;;:::i;:::-;;:::i;22169:27::-;;;;;;;;;;;;;;;;14882:211;;;;;;;;;;-1:-1:-1;14882:211:0;;;;;:::i;:::-;;:::i;5560:26::-;;;;;;;;;;;;;;;;20038:205;;;;;;;;;;;;;:::i;20249:139::-;;;;;;;;;;;;;:::i;5466:24::-;;;;;;;;;;;;;;;;14574:191;;;;;;;;;;-1:-1:-1;14574:191:0;;;;;:::i;:::-;;:::i;4604:35::-;;;;;;;;;;-1:-1:-1;4604:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4548:49;;;;;;;;;;-1:-1:-1;4548:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4493:48;;;;;;;;;;-1:-1:-1;4493:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25526:144;;;;;;;;;;-1:-1:-1;25526:144:0;;;;;:::i;:::-;-1:-1:-1;;;;;25634:19:0;;;25610:4;25634:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;25526:144;21401:248;;;;;;;;;;-1:-1:-1;21401:248:0;;;;;:::i;:::-;;:::i;14541:26::-;;;;;;;;;;;;;;;;3218:236;;;;;;;;;;-1:-1:-1;3218:236:0;;;;;:::i;:::-;;:::i;5711:23::-;;;;;;;;;;;;;;;;23749:679;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;;;;;;;;;23889:20:::1;;23870:15;:39;;23862:68;;;::::0;-1:-1:-1;;;23862:68:0;;6733:2:1;23862:68:0::1;::::0;::::1;6715:21:1::0;6772:2;6752:18;;;6745:30;-1:-1:-1;;;6791:18:1;;;6784:46;6847:18;;23862:68:0::1;6531:340:1::0;23862:68:0::1;23974:19;::::0;24019:39:::1;::::0;-1:-1:-1;;;24019:39:0;;24052:4:::1;24019:39;::::0;::::1;4148:51:1::0;-1:-1:-1;;;;;23974:19:0;;::::1;::::0;23943:21:::1;::::0;23974:19;;24019:24:::1;::::0;4121:18:1;;24019:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24072:27;::::0;24005:53;;-1:-1:-1;24072:27:0::1;;24069:269;;;24146:40;4915:6;24146:15;:40;:::i;:::-;24125:20;:61:::0;24324:2:::1;24315:8;:6:::0;24322:1:::1;24315:8;:::i;:::-;:11;;;;:::i;:::-;24308:18;;24069:269;24348:43;::::0;-1:-1:-1;;;24348:43:0;;24372:10:::1;24348:43;::::0;::::1;4673:51:1::0;4740:18;;;4733:34;;;-1:-1:-1;;;;;24348:23:0;::::1;::::0;::::1;::::0;4646:18:1;;24348:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24407:13:0::1;::::0;::::1;::::0;;;::::1;23793:635;;23749:679::o:0;25678:158::-;25752:4;25769:37;25778:10;25790:7;25799:6;25769:8;:37::i;:::-;-1:-1:-1;25824:4:0;25678:158;;;;;:::o;4800:59::-;4846:13;4791:2;4846;:13;:::i;:::-;4836:23;;:9;:23;:::i;:::-;4800:59;:::o;26146:386::-;26243:4;26260:36;26270:6;26278:9;26289:6;26260:9;:36::i;:::-;-1:-1:-1;;;;;26333:19:0;;26309:21;26333:19;;;:11;:19;;;;;;;;26353:10;26333:31;;;;;;;;26383:26;;;;26375:59;;;;-1:-1:-1;;;26375:59:0;;8947:2:1;26375:59:0;;;8929:21:1;8986:2;8966:18;;;8959:30;-1:-1:-1;;;9005:18:1;;;8998:50;9065:18;;26375:59:0;8745:344:1;26375:59:0;26447:55;26456:6;26464:10;26476:25;26495:6;26476:16;:25;:::i;:::-;26447:8;:55::i;:::-;-1:-1:-1;26520:4:0;;26146:386;-1:-1:-1;;;;26146:386:0:o;15365:612::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;15488:11:::1;15536:1;15501:33;5702:2;5659:4;15501:33;:::i;:::-;15500:37;;;;:::i;:::-;15488:49;;15561:6;15556:3;:11;;:25;;;;;15575:6;15569:4;:12;;15556:25;:44;;;;;15594:6;15583:9;:17;;15556:44;15548:74;;;::::0;-1:-1:-1;;;15548:74:0;;9649:2:1;15548:74:0::1;::::0;::::1;9631:21:1::0;9688:2;9668:18;;;9661:30;-1:-1:-1;;;9707:18:1;;;9700:48;9765:18;;15548:74:0::1;9447:342:1::0;15548:74:0::1;5659:4;15656:9:::0;15641:14:::1;15646:9:::0;15641:4;:14:::1;:::i;:::-;:24;;;;:::i;:::-;:41;15633:86;;;::::0;-1:-1:-1;;;15633:86:0;;13632:2:1;15633:86:0::1;::::0;::::1;13614:21:1::0;13671:2;13651:18;;;13644:30;13710:34;13690:18;;;13683:62;-1:-1:-1;;;13761:18:1;;;13754:31;13802:19;;15633:86:0::1;13430:397:1::0;15633:86:0::1;15740:6;:10:::0;;;15761:7:::1;:12:::0;;;15784:11:::1;:21:::0;;;15816:12:::1;:22:::0;;;15849:12:::1;:22:::0;;;15882:7:::1;:12:::0;;;15910:59:::1;::::0;;15286:25:1;;;15342:2;15327:18;;15320:34;;;15370:18;;;15363:34;;;15428:2;15413:18;;15406:34;;;15471:3;15456:19;;15449:35;;;15515:3;15500:19;;15493:35;;;15910:59:0::1;::::0;15273:3:1;15258:19;15910:59:0::1;;;;;;;15477:500;15365:612:::0;;;;;;:::o;23175:149::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;23259:57:::1;23281:34;23300:15;23281:18:::0;:34:::1;:::i;:::-;23259:21;:57::i;:::-;23175:149:::0;:::o;16280:215::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;16360:1:::1;16348:10;:13;;16340:70;;;::::0;-1:-1:-1;;;16340:70:0;;12173:2:1;16340:70:0::1;::::0;::::1;12155:21:1::0;12212:2;12192:18;;;12185:30;12251:34;12231:18;;;12224:62;-1:-1:-1;;;12302:18:1;;;12295:43;12355:19;;16340:70:0::1;11971:409:1::0;16340:70:0::1;16421:9;:20:::0;;;16466:21:::1;::::0;13978:25:1;;;16466:21:0::1;::::0;13966:2:1;13951:18;16466:21:0::1;;;;;;;;16280:215:::0;:::o;26567:202::-;26672:10;26646:4;26693:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;26693:32:0;;;;;;;;;;26646:4;;26663:76;;26684:7;;26693:45;;26728:10;;26693:45;:::i;21203:83::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;21254:24:::1;21273:4;21254:18;:24::i;:::-;21203:83::o:0;16612:152::-;16659:4;16752;16732:19;;16713:18;;:38;;;;:::i;:::-;:43;;;;:::i;:::-;16692:19;;-1:-1:-1;;;;;16692:19:0;16682:30;;;;:9;:30;;;;;;:74;;16612:152;-1:-1:-1;16612:152:0:o;16026:207::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;16101:2:::1;16092:7;:11;;16084:72;;;::::0;-1:-1:-1;;;16084:72:0;;7838:2:1;16084:72:0::1;::::0;::::1;7820:21:1::0;7877:2;7857:18;;;7850:30;7916:34;7896:18;;;7889:62;-1:-1:-1;;;7967:18:1;;;7960:47;8024:19;;16084:72:0::1;7636:413:1::0;16084:72:0::1;16167:6;:14:::0;;;16206:19:::1;::::0;13978:25:1;;;16206:19:0::1;::::0;13966:2:1;13951:18;16206:19:0::1;13832:177:1::0;20774:154:0;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;20852:19:::1;::::0;-1:-1:-1;;;;;20847:24:0;;::::1;20852:19:::0;::::1;20847:24;;20839:56;;;::::0;-1:-1:-1;;;20839:56:0;;12587:2:1;20839:56:0::1;::::0;::::1;12569:21:1::0;12626:2;12606:18;;;12599:30;-1:-1:-1;;;12645:18:1;;;12638:50;12705:18;;20839:56:0::1;12385:344:1::0;20839:56:0::1;-1:-1:-1::0;;;;;20906:10:0;;;::::1;;::::0;;;:5:::1;:10;::::0;;;;:14;;-1:-1:-1;;20906:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20774:154::o;2923:140::-;2505:10;2494:7;2320;2347:6;-1:-1:-1;;;;;2347:6:0;;2282:79;2494:7;-1:-1:-1;;;;;2494:21:0;;2486:66;;;;-1:-1:-1;;;2486:66:0;;11116:2:1;2486:66:0;;;11098:21:1;;;11135:18;;;11128:30;11194:34;11174:18;;;11167:62;11246:18;;2486:66:0;10914:356:1;2486:66:0;3022:1:::1;3006:6:::0;;2985:40:::1;::::0;-1:-1:-1;;;;;3006:6:0;;::::1;::::0;2985:40:::1;::::0;3022:1;;2985:40:::1;3053:1;3036:19:::0;;-1:-1:-1;;;;;;3036:19:0::1;::::0;;2923:140::o;22203:184::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;22267:15:::1;::::0;:18;22259:45:::1;;;::::0;-1:-1:-1;;;22259:45:0;;11829:2:1;22259:45:0::1;::::0;::::1;11811:21:1::0;11868:2;11848:18;;;11841:30;-1:-1:-1;;;11887:18:1;;;11880:45;11942:18;;22259:45:0::1;11627:339:1::0;22259:45:0::1;22331:15;22315;:31:::0;22362:17:::1;::::0;::::1;::::0;;;::::1;22203:184::o:0;6002:147::-;6089:15;;-1:-1:-1;;;;;6089:15:0;6077:10;:27;6069:36;;;;;;6116:15;:25;;-1:-1:-1;;;;;;6116:25:0;-1:-1:-1;;;;;6116:25:0;;;;;;;;;;6002:147::o;21045:90::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;21110:10:::1;:17:::0;;-1:-1:-1;;21110:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21045:90::o;26777:336::-;26914:10;26861:4;26902:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;26902:32:0;;;;;;;;;;26953:35;;;;26945:60;;;;-1:-1:-1;;;26945:60:0;;13291:2:1;26945:60:0;;;13273:21:1;13330:2;13310:18;;;13303:30;-1:-1:-1;;;13349:18:1;;;13342:42;13401:18;;26945:60:0;13089:336:1;26945:60:0;27018:65;27027:10;27039:7;27048:34;27067:15;27048:16;:34;:::i;27018:65::-;-1:-1:-1;27101:4:0;;26777:336;-1:-1:-1;;;26777:336:0:o;23001:110::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;23071:27:::1;:32:::0;;-1:-1:-1;;23071:32:0::1;23099:4;23071:32;::::0;;23001:110::o;25354:164::-;25431:4;25448:40;25458:10;25470:9;25481:6;25448:9;:40::i;21809:249::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21901:22:0;::::1;21918:4;21901:22;;21893:60;;;::::0;-1:-1:-1;;;21893:60:0;;12936:2:1;21893:60:0::1;::::0;::::1;12918:21:1::0;12975:2;12955:18;;;12948:30;13014:28;12994:18;;;12987:56;13060:18;;21893:60:0::1;12734:350:1::0;21893:60:0::1;-1:-1:-1::0;;;;;21964:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:34;;-1:-1:-1;;21964:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22014:36;;4378:51:1;;;4445:18;;;4438:50;22014:36:0::1;::::0;4351:18:1;22014:36:0::1;;;;;;;;21809:249:::0;;:::o;14882:211::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;15019:4:::1;14987:30;:36;;14979:45;;;::::0;::::1;;15035:19;:50:::0;14882:211::o;20038:205::-;20103:4;20138:20;;20122:15;:36;20119:97;;;20201:15;20180:20;;:36;;;;:::i;:::-;20173:43;;20038:205;:::o;20119:97::-;-1:-1:-1;20234:1:0;;20038:205::o;20249:139::-;20372:6;20296:4;20354:26;;;:9;:26;;;;20334:18;;4846:13;4791:2;4846;:13;:::i;:::-;4836:23;;:9;:23;:::i;:::-;20320:32;;;;:::i;:::-;20319:61;;;;:::i;14574:191::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;14688:2:::1;14663:23;:27;;14655:36;;;::::0;::::1;;14721:12;:36:::0;14574:191::o;21401:248::-;6247:19;6255:10;6247:7;:19::i;:::-;6239:56;;;;-1:-1:-1;;;6239:56:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21498:22:0;::::1;21515:4;21498:22;;21490:60;;;::::0;-1:-1:-1;;;21490:60:0;;12936:2:1;21490:60:0::1;::::0;::::1;12918:21:1::0;12975:2;12955:18;;;12948:30;13014:28;12994:18;;;12987:56;13060:18;;21490:60:0::1;12734:350:1::0;21490:60:0::1;-1:-1:-1::0;;;;;21561:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:33;;-1:-1:-1;;21561:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21610:31;;4378:51:1;;;4445:18;;;4438:50;21610:31:0::1;::::0;4351:18:1;21610:31:0::1;4210:284:1::0;3218:236:0;2505:10;2494:7;2320;2347:6;-1:-1:-1;;;;;2347:6:0;;2282:79;2494:7;-1:-1:-1;;;;;2494:21:0;;2486:66;;;;-1:-1:-1;;;2486:66:0;;11116:2:1;2486:66:0;;;11098:21:1;;;11135:18;;;11128:30;11194:34;11174:18;;;11167:62;11246:18;;2486:66:0;10914:356:1;2486:66:0;-1:-1:-1;;;;;3299:22:0;::::1;3291:73;;;::::0;-1:-1:-1;;;3291:73:0;;7431:2:1;3291:73:0::1;::::0;::::1;7413:21:1::0;7470:2;7450:18;;;7443:30;7509:34;7489:18;;;7482:62;-1:-1:-1;;;7560:18:1;;;7553:36;7606:19;;3291:73:0::1;7229:402:1::0;3291:73:0::1;3401:6;::::0;;3380:38:::1;::::0;-1:-1:-1;;;;;3380:38:0;;::::1;::::0;3401:6;::::1;::::0;3380:38:::1;::::0;::::1;3429:6;:17:::0;;-1:-1:-1;;;;;;3429:17:0::1;-1:-1:-1::0;;;;;3429:17:0;;;::::1;::::0;;;::::1;::::0;;3218:236::o;6533:120::-;6586:4;2347:6;;-1:-1:-1;;;;;6609:13:0;;;2347:6;;6609:13;;:36;;-1:-1:-1;;6630:15:0;;-1:-1:-1;;;;;6630:15:0;;;6624:21;;;;6533:120::o;25842:296::-;-1:-1:-1;;;;;25932:19:0;;25924:49;;;;-1:-1:-1;;;25924:49:0;;8256:2:1;25924:49:0;;;8238:21:1;8295:2;8275:18;;;8268:30;-1:-1:-1;;;8314:18:1;;;8307:47;8371:18;;25924:49:0;8054:341:1;25924:49:0;-1:-1:-1;;;;;25992:21:0;;25984:49;;;;-1:-1:-1;;;25984:49:0;;10412:2:1;25984:49:0;;;10394:21:1;10451:2;10431:18;;;10424:30;-1:-1:-1;;;10470:18:1;;;10463:45;10525:18;;25984:49:0;10210:339:1;25984:49:0;-1:-1:-1;;;;;26046:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26098:32;;13978:25:1;;;26098:32:0;;13951:18:1;26098:32:0;;;;;;;25842:296;;;:::o;8194:879::-;-1:-1:-1;;;;;8287:20:0;;8279:51;;;;-1:-1:-1;;;8279:51:0;;6386:2:1;8279:51:0;;;6368:21:1;6425:2;6405:18;;;6398:30;-1:-1:-1;;;6444:18:1;;;6437:48;6502:18;;8279:51:0;6184:342:1;8279:51:0;-1:-1:-1;;;;;8349:23:0;;8341:52;;;;-1:-1:-1;;;8341:52:0;;8602:2:1;8341:52:0;;;8584:21:1;8641:2;8621:18;;;8614:30;-1:-1:-1;;;8660:18:1;;;8653:46;8716:18;;8341:52:0;8400:340:1;8341:52:0;-1:-1:-1;;;;;8436:24:0;;;;;;:16;:24;;;;;;;;;:55;;-1:-1:-1;;;;;;8464:27:0;;;;;;:16;:27;;;;;;;;8436:55;8433:633;;;8506:43;8523:6;8531:9;8542:6;8506:16;:43::i;:::-;8194:879;;;:::o;8433:633::-;-1:-1:-1;;;;;8568:28:0;;;;;;:17;:28;;;;;;;;8565:501;;;8706:1;8690:15;;:17;8682:52;;;;-1:-1:-1;;;8682:52:0;;11477:2:1;8682:52:0;;;11459:21:1;11516:2;11496:18;;;11489:30;-1:-1:-1;;;11535:18:1;;;11528:53;11598:18;;8682:52:0;11275:347:1;8682:52:0;8749:51;8776:6;8783:9;8793:6;8749:26;:51::i;8565:501::-;8954:1;8938:15;;:17;8930:52;;;;-1:-1:-1;;;8930:52:0;;11477:2:1;8930:52:0;;;11459:21:1;11516:2;11496:18;;;11489:30;-1:-1:-1;;;11535:18:1;;;11528:53;11598:18;;8930:52:0;11275:347:1;8930:52:0;8997:39;9012:6;9019:9;9029:6;8997:14;:39::i;23380:280::-;23533:20;;23519:13;:34;23511:43;;;;;;23565:20;:34;;;23615:37;;13978:25:1;;;23615:37:0;;13966:2:1;13951:18;23615:37:0;13832:177:1;16923:1820:0;14358:27;:34;;-1:-1:-1;;;;14358:34:0;-1:-1:-1;;;14358:34:0;;;17039:4:::1;14358:34:::0;17021:24;;;14388:4;17021:24:::1;::::0;;;;;17083:12:::1;::::0;17070::::1;::::0;17021:24;;14358:34;17070:25:::1;::::0;17083:12;17070:25:::1;:::i;:::-;17249:12;::::0;17228:19:::1;::::0;-1:-1:-1;;;;;17228:19:0::1;17201:16;17218:30:::0;;;:9:::1;:30;::::0;;;;;17056:39;;-1:-1:-1;17201:16:0;17262:4:::1;::::0;17218:43:::1;::::0;::::1;:::i;:::-;:48;;;;:::i;:::-;17201:65:::0;-1:-1:-1;17319:11:0;17316:22:::1;;17331:7;;;;;17316:22;17507:12;17504:134;;;-1:-1:-1::0;17564:4:0::1;17546:24;::::0;;;:9:::1;:24;::::0;;;;;17504:134:::1;;;17605:11;17589:15;:27;17586:52;;;17631:7;;;;;17586:52;17771:22;17804:17;:15;:17::i;:::-;:65;;17861:8;17847:12;;17835:11;:24;;;;:::i;:::-;17834:35;;;;:::i;:::-;17804:65;;;17822:1;17804:65;17771:98:::0;-1:-1:-1;17882:22:0::1;17906:29;17771:98:::0;17906:11;:29:::1;:::i;:::-;17882:53:::0;-1:-1:-1;17948:12:0::1;17961:19;17979:1;17961:17:::0;:19:::1;:::i;:::-;17948:32:::0;-1:-1:-1;18061:14:0::1;18076:25;18084:17:::0;17948:32;18076:25:::1;:::i;:::-;18061:40:::0;-1:-1:-1;18215:21:0::1;18247:27;18061:40:::0;18247:16:::1;:27::i;:::-;18285:11;18298:41;18322:17:::0;18298:21:::1;:41;:::i;:::-;18285:55:::0;-1:-1:-1;18445:19:0;;18442:135:::1;;18480:11;18511:9:::0;18495:14:::1;18502:7:::0;18495:6;:14:::1;:::i;:::-;18494:26;;;;:::i;:::-;18480:40;;18535:30;18549:7;18558:6;18535:13;:30::i;:::-;18465:112;18442:135;18662:15;::::0;:53:::1;::::0;18650:9:::1;::::0;-1:-1:-1;;;;;18662:15:0::1;::::0;18689:21:::1;::::0;18650:9;18662:53;18650:9;18662:53;18689:21;18662:15;:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;14403:1:0::1;-1:-1:-1::0;14415:27:0;:35;;-1:-1:-1;;;;14415:35:0;;;16923:1820::o;11756:339::-;-1:-1:-1;;;;;11869:17:0;;11848:18;11869:17;;;:9;:17;;;;;;11905:23;;;;11897:60;;;;-1:-1:-1;;;11897:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11968:17:0;;;;;;:9;:17;;;;;:25;;11987:6;;11968:17;:25;;11987:6;;11968:25;:::i;:::-;;;;-1:-1:-1;;;;;;;12004:20:0;;;;;;:9;:20;;;;;:28;;12026:6;;12004:20;:28;;12026:6;;12004:28;:::i;:::-;;;;;;;;12070:9;-1:-1:-1;;;;;12054:33:0;12063:6;-1:-1:-1;;;;;12054:33:0;;12080:6;12054:33;;;;13978:25:1;;13966:2;13951:18;;13832:177;12054:33:0;;;;;;;;11837:258;11756:339;;;:::o;12164:1709::-;-1:-1:-1;;;;;12288:17:0;;12267:18;12288:17;;;:9;:17;;;;;;12324:23;;;;12316:60;;;;-1:-1:-1;;;12316:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12400:13:0;;;12389:10;12400:13;;;:5;:13;;;;;;;12436:16;;;;;;;;12400:13;;;;;12436:16;;12484:497;;;;12587:15;;12532:11;;12587:31;;12532:11;;12587:31;:::i;:::-;12571:15;:47;12568:143;;;12642:33;12655:15;12671:3;12642:12;:33::i;:::-;12638:37;;12568:143;;;12704:7;;12700:11;;12568:143;12494:233;12484:497;;;12745:5;12742:239;;;12831:15;;12786:11;;12831:30;;12786:11;;12831:30;:::i;:::-;12815:15;:46;12812:136;;;12885:32;12898:14;12913:3;12885:12;:32::i;12812:136::-;-1:-1:-1;;12942:6:0;;12742:239;;;-1:-1:-1;12970:11:0;;12742:239;13006:19;;-1:-1:-1;;;;;12998:27:0;;;13006:19;;12998:27;;;;12997:44;;-1:-1:-1;13030:10:0;;;;13029:11;12997:44;:76;;;;-1:-1:-1;13045:27:0;;-1:-1:-1;;;13045:27:0;;;;13044:28;12997:76;12994:119;;;13088:25;13107:5;13088:18;:25::i;:::-;13184:20;13205:35;13219:6;13227:3;13232:7;;13205:13;:35::i;:::-;13184:56;;13348:18;13367:53;13381:6;13389:3;13407:12;;13394;;:25;;;;:::i;:::-;13367:13;:53::i;:::-;13348:72;-1:-1:-1;13484:16:0;13509:31;13348:72;13509:15;:31;:::i;:::-;13501:40;;:6;:40;:::i;:::-;-1:-1:-1;;;;;13554:17:0;;;;;;:9;:17;;;;;:25;;13484:57;;-1:-1:-1;13573:6:0;;13554:17;;;:25;;13573:6;;13554:25;:::i;:::-;;;;-1:-1:-1;;13664:4:0;13646:24;;;;:9;:24;;;;;:41;;13674:13;;13646:24;:41;;13674:13;;13646:41;:::i;:::-;;;;;;;;13742:15;13722:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;13768:20:0;;;;;;:9;:20;;;;;:33;;13790:11;;13768:20;:33;;13790:11;;13768:33;:::i;:::-;;;;;;;;13843:9;-1:-1:-1;;;;;13827:38:0;13836:6;-1:-1:-1;;;;;13827:38:0;;13853:11;13827:38;;;;13978:25:1;;13966:2;13951:18;;13832:177;13827:38:0;;;;;;;;12256:1617;;;;;;;12164:1709;;;:::o;9180:1962::-;-1:-1:-1;;;;;9291:17:0;;;9270:18;9291:17;;;:9;:17;;;;;;;9343:20;;;;;;;;9382:23;;;;9374:60;;;;-1:-1:-1;;;9374:60:0;;;;;;;:::i;:::-;9480:6;9467:9;;9453:13;:23;;;;:::i;:::-;:33;;9445:77;;;;-1:-1:-1;;;9445:77:0;;10756:2:1;9445:77:0;;;10738:21:1;10795:2;10775:18;;;10768:30;10834:33;10814:18;;;10807:61;10885:18;;9445:77:0;10554:355:1;9445:77:0;9587:6;;4846:13;4791:2;4846;:13;:::i;:::-;4836:23;;:9;:23;:::i;:::-;9573:20;;;;:::i;:::-;9542:25;9561:6;9542:16;:25;:::i;:::-;9541:52;;9533:112;;;;-1:-1:-1;;;9533:112:0;;9996:2:1;9533:112:0;;;9978:21:1;10035:2;10015:18;;;10008:30;10074:34;10054:18;;;10047:62;-1:-1:-1;;;10125:18:1;;;10118:45;10180:19;;9533:112:0;9794:411:1;9533:112:0;-1:-1:-1;;;;;9669:13:0;;;9658:10;9669:13;;;:5;:13;;;;;;;9705:16;;;;;;;;9669:13;;;;;9705:16;;9753:497;;;;9856:15;;9801:11;;9856:31;;9801:11;;9856:31;:::i;:::-;9840:15;:47;9837:143;;;9911:33;9924:15;9940:3;9911:12;:33::i;:::-;9907:37;;9837:143;;;9973:7;;9969:11;;9837:143;9763:233;9753:497;;;10014:5;10011:239;;;10100:15;;10055:11;;10100:30;;10055:11;;10100:30;:::i;:::-;10084:15;:46;10081:136;;;10154:32;10167:14;10182:3;10154:12;:32::i;10081:136::-;-1:-1:-1;;10211:6:0;;10011:239;;;-1:-1:-1;10239:11:0;;10011:239;10275:19;;-1:-1:-1;;;;;10267:27:0;;;10275:19;;10267:27;;;;10266:44;;-1:-1:-1;10299:10:0;;;;10298:11;10266:44;:76;;;;-1:-1:-1;10314:27:0;;-1:-1:-1;;;10314:27:0;;;;10313:28;10266:76;10263:119;;;10357:25;10376:5;10357:18;:25::i;:::-;10453:20;10474:35;10488:6;10496:3;10501:7;;10474:13;:35::i;:::-;10453:56;;10617:18;10636:53;10650:6;10658:3;10676:12;;10663;;:25;;;;:::i;10636:53::-;10617:72;-1:-1:-1;10753:16:0;10778:31;10617:72;10778:15;:31;:::i;:::-;10770:40;;:6;:40;:::i;:::-;-1:-1:-1;;;;;10823:17:0;;;;;;:9;:17;;;;;:25;;10753:57;;-1:-1:-1;10842:6:0;;10823:17;;;:25;;10842:6;;10823:25;:::i;:::-;;;;-1:-1:-1;;10933:4:0;10915:24;;;;:9;:24;;;;;:41;;10943:13;;10915:24;:41;;10943:13;;10915:41;:::i;:::-;;;;;;;;11011:15;10991:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11037:20:0;;;;;;:9;:20;;;;;:33;;11059:11;;11037:20;:33;;11059:11;;11037:33;:::i;:::-;;;;;;;;11112:9;-1:-1:-1;;;;;11096:38:0;11105:6;-1:-1:-1;;;;;11096:38:0;;11122:11;11096:38;;;;13978:25:1;;13966:2;13951:18;;13832:177;11096:38:0;;;;;;;;9259:1883;;;;;;;;9180:1962;;;:::o;18793:474::-;18883:14;;18851:56;;18868:4;;-1:-1:-1;;;;;18883:14:0;18900:6;18851:8;:56::i;:::-;18942:16;;;18956:1;18942:16;;;;;;;;18918:21;;18942:16;;;;;;;;;;-1:-1:-1;18942:16:0;18918:40;;18987:4;18969;18974:1;18969:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18969:23:0;;;:7;;;;;;;;;;:23;;;;19013:14;;:21;;;-1:-1:-1;;;19013:21:0;;;;:14;;;;;:19;;:21;;;;;18969:7;;19013:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19003:4;19008:1;19003:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19003:31:0;;;:7;;;;;;;;;:31;19051:14;;:190;;-1:-1:-1;;;19051:190:0;;:14;;;:65;;:190;;19131:6;;19051:14;;19168:4;;19195;;19215:15;;19051:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18840:427;18793:474;:::o;19340:359::-;19448:14;;19416:61;;19433:4;;-1:-1:-1;;;;;19448:14:0;19465:11;19416:8;:61::i;:::-;19488:14;;:203;;-1:-1:-1;;;19488:203:0;;19559:4;19488:203;;;5119:34:1;;;5169:18;;;5162:34;;;19488:14:0;5212:18:1;;;5205:34;;;5255:18;;;5248:34;5298:19;;;5291:44;19665:15:0;5351:19:1;;;5344:35;-1:-1:-1;;;;;19488:14:0;;;;:30;;19526:9;;5053:19:1;;19488:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19340:359;;:::o;11250:211::-;11322:4;11338:20;11375:15;;11359;:31;;;;:::i;:::-;11338:52;-1:-1:-1;11444:8:0;11338:52;11417:9;11424:2;11417:6;:9;:::i;:::-;11416:27;;;;:::i;:::-;:36;;;;:::i;:::-;11408:45;;:6;:45;:::i;:::-;11401:52;11250:211;-1:-1:-1;;;;11250:211:0:o;11516:176::-;11601:4;11652:31;5659:4;;11652:31;:::i;:::-;11637:10;11626;11633:3;11626:6;:10;:::i;:::-;:21;;;;:::i;:::-;11625:59;;;;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;:::-;250:5;14:247;-1:-1:-1;;;14:247:1:o;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:382::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1696:30;1655:32;1696:30;:::i;1763:315::-;1831:6;1839;1892:2;1880:9;1871:7;1867:23;1863:32;1860:52;;;1908:1;1905;1898:12;1860:52;1947:9;1934:23;1966:31;1991:5;1966:31;:::i;:::-;2016:5;2068:2;2053:18;;;;2040:32;;-1:-1:-1;;;1763:315:1:o;2083:241::-;2139:6;2192:2;2180:9;2171:7;2167:23;2163:32;2160:52;;;2208:1;2205;2198:12;2160:52;2247:9;2234:23;2266:28;2288:5;2266:28;:::i;2329:245::-;2396:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2497:9;2491:16;2516:28;2538:5;2516:28;:::i;2579:180::-;2638:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;-1:-1:-1;2730:23:1;;2579:180;-1:-1:-1;2579:180:1:o;2764:184::-;2834:6;2887:2;2875:9;2866:7;2862:23;2858:32;2855:52;;;2903:1;2900;2893:12;2855:52;-1:-1:-1;2926:16:1;;2764:184;-1:-1:-1;2764:184:1:o;2953:306::-;3041:6;3049;3057;3110:2;3098:9;3089:7;3085:23;3081:32;3078:52;;;3126:1;3123;3116:12;3078:52;3155:9;3149:16;3139:26;;3205:2;3194:9;3190:18;3184:25;3174:35;;3249:2;3238:9;3234:18;3228:25;3218:35;;2953:306;;;;;:::o;3264:523::-;3368:6;3376;3384;3392;3400;3408;3461:3;3449:9;3440:7;3436:23;3432:33;3429:53;;;3478:1;3475;3468:12;3429:53;-1:-1:-1;;3501:23:1;;;3571:2;3556:18;;3543:32;;-1:-1:-1;3622:2:1;3607:18;;3594:32;;3673:2;3658:18;;3645:32;;-1:-1:-1;3724:3:1;3709:19;;3696:33;;-1:-1:-1;3776:3:1;3761:19;3748:33;;-1:-1:-1;3264:523:1;-1:-1:-1;3264:523:1:o;5582:597::-;5694:4;5723:2;5752;5741:9;5734:21;5784:6;5778:13;5827:6;5822:2;5811:9;5807:18;5800:34;5852:1;5862:140;5876:6;5873:1;5870:13;5862:140;;;5971:14;;;5967:23;;5961:30;5937:17;;;5956:2;5933:26;5926:66;5891:10;;5862:140;;;6020:6;6017:1;6014:13;6011:91;;;6090:1;6085:2;6076:6;6065:9;6061:22;6057:31;6050:42;6011:91;-1:-1:-1;6163:2:1;6142:15;-1:-1:-1;;6138:29:1;6123:45;;;;6170:2;6119:54;;5582:597;-1:-1:-1;;;5582:597:1:o;6876:348::-;7078:2;7060:21;;;7117:2;7097:18;;;7090:30;7156:26;7151:2;7136:18;;7129:54;7215:2;7200:18;;6876:348::o;9094:::-;9296:2;9278:21;;;9335:2;9315:18;;;9308:30;9374:26;9369:2;9354:18;;9347:54;9433:2;9418:18;;9094:348::o;14014:980::-;14276:4;14324:3;14313:9;14309:19;14355:6;14344:9;14337:25;14381:2;14419:6;14414:2;14403:9;14399:18;14392:34;14462:3;14457:2;14446:9;14442:18;14435:31;14486:6;14521;14515:13;14552:6;14544;14537:22;14590:3;14579:9;14575:19;14568:26;;14629:2;14621:6;14617:15;14603:29;;14650:1;14660:195;14674:6;14671:1;14668:13;14660:195;;;14739:13;;-1:-1:-1;;;;;14735:39:1;14723:52;;14830:15;;;;14795:12;;;;14771:1;14689:9;14660:195;;;-1:-1:-1;;;;;;;14911:32:1;;;;14906:2;14891:18;;14884:60;-1:-1:-1;;;14975:3:1;14960:19;14953:35;14872:3;14014:980;-1:-1:-1;;;14014:980:1:o;15728:128::-;15768:3;15799:1;15795:6;15792:1;15789:13;15786:39;;;15805:18;;:::i;:::-;-1:-1:-1;15841:9:1;;15728:128::o;15861:217::-;15901:1;15927;15917:132;;15971:10;15966:3;15962:20;15959:1;15952:31;16006:4;16003:1;15996:15;16034:4;16031:1;16024:15;15917:132;-1:-1:-1;16063:9:1;;15861:217::o;16083:422::-;16172:1;16215:5;16172:1;16229:270;16250:7;16240:8;16237:21;16229:270;;;16309:4;16305:1;16301:6;16297:17;16291:4;16288:27;16285:53;;;16318:18;;:::i;:::-;16368:7;16358:8;16354:22;16351:55;;;16388:16;;;;16351:55;16467:22;;;;16427:15;;;;16229:270;;;16233:3;16083:422;;;;;:::o;16510:140::-;16568:5;16597:47;16638:4;16628:8;16624:19;16618:4;16704:5;16734:8;16724:80;;-1:-1:-1;16775:1:1;16789:5;;16724:80;16823:4;16813:76;;-1:-1:-1;16860:1:1;16874:5;;16813:76;16905:4;16923:1;16918:59;;;;16991:1;16986:130;;;;16898:218;;16918:59;16948:1;16939:10;;16962:5;;;16986:130;17023:3;17013:8;17010:17;17007:43;;;17030:18;;:::i;:::-;-1:-1:-1;;17086:1:1;17072:16;;17101:5;;16898:218;;17200:2;17190:8;17187:16;17181:3;17175:4;17172:13;17168:36;17162:2;17152:8;17149:16;17144:2;17138:4;17135:12;17131:35;17128:77;17125:159;;;-1:-1:-1;17237:19:1;;;17269:5;;17125:159;17316:34;17341:8;17335:4;17316:34;:::i;:::-;17386:6;17382:1;17378:6;17374:19;17365:7;17362:32;17359:58;;;17397:18;;:::i;:::-;17435:20;;16655:806;-1:-1:-1;;;16655:806:1:o;17466:168::-;17506:7;17572:1;17568;17564:6;17560:14;17557:1;17554:21;17549:1;17542:9;17535:17;17531:45;17528:71;;;17579:18;;:::i;:::-;-1:-1:-1;17619:9:1;;17466:168::o;17639:125::-;17679:4;17707:1;17704;17701:8;17698:34;;;17712:18;;:::i;:::-;-1:-1:-1;17749:9:1;;17639:125::o;17769:127::-;17830:10;17825:3;17821:20;17818:1;17811:31;17861:4;17858:1;17851:15;17885:4;17882:1;17875:15;17901:127;17962:10;17957:3;17953:20;17950:1;17943:31;17993:4;17990:1;17983:15;18017:4;18014:1;18007:15;18165:131;-1:-1:-1;;;;;18240:31:1;;18230:42;;18220:70;;18286:1;18283;18276:12;18301:118;18387:5;18380:13;18373:21;18366:5;18363:32;18353:60;;18409:1;18406;18399:12

Swarm Source

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