Contract Address Details

0xF931ec496a062Ab17077deF06074B7488CcCE08e

Token
DogeApe (DogeApe)
Creator
0xd0a77f–1a83f0 at 0x117f0a–8b0dbd
Balance
0 Doge
Tokens
Fetching tokens...
Transactions
1,255 Transactions
Transfers
2,467 Transfers
Gas Used
70,540,786
Last Balance Update
26556078
Contract name:
DogeApe




Optimization enabled
true
Compiler version
v0.8.16+commit.07a7930e




Optimization runs
200
EVM Version
default




Verified at
2022-08-25T13:36:13.512012Z

Contract source code

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.16;

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

    function decimals() external view returns (uint8);

    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    function getOwner() external view returns (address);

    function balanceOf(address account) external view returns (uint256);

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

    function allowance(address _owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

    function swapExactTokensForETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function factory() external pure returns (address);

    function WETH() external pure returns (address);
}

abstract contract Ownable {
    address internal _owner;

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

    constructor() {
        address msgSender = msg.sender;

        _owner = msgSender;

        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");

        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));

        _owner = address(0);
    }

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

        emit OwnershipTransferred(_owner, newOwner);

        _owner = newOwner;
    }
}

contract DogeApe is Ownable, IBEP20 {
    //shares represent the token someone with reflections turned on has.

    //over time each share becomes worth more tokens so the tokens someone holds grow

    mapping(address => uint) public Shares;

    //exFcluded from Reflection accounts just track the exact amount of tokens

    mapping(address => uint) public ExcludedBalances;

    mapping(address => bool) public ExcludedFromReflection;

    mapping(address => bool) public ExcludedFromFees;

    mapping(address => uint) public StrongApe;


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



    uint constant APE_DURATION= 5 minutes;
    uint constant APE_TAX_DURATION= 1 days;


    //Market makers have different Fees for Buy/Sell

    mapping(address => bool) public _isMarketMaker;

    uint _buyTax = 1000;

    uint _sellTax = 1000;

    uint _transferTax = 0;

    //The taxes are split into different uses and need to add up to "TAX_DENOMINATOR"

    uint _marketingTax = 8000;

    uint _reflectionTax = 1000;

    uint _liquidityTax = 1000;

    uint _contractTax = TAX_DENOMINATOR - _reflectionTax;

    //percentage of dexPair that should be swapped with each contract swap (15=0.15%)

    uint _swapTreshold = 15;

    //If liquidity is greater than treshold, stop creating AutoLP(15%)

    uint _liquifyTreshold = 1500;

    //Manual swap disables auto swap, should there be a problem

    bool _manualSwap;

    uint launchTimestamp = type(uint).max;

    uint _liquidityUnlockTime;

    uint constant TAX_DENOMINATOR = 10000;

    //DividentMagnifier to make Reflection more accurate

    uint constant DividentMagnifier = 2**128;

    uint TokensPerShare = DividentMagnifier;

    uint8 constant _decimals = 9;

    uint constant InitialSupply = 10**9 * 10**_decimals;
    uint public maxWallet=InitialSupply/200;
    uint public maxTX=InitialSupply/1000;
    //All non excluded tokens get tracked here as shares

    uint _totalShares;

    //All excluded tokens get tracked here as tokens

    uint _totalExcludedTokens;

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

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

    address public marketingWallet;
    address dexPair;
    //TestNet
    //address private constant DEXrouter =
    //    0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;

        
    address private constant DEXrouter =
        0x72d85Ab47fBfc5E7E04a8bcfCa1601D8f8cE1a50;


    IDEXRouter pancakeRouter = IDEXRouter(DEXrouter);

    event onSetManualSwap(bool manual);

    event OnSetOverLiquifyTreshold(uint amount);

    event OnSetSwapTreshold(uint treshold);

    event OnSetAMM(address AMM, bool add);

    event OnSetTaxes(
        uint Buy,
        uint Sell,
        uint Transfer,
        uint Reflection,
        uint Liquidity,
        uint Marketing
    );

    event OnSetExcludedFromFee(address account, bool exclude);

    event OnSetLaunchTimestamp(uint Timestamp);

    event OnSetExcludedFromReflection(address account, bool exclude);

    event OnSetMarketingWallet(address wallet);

    event OnProlongLPLock(uint UnlockTimestamp);

    event OnReleaseLP();

    constructor() {
        dexPair = IPancakeFactory(pancakeRouter.factory()).createPair(
            address(this),
            pancakeRouter.WETH()
        );

        _isMarketMaker[dexPair] = true;

        addTokens(msg.sender, (InitialSupply * 999) / 1000);

        //Sends tokens to dead address to prevent overflows from happening- due to reflection with no receiver

        addTokens(address(0xdead), InitialSupply / 1000);

        emit Transfer(address(0), address(0xdead), InitialSupply / 1000);

        emit Transfer(address(0), msg.sender, (InitialSupply * 999) / 1000);

        //Pancake pair and contract never get reflections and can't be included

        _excludeFromReflection(address(this), true);

        _excludeFromReflection(dexPair, true);

        //Contract never pays fees and can't be included

        ExcludedFromFees[msg.sender] = true;

        ExcludedFromFees[address(this)] = true;

        //Dev and marketing wallet are by default the owner and need to be set later

        marketingWallet = msg.sender;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ///Transfer/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    function _transfer(
        address sender,
        address recipient,
        uint amount
    ) private {
        require(sender != address(0), "transfer from zero");

        require(recipient != address(0), "transfer to zero");

        require(amount > 0, "amount zero");

        if (ExcludedFromFees[sender] || ExcludedFromFees[recipient])
            transferFeeless(sender, recipient, amount);
        else transferWithFee(sender, recipient, amount);

        emit Transfer(sender, recipient, amount);
    }

    function transferFeeless(
        address sender,
        address recipient,
        uint amount
    ) private {
        removeTokens(sender, amount);

        addTokens(recipient, amount);
    }

    function transferWithFee(
        address sender,
        address recipient,
        uint amount
    ) private {
        require(amount<=maxTX,"MaxTX");
        require(block.timestamp >= launchTimestamp);

        bool isBuy = _isMarketMaker[sender];

        bool isSell = _isMarketMaker[recipient];

        uint tax;
        if (isSell){
            if(block.timestamp < launchTimestamp+APE_TAX_DURATION)
            {
                uint strongApe=StrongApe[sender];
                if(block.timestamp<(launchTimestamp+strongApe))
                    tax=_strongApeTax(strongApe);
                else tax = _sellTax;
            }else tax = _sellTax;
        }else if (isBuy) {
            if (block.timestamp < (launchTimestamp + APE_DURATION)){
                if( StrongApe[recipient]==0){
                    uint TimeLeft=(launchTimestamp+APE_DURATION)-block.timestamp;
                    StrongApe[recipient]=APE_TAX_DURATION*TimeLeft/APE_DURATION;
                } 
                }
            tax = _buyTax;
            require(balanceOf(recipient)+amount<maxWallet,"max Wallet");
        } 
        else{
            //for transfers strongApe tax still applies
            if(block.timestamp < launchTimestamp+APE_TAX_DURATION){
                uint strongApe=StrongApe[sender];
                if(block.timestamp<launchTimestamp+strongApe)
                    tax=_strongApeTax(strongApe);
                else tax = _transferTax;
            }else tax = _transferTax;
            require(balanceOf(recipient)+amount<maxWallet,"max Wallet");
        } 

        if (!_isSwappingContractModifier && sender != dexPair && !_manualSwap)
            _swapContractToken(false);

        uint TaxedAmount = (amount * tax) / TAX_DENOMINATOR;

        uint ContractToken = (TaxedAmount * _contractTax) / TAX_DENOMINATOR;

        uint ReflectToken = TaxedAmount - ContractToken;

        removeTokens(sender, amount);

        addTokens(recipient, amount - TaxedAmount);

        if (ContractToken > 0) addTokens(address(this), ContractToken);

        if (ReflectToken > 0) reflectTokens(ReflectToken);
    }

    function _strongApeTax(uint duration) private view returns (uint) {
        uint timeSinceLaunch = block.timestamp - launchTimestamp;
        return 7000 - (((7000 - _sellTax) * timeSinceLaunch) / duration);

    }

    //Adds token respecting reflection

    function addTokens(address account, uint tokens) private {
        uint Balance = balanceOf(account);

        uint newBalance = Balance + tokens;

        if (ExcludedFromReflection[account]) {
            ExcludedBalances[account] = newBalance;

            _totalExcludedTokens += tokens;
        } else {
            uint oldShares = SharesFromTokens(Balance);

            uint newShares = SharesFromTokens(newBalance);

            Shares[account] = newShares;

            _totalShares += (newShares - oldShares);
        }
    }

    //Removes token respecting reflection

    function removeTokens(address account, uint tokens) private {
        uint Balance = balanceOf(account);

        require(tokens <= Balance, "Transfer exceeds Balance");

        uint newBalance = Balance - tokens;

        if (ExcludedFromReflection[account]) {
            ExcludedBalances[account] = newBalance;

            _totalExcludedTokens -= (Balance - newBalance);
        } else {
            uint oldShares = SharesFromTokens(Balance);

            uint newShares = SharesFromTokens(newBalance);

            Shares[account] = newShares;

            _totalShares -= (oldShares - newShares);
        }
    }

    //Handles reflection of already substracted token

    function reflectTokens(uint tokens) private {
        if (_totalShares == 0) return; //if total shares=0 reflection dissapears into nothing

        TokensPerShare += (tokens * DividentMagnifier) / _totalShares;
    }

    function TokensFromShares(uint shares) public view returns (uint) {
        return (shares * TokensPerShare) / DividentMagnifier;
    }

    function SharesFromTokens(uint tokens) public view returns (uint) {
        return (tokens * DividentMagnifier) / TokensPerShare;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ///SwapContractToken////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    bool private _isSwappingContractModifier;

    modifier lockTheSwap() {
        _isSwappingContractModifier = true;

        _;

        _isSwappingContractModifier = false;
    }

    function _swapContractToken(bool ignoreLimits) private lockTheSwap {
        uint256 contractBalance = ExcludedBalances[address(this)];

        if (_contractTax == 0) return;

        uint256 tokenToSwap = (ExcludedBalances[dexPair] * _swapTreshold) /
            TAX_DENOMINATOR;

        //only swap if contractBalance is larger than tokenToSwap or ignore limits

        if (contractBalance < tokenToSwap) {
            if (ignoreLimits) tokenToSwap = contractBalance;
            else return;
        }

        //splits the token in TokenForLiquidity and tokenForMarketing

        uint256 tokenForLiquidity = isOverLiquified()
            ? 0
            : (tokenToSwap * _liquidityTax) / _contractTax;

        uint256 tokenForMarketing = tokenToSwap - tokenForLiquidity;

        //splits tokenForLiquidity in 2 halves

        uint256 liqToken = tokenForLiquidity / 2;

        //swaps marktetingToken and the liquidity token half for BNB

        uint256 swapToken = liqToken + tokenForMarketing;

        if (swapToken == 0) return;

        _swapTokenForBNB(swapToken);

        uint256 newBNB = address(this).balance;

        //calculates the amount of BNB belonging to the LP-Pair and converts them to LP

        uint256 liqBNB = (newBNB * liqToken) / swapToken;

        if (liqBNB > 0) _addLiquidity(liqToken, liqBNB);

        (bool sent, ) = marketingWallet.call{value: address(this).balance}("");

        sent = true;
    }

    function _swapTokenForBNB(uint256 tokens) private {
        address[] memory path = new address[](2);

        path[0] = address(this);

        path[1] = pancakeRouter.WETH();

        _allowances[address(this)][address(pancakeRouter)] = tokens;

        pancakeRouter.swapExactTokensForETH(
            tokens,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenamount, uint256 bnbamount) private {
        _allowances[address(this)][address(pancakeRouter)] = tokenamount;

        try
            pancakeRouter.addLiquidityETH{value: bnbamount}(
                address(this),
                tokenamount,
                0,
                0,
                address(this),
                block.timestamp
            )
        {} catch {}
    }

    function isOverLiquified() public view returns (bool) {
        return
            ExcludedBalances[dexPair] >
            (totalSupply() * _liquifyTreshold) / TAX_DENOMINATOR;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ///Settings/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    function ReflectTokens(uint amount) external {
        removeTokens(msg.sender, amount);

        reflectTokens(amount);

        emit Transfer(msg.sender, address(0), amount);
    }
    event OnSetTXRestrictions(uint maxWallet_, uint maxTX_);
    function SetTXRestrictions(uint maxWallet_, uint maxTX_) external onlyOwner{
        require(maxWallet_>=InitialSupply/200);
        require(maxTX_>=InitialSupply/1000);
        maxWallet=maxWallet_;
        maxTX=maxTX_;
        emit OnSetTXRestrictions(maxTX_,maxWallet_);

    }
    function swapContractToken(uint treshold) external onlyOwner {
        uint prevTreshold = _swapTreshold;

        _swapTreshold = treshold;

        _swapContractToken(true);

        _swapTreshold = prevTreshold;
    }

    function setManualSwap(bool manual) external onlyOwner {
        _manualSwap = manual;

        emit onSetManualSwap(manual);
    }

    function setOverLiquifyTreshold(uint amount) external onlyOwner {
        require(amount < TAX_DENOMINATOR);

        _liquifyTreshold = amount;

        emit OnSetOverLiquifyTreshold(amount);
    }

    function setSwapTreshold(uint treshold) external onlyOwner {
        require(treshold <= TAX_DENOMINATOR / 100);

        _swapTreshold = treshold;

        emit OnSetSwapTreshold(treshold);
    }

    function setAMM(address AMM, bool add) external onlyOwner {
        require(AMM != dexPair);

        _isMarketMaker[AMM] = add;

        emit OnSetAMM(AMM, add);
    }

    function setTaxes(
        uint Buy,
        uint Sell,
        uint Transfer,
        uint Reflection,
        uint Liquidity,
        uint Marketing
    ) public onlyOwner {
        uint maxTax = (TAX_DENOMINATOR / 100) * 10; //10% max tax

        require(Buy <= maxTax && Sell <= maxTax && Transfer <= maxTax);

        require(Reflection + Liquidity + Marketing == TAX_DENOMINATOR);

        _buyTax = Buy;

        _sellTax = Sell;

        _transferTax = Transfer;

        _reflectionTax = Reflection;

        _liquidityTax = Liquidity;

        _marketingTax = Marketing;

        _contractTax = TAX_DENOMINATOR - _reflectionTax;

        emit OnSetTaxes(Buy, Sell, Transfer, Reflection, Liquidity, Marketing);
    }

    function setExcludedFromFee(address account, bool exclude)
        public
        onlyOwner
    {
        require(exclude || account != address(this));

        ExcludedFromFees[account] = exclude;

        emit OnSetExcludedFromFee(account, exclude);
    }

    function setLaunchInSeconds(uint secondsUntilLaunch) public onlyOwner {
        setLaunchTimestamp(block.timestamp + secondsUntilLaunch);
    }

    function setLaunchTimestamp(uint Timestamp) public onlyOwner {
        require(block.timestamp < launchTimestamp);

        require(Timestamp >= block.timestamp);

        launchTimestamp = Timestamp;

        emit OnSetLaunchTimestamp(Timestamp);
    }

    function setExcludedFromReflection(address account, bool exclude)
        public
        onlyOwner
    {
        //Contract and PancakePair never can receive reflections

        require(account != address(this) && account != dexPair);

        //Burn wallet always receives reflections

        require(account != address(0xdead));

        _excludeFromReflection(account, exclude);

        emit OnSetExcludedFromReflection(account, exclude);
    }

    function _excludeFromReflection(address account, bool exclude) private {
        require(ExcludedFromReflection[account] != exclude);

        uint tokens = balanceOf(account);

        ExcludedFromReflection[account] = exclude;

        if (exclude) {
            uint shares = Shares[account];

            _totalShares -= shares;

            Shares[account] = 0;

            ExcludedBalances[account] = tokens;

            _totalExcludedTokens += tokens;
        } else {
            ExcludedBalances[account] = 0;

            _totalExcludedTokens -= tokens;

            uint shares = SharesFromTokens(tokens);

            Shares[account] = shares;

            _totalShares += shares;
        }
    }

    function SetMarketingWallet(address newMarketingWallet) public onlyOwner {
        marketingWallet = newMarketingWallet;

        emit OnSetMarketingWallet(newMarketingWallet);
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ///View/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    function getTaxes()
        public
        view
        returns (
            uint Buy,
            uint Sell,
            uint Transfer,
            uint Reflection,
            uint LP,
            uint Marketing
        )
    {
        Buy = _buyTax;

        Sell = _sellTax;

        Transfer = _transferTax;

        Reflection = _reflectionTax;

        LP = _liquidityTax;

        Marketing = _marketingTax;
    }

    function getInfo()
        public
        view
        returns (
            uint SwapTreshold,
            uint LiquifyTreshold,
            uint LaunchTimestamp,
            uint TotalShares,
            uint TotalExcluded,
            bool ManualSwap
        )
    {
        SwapTreshold = _swapTreshold;

        LiquifyTreshold = _liquifyTreshold;

        LaunchTimestamp = launchTimestamp;

        TotalExcluded = _totalExcludedTokens;

        TotalShares = _totalShares;

        ManualSwap = _manualSwap;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ///Liquidity Lock///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    function LockLiquidityForSeconds(uint secondsUntilUnlock) public onlyOwner {
        SetUnlockTimestamp(secondsUntilUnlock + block.timestamp);
    }

    function SetUnlockTimestamp(uint newUnlockTime) public onlyOwner {
        // require new unlock time to be longer than old one

        require(newUnlockTime > _liquidityUnlockTime);

        _liquidityUnlockTime = newUnlockTime;

        emit OnProlongLPLock(_liquidityUnlockTime);
    }

    //Release Liquidity Tokens once unlock time is over

    function LiquidityRelease() public onlyOwner {
        //Only callable if liquidity Unlock time is over

        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");

        IBEP20 liquidityToken = IBEP20(dexPair);

        uint amount = liquidityToken.balanceOf(address(this));

        liquidityToken.transfer(msg.sender, amount);

        emit OnReleaseLP();
    }

    function RescueTokens(address token) public onlyOwner {
        require(token != address(this) && token != dexPair);

        IBEP20(token).transfer(
            msg.sender,
            IBEP20(token).balanceOf(address(this))
        );
    }

    function getLiquidityLockSeconds()
        public
        view
        returns (uint256 LockedSeconds)
    {
        if (block.timestamp < _liquidityUnlockTime)
            return _liquidityUnlockTime - block.timestamp;

        return 0;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ///BEP20 Implementation/////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    receive() external payable {}

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

    function getOwner() external view override returns (address) {
        return owner();
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (ExcludedFromReflection[account]) return ExcludedBalances[account];

        return TokensFromShares(Shares[account]);
    }

    function totalSupply() public view override returns (uint256) {
        return _totalExcludedTokens + TokensFromShares(_totalShares);
    }

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

    function approve(address spender, uint256 amount)
        external
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);

        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0));

        require(spender != address(0));

        _allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

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

        return true;
    }

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

        uint256 currentAllowance = _allowances[sender][msg.sender];

        require(currentAllowance >= amount, "Transfer exceeds allowance");

        _approve(sender, msg.sender, currentAllowance - amount);

        return true;
    }

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

        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        returns (bool)
    {
        uint256 currentAllowance = _allowances[msg.sender][spender];

        require(currentAllowance >= subtractedValue);

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

        return true;
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OnProlongLPLock","inputs":[{"type":"uint256","name":"UnlockTimestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OnReleaseLP","inputs":[],"anonymous":false},{"type":"event","name":"OnSetAMM","inputs":[{"type":"address","name":"AMM","internalType":"address","indexed":false},{"type":"bool","name":"add","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OnSetExcludedFromFee","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false},{"type":"bool","name":"exclude","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OnSetExcludedFromReflection","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false},{"type":"bool","name":"exclude","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OnSetLaunchTimestamp","inputs":[{"type":"uint256","name":"Timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OnSetMarketingWallet","inputs":[{"type":"address","name":"wallet","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"OnSetOverLiquifyTreshold","inputs":[{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OnSetSwapTreshold","inputs":[{"type":"uint256","name":"treshold","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OnSetTXRestrictions","inputs":[{"type":"uint256","name":"maxWallet_","internalType":"uint256","indexed":false},{"type":"uint256","name":"maxTX_","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OnSetTaxes","inputs":[{"type":"uint256","name":"Buy","internalType":"uint256","indexed":false},{"type":"uint256","name":"Sell","internalType":"uint256","indexed":false},{"type":"uint256","name":"Transfer","internalType":"uint256","indexed":false},{"type":"uint256","name":"Reflection","internalType":"uint256","indexed":false},{"type":"uint256","name":"Liquidity","internalType":"uint256","indexed":false},{"type":"uint256","name":"Marketing","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"onSetManualSwap","inputs":[{"type":"bool","name":"manual","internalType":"bool","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"ExcludedBalances","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"ExcludedFromFees","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"ExcludedFromReflection","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"LiquidityRelease","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"LockLiquidityForSeconds","inputs":[{"type":"uint256","name":"secondsUntilUnlock","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ReflectTokens","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"RescueTokens","inputs":[{"type":"address","name":"token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetMarketingWallet","inputs":[{"type":"address","name":"newMarketingWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetTXRestrictions","inputs":[{"type":"uint256","name":"maxWallet_","internalType":"uint256"},{"type":"uint256","name":"maxTX_","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetUnlockTimestamp","inputs":[{"type":"uint256","name":"newUnlockTime","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"Shares","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"SharesFromTokens","inputs":[{"type":"uint256","name":"tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"StrongApe","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"TokensFromShares","inputs":[{"type":"uint256","name":"shares","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"_isMarketMaker","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"SwapTreshold","internalType":"uint256"},{"type":"uint256","name":"LiquifyTreshold","internalType":"uint256"},{"type":"uint256","name":"LaunchTimestamp","internalType":"uint256"},{"type":"uint256","name":"TotalShares","internalType":"uint256"},{"type":"uint256","name":"TotalExcluded","internalType":"uint256"},{"type":"bool","name":"ManualSwap","internalType":"bool"}],"name":"getInfo","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"LockedSeconds","internalType":"uint256"}],"name":"getLiquidityLockSeconds","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"Buy","internalType":"uint256"},{"type":"uint256","name":"Sell","internalType":"uint256"},{"type":"uint256","name":"Transfer","internalType":"uint256"},{"type":"uint256","name":"Reflection","internalType":"uint256"},{"type":"uint256","name":"LP","internalType":"uint256"},{"type":"uint256","name":"Marketing","internalType":"uint256"}],"name":"getTaxes","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOverLiquified","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxTX","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxWallet","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAMM","inputs":[{"type":"address","name":"AMM","internalType":"address"},{"type":"bool","name":"add","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setExcludedFromFee","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"exclude","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setExcludedFromReflection","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"exclude","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setLaunchInSeconds","inputs":[{"type":"uint256","name":"secondsUntilLaunch","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setLaunchTimestamp","inputs":[{"type":"uint256","name":"Timestamp","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setManualSwap","inputs":[{"type":"bool","name":"manual","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setOverLiquifyTreshold","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapTreshold","inputs":[{"type":"uint256","name":"treshold","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTaxes","inputs":[{"type":"uint256","name":"Buy","internalType":"uint256"},{"type":"uint256","name":"Sell","internalType":"uint256"},{"type":"uint256","name":"Transfer","internalType":"uint256"},{"type":"uint256","name":"Reflection","internalType":"uint256"},{"type":"uint256","name":"Liquidity","internalType":"uint256"},{"type":"uint256","name":"Marketing","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapContractToken","inputs":[{"type":"uint256","name":"treshold","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
            

Contract Creation Code

0x60806040526103e86008556103e86009556000600a55611f40600b556103e8600c556103e8600d55600c546127106200003991906200076a565b600e55600f80556105dc601055600019601255600160801b60145560c8620000646009600a6200087d565b6200007490633b9aca0062000895565b620000809190620008b7565b6015556103e8620000946009600a6200087d565b620000a490633b9aca0062000895565b620000b09190620008b7565b601655601b80546001600160a01b0319167372d85ab47fbfc5e7e04a8bcfca1601d8f8ce1a50179055348015620000e657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601b60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a29190620008da565b6001600160a01b031663c9c6539630601b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022b9190620008da565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000279573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029f9190620008da565b601a80546001600160a01b0319166001600160a01b039290921691821790556000908152600760205260409020805460ff191660011790556200031d336103e8620002ed6009600a6200087d565b620002fd90633b9aca0062000895565b6200030b906103e762000895565b620003179190620008b7565b62000466565b6200034561dead6103e8620003356009600a6200087d565b6200030b90633b9aca0062000895565b61dead6000600080516020620034398339815191526103e86200036b6009600a6200087d565b6200037b90633b9aca0062000895565b620003879190620008b7565b60405190815260200160405180910390a3336000600080516020620034398339815191526103e8620003bc6009600a6200087d565b620003cc90633b9aca0062000895565b620003da906103e762000895565b620003e69190620008b7565b60405190815260200160405180910390a36200040430600162000549565b601a546200041d906001600160a01b0316600162000549565b336000818152600460205260408082208054600160ff1991821681179092553084529190922080549091169091179055601980546001600160a01b03191690911790556200091b565b60006200047383620006b3565b9050600062000483838362000905565b6001600160a01b03851660009081526003602052604090205490915060ff1615620004e3576001600160a01b038416600090815260026020526040812082905560188054859290620004d790849062000905565b90915550620005439050565b6000620004f0836200071b565b90506000620004ff836200071b565b6001600160a01b038716600090815260016020526040902081905590506200052882826200076a565b601760008282546200053b919062000905565b909155505050505b50505050565b6001600160a01b03821660009081526003602052604090205481151560ff9091161515036200057757600080fd5b60006200058483620006b3565b6001600160a01b0384166000908152600360205260409020805460ff1916841580159190911790915590915062000631576001600160a01b0383166000908152600160205260408120546017805491928392620005e39084906200076a565b90915550506001600160a01b038416600090815260016020908152604080832083905560029091528120839055601880548492906200062490849062000905565b90915550620006ae915050565b6001600160a01b038316600090815260026020526040812081905560188054839290620006609084906200076a565b909155506000905062000673826200071b565b6001600160a01b0385166000908152600160205260408120829055601780549293508392909190620006a790849062000905565b9091555050505b505050565b6001600160a01b03811660009081526003602052604081205460ff1615620006f157506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205462000715906200073d565b92915050565b60145460009062000731600160801b8462000895565b620007159190620008b7565b6000600160801b6014548362000731919062000895565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000715576200071562000754565b600181815b80851115620007c1578160001904821115620007a557620007a562000754565b80851615620007b357918102915b93841c939080029062000785565b509250929050565b600082620007da5750600162000715565b81620007e95750600062000715565b81600181146200080257600281146200080d576200082d565b600191505062000715565b60ff84111562000821576200082162000754565b50506001821b62000715565b5060208310610133831016604e8410600b841016171562000852575081810a62000715565b6200085e838362000780565b806000190482111562000875576200087562000754565b029392505050565b60006200088e60ff841683620007c9565b9392505050565b6000816000190483118215151615620008b257620008b262000754565b500290565b600082620008d557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008ed57600080fd5b81516001600160a01b03811681146200088e57600080fd5b8082018082111562000715576200071562000754565b612b0e806200092b6000396000f3fe60806040526004361061028c5760003560e01c80636612e66f1161015a578063a9b434d9116100c1578063d726059f1161007a578063d726059f1461083c578063db2c08b41461085c578063dd62ed3e14610889578063ebae7c1c146108cf578063f2fde38b146108e5578063f8b45b051461090557600080fd5b8063a9b434d91461075c578063a9d3cd8a1461078c578063aa45b09c146107ac578063ad9200b1146107cc578063cafcb679146107ec578063cfd1940e1461081c57600080fd5b8063893d20e811610113578063893d20e8146106de5780638da5cb5b146106de5780639515ff2a146106fc57806395d89b41146102cf578063a457c2d71461071c578063a9059cbb1461073c57600080fd5b80636612e66f1461061c57806368707c981461063c57806370a082311461065c578063715018a61461067c57806375f0a8741461069157806388d28b77146106c957600080fd5b80632d99812a116101fe578063409d96ae116101b7578063409d96ae1461052657806346e35f03146105465780635304757b1461055b5780635a9b0b891461057b5780635c1ed606146105cf5780635d7b47e1146105ef57600080fd5b80632d99812a1461046a578063313ce5671461048a5780633227925f146104a6578063324c7bdd146104c657806332955a67146104e6578063395093511461050657600080fd5b806318160ddd1161025057806318160ddd1461035e5780631b23f762146103815780631d5165cf146103ae5780631e743d18146103ce57806323b872dd146103fe5780632973ef2d1461041e57600080fd5b806304d4c990146102985780630612f39d146102ba57806306fdde03146102cf5780630918992b1461030e578063095ea7b31461032e57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b336600461255a565b61091b565b005b3480156102c657600080fd5b506102b8610a4c565b3480156102db57600080fd5b506040805180820182526007815266446f676541706560c81b60208201529051610305919061259d565b60405180910390f35b34801561031a57600080fd5b506102b86103293660046125eb565b610bdd565b34801561033a57600080fd5b5061034e610349366004612619565b610c6d565b6040519015158152602001610305565b34801561036a57600080fd5b50610373610c84565b604051908152602001610305565b34801561038d57600080fd5b5061037361039c366004612645565b60016020526000908152604090205481565b3480156103ba57600080fd5b506102b86103c9366004612645565b610ca3565b3480156103da57600080fd5b5061034e6103e9366004612645565b60046020526000908152604090205460ff1681565b34801561040a57600080fd5b5061034e610419366004612662565b610d2a565b34801561042a57600080fd5b50600854600954600a54600c54600d54600b54604080519687526020870195909552938501929092526060840152608083015260a082015260c001610305565b34801561047657600080fd5b506102b86104853660046126b1565b610dca565b34801561049657600080fd5b5060405160098152602001610305565b3480156104b257600080fd5b506102b86104c13660046125eb565b610e44565b3480156104d257600080fd5b506102b86104e13660046125eb565b610e8d565b3480156104f257600080fd5b506102b86105013660046125eb565b610ed3565b34801561051257600080fd5b5061034e610521366004612619565b610f4f565b34801561053257600080fd5b506102b8610541366004612645565b610f86565b34801561055257600080fd5b5061034e6110d4565b34801561056757600080fd5b506102b86105763660046125eb565b611119565b34801561058757600080fd5b50600f5460105460125460185460175460115490919060ff166040805196875260208701959095529385019290925260608401526080830152151560a082015260c001610305565b3480156105db57600080fd5b506102b86105ea3660046125eb565b61116a565b3480156105fb57600080fd5b5061037361060a366004612645565b60056020526000908152604090205481565b34801561062857600080fd5b506102b86106373660046126ce565b6111b8565b34801561064857600080fd5b506102b8610657366004612707565b611273565b34801561066857600080fd5b50610373610677366004612645565b611351565b34801561068857600080fd5b506102b86113b0565b34801561069d57600080fd5b506019546106b1906001600160a01b031681565b6040516001600160a01b039091168152602001610305565b3480156106d557600080fd5b50610373611433565b3480156106ea57600080fd5b506000546001600160a01b03166106b1565b34801561070857600080fd5b506102b86107173660046126ce565b611453565b34801561072857600080fd5b5061034e610737366004612619565b61151e565b34801561074857600080fd5b5061034e610757366004612619565b611568565b34801561076857600080fd5b5061034e610777366004612645565b60036020526000908152604090205460ff1681565b34801561079857600080fd5b506102b86107a73660046126ce565b611575565b3480156107b857600080fd5b506103736107c73660046125eb565b611625565b3480156107d857600080fd5b506103736107e73660046125eb565b611644565b3480156107f857600080fd5b5061034e610807366004612645565b60076020526000908152604090205460ff1681565b34801561082857600080fd5b506102b86108373660046125eb565b611658565b34801561084857600080fd5b506102b86108573660046125eb565b6116df565b34801561086857600080fd5b50610373610877366004612645565b60026020526000908152604090205481565b34801561089557600080fd5b506103736108a4366004612729565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156108db57600080fd5b5061037360165481565b3480156108f157600080fd5b506102b8610900366004612645565b61175b565b34801561091157600080fd5b5061037360155481565b3361092e6000546001600160a01b031690565b6001600160a01b03161461095d5760405162461bcd60e51b815260040161095490612757565b60405180910390fd5b600061096c60646127106127a2565b61097790600a6127c4565b90508087111580156109895750808611155b80156109955750808511155b61099e57600080fd5b612710826109ac85876127e3565b6109b691906127e3565b146109c057600080fd5b60088790556009869055600a859055600c849055600d839055600b8290556109ea846127106127f6565b600e556040805188815260208101889052908101869052606081018590526080810184905260a081018390527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a150505050505050565b33610a5f6000546001600160a01b031690565b6001600160a01b031614610a855760405162461bcd60e51b815260040161095490612757565b601354421015610aca5760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b6044820152606401610954565b601a546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612809565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf9190612822565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67590600090a15050565b33610bf06000546001600160a01b031690565b6001600160a01b031614610c165760405162461bcd60e51b815260040161095490612757565b6012544210610c2457600080fd5b42811015610c3157600080fd5b60128190556040518181527f818d823b27cf035ff2e055a65b6227b854203322ac5dbd674add6aa0d9d657d1906020015b60405180910390a150565b6000610c7a338484611854565b5060015b92915050565b6000610c91601754611625565b601854610c9e91906127e3565b905090565b33610cb66000546001600160a01b031690565b6001600160a01b031614610cdc5760405162461bcd60e51b815260040161095490612757565b601980546001600160a01b0319166001600160a01b0383169081179091556040519081527fa84eeda79ee9db5fc195488a69e6981aa457299570e28a92392eb9c84e005d7990602001610c62565b6000610d378484846118dc565b6001600160a01b038416600090815260066020908152604080832033845290915290205482811015610dab5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73666572206578636565647320616c6c6f77616e63650000000000006044820152606401610954565b610dbf8533610dba86856127f6565b611854565b506001949350505050565b33610ddd6000546001600160a01b031690565b6001600160a01b031614610e035760405162461bcd60e51b815260040161095490612757565b6011805460ff19168215159081179091556040519081527fa1334f73b4ca3b2391bae4d1db09bf2b9697a0ea492081a8a94206d8ec8384f090602001610c62565b33610e576000546001600160a01b031690565b6001600160a01b031614610e7d5760405162461bcd60e51b815260040161095490612757565b610e8a61085742836127e3565b50565b33610ea06000546001600160a01b031690565b6001600160a01b031614610ec65760405162461bcd60e51b815260040161095490612757565b610e8a61032982426127e3565b33610ee66000546001600160a01b031690565b6001600160a01b031614610f0c5760405162461bcd60e51b815260040161095490612757565b6127108110610f1a57600080fd5b60108190556040518181527fb46c8769af693755739d87a719196ddb7961844f19fc54dbad7b9d97690b7b5e90602001610c62565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610c7a918590610dba9086906127e3565b33610f996000546001600160a01b031690565b6001600160a01b031614610fbf5760405162461bcd60e51b815260040161095490612757565b6001600160a01b0381163014801590610fe65750601a546001600160a01b03828116911614155b610fef57600080fd5b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561103d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110619190612809565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d09190612822565b5050565b60006127106010546110e4610c84565b6110ee91906127c4565b6110f891906127a2565b601a546001600160a01b031660009081526002602052604090205411919050565b3361112c6000546001600160a01b031690565b6001600160a01b0316146111525760405162461bcd60e51b815260040161095490612757565b600f8054908290556111646001611a52565b600f5550565b6111743382611bed565b61117d81611d19565b60405181815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b336111cb6000546001600160a01b031690565b6001600160a01b0316146111f15760405162461bcd60e51b815260040161095490612757565b808061120657506001600160a01b0382163014155b61120f57600080fd5b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527fe8b454213ef316b3de93adc4e156b9aa662bb0ab7b22bcdae2e2f95b9311da6691015b60405180910390a15050565b336112866000546001600160a01b031690565b6001600160a01b0316146112ac5760405162461bcd60e51b815260040161095490612757565b60c86112ba6009600a612923565b6112c890633b9aca006127c4565b6112d291906127a2565b8210156112de57600080fd5b6103e86112ed6009600a612923565b6112fb90633b9aca006127c4565b61130591906127a2565b81101561131157600080fd5b6015829055601681905560408051828152602081018490527fc951fd5f6c1738a40b939a6515d5082a37d60fcda98a7003c2cc4665d10219c99101611267565b6001600160a01b03811660009081526003602052604081205460ff161561138e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c7e90611625565b336113c36000546001600160a01b031690565b6001600160a01b0316146113e95760405162461bcd60e51b815260040161095490612757565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600060135442101561144d5742601354610c9e91906127f6565b50600090565b336114666000546001600160a01b031690565b6001600160a01b03161461148c5760405162461bcd60e51b815260040161095490612757565b6001600160a01b03821630148015906114b35750601a546001600160a01b03838116911614155b6114bc57600080fd5b61deac196001600160a01b038316016114d457600080fd5b6114de8282611d5a565b604080516001600160a01b038416815282151560208201527fddf34c728783f45f37f9f67e80e1d3339edb7190424dad8a0a1604c1ed6e45499101611267565b3360009081526006602090815260408083206001600160a01b03861684529091528120548281101561154f57600080fd5b61155e3385610dba86856127f6565b5060019392505050565b6000610c7a3384846118dc565b336115886000546001600160a01b031690565b6001600160a01b0316146115ae5760405162461bcd60e51b815260040161095490612757565b601a546001600160a01b03908116908316036115c957600080fd5b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f9bc33cbedb7a42664c57f18776a53a203914f24bc418ec98ff073f30cca2b7859101611267565b6000600160801b6014548361163a91906127c4565b610c7e91906127a2565b60145460009061163a600160801b846127c4565b3361166b6000546001600160a01b031690565b6001600160a01b0316146116915760405162461bcd60e51b815260040161095490612757565b61169e60646127106127a2565b8111156116aa57600080fd5b600f8190556040518181527f8e6b6d7a8d988561ab8631507fccb15b88a362a07e65f58071b9feb98343680290602001610c62565b336116f26000546001600160a01b031690565b6001600160a01b0316146117185760405162461bcd60e51b815260040161095490612757565b601354811161172657600080fd5b60138190556040518181527f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e90602001610c62565b3361176e6000546001600160a01b031690565b6001600160a01b0316146117945760405162461bcd60e51b815260040161095490612757565b6001600160a01b0381166117f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610954565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661186757600080fd5b6001600160a01b03821661187a57600080fd5b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119275760405162461bcd60e51b81526020600482015260126024820152717472616e736665722066726f6d207a65726f60701b6044820152606401610954565b6001600160a01b0382166119705760405162461bcd60e51b815260206004820152601060248201526f7472616e7366657220746f207a65726f60801b6044820152606401610954565b600081116119ae5760405162461bcd60e51b815260206004820152600b60248201526a616d6f756e74207a65726f60a81b6044820152606401610954565b6001600160a01b03831660009081526004602052604090205460ff16806119ed57506001600160a01b03821660009081526004602052604090205460ff165b15611a02576119fd838383611eb5565b611a0d565b611a0d838383611ec9565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118cf91815260200190565b601b805460ff60a01b1916600160a01b17905530600090815260026020526040812054600e54909103611a855750611bdd565b600f54601a546001600160a01b0316600090815260026020526040812054909161271091611ab391906127c4565b611abd91906127a2565b905080821015611adb578215611ad4575080611adb565b5050611bdd565b6000611ae56110d4565b611b0857600e54600d54611af990846127c4565b611b0391906127a2565b611b0b565b60005b90506000611b1982846127f6565b90506000611b286002846127a2565b90506000611b3683836127e3565b905080600003611b4b57505050505050611bdd565b611b5481612225565b47600082611b6285846127c4565b611b6c91906127a2565b90508015611b7e57611b7e8482612397565b6019546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611bcb576040519150601f19603f3d011682016040523d82523d6000602084013e611bd0565b606091505b5050505050505050505050505b50601b805460ff60a01b19169055565b6000611bf883611351565b905080821115611c4a5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732042616c616e636500000000000000006044820152606401610954565b6000611c5683836127f6565b6001600160a01b03851660009081526003602052604090205490915060ff1615611cbb576001600160a01b0384166000908152600260205260409020819055611c9f81836127f6565b60186000828254611cb091906127f6565b90915550611d139050565b6000611cc683611644565b90506000611cd383611644565b6001600160a01b03871660009081526001602052604090208190559050611cfa81836127f6565b60176000828254611d0b91906127f6565b909155505050505b50505050565b601754600003611d265750565b601754611d37600160801b836127c4565b611d4191906127a2565b60146000828254611d5291906127e3565b909155505050565b6001600160a01b03821660009081526003602052604090205481151560ff909116151503611d8757600080fd5b6000611d9283611351565b6001600160a01b0384166000908152600360205260409020805460ff19168415801591909117909155909150611e39576001600160a01b0383166000908152600160205260408120546017805491928392611dee9084906127f6565b90915550506001600160a01b03841660009081526001602090815260408083208390556002909152812083905560188054849290611e2d9084906127e3565b90915550611eb0915050565b6001600160a01b038316600090815260026020526040812081905560188054839290611e669084906127f6565b9091555060009050611e7782611644565b6001600160a01b0385166000908152600160205260408120829055601780549293508392909190611ea99084906127e3565b9091555050505b505050565b611ebf8382611bed565b611eb08282612454565b601654811115611f035760405162461bcd60e51b815260206004820152600560248201526409ac2f0a8b60db1b6044820152606401610954565b601254421015611f1257600080fd5b6001600160a01b0380841660009081526007602052604080822054928516825281205460ff9283169216908115611fae5762015180601254611f5491906127e3565b421015611fa5576001600160a01b038616600090815260056020526040902054601254611f829082906127e3565b421015611f9957611f928161250e565b9150611f9f565b60095491505b50612150565b50600954612150565b82156120985761012c601254611fc491906127e3565b42101561203e576001600160a01b038516600090815260056020526040812054900361203e5760004261012c601254611ffd91906127e3565b61200791906127f6565b905061012c61201982620151806127c4565b61202391906127a2565b6001600160a01b038716600090815260056020526040902055505b506008546015548461204f87611351565b61205991906127e3565b106120935760405162461bcd60e51b815260206004820152600a6024820152691b585e0815d85b1b195d60b21b6044820152606401610954565b612150565b620151806012546120a991906127e3565b4210156120fa576001600160a01b0386166000908152600560205260409020546012546120d79082906127e3565b4210156120ee576120e78161250e565b91506120f4565b600a5491505b506120ff565b50600a545b6015548461210c87611351565b61211691906127e3565b106121505760405162461bcd60e51b815260206004820152600a6024820152691b585e0815d85b1b195d60b21b6044820152606401610954565b601b54600160a01b900460ff161580156121785750601a546001600160a01b03878116911614155b8015612187575060115460ff16155b15612196576121966000611a52565b60006127106121a583876127c4565b6121af91906127a2565b90506000612710600e54836121c491906127c4565b6121ce91906127a2565b905060006121dc82846127f6565b90506121e88988611bed565b6121fb886121f6858a6127f6565b612454565b811561220b5761220b3083612454565b801561221a5761221a81611d19565b505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061225a5761225a612948565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d7919061295e565b816001815181106122ea576122ea612948565b6001600160a01b03928316602091820292909201810191909152306000818152600683526040808220601b8054871684529452808220879055925492516318cbafe560e01b815292909316926318cbafe59261235092879291879190429060040161297b565b6000604051808303816000875af115801561236f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eb091908101906129ec565b306000818152600660209081526040808320601b80546001600160a01b039081168652919093528184208790559154905163f305d71960e01b8152600481018590526024810187905260448101849052606481019390935260848301939093524260a4830152919091169063f305d71990839060c40160606040518083038185885af193505050508015612448575060408051601f3d908101601f1916820190925261244591810190612aaa565b60015b156110d0575050505050565b600061245f83611351565b9050600061246d83836127e3565b6001600160a01b03851660009081526003602052604090205490915060ff16156124be576001600160a01b038416600090815260026020526040812082905560188054859290611cb09084906127e3565b60006124c983611644565b905060006124d683611644565b6001600160a01b038716600090815260016020526040902081905590506124fd82826127f6565b60176000828254611d0b91906127e3565b6000806012544261251f91906127f6565b90508281600954611b5861253391906127f6565b61253d91906127c4565b61254791906127a2565b61255390611b586127f6565b9392505050565b60008060008060008060c0878903121561257357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b818110156125ca578581018301518582016040015282016125ae565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156125fd57600080fd5b5035919050565b6001600160a01b0381168114610e8a57600080fd5b6000806040838503121561262c57600080fd5b823561263781612604565b946020939093013593505050565b60006020828403121561265757600080fd5b813561255381612604565b60008060006060848603121561267757600080fd5b833561268281612604565b9250602084013561269281612604565b929592945050506040919091013590565b8015158114610e8a57600080fd5b6000602082840312156126c357600080fd5b8135612553816126a3565b600080604083850312156126e157600080fd5b82356126ec81612604565b915060208301356126fc816126a3565b809150509250929050565b6000806040838503121561271a57600080fd5b50508035926020909101359150565b6000806040838503121561273c57600080fd5b823561274781612604565b915060208301356126fc81612604565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826127bf57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156127de576127de61278c565b500290565b80820180821115610c7e57610c7e61278c565b81810381811115610c7e57610c7e61278c565b60006020828403121561281b57600080fd5b5051919050565b60006020828403121561283457600080fd5b8151612553816126a3565b600181815b8085111561287a5781600019048211156128605761286061278c565b8085161561286d57918102915b93841c9390800290612844565b509250929050565b60008261289157506001610c7e565b8161289e57506000610c7e565b81600181146128b457600281146128be576128da565b6001915050610c7e565b60ff8411156128cf576128cf61278c565b50506001821b610c7e565b5060208310610133831016604e8410600b84101617156128fd575081810a610c7e565b612907838361283f565b806000190482111561291b5761291b61278c565b029392505050565b600061255360ff841683612882565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561297057600080fd5b815161255381612604565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129cb5784516001600160a01b0316835293830193918301916001016129a6565b50506001600160a01b03969096166060850152505050608001529392505050565b600060208083850312156129ff57600080fd5b825167ffffffffffffffff80821115612a1757600080fd5b818501915085601f830112612a2b57600080fd5b815181811115612a3d57612a3d612932565b8060051b604051601f19603f83011681018181108582111715612a6257612a62612932565b604052918252848201925083810185019188831115612a8057600080fd5b938501935b82851015612a9e57845184529385019392850192612a85565b98975050505050505050565b600080600060608486031215612abf57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fd21616f13c22ec269e395e16a30c06346b73f5e10d54e5c7a9286b8f25eedef64736f6c63430008100033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed ByteCode

0x60806040526004361061028c5760003560e01c80636612e66f1161015a578063a9b434d9116100c1578063d726059f1161007a578063d726059f1461083c578063db2c08b41461085c578063dd62ed3e14610889578063ebae7c1c146108cf578063f2fde38b146108e5578063f8b45b051461090557600080fd5b8063a9b434d91461075c578063a9d3cd8a1461078c578063aa45b09c146107ac578063ad9200b1146107cc578063cafcb679146107ec578063cfd1940e1461081c57600080fd5b8063893d20e811610113578063893d20e8146106de5780638da5cb5b146106de5780639515ff2a146106fc57806395d89b41146102cf578063a457c2d71461071c578063a9059cbb1461073c57600080fd5b80636612e66f1461061c57806368707c981461063c57806370a082311461065c578063715018a61461067c57806375f0a8741461069157806388d28b77146106c957600080fd5b80632d99812a116101fe578063409d96ae116101b7578063409d96ae1461052657806346e35f03146105465780635304757b1461055b5780635a9b0b891461057b5780635c1ed606146105cf5780635d7b47e1146105ef57600080fd5b80632d99812a1461046a578063313ce5671461048a5780633227925f146104a6578063324c7bdd146104c657806332955a67146104e6578063395093511461050657600080fd5b806318160ddd1161025057806318160ddd1461035e5780631b23f762146103815780631d5165cf146103ae5780631e743d18146103ce57806323b872dd146103fe5780632973ef2d1461041e57600080fd5b806304d4c990146102985780630612f39d146102ba57806306fdde03146102cf5780630918992b1461030e578063095ea7b31461032e57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b336600461255a565b61091b565b005b3480156102c657600080fd5b506102b8610a4c565b3480156102db57600080fd5b506040805180820182526007815266446f676541706560c81b60208201529051610305919061259d565b60405180910390f35b34801561031a57600080fd5b506102b86103293660046125eb565b610bdd565b34801561033a57600080fd5b5061034e610349366004612619565b610c6d565b6040519015158152602001610305565b34801561036a57600080fd5b50610373610c84565b604051908152602001610305565b34801561038d57600080fd5b5061037361039c366004612645565b60016020526000908152604090205481565b3480156103ba57600080fd5b506102b86103c9366004612645565b610ca3565b3480156103da57600080fd5b5061034e6103e9366004612645565b60046020526000908152604090205460ff1681565b34801561040a57600080fd5b5061034e610419366004612662565b610d2a565b34801561042a57600080fd5b50600854600954600a54600c54600d54600b54604080519687526020870195909552938501929092526060840152608083015260a082015260c001610305565b34801561047657600080fd5b506102b86104853660046126b1565b610dca565b34801561049657600080fd5b5060405160098152602001610305565b3480156104b257600080fd5b506102b86104c13660046125eb565b610e44565b3480156104d257600080fd5b506102b86104e13660046125eb565b610e8d565b3480156104f257600080fd5b506102b86105013660046125eb565b610ed3565b34801561051257600080fd5b5061034e610521366004612619565b610f4f565b34801561053257600080fd5b506102b8610541366004612645565b610f86565b34801561055257600080fd5b5061034e6110d4565b34801561056757600080fd5b506102b86105763660046125eb565b611119565b34801561058757600080fd5b50600f5460105460125460185460175460115490919060ff166040805196875260208701959095529385019290925260608401526080830152151560a082015260c001610305565b3480156105db57600080fd5b506102b86105ea3660046125eb565b61116a565b3480156105fb57600080fd5b5061037361060a366004612645565b60056020526000908152604090205481565b34801561062857600080fd5b506102b86106373660046126ce565b6111b8565b34801561064857600080fd5b506102b8610657366004612707565b611273565b34801561066857600080fd5b50610373610677366004612645565b611351565b34801561068857600080fd5b506102b86113b0565b34801561069d57600080fd5b506019546106b1906001600160a01b031681565b6040516001600160a01b039091168152602001610305565b3480156106d557600080fd5b50610373611433565b3480156106ea57600080fd5b506000546001600160a01b03166106b1565b34801561070857600080fd5b506102b86107173660046126ce565b611453565b34801561072857600080fd5b5061034e610737366004612619565b61151e565b34801561074857600080fd5b5061034e610757366004612619565b611568565b34801561076857600080fd5b5061034e610777366004612645565b60036020526000908152604090205460ff1681565b34801561079857600080fd5b506102b86107a73660046126ce565b611575565b3480156107b857600080fd5b506103736107c73660046125eb565b611625565b3480156107d857600080fd5b506103736107e73660046125eb565b611644565b3480156107f857600080fd5b5061034e610807366004612645565b60076020526000908152604090205460ff1681565b34801561082857600080fd5b506102b86108373660046125eb565b611658565b34801561084857600080fd5b506102b86108573660046125eb565b6116df565b34801561086857600080fd5b50610373610877366004612645565b60026020526000908152604090205481565b34801561089557600080fd5b506103736108a4366004612729565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156108db57600080fd5b5061037360165481565b3480156108f157600080fd5b506102b8610900366004612645565b61175b565b34801561091157600080fd5b5061037360155481565b3361092e6000546001600160a01b031690565b6001600160a01b03161461095d5760405162461bcd60e51b815260040161095490612757565b60405180910390fd5b600061096c60646127106127a2565b61097790600a6127c4565b90508087111580156109895750808611155b80156109955750808511155b61099e57600080fd5b612710826109ac85876127e3565b6109b691906127e3565b146109c057600080fd5b60088790556009869055600a859055600c849055600d839055600b8290556109ea846127106127f6565b600e556040805188815260208101889052908101869052606081018590526080810184905260a081018390527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a150505050505050565b33610a5f6000546001600160a01b031690565b6001600160a01b031614610a855760405162461bcd60e51b815260040161095490612757565b601354421015610aca5760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b6044820152606401610954565b601a546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612809565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf9190612822565b506040517f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67590600090a15050565b33610bf06000546001600160a01b031690565b6001600160a01b031614610c165760405162461bcd60e51b815260040161095490612757565b6012544210610c2457600080fd5b42811015610c3157600080fd5b60128190556040518181527f818d823b27cf035ff2e055a65b6227b854203322ac5dbd674add6aa0d9d657d1906020015b60405180910390a150565b6000610c7a338484611854565b5060015b92915050565b6000610c91601754611625565b601854610c9e91906127e3565b905090565b33610cb66000546001600160a01b031690565b6001600160a01b031614610cdc5760405162461bcd60e51b815260040161095490612757565b601980546001600160a01b0319166001600160a01b0383169081179091556040519081527fa84eeda79ee9db5fc195488a69e6981aa457299570e28a92392eb9c84e005d7990602001610c62565b6000610d378484846118dc565b6001600160a01b038416600090815260066020908152604080832033845290915290205482811015610dab5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73666572206578636565647320616c6c6f77616e63650000000000006044820152606401610954565b610dbf8533610dba86856127f6565b611854565b506001949350505050565b33610ddd6000546001600160a01b031690565b6001600160a01b031614610e035760405162461bcd60e51b815260040161095490612757565b6011805460ff19168215159081179091556040519081527fa1334f73b4ca3b2391bae4d1db09bf2b9697a0ea492081a8a94206d8ec8384f090602001610c62565b33610e576000546001600160a01b031690565b6001600160a01b031614610e7d5760405162461bcd60e51b815260040161095490612757565b610e8a61085742836127e3565b50565b33610ea06000546001600160a01b031690565b6001600160a01b031614610ec65760405162461bcd60e51b815260040161095490612757565b610e8a61032982426127e3565b33610ee66000546001600160a01b031690565b6001600160a01b031614610f0c5760405162461bcd60e51b815260040161095490612757565b6127108110610f1a57600080fd5b60108190556040518181527fb46c8769af693755739d87a719196ddb7961844f19fc54dbad7b9d97690b7b5e90602001610c62565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610c7a918590610dba9086906127e3565b33610f996000546001600160a01b031690565b6001600160a01b031614610fbf5760405162461bcd60e51b815260040161095490612757565b6001600160a01b0381163014801590610fe65750601a546001600160a01b03828116911614155b610fef57600080fd5b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801561103d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110619190612809565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d09190612822565b5050565b60006127106010546110e4610c84565b6110ee91906127c4565b6110f891906127a2565b601a546001600160a01b031660009081526002602052604090205411919050565b3361112c6000546001600160a01b031690565b6001600160a01b0316146111525760405162461bcd60e51b815260040161095490612757565b600f8054908290556111646001611a52565b600f5550565b6111743382611bed565b61117d81611d19565b60405181815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b336111cb6000546001600160a01b031690565b6001600160a01b0316146111f15760405162461bcd60e51b815260040161095490612757565b808061120657506001600160a01b0382163014155b61120f57600080fd5b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527fe8b454213ef316b3de93adc4e156b9aa662bb0ab7b22bcdae2e2f95b9311da6691015b60405180910390a15050565b336112866000546001600160a01b031690565b6001600160a01b0316146112ac5760405162461bcd60e51b815260040161095490612757565b60c86112ba6009600a612923565b6112c890633b9aca006127c4565b6112d291906127a2565b8210156112de57600080fd5b6103e86112ed6009600a612923565b6112fb90633b9aca006127c4565b61130591906127a2565b81101561131157600080fd5b6015829055601681905560408051828152602081018490527fc951fd5f6c1738a40b939a6515d5082a37d60fcda98a7003c2cc4665d10219c99101611267565b6001600160a01b03811660009081526003602052604081205460ff161561138e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c7e90611625565b336113c36000546001600160a01b031690565b6001600160a01b0316146113e95760405162461bcd60e51b815260040161095490612757565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600060135442101561144d5742601354610c9e91906127f6565b50600090565b336114666000546001600160a01b031690565b6001600160a01b03161461148c5760405162461bcd60e51b815260040161095490612757565b6001600160a01b03821630148015906114b35750601a546001600160a01b03838116911614155b6114bc57600080fd5b61deac196001600160a01b038316016114d457600080fd5b6114de8282611d5a565b604080516001600160a01b038416815282151560208201527fddf34c728783f45f37f9f67e80e1d3339edb7190424dad8a0a1604c1ed6e45499101611267565b3360009081526006602090815260408083206001600160a01b03861684529091528120548281101561154f57600080fd5b61155e3385610dba86856127f6565b5060019392505050565b6000610c7a3384846118dc565b336115886000546001600160a01b031690565b6001600160a01b0316146115ae5760405162461bcd60e51b815260040161095490612757565b601a546001600160a01b03908116908316036115c957600080fd5b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f9bc33cbedb7a42664c57f18776a53a203914f24bc418ec98ff073f30cca2b7859101611267565b6000600160801b6014548361163a91906127c4565b610c7e91906127a2565b60145460009061163a600160801b846127c4565b3361166b6000546001600160a01b031690565b6001600160a01b0316146116915760405162461bcd60e51b815260040161095490612757565b61169e60646127106127a2565b8111156116aa57600080fd5b600f8190556040518181527f8e6b6d7a8d988561ab8631507fccb15b88a362a07e65f58071b9feb98343680290602001610c62565b336116f26000546001600160a01b031690565b6001600160a01b0316146117185760405162461bcd60e51b815260040161095490612757565b601354811161172657600080fd5b60138190556040518181527f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e90602001610c62565b3361176e6000546001600160a01b031690565b6001600160a01b0316146117945760405162461bcd60e51b815260040161095490612757565b6001600160a01b0381166117f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610954565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661186757600080fd5b6001600160a01b03821661187a57600080fd5b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119275760405162461bcd60e51b81526020600482015260126024820152717472616e736665722066726f6d207a65726f60701b6044820152606401610954565b6001600160a01b0382166119705760405162461bcd60e51b815260206004820152601060248201526f7472616e7366657220746f207a65726f60801b6044820152606401610954565b600081116119ae5760405162461bcd60e51b815260206004820152600b60248201526a616d6f756e74207a65726f60a81b6044820152606401610954565b6001600160a01b03831660009081526004602052604090205460ff16806119ed57506001600160a01b03821660009081526004602052604090205460ff165b15611a02576119fd838383611eb5565b611a0d565b611a0d838383611ec9565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118cf91815260200190565b601b805460ff60a01b1916600160a01b17905530600090815260026020526040812054600e54909103611a855750611bdd565b600f54601a546001600160a01b0316600090815260026020526040812054909161271091611ab391906127c4565b611abd91906127a2565b905080821015611adb578215611ad4575080611adb565b5050611bdd565b6000611ae56110d4565b611b0857600e54600d54611af990846127c4565b611b0391906127a2565b611b0b565b60005b90506000611b1982846127f6565b90506000611b286002846127a2565b90506000611b3683836127e3565b905080600003611b4b57505050505050611bdd565b611b5481612225565b47600082611b6285846127c4565b611b6c91906127a2565b90508015611b7e57611b7e8482612397565b6019546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611bcb576040519150601f19603f3d011682016040523d82523d6000602084013e611bd0565b606091505b5050505050505050505050505b50601b805460ff60a01b19169055565b6000611bf883611351565b905080821115611c4a5760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732042616c616e636500000000000000006044820152606401610954565b6000611c5683836127f6565b6001600160a01b03851660009081526003602052604090205490915060ff1615611cbb576001600160a01b0384166000908152600260205260409020819055611c9f81836127f6565b60186000828254611cb091906127f6565b90915550611d139050565b6000611cc683611644565b90506000611cd383611644565b6001600160a01b03871660009081526001602052604090208190559050611cfa81836127f6565b60176000828254611d0b91906127f6565b909155505050505b50505050565b601754600003611d265750565b601754611d37600160801b836127c4565b611d4191906127a2565b60146000828254611d5291906127e3565b909155505050565b6001600160a01b03821660009081526003602052604090205481151560ff909116151503611d8757600080fd5b6000611d9283611351565b6001600160a01b0384166000908152600360205260409020805460ff19168415801591909117909155909150611e39576001600160a01b0383166000908152600160205260408120546017805491928392611dee9084906127f6565b90915550506001600160a01b03841660009081526001602090815260408083208390556002909152812083905560188054849290611e2d9084906127e3565b90915550611eb0915050565b6001600160a01b038316600090815260026020526040812081905560188054839290611e669084906127f6565b9091555060009050611e7782611644565b6001600160a01b0385166000908152600160205260408120829055601780549293508392909190611ea99084906127e3565b9091555050505b505050565b611ebf8382611bed565b611eb08282612454565b601654811115611f035760405162461bcd60e51b815260206004820152600560248201526409ac2f0a8b60db1b6044820152606401610954565b601254421015611f1257600080fd5b6001600160a01b0380841660009081526007602052604080822054928516825281205460ff9283169216908115611fae5762015180601254611f5491906127e3565b421015611fa5576001600160a01b038616600090815260056020526040902054601254611f829082906127e3565b421015611f9957611f928161250e565b9150611f9f565b60095491505b50612150565b50600954612150565b82156120985761012c601254611fc491906127e3565b42101561203e576001600160a01b038516600090815260056020526040812054900361203e5760004261012c601254611ffd91906127e3565b61200791906127f6565b905061012c61201982620151806127c4565b61202391906127a2565b6001600160a01b038716600090815260056020526040902055505b506008546015548461204f87611351565b61205991906127e3565b106120935760405162461bcd60e51b815260206004820152600a6024820152691b585e0815d85b1b195d60b21b6044820152606401610954565b612150565b620151806012546120a991906127e3565b4210156120fa576001600160a01b0386166000908152600560205260409020546012546120d79082906127e3565b4210156120ee576120e78161250e565b91506120f4565b600a5491505b506120ff565b50600a545b6015548461210c87611351565b61211691906127e3565b106121505760405162461bcd60e51b815260206004820152600a6024820152691b585e0815d85b1b195d60b21b6044820152606401610954565b601b54600160a01b900460ff161580156121785750601a546001600160a01b03878116911614155b8015612187575060115460ff16155b15612196576121966000611a52565b60006127106121a583876127c4565b6121af91906127a2565b90506000612710600e54836121c491906127c4565b6121ce91906127a2565b905060006121dc82846127f6565b90506121e88988611bed565b6121fb886121f6858a6127f6565b612454565b811561220b5761220b3083612454565b801561221a5761221a81611d19565b505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061225a5761225a612948565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d7919061295e565b816001815181106122ea576122ea612948565b6001600160a01b03928316602091820292909201810191909152306000818152600683526040808220601b8054871684529452808220879055925492516318cbafe560e01b815292909316926318cbafe59261235092879291879190429060040161297b565b6000604051808303816000875af115801561236f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eb091908101906129ec565b306000818152600660209081526040808320601b80546001600160a01b039081168652919093528184208790559154905163f305d71960e01b8152600481018590526024810187905260448101849052606481019390935260848301939093524260a4830152919091169063f305d71990839060c40160606040518083038185885af193505050508015612448575060408051601f3d908101601f1916820190925261244591810190612aaa565b60015b156110d0575050505050565b600061245f83611351565b9050600061246d83836127e3565b6001600160a01b03851660009081526003602052604090205490915060ff16156124be576001600160a01b038416600090815260026020526040812082905560188054859290611cb09084906127e3565b60006124c983611644565b905060006124d683611644565b6001600160a01b038716600090815260016020526040902081905590506124fd82826127f6565b60176000828254611d0b91906127e3565b6000806012544261251f91906127f6565b90508281600954611b5861253391906127f6565b61253d91906127c4565b61254791906127a2565b61255390611b586127f6565b9392505050565b60008060008060008060c0878903121561257357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b818110156125ca578581018301518582016040015282016125ae565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156125fd57600080fd5b5035919050565b6001600160a01b0381168114610e8a57600080fd5b6000806040838503121561262c57600080fd5b823561263781612604565b946020939093013593505050565b60006020828403121561265757600080fd5b813561255381612604565b60008060006060848603121561267757600080fd5b833561268281612604565b9250602084013561269281612604565b929592945050506040919091013590565b8015158114610e8a57600080fd5b6000602082840312156126c357600080fd5b8135612553816126a3565b600080604083850312156126e157600080fd5b82356126ec81612604565b915060208301356126fc816126a3565b809150509250929050565b6000806040838503121561271a57600080fd5b50508035926020909101359150565b6000806040838503121561273c57600080fd5b823561274781612604565b915060208301356126fc81612604565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826127bf57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156127de576127de61278c565b500290565b80820180821115610c7e57610c7e61278c565b81810381811115610c7e57610c7e61278c565b60006020828403121561281b57600080fd5b5051919050565b60006020828403121561283457600080fd5b8151612553816126a3565b600181815b8085111561287a5781600019048211156128605761286061278c565b8085161561286d57918102915b93841c9390800290612844565b509250929050565b60008261289157506001610c7e565b8161289e57506000610c7e565b81600181146128b457600281146128be576128da565b6001915050610c7e565b60ff8411156128cf576128cf61278c565b50506001821b610c7e565b5060208310610133831016604e8410600b84101617156128fd575081810a610c7e565b612907838361283f565b806000190482111561291b5761291b61278c565b029392505050565b600061255360ff841683612882565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561297057600080fd5b815161255381612604565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129cb5784516001600160a01b0316835293830193918301916001016129a6565b50506001600160a01b03969096166060850152505050608001529392505050565b600060208083850312156129ff57600080fd5b825167ffffffffffffffff80821115612a1757600080fd5b818501915085601f830112612a2b57600080fd5b815181811115612a3d57612a3d612932565b8060051b604051601f19603f83011681018181108582111715612a6257612a62612932565b604052918252848201925083810185019188831115612a8057600080fd5b938501935b82851015612a9e57845184529385019392850192612a85565b98975050505050505050565b600080600060608486031215612abf57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220fd21616f13c22ec269e395e16a30c06346b73f5e10d54e5c7a9286b8f25eedef64736f6c63430008100033