ETH Price: $3,262.28 (+4.76%)
Gas: 2.19 Gwei
 

Overview

Max Total Supply

100,000,000 $NXCP

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
10,000,000 $NXCP

Value
$0.00
0x3e50546092076300a8f1fdcc43d8c221a42fbf18
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:
NyxCipher

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 1 : NyxCipher.sol
/**
 *Submitted for verification at Etherscan.io on 2024-09-20
 */

/**

    ███╗░░██╗██╗░░░██╗██╗░░██╗░█████╗░██╗██████╗░██╗░░██╗███████╗██████╗░
    ████╗░██║╚██╗░██╔╝╚██╗██╔╝██╔══██╗██║██╔══██╗██║░░██║██╔════╝██╔══██╗
    ██╔██╗██║░╚████╔╝░░╚███╔╝░██║░░╚═╝██║██████╔╝███████║█████╗░░██████╔╝
    ██║╚████║░░╚██╔╝░░░██╔██╗░██║░░██╗██║██╔═══╝░██╔══██║██╔══╝░░██╔══██╗
    ██║░╚███║░░░██║░░░██╔╝╚██╗╚█████╔╝██║██║░░░░░██║░░██║███████╗██║░░██║
    ╚═╝░░╚══╝░░░╚═╝░░░╚═╝░░╚═╝░╚════╝░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝

    𝙰𝚗 𝙰𝙸-𝚙𝚘𝚠𝚎𝚛𝚎𝚍 𝚂𝚘𝚕𝚒𝚍𝚒𝚝𝚢 𝚂𝚖𝚊𝚛𝚝 𝙲𝚘𝚗𝚝𝚛𝚊𝚌𝚝 𝙰𝚞𝚍𝚒𝚝𝚘𝚛 𝚝𝚑𝚊𝚝 𝚞𝚜𝚎𝚜 𝙰𝙸 𝚝𝚘 𝚊𝚗𝚊𝚕𝚢𝚣𝚎 𝚊𝚗𝚍 𝚊𝚞𝚍𝚒𝚝 𝚜𝚖𝚊𝚛𝚝 
    𝚌𝚘𝚗𝚝𝚛𝚊𝚌𝚝 𝚌𝚘𝚍𝚎, 𝚏𝚒𝚗𝚍𝚜 𝚎𝚛𝚛𝚘𝚛𝚜 𝚊𝚗𝚍 𝚟𝚞𝚕𝚗𝚎𝚛𝚊𝚋𝚒𝚕𝚒𝚝𝚒𝚎𝚜, 𝚊𝚗𝚍 𝚙𝚛𝚘𝚟𝚒𝚍𝚎𝚜 𝚍𝚎𝚝𝚊𝚒𝚕𝚎𝚍 𝚛𝚎𝚙𝚘𝚛𝚝𝚜 𝚏𝚘𝚛 
    𝚜𝚎𝚌𝚞𝚛𝚎 𝚊𝚗𝚍 𝚎𝚛𝚛𝚘𝚛-𝚏𝚛𝚎𝚎 𝚜𝚖𝚊𝚛𝚝 𝚌𝚘𝚗𝚝𝚛𝚊𝚌𝚝𝚜.

    Home Page

    https://nyxcipher.ai/

    Web App

    https://app.nyxcipher.ai/

    Join our Telegram!

    https://t.me/nyxcipherportal

    Twitter

    https://x.com/nyxcipherai


*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);
    function allowance(
        address _owner,
        address spender
    ) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IFactoryV2 {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address lpPair,
        uint
    );
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address lpPair);
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface Initializer {
    function setLaunch(
        address _initialLpPair,
        uint32 _liqAddBlock,
        uint64 _liqAddStamp,
        uint8 dec
    ) external;
    function getConfig() external returns (address, address);
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
}

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

contract NyxCipher is IERC20 {
    using SafeMath for uint256;
    mapping(address => uint256) private _tOwned;
    mapping(address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _liquidityHolders;
    mapping(address => bool) private _isExcludedFromProtection;
    mapping(address => bool) private _isExcludedFromFees;
    uint256 private constant startingSupply = 100_000_000;
    string private constant _name = "NYX CIPHER";
    string private constant _symbol = "$NXCP";
    uint8 private constant _decimals = 8;
    uint256 private constant _tTotal = startingSupply * 10 ** _decimals;

    // Add these as state variables
    uint256 public constant initialTaxRate = 2500; // 25%
    uint256 public constant finalTaxRate = 500;    // 5%
    uint256 public constant taxReductionPerMinute = 500; // 5% reduction per minute
    uint256 public constant maxReductionMinutes = 4;     // Tax reduces for 4 minutes (25% -> 5%)


    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 marketing;
        uint16 development;
        uint16 buyBackBurnLP;
        uint16 totalSwap;
    }
    // Define the Lock struct to store the amount and release time of locked tokens
    struct Lock {
        uint256 totalAmount;  // Total tokens to be vested/locked
        uint256 releaseTime;  // Time when initial lock period ends
        uint256 vestingStart; // When vesting starts (after lock period)
        uint256 vestingDuration;  // Total duration for linear vesting
        uint256 claimed;  // Tokens that have been claimed already
    }
    // Set the vesting parameters
    uint256 public constant TEAM_LOCK_PERIOD = 90 days;  // 3 months lock period
    uint256 public constant TEAM_VESTING_DURATION = 720 days;  // 24 months for vesting


    Fees public _taxRates = Fees({buyFee: 500, sellFee: 500, transferFee: 0});

    Ratios public _ratios =
        Ratios({
            marketing: 2,
            development: 2,
            buyBackBurnLP: 1,
            totalSwap: 5
        });

    uint256 public constant maxBuyTaxes = 1000;
    uint256 public constant maxSellTaxes = 1000;
    uint256 public constant maxTransferTaxes = 1000;
    uint256 constant masterTaxDivisor = 10000;
    // Mapping to keep track of locked tokens and their release times for each address
    mapping(address => Lock) public lockedTokens;

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable development;
        address payable buyBackBurnLP;
    }

    TaxWallets public _taxWallets =
        TaxWallets({
            marketing: payable(0x0000000000000000000000000000000000000000),
            development: payable(0x0000000000000000000000000000000000000000),
            buyBackBurnLP: payable(0x0000000000000000000000000000000000000000)
        });

    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold = _tTotal / 10000;
    uint256 public swapAmount =  _tTotal / 10000;
    bool public piContractSwapsEnabled = false;
    uint256 public piSwapPercent = 10;
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Initializer initializer;
    uint256 public launchStamp;

    uint256 public maxTransferAmount; // Maximum transfer amount (1% of total supply)
    uint256 public maxWalletAmount;   // Maximum wallet amount (1% of total supply)


    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor(
        address payable marketingWallet,
        address payable developmentWallet,
        address payable buyBackBurnLPWallet,
        address payable teamFoundationWallet
    ) payable {
        // Set the owner.
        _owner = msg.sender;

        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        // Exclude certain addresses from fees
        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;

        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock
        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)

        // Set the tax wallets
        _taxWallets = TaxWallets({
            marketing: marketingWallet,
            development: developmentWallet,
            buyBackBurnLP: buyBackBurnLPWallet
        });

        // Distribute initial supply to designated wallets
        uint256 marketingTokens = (_tTotal * 10) / 100;
        uint256 developmentTokens = (_tTotal * 5) / 100;
        uint256 teamFoundationTokens = (_tTotal * 15) / 100;

        _tOwned[marketingWallet] = marketingTokens;
        _tOwned[developmentWallet] = developmentTokens;
        _tOwned[teamFoundationWallet] = teamFoundationTokens;

        // Set up the teamFoundationWallet's lock and vesting
        lockedTokens[teamFoundationWallet] = Lock({
            totalAmount: (_tTotal * 15) / 100,  // 15% of total supply
            releaseTime: block.timestamp + TEAM_LOCK_PERIOD,  // Lock for 3 months
            vestingStart: block.timestamp + TEAM_LOCK_PERIOD,  // Vesting starts after 3 months
            vestingDuration: TEAM_VESTING_DURATION,  // Linear vesting over 24 months
            claimed: 0  // No tokens claimed initially
        });
        
        // Initialize max transfer and holding limits as 1% of total supply
        maxTransferAmount = _tTotal / 100; // 1% of total supply
        maxWalletAmount = _tTotal / 100;   // 1% of total supply

        // Adjust owner's balance
        _tOwned[_owner] = _tTotal - (marketingTokens + developmentTokens + teamFoundationTokens);
        emit Transfer(_owner, marketingWallet, marketingTokens);
        emit Transfer(_owner, developmentWallet, developmentTokens);
        emit Transfer(_owner, teamFoundationWallet, teamFoundationTokens);
    }
    //===============================================================================================================
    //===============================================================================================================
    //===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.

    address private _owner;

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    function transferOwner(address newOwner) external onlyOwner {
        require(
            newOwner != address(0),
            "Call renounceOwnership to transfer owner to the zero address."
        );
        require(
            newOwner != DEAD,
            "Call renounceOwnership to transfer owner to the zero address."
        );
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);

        if (balanceOf(_owner) > 0) {
            finalizeTransfer(
                _owner,
                newOwner,
                balanceOf(_owner),
                false,
                false,
                true
            );
        }

        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function renounceOwnership() external onlyOwner {
        require(
            tradingEnabled,
            "Cannot renounce until trading has been enabled."
        );
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

    //===============================================================================================================
    //===============================================================================================================
    //===============================================================================================================

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

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

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

    function _approve(
        address sender,
        address spender,
        uint256 amount
    ) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }


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

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(
            address(this),
            _newRouter.WETH()
        );
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(
                address(this),
                _newRouter.WETH()
            );
        } else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            lpPairs[pair] = false;
            initializer.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(
                    block.timestamp - timeSinceLastPair > 3 days,
                    "3 Day cooldown."
                );
            }
            require(!lpPairs[pair], "Pair already added to list.");
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            initializer.setLpPair(pair, true);
        }
    }

    function setInitializer(address init) public onlyOwner {
        require(!tradingEnabled);
        require(init != address(this), "Can't be self.");
        initializer = Initializer(init);
        try initializer.getConfig() returns (
            address router,
            address constructorLP
        ) {
            dexRouter = IRouter02(router);
            lpPair = constructorLP;
            lpPairs[lpPair] = true;
            _approve(_owner, address(dexRouter), type(uint256).max);
            _approve(address(this), address(dexRouter), type(uint256).max);
        } catch {
            revert();
        }
    }

    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(
        address account,
        bool enabled
    ) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function isExcludedFromProtection(
        address account
    ) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

    function setExcludedFromProtection(
        address account,
        bool enabled
    ) external onlyOwner {
        _isExcludedFromProtection[account] = enabled;
    }

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

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(
        uint16 buyFee,
        uint16 sellFee,
        uint16 transferFee
    ) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(
            buyFee <= maxBuyTaxes &&
                sellFee <= maxSellTaxes &&
                transferFee <= maxTransferTaxes,
            "Cannot exceed maximums."
        );
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(
        uint16 marketing,
        uint16 development,
        uint16 buyBackBurnLP
    ) external onlyOwner {
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.buyBackBurnLP = buyBackBurnLP;
        _ratios.totalSwap = marketing + development + buyBackBurnLP;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(
            _ratios.totalSwap <= total,
            "Cannot exceed sum of buy and sell fees."
        );
    }

    function setWallets(
        address payable marketing,
        address payable development,
        address payable buyBackBurnLP
    ) external onlyOwner {
        require(
            marketing != address(0) &&
                development != address(0) &&
                buyBackBurnLP != address(0),
            "Cannot be zero address."
        );
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
        _taxWallets.buyBackBurnLP = payable(buyBackBurnLP);
    }

    function getTokenAmountAtPriceImpact(
        uint256 priceImpactInHundreds
    ) external view returns (uint256) {
        return ((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(
        uint256 thresholdPercent,
        uint256 thresholdDivisor,
        uint256 amountPercent,
        uint256 amountDivisor
    ) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(
            swapThreshold <= swapAmount,
            "Threshold cannot be above amount."
        );
        require(
            swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor,
            "Cannot be above 1.5% of current PI."
        );
        require(
            swapAmount >= _tTotal / 1_000_000,
            "Cannot be lower than 0.00001% of total supply."
        );
        require(
            swapThreshold >= _tTotal / 1_000_000,
            "Cannot be lower than 0.00001% of total supply."
        );
    }

    function setPriceImpactSwapAmount(
        uint256 priceImpactSwapPercent
    ) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(
        bool swapEnabled,
        bool priceImpactSwapEnabled
    ) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return
            from != _owner &&
            to != _owner &&
            tx.origin != _owner &&
            !_liquidityHolders[to] &&
            !_liquidityHolders[from] &&
            to != DEAD &&
            to != address(0) &&
            from != address(this) &&
            from != address(initializer) &&
            to != address(initializer);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        // Check if the wallet is excluded from max transfer and max wallet restrictions
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            // Enforce the maximum transfer amount (only if not excluded)
            require(amount <= maxTransferAmount, "Transfer amount exceeds the 1% limit");

            // Check if the recipient's balance would exceed the max wallet limit (only if not excluded)
            uint256 recipientBalanceAfterTransfer = _tOwned[to] + amount;
            require(recipientBalanceAfterTransfer <= maxWalletAmount, "Recipient exceeds maximum wallet balance limit");
        }
        
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }

        // Restrict the buyBackBurnLP wallet transfers to only the DEX pair and DEAD addresses
        if (from == _taxWallets.buyBackBurnLP) {
            require(to == lpPair || to == DEAD, "buyBackBurnLP can only send to DEX pair or burn address");
        }
        
        if (_hasLimits(from, to)) {
            if (!tradingEnabled) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (
                    !_isExcludedFromProtection[from] &&
                    !_isExcludedFromProtection[to]
                ) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) {
                            swapAmt =
                                (balanceOf(lpPair) * piSwapPercent) /
                                masterTaxDivisor;
                        }
                        if (contractTokenBalance >= swapAmt) {
                            contractTokenBalance = swapAmt;
                        }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if (
            _allowances[address(this)][address(dexRouter)] != type(uint256).max
        ) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try
            dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                contractTokenBalance,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {
            return;
        }

        uint256 amtBalance = address(this).balance;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) /
            ratios.totalSwap;
        uint256 externalBuybackBalance = (amtBalance * ratios.buyBackBurnLP) /
            ratios.totalSwap;
        uint256 marketingBalance = amtBalance -
            (developmentBalance + externalBuybackBalance);
        if (ratios.marketing > 0) {
            (success, ) = _taxWallets.marketing.call{
                value: marketingBalance,
                gas: 55000
            }("");
        }
        if (ratios.development > 0) {
            (success, ) = _taxWallets.development.call{
                value: developmentBalance,
                gas: 55000
            }("");
        }
        if (ratios.buyBackBurnLP > 0) {
            (success, ) = _taxWallets.buyBackBurnLP.call{
                value: externalBuybackBalance,
                gas: 55000
            }("");
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
            if (address(initializer) == address(0)) {
                initializer = Initializer(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(initializer) == address(0)) {
            initializer = Initializer(address(this));
        }
        try
            initializer.setLaunch(
                lpPair,
                uint32(block.number),
                uint64(block.timestamp),
                _decimals
            )
        {} catch {}
        try initializer.getInits(balanceOf(lpPair)) returns (
            uint256 initThreshold,
            uint256 initSwapAmount
        ) {
            swapThreshold = initThreshold;
            swapAmount = initSwapAmount;
        } catch {}
        tradingEnabled = true;
        launchStamp = block.timestamp;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function sweepExternalTokens(address token) external onlyOwner {
        if (_hasLiqBeenAdded) {
            require(token != address(this), "Cannot sweep native tokens.");
        }
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(
        address[] memory accounts,
        uint256[] memory amounts
    ) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(
                balanceOf(msg.sender) >= amounts[i] * 10 ** _decimals,
                "Not enough tokens."
            );
            finalizeTransfer(
                msg.sender,
                accounts[i],
                amounts[i] * 10 ** _decimals,
                false,
                false,
                true
            );
        }
    }

    // Calculate the vested amount that can be claimed
    function vestedAndClaimable(address account) public view returns (uint256) {
        Lock memory lock = lockedTokens[account];
        
        if (block.timestamp < lock.releaseTime) {
            return 0;  // Still in lock period
        }
        
        uint256 elapsedTime = block.timestamp - lock.vestingStart;
        
        if (elapsedTime >= lock.vestingDuration) {
            // All tokens are fully vested after the vesting duration
            return lock.totalAmount - lock.claimed;
        }
        
        // Calculate linear vesting amount
        uint256 vested = (lock.totalAmount * elapsedTime) / lock.vestingDuration;
        
        // Return the claimable amount (vested minus already claimed)
        return vested - lock.claimed;
    }

    function finalizeTransfer(
        address from,
        address to,
        uint256 amount,
        bool buy,
        bool sell,
        bool other
    ) internal returns (bool) {

        uint256 availableBalance = _tOwned[from];
        // If the sender has locked tokens, calculate the vested amount
        if (lockedTokens[from].totalAmount > 0) {
            uint256 claimable = vestedAndClaimable(from);
            availableBalance = availableBalance.sub(lockedTokens[from].totalAmount - claimable);
            
            require(amount <= availableBalance, "Amount exceeds unlocked tokens");
            
            // Update the claimed amount in the lock
            lockedTokens[from].claimed = lockedTokens[from].claimed.add(amount);
        }

        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee)
            ? takeTaxes(from, amount, buy, sell)
            : amount;
        
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);

        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (
                !_hasLiqBeenAdded &&
                _hasLimits(from, to) &&
                !_isExcludedFromProtection[from] &&
                !_isExcludedFromProtection[to] &&
                !other
            ) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(
        address from,
        uint256 amount,
        bool buy,
        bool sell
    ) internal returns (uint256) {
        uint256 currentFee = getDynamicTaxRate(buy, sell);

        if (currentFee == 0) {
            return amount;
        }

        uint256 feeAmount = (amount * currentFee) / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }

    function getDynamicTaxRate(bool buy, bool sell) public view returns (uint256) {
        uint256 baseRate;

        if (buy) {
            baseRate = _taxRates.buyFee;
        } else if (sell) {
            baseRate = _taxRates.sellFee;
        } else {
            baseRate = _taxRates.transferFee;
        }

        if (block.timestamp >= launchStamp) {
            uint256 minutesSinceLaunch = (block.timestamp - launchStamp) / 60;
            
            if (minutesSinceLaunch >= maxReductionMinutes) {
                // After 4 minutes, tax is reduced to the final rate of 5%
                return finalTaxRate;  // 5%
            } else {
                // Each minute, reduce tax by 5% starting from 25%
                uint256 reducedRate = initialTaxRate - (minutesSinceLaunch * taxReductionPerMinute); 
                return reducedRate;  // Return the dynamic rate
            }
        }

        return baseRate; // Return the base rate before the launch
    }

    function setMaxTransferAmount(uint256 _maxTransferAmount) external onlyOwner {
        require(_maxTransferAmount > 0, "Max transfer amount must be greater than zero");
        maxTransferAmount = _maxTransferAmount;
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(_maxWalletAmount > 0, "Max wallet amount must be greater than zero");
        maxWalletAmount = _maxWalletAmount;
    }


}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"developmentWallet","type":"address"},{"internalType":"address payable","name":"buyBackBurnLPWallet","type":"address"},{"internalType":"address payable","name":"teamFoundationWallet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","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":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_LOCK_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_VESTING_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"buyBackBurnLP","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"buyBackBurnLP","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"approveContractContingency","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":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"bool","name":"sell","type":"bool"}],"name":"getDynamicTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lockedTokens","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"vestingStart","type":"uint256"},{"internalType":"uint256","name":"vestingDuration","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxReductionMinutes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"init","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransferAmount","type":"uint256"}],"name":"setMaxTransferAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"buyBackBurnLP","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"buyBackBurnLP","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxReductionPerMinute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"vestedAndClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060028181556101f4608081905260a05260c08290526007805465ffffffffffff19166301f401f417905560e0819052610100526001610120526005610140526008805466050001000200026001600160401b03199091161781556101c06040526101608290526101808290526101a091909152600c80546001600160a01b0319908116909155600d805482169055600e80549091169055600f805461ff001916905561271090620000b490600a62000755565b620000c4906305f5e1006200076d565b620000d0919062000787565b601055612710620000e46008600a62000755565b620000f4906305f5e1006200076d565b62000100919062000787565b6011556012805460ff19169055600a6013556014805461ffff19169055604051620048ac388190039081908339810160408190526200013f91620007c7565b601880546001600160a01b031916331790556200015f6008600a62000755565b6200016f906305f5e1006200076d565b601880546001600160a01b03908116600090815260208190526040812093909355905416906000805160206200488c833981519152620001b26008600a62000755565b620001c2906305f5e1006200076d565b60405190815260200160405180910390a3601880546001600160a01b0390811660009081526006602081815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790559654861685526004835281852080548816821790559282527f9f0450866e340883c5637ebf25d629ea9e0ea06bf9caa3748b581238b1bc2bb980548716841790557f9b00c99845a242ceea732a2478bee8e7b057d22892cafbdc32d0e607c88ddea0805487168417905573dba68f07d1b7ca219f78ae8582c213d975c25caf84527fab9d0a02af394b8961be3a9588d91fbbf70984385fd8d3031385f593b62a4bf9805490961690921790945580516060810182528884168082528885169582018690529387169101819052600c80546001600160a01b03199081169094179055600d80548416909417909355600e805490921690921790556064620003426008600a62000755565b62000352906305f5e1006200076d565b6200035f90600a6200076d565b6200036b919062000787565b9050600060646200037f6008600a62000755565b6200038f906305f5e1006200076d565b6200039c9060056200076d565b620003a8919062000787565b905060006064620003bc6008600a62000755565b620003cc906305f5e1006200076d565b620003d990600f6200076d565b620003e5919062000787565b6001600160a01b0380891660009081526020819052604080822087905589831682528082208690559187168152819020829055805160a08101909152909150806064620004356008600a62000755565b62000445906305f5e1006200076d565b6200045290600f6200076d565b6200045e919062000787565b8152602001620004726276a7004262000824565b8152602001620004866276a7004262000824565b81526303b53800602080830191909152600060409283018190526001600160a01b03881681526009825282902083518155908301516001820155908201516002820155606082015160038201556080909101516004909101556064620004ef6008600a62000755565b620004ff906305f5e1006200076d565b6200050b919062000787565b60165560646200051e6008600a62000755565b6200052e906305f5e1006200076d565b6200053a919062000787565b601755806200054a838562000824565b62000556919062000824565b620005646008600a62000755565b62000574906305f5e1006200076d565b6200058091906200083a565b601880546001600160a01b039081166000908152602081815260409182902094909455915491518681528a82169392909116916000805160206200488c833981519152910160405180910390a36018546040518381526001600160a01b038881169216906000805160206200488c8339815191529060200160405180910390a36018546040518281526001600160a01b038681169216906000805160206200488c8339815191529060200160405180910390a35050505050505062000850565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006975781600019048211156200067b576200067b62000640565b808516156200068957918102915b93841c93908002906200065b565b509250929050565b600082620006b0575060016200074f565b81620006bf575060006200074f565b8160018114620006d85760028114620006e35762000703565b60019150506200074f565b60ff841115620006f757620006f762000640565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562000728575081810a6200074f565b62000734838362000656565b80600019048211156200074b576200074b62000640565b0290505b92915050565b60006200076660ff8416836200069f565b9392505050565b80820281158282048414176200074f576200074f62000640565b600082620007a557634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b0381168114620007c257600080fd5b919050565b60008060008060808587031215620007de57600080fd5b620007e985620007aa565b9350620007f960208601620007aa565b92506200080960408601620007aa565b91506200081960608601620007aa565b905092959194509250565b808201808211156200074f576200074f62000640565b818103818111156200074f576200074f62000640565b61402c80620008606000396000f3fe6080604052600436106103c75760003560e01c806370a08231116101f2578063ab558e4d1161010d578063de7c2ed2116100a0578063fb78680d1161006f578063fb78680d14610bf8578063fdb78c0e14610c18578063fe48d6f914610af8578063feadde9c14610c3757600080fd5b8063de7c2ed214610b54578063eafb5a3c14610b6c578063ee5d9c2d14610b8c578063f94aa1b414610ba157600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a70578063cf84770614610a90578063d5299ff314610af8578063dd62ed3e14610b0e57600080fd5b8063ab558e4d14610a36578063b1b08f7114610606578063b3d514fb14610606578063b7df8b3614610a5657600080fd5b80638b13678411610185578063a9059cbb11610154578063a9059cbb146109ca578063a9e75723146109ea578063aa22b17214610a00578063aa4bde2814610a2057600080fd5b80638b136784146109465780638bf554091461095c57806395d89b411461097c5780639febf582146109aa57600080fd5b806380c581d1116101c157806380c581d1146108de578063893d20e8146108fe5780638a63bd9b1461091c5780638a8c523c1461093157600080fd5b806370a0823114610874578063715018a61461089457806375cb1bd1146108a957806378648edf146108c957600080fd5b8063313ce567116102e25780634fb2e45d116102755780635a6f0918116102445780635a6f0918146107ac5780635c24b074146107c25780635eb7413a146107e2578063606b89b71461085457600080fd5b80634fb2e45d146107145780634fbee1931461073457806350a8e0161461076d578063590ffdce1461078c57600080fd5b8063452ed4f1116102b1578063452ed4f11461069a5780634ada218b146106ba5780634bbb93eb146106d45780634e718e48146106f457600080fd5b8063313ce5671461063257806332cde6641461064e578063359289981461066e578063394188be1461068557600080fd5b806318160ddd1161035a578063285777511161032957806328577751146105db5780632b112e49146105f15780632b28fc7a146106065780632e8fa8211461061c57600080fd5b806318160ddd1461056457806323b872dd146105795780632610eaca1461059957806327a14fc2146105bb57600080fd5b80630758d924116103965780630758d924146104bc57806307dd79e0146104e1578063095ea7b31461050b5780630dcbcf1c1461052b57600080fd5b806303fd2a45146103d35780630445b66714610406578063069d955f1461042a57806306fdde031461048057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c60105481565b6040519081526020016103fd565b34801561043657600080fd5b5060075461045b9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b34801561048c57600080fd5b5060408051808201909152600a815269272cac1021a4a82422a960b11b60208201525b6040516103fd9190613839565b3480156104c857600080fd5b50600a546103e99061010090046001600160a01b031681565b3480156104ed57600080fd5b50600a546104fb9060ff1681565b60405190151581526020016103fd565b34801561051757600080fd5b506104fb61052636600461389d565b610c57565b34801561053757600080fd5b506104fb6105463660046138c9565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057057600080fd5b5061041c610c6e565b34801561058557600080fd5b506104fb6105943660046138e6565b610c8f565b3480156105a557600080fd5b506105b96105b4366004613a01565b610d35565b005b3480156105c757600080fd5b506105b96105d6366004613ac3565b610ebb565b3480156105e757600080fd5b5061041c60135481565b3480156105fd57600080fd5b5061041c610f4e565b34801561061257600080fd5b5061041c6103e881565b34801561062857600080fd5b5061041c60115481565b34801561063e57600080fd5b50604051600881526020016103fd565b34801561065a57600080fd5b506105b9610669366004613af3565b610f93565b34801561067a57600080fd5b5061041c6276a70081565b34801561069157600080fd5b5061041c600481565b3480156106a657600080fd5b50600b546103e9906001600160a01b031681565b3480156106c657600080fd5b506014546104fb9060ff1681565b3480156106e057600080fd5b5061041c6106ef366004613ac3565b6110bd565b34801561070057600080fd5b506105b961070f366004613ac3565b6110ef565b34801561072057600080fd5b506105b961072f3660046138c9565b611168565b34801561074057600080fd5b506104fb61074f3660046138c9565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077957600080fd5b506014546104fb90610100900460ff1681565b34801561079857600080fd5b506105b96107a7366004613b44565b611291565b3480156107b857600080fd5b5061041c60155481565b3480156107ce57600080fd5b506105b96107dd3660046138c9565b6112e6565b3480156107ee57600080fd5b5061082c6107fd3660046138c9565b600960205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103fd565b34801561086057600080fd5b5061041c61086f366004613b7d565b61148a565b34801561088057600080fd5b5061041c61088f3660046138c9565b611531565b3480156108a057600080fd5b506105b961154c565b3480156108b557600080fd5b506105b96108c4366004613b9b565b611645565b3480156108d557600080fd5b506105b961172e565b3480156108ea57600080fd5b506105b96108f9366004613b44565b611767565b34801561090a57600080fd5b506018546001600160a01b03166103e9565b34801561092857600080fd5b506104fb611946565b34801561093d57600080fd5b506105b9611998565b34801561095257600080fd5b5061041c6109c481565b34801561096857600080fd5b506105b9610977366004613ac3565b611bc2565b34801561098857600080fd5b506040805180820190915260058152640244e5843560dc1b60208201526104af565b3480156109b657600080fd5b5061041c6109c53660046138c9565b611c57565b3480156109d657600080fd5b506104fb6109e536600461389d565b611d25565b3480156109f657600080fd5b5061041c60165481565b348015610a0c57600080fd5b506105b9610a1b366004613af3565b611d3c565b348015610a2c57600080fd5b5061041c60175481565b348015610a4257600080fd5b506105b9610a513660046138c9565b611e63565b348015610a6257600080fd5b506012546104fb9060ff1681565b348015610a7c57600080fd5b506105b9610a8b366004613b7d565b611fdf565b348015610a9c57600080fd5b50600854610aca9061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b348015610b0457600080fd5b5061041c6101f481565b348015610b1a57600080fd5b5061041c610b29366004613be6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b6057600080fd5b5061041c6303b5380081565b348015610b7857600080fd5b506105b9610b873660046138c9565b612068565b348015610b9857600080fd5b506105b961243e565b348015610bad57600080fd5b50600c54600d54600e54610bce926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103fd565b348015610c0457600080fd5b506105b9610c13366004613c14565b6124f9565b348015610c2457600080fd5b50600f546104fb90610100900460ff1681565b348015610c4357600080fd5b506105b9610c52366004613b44565b612703565b6000610c64338484612758565b5060015b92915050565b6000610c7c6008600a613d40565b610c8a906305f5e100613d4f565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610d22576001600160a01b0384166000908152600360209081526040808320338452909152902054610ce99083612851565b6001600160a01b038516600090815260036020908152604080832033845290915281208054909190610d1c908490613d66565b90915550505b610d2d848484612893565b949350505050565b6018546001600160a01b03163314610d685760405162461bcd60e51b8152600401610d5f90613d79565b60405180910390fd5b8051825114610db15760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610d5f565b60005b82518161ffff161015610eb657610dcd6008600a613d40565b828261ffff1681518110610de357610de3613da4565b6020026020010151610df59190613d4f565b610dfe33611531565b1015610e415760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610d5f565b610ea333848361ffff1681518110610e5b57610e5b613da4565b60200260200101516008600a610e719190613d40565b858561ffff1681518110610e8757610e87613da4565b6020026020010151610e999190613d4f565b6000806001612db1565b5080610eae81613dba565b915050610db4565b505050565b6018546001600160a01b03163314610ee55760405162461bcd60e51b8152600401610d5f90613d79565b60008111610f495760405162461bcd60e51b815260206004820152602b60248201527f4d61782077616c6c657420616d6f756e74206d7573742062652067726561746560448201526a72207468616e207a65726f60a81b6064820152608401610d5f565b601755565b6000610f5a6000611531565b610f6561dead611531565b610f6f9190613ddb565b610f7b6008600a613d40565b610f89906305f5e100613d4f565b610c8a9190613d66565b6018546001600160a01b03163314610fbd5760405162461bcd60e51b8152600401610d5f90613d79565b600a5460ff16156110045760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610d5f565b6103e88361ffff161115801561102057506103e88261ffff1611155b801561103257506103e88161ffff1611155b61107e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610d5f565b6007805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b600b546000906127109083906110db906001600160a01b0316611531565b6110e59190613d4f565b610c689190613dee565b6018546001600160a01b031633146111195760405162461bcd60e51b8152600401610d5f90613d79565b60968111156111635760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610d5f565b601355565b6018546001600160a01b031633146111925760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b0381166111b85760405162461bcd60e51b8152600401610d5f90613e10565b61deac196001600160a01b038216016111e35760405162461bcd60e51b8152600401610d5f90613e10565b6018546111fa906001600160a01b03166000611291565b611205816001611291565b60185460009061121d906001600160a01b0316611531565b111561123f5760185461123d906001600160a01b031682610e9982611531565b505b601880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6018546001600160a01b031633146112bb5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6018546001600160a01b031633146113105760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff161561132057600080fd5b306001600160a01b038216036113695760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610d5f565b6014805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af19250505080156113ef575060408051601f3d908101601f191682019092526113ec91810190613e6d565b60015b6113f857600080fd5b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff1916909117905560185492546114689383169291900416600019612758565b600a54610eb690309061010090046001600160a01b0316600019612758565b50565b60008083156114a0575060075461ffff166114ca565b82156114b9575060075462010000900461ffff166114ca565b50600754640100000000900461ffff165b601554421061152a576000603c601554426114e59190613d66565b6114ef9190613dee565b905060048110611505576101f492505050610c68565b60006115136101f483613d4f565b61151f906109c4613d66565b9350610c6892505050565b9392505050565b6001600160a01b031660009081526020819052604090205490565b6018546001600160a01b031633146115765760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff166115e05760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201526e39903132b2b71032b730b13632b21760891b6064820152608401610d5f565b6018546115f7906001600160a01b03166000611291565b601880546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6018546001600160a01b0316331461166f5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b0383161580159061168f57506001600160a01b03821615155b80156116a357506001600160a01b03811615155b6116ef5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610d5f565b600c80546001600160a01b039485166001600160a01b031991821617909155600d805493851693821693909317909255600e8054919093169116179055565b6018546001600160a01b031633146117585760405162461bcd60e51b8152600401610d5f90613d79565b600a805460ff19166001179055565b6018546001600160a01b031633146117915760405162461bcd60e51b8152600401610d5f90613d79565b80611821576001600160a01b03828116600081815260016020526040808220805460ff1916905560145490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b505050505050565b6002541561187a576203f4806002544261183b9190613d66565b1161187a5760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610d5f565b6001600160a01b03821660009081526001602052604090205460ff16156118e35760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610d5f565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560145491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d1906044016117eb565b5050565b6018546000906001600160a01b031633146119735760405162461bcd60e51b8152600401610d5f90613d79565b600a5461199290309061010090046001600160a01b0316600019612758565b50600190565b6018546001600160a01b031633146119c25760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff1615611a155760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d5f565b601454610100900460ff16611a6c5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d5f565b6014546201000090046001600160a01b0316611a9c576014805462010000600160b01b0319163062010000021790555b601454600b54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260086064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611b0e57600080fd5b505af1925050508015611b1f575060015b50601454600b546001600160a01b03620100009092048216916325a71cae91611b489116611531565b6040518263ffffffff1660e01b8152600401611b6691815260200190565b60408051808303816000875af1925050508015611ba0575060408051601f3d908101601f19168201909252611b9d91810190613e9c565b60015b15611baf576010919091556011555b6014805460ff1916600117905542601555565b6018546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610d5f90613d79565b60008111611c525760405162461bcd60e51b815260206004820152602d60248201527f4d6178207472616e7366657220616d6f756e74206d757374206265206772656160448201526c746572207468616e207a65726f60981b6064820152608401610d5f565b601655565b6001600160a01b0381166000908152600960209081526040808320815160a0810183528154815260018201549381018490526002820154928101929092526003810154606083015260040154608082015290421015611cb95750600092915050565b6000816040015142611ccb9190613d66565b905081606001518110611ce95760808201518251610d2d9190613d66565b60008260600151828460000151611d009190613d4f565b611d0a9190613dee565b9050826080015181611d1c9190613d66565b95945050505050565b6000611d32338484612893565b5060019392505050565b6018546001600160a01b03163314611d665760405162461bcd60e51b8152600401610d5f90613d79565b6008805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff1990941692881692909217929092171617905580611daa8385613ec0565b611db49190613ec0565b6008805467ffff0000000000001916600160301b61ffff93841602179055600754600091611deb9162010000810482169116613ec0565b60085461ffff9182169250600160301b900416811015611e5d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d5f565b50505050565b6018546001600160a01b03163314611e8d5760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff1615611ef557306001600160a01b03821603611ef55760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610d5f565b6018546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f709190613ee2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb69190613efb565b6018546001600160a01b031633146120095760405162461bcd60e51b8152600401610d5f90613d79565b600f805461ff001916610100841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6018546001600160a01b031633146120925760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff16156120ea5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d5f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121539190613f18565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190613f18565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561220f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122339190613f18565b600b546001600160a01b039081166000908152600160205260409020805460ff1916905590915081166123c957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561229e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c29190613f18565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190613f18565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a49190613f18565b600b80546001600160a01b0319166001600160a01b03929092169190911790556123e5565b600b80546001600160a01b0319166001600160a01b0383161790555b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b5482166000908152600160208190526040909120805460ff191690911790559154610eb6923092910416600019612758565b6018546001600160a01b031633146124685760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff16156124c05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d5f565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611487573d6000803e3d6000fd5b6018546001600160a01b031633146125235760405162461bcd60e51b8152600401610d5f90613d79565b82846125316008600a613d40565b61253f906305f5e100613d4f565b6125499190613d4f565b6125539190613dee565b60105580826125646008600a613d40565b612572906305f5e100613d4f565b61257c9190613d4f565b6125869190613dee565b601181905560105411156125e65760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d5f565b600b54612710906125ff906001600160a01b0316611531565b61260a906096613d4f565b6126149190613dee565b60115411156126715760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d5f565b620f42406126816008600a613d40565b61268f906305f5e100613d4f565b6126999190613dee565b60115410156126ba5760405162461bcd60e51b8152600401610d5f90613f35565b620f42406126ca6008600a613d40565b6126d8906305f5e100613d4f565b6126e29190613dee565b6010541015611e5d5760405162461bcd60e51b8152600401610d5f90613f35565b6018546001600160a01b0316331461272d5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166127a45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d5f565b6001600160a01b0382166127f05760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d5f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061152a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130b9565b60006001600160a01b0384166128f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d5f565b6001600160a01b03831661295b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d5f565b600082116129bd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d5f565b6001600160a01b03841660009081526006602052604090205460ff161580156129ff57506001600160a01b03831660009081526006602052604090205460ff16155b15612af357601654821115612a625760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220616d6f756e74206578636565647320746865203125206c6044820152631a5b5a5d60e21b6064820152608401610d5f565b6001600160a01b038316600090815260208190526040812054612a86908490613ddb565b9050601754811115612af15760405162461bcd60e51b815260206004820152602e60248201527f526563697069656e742065786365656473206d6178696d756d2077616c6c657460448201526d0818985b185b98d9481b1a5b5a5d60921b6064820152608401610d5f565b505b6001600160a01b0384166000908152600160205260408120548190819060ff1615612b215760019250612b4f565b6001600160a01b03861660009081526001602052604090205460ff1615612b4b5760019150612b4f565b5060015b600e546001600160a01b0390811690881603612bfd57600b546001600160a01b0387811691161480612b8b57506001600160a01b03861661dead145b612bfd5760405162461bcd60e51b815260206004820152603760248201527f6275794261636b4275726e4c502063616e206f6e6c792073656e6420746f204460448201527f45582070616972206f72206275726e20616464726573730000000000000000006064820152608401610d5f565b612c0787876130ea565b15612d085760145460ff16612d085780612c635760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d5f565b6001600160a01b03871660009081526005602052604090205460ff16158015612ca557506001600160a01b03861660009081526005602052604090205460ff16155b15612d085760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d5f565b8115612d9857600f5460ff16612d9857600f54610100900460ff1615612d98576000612d3330611531565b90506010548110612d965760115460125460ff1615612d8057601354600b546127109190612d69906001600160a01b0316611531565b612d739190613d4f565b612d7d9190613dee565b90505b808210612d8b578091505b612d94826131ff565b505b505b612da6878787868686612db1565b979650505050505050565b6001600160a01b03861660009081526020818152604080832054600990925282205415612eab576000612de389611c57565b6001600160a01b038a16600090815260096020526040902054909150612e1590612e0e908390613d66565b8390612851565b915081871115612e675760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206578636565647320756e6c6f636b656420746f6b656e7300006044820152606401610d5f565b6001600160a01b038916600090815260096020526040902060040154612e8d90886135ea565b6001600160a01b038a16600090815260096020526040902060040155505b6001600160a01b03881660009081526006602052604090205460019060ff1680612eed57506001600160a01b03881660009081526006602052604090205460ff165b15612ef6575060005b6001600160a01b03891660009081526020819052604081208054899290612f1e908490613d66565b909155506000905081612f315787612f3d565b612f3d8a898989613649565b9050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f739190613ddb565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fbf91815260200190565b60405180910390a3601454610100900460ff166130a957612fe08a8a6136f9565b601454610100900460ff16158015612ffd5750612ffd8a8a6130ea565b801561302257506001600160a01b038a1660009081526005602052604090205460ff16155b801561304757506001600160a01b03891660009081526005602052604090205460ff16155b8015613051575084155b156130a95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d5f565b5060019998505050505050505050565b600081848411156130dd5760405162461bcd60e51b8152600401610d5f9190613839565b506000611d1c8486613d66565b6018546000906001600160a01b0384811691161480159061311957506018546001600160a01b03838116911614155b801561313057506018546001600160a01b03163214155b801561315557506001600160a01b03821660009081526004602052604090205460ff16155b801561317a57506001600160a01b03831660009081526004602052604090205460ff16155b801561319157506001600160a01b03821661dead14155b80156131a557506001600160a01b03821615155b80156131ba57506001600160a01b0383163014155b80156131da57506014546001600160a01b03848116620100009092041614155b801561152a5750506014546201000090046001600160a01b0390811691161415919050565b600f805460ff191660011790556040805160808101825260085461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b90049091166060820181905260000361325d57506135dd565b306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902054600019146132c057306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132f5576132f5613da4565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190613f18565b8160018151811061339f5761339f613da4565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b81526101009091049091169063791ac947906133ec908690600090869030904290600401613f83565b600060405180830381600087803b15801561340657600080fd5b505af1925050508015613417575060015b6134225750506135dd565b6000479050600080846060015161ffff16856020015161ffff16846134479190613d4f565b6134519190613dee565b90506000856060015161ffff16866040015161ffff16856134729190613d4f565b61347c9190613dee565b9050600061348a8284613ddb565b6134949086613d66565b875190915061ffff16156134ff57600c546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d80600081146134f4576040519150601f19603f3d011682016040523d82523d6000602084013e6134f9565b606091505b50909450505b602087015161ffff161561356a57600d546040516001600160a01b039091169061d6d89085906000818181858888f193505050503d806000811461355f576040519150601f19603f3d011682016040523d82523d6000602084013e613564565b606091505b50909450505b604087015161ffff16156135d557600e546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d80600081146135ca576040519150601f19603f3d011682016040523d82523d6000602084013e6135cf565b606091505b50909450505b505050505050505b50600f805460ff19169055565b6000806135f78385613ddb565b90508381101561152a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d5f565b600080613656848461148a565b9050806000036136695784915050610d2d565b60006127106136788388613d4f565b6136829190613dee565b905080156136ef5730600090815260208190526040812080548392906136a9908490613ddb565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612da68187613d66565b601454610100900460ff161561375d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d5f565b61376782826130ea565b1580156137815750600b546001600160a01b038281169116145b15611942576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556014805461ff0019166101001790819055620100009004166137f9576014805462010000600160b01b0319163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161205c565b60006020808352835180602085015260005b818110156138675785810183015185820160400152820161384b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461148757600080fd5b600080604083850312156138b057600080fd5b82356138bb81613888565b946020939093013593505050565b6000602082840312156138db57600080fd5b813561152a81613888565b6000806000606084860312156138fb57600080fd5b833561390681613888565b9250602084013561391681613888565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561396657613966613927565b604052919050565b600067ffffffffffffffff82111561398857613988613927565b5060051b60200190565b600082601f8301126139a357600080fd5b813560206139b86139b38361396e565b61393d565b8083825260208201915060208460051b8701019350868411156139da57600080fd5b602086015b848110156139f657803583529183019183016139df565b509695505050505050565b60008060408385031215613a1457600080fd5b823567ffffffffffffffff80821115613a2c57600080fd5b818501915085601f830112613a4057600080fd5b81356020613a506139b38361396e565b82815260059290921b84018101918181019089841115613a6f57600080fd5b948201945b83861015613a96578535613a8781613888565b82529482019490820190613a74565b96505086013592505080821115613aac57600080fd5b50613ab985828601613992565b9150509250929050565b600060208284031215613ad557600080fd5b5035919050565b803561ffff81168114613aee57600080fd5b919050565b600080600060608486031215613b0857600080fd5b613b1184613adc565b9250613b1f60208501613adc565b9150613b2d60408501613adc565b90509250925092565b801515811461148757600080fd5b60008060408385031215613b5757600080fd5b8235613b6281613888565b91506020830135613b7281613b36565b809150509250929050565b60008060408385031215613b9057600080fd5b8235613b6281613b36565b600080600060608486031215613bb057600080fd5b8335613bbb81613888565b92506020840135613bcb81613888565b91506040840135613bdb81613888565b809150509250925092565b60008060408385031215613bf957600080fd5b8235613c0481613888565b91506020830135613b7281613888565b60008060008060808587031215613c2a57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613c97578160001904821115613c7d57613c7d613c46565b80851615613c8a57918102915b93841c9390800290613c61565b509250929050565b600082613cae57506001610c68565b81613cbb57506000610c68565b8160018114613cd15760028114613cdb57613cf7565b6001915050610c68565b60ff841115613cec57613cec613c46565b50506001821b610c68565b5060208310610133831016604e8410600b8410161715613d1a575081810a610c68565b613d248383613c5c565b8060001904821115613d3857613d38613c46565b029392505050565b600061152a60ff841683613c9f565b8082028115828204841417610c6857610c68613c46565b81810381811115610c6857610c68613c46565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103613dd157613dd1613c46565b6001019392505050565b80820180821115610c6857610c68613c46565b600082613e0b57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60008060408385031215613e8057600080fd5b8251613e8b81613888565b6020840151909250613b7281613888565b60008060408385031215613eaf57600080fd5b505080516020909101519092909150565b61ffff818116838216019080821115613edb57613edb613c46565b5092915050565b600060208284031215613ef457600080fd5b5051919050565b600060208284031215613f0d57600080fd5b815161152a81613b36565b600060208284031215613f2a57600080fd5b815161152a81613888565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015613fd55784516001600160a01b031683529383019391830191600101613fb0565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212201b515c8275897495199493ee27bf3bb71553992de62ede03588bf5c9010dfefb64736f6c63430008180033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000003e50546092076300a8f1fdcc43d8c221a42fbf18000000000000000000000000ea4ebd03ed27a6c246749437ccf2cbef006bd1c90000000000000000000000003cdbbdf0588f60116b0a0651ed4bc6c62c7fcf40000000000000000000000000f7fb9dea516d351881c5d72f330cfc49ef52abbd

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806370a08231116101f2578063ab558e4d1161010d578063de7c2ed2116100a0578063fb78680d1161006f578063fb78680d14610bf8578063fdb78c0e14610c18578063fe48d6f914610af8578063feadde9c14610c3757600080fd5b8063de7c2ed214610b54578063eafb5a3c14610b6c578063ee5d9c2d14610b8c578063f94aa1b414610ba157600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a70578063cf84770614610a90578063d5299ff314610af8578063dd62ed3e14610b0e57600080fd5b8063ab558e4d14610a36578063b1b08f7114610606578063b3d514fb14610606578063b7df8b3614610a5657600080fd5b80638b13678411610185578063a9059cbb11610154578063a9059cbb146109ca578063a9e75723146109ea578063aa22b17214610a00578063aa4bde2814610a2057600080fd5b80638b136784146109465780638bf554091461095c57806395d89b411461097c5780639febf582146109aa57600080fd5b806380c581d1116101c157806380c581d1146108de578063893d20e8146108fe5780638a63bd9b1461091c5780638a8c523c1461093157600080fd5b806370a0823114610874578063715018a61461089457806375cb1bd1146108a957806378648edf146108c957600080fd5b8063313ce567116102e25780634fb2e45d116102755780635a6f0918116102445780635a6f0918146107ac5780635c24b074146107c25780635eb7413a146107e2578063606b89b71461085457600080fd5b80634fb2e45d146107145780634fbee1931461073457806350a8e0161461076d578063590ffdce1461078c57600080fd5b8063452ed4f1116102b1578063452ed4f11461069a5780634ada218b146106ba5780634bbb93eb146106d45780634e718e48146106f457600080fd5b8063313ce5671461063257806332cde6641461064e578063359289981461066e578063394188be1461068557600080fd5b806318160ddd1161035a578063285777511161032957806328577751146105db5780632b112e49146105f15780632b28fc7a146106065780632e8fa8211461061c57600080fd5b806318160ddd1461056457806323b872dd146105795780632610eaca1461059957806327a14fc2146105bb57600080fd5b80630758d924116103965780630758d924146104bc57806307dd79e0146104e1578063095ea7b31461050b5780630dcbcf1c1461052b57600080fd5b806303fd2a45146103d35780630445b66714610406578063069d955f1461042a57806306fdde031461048057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c60105481565b6040519081526020016103fd565b34801561043657600080fd5b5060075461045b9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b34801561048c57600080fd5b5060408051808201909152600a815269272cac1021a4a82422a960b11b60208201525b6040516103fd9190613839565b3480156104c857600080fd5b50600a546103e99061010090046001600160a01b031681565b3480156104ed57600080fd5b50600a546104fb9060ff1681565b60405190151581526020016103fd565b34801561051757600080fd5b506104fb61052636600461389d565b610c57565b34801561053757600080fd5b506104fb6105463660046138c9565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057057600080fd5b5061041c610c6e565b34801561058557600080fd5b506104fb6105943660046138e6565b610c8f565b3480156105a557600080fd5b506105b96105b4366004613a01565b610d35565b005b3480156105c757600080fd5b506105b96105d6366004613ac3565b610ebb565b3480156105e757600080fd5b5061041c60135481565b3480156105fd57600080fd5b5061041c610f4e565b34801561061257600080fd5b5061041c6103e881565b34801561062857600080fd5b5061041c60115481565b34801561063e57600080fd5b50604051600881526020016103fd565b34801561065a57600080fd5b506105b9610669366004613af3565b610f93565b34801561067a57600080fd5b5061041c6276a70081565b34801561069157600080fd5b5061041c600481565b3480156106a657600080fd5b50600b546103e9906001600160a01b031681565b3480156106c657600080fd5b506014546104fb9060ff1681565b3480156106e057600080fd5b5061041c6106ef366004613ac3565b6110bd565b34801561070057600080fd5b506105b961070f366004613ac3565b6110ef565b34801561072057600080fd5b506105b961072f3660046138c9565b611168565b34801561074057600080fd5b506104fb61074f3660046138c9565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077957600080fd5b506014546104fb90610100900460ff1681565b34801561079857600080fd5b506105b96107a7366004613b44565b611291565b3480156107b857600080fd5b5061041c60155481565b3480156107ce57600080fd5b506105b96107dd3660046138c9565b6112e6565b3480156107ee57600080fd5b5061082c6107fd3660046138c9565b600960205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103fd565b34801561086057600080fd5b5061041c61086f366004613b7d565b61148a565b34801561088057600080fd5b5061041c61088f3660046138c9565b611531565b3480156108a057600080fd5b506105b961154c565b3480156108b557600080fd5b506105b96108c4366004613b9b565b611645565b3480156108d557600080fd5b506105b961172e565b3480156108ea57600080fd5b506105b96108f9366004613b44565b611767565b34801561090a57600080fd5b506018546001600160a01b03166103e9565b34801561092857600080fd5b506104fb611946565b34801561093d57600080fd5b506105b9611998565b34801561095257600080fd5b5061041c6109c481565b34801561096857600080fd5b506105b9610977366004613ac3565b611bc2565b34801561098857600080fd5b506040805180820190915260058152640244e5843560dc1b60208201526104af565b3480156109b657600080fd5b5061041c6109c53660046138c9565b611c57565b3480156109d657600080fd5b506104fb6109e536600461389d565b611d25565b3480156109f657600080fd5b5061041c60165481565b348015610a0c57600080fd5b506105b9610a1b366004613af3565b611d3c565b348015610a2c57600080fd5b5061041c60175481565b348015610a4257600080fd5b506105b9610a513660046138c9565b611e63565b348015610a6257600080fd5b506012546104fb9060ff1681565b348015610a7c57600080fd5b506105b9610a8b366004613b7d565b611fdf565b348015610a9c57600080fd5b50600854610aca9061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b348015610b0457600080fd5b5061041c6101f481565b348015610b1a57600080fd5b5061041c610b29366004613be6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b6057600080fd5b5061041c6303b5380081565b348015610b7857600080fd5b506105b9610b873660046138c9565b612068565b348015610b9857600080fd5b506105b961243e565b348015610bad57600080fd5b50600c54600d54600e54610bce926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103fd565b348015610c0457600080fd5b506105b9610c13366004613c14565b6124f9565b348015610c2457600080fd5b50600f546104fb90610100900460ff1681565b348015610c4357600080fd5b506105b9610c52366004613b44565b612703565b6000610c64338484612758565b5060015b92915050565b6000610c7c6008600a613d40565b610c8a906305f5e100613d4f565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610d22576001600160a01b0384166000908152600360209081526040808320338452909152902054610ce99083612851565b6001600160a01b038516600090815260036020908152604080832033845290915281208054909190610d1c908490613d66565b90915550505b610d2d848484612893565b949350505050565b6018546001600160a01b03163314610d685760405162461bcd60e51b8152600401610d5f90613d79565b60405180910390fd5b8051825114610db15760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610d5f565b60005b82518161ffff161015610eb657610dcd6008600a613d40565b828261ffff1681518110610de357610de3613da4565b6020026020010151610df59190613d4f565b610dfe33611531565b1015610e415760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610d5f565b610ea333848361ffff1681518110610e5b57610e5b613da4565b60200260200101516008600a610e719190613d40565b858561ffff1681518110610e8757610e87613da4565b6020026020010151610e999190613d4f565b6000806001612db1565b5080610eae81613dba565b915050610db4565b505050565b6018546001600160a01b03163314610ee55760405162461bcd60e51b8152600401610d5f90613d79565b60008111610f495760405162461bcd60e51b815260206004820152602b60248201527f4d61782077616c6c657420616d6f756e74206d7573742062652067726561746560448201526a72207468616e207a65726f60a81b6064820152608401610d5f565b601755565b6000610f5a6000611531565b610f6561dead611531565b610f6f9190613ddb565b610f7b6008600a613d40565b610f89906305f5e100613d4f565b610c8a9190613d66565b6018546001600160a01b03163314610fbd5760405162461bcd60e51b8152600401610d5f90613d79565b600a5460ff16156110045760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610d5f565b6103e88361ffff161115801561102057506103e88261ffff1611155b801561103257506103e88161ffff1611155b61107e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610d5f565b6007805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b600b546000906127109083906110db906001600160a01b0316611531565b6110e59190613d4f565b610c689190613dee565b6018546001600160a01b031633146111195760405162461bcd60e51b8152600401610d5f90613d79565b60968111156111635760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610d5f565b601355565b6018546001600160a01b031633146111925760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b0381166111b85760405162461bcd60e51b8152600401610d5f90613e10565b61deac196001600160a01b038216016111e35760405162461bcd60e51b8152600401610d5f90613e10565b6018546111fa906001600160a01b03166000611291565b611205816001611291565b60185460009061121d906001600160a01b0316611531565b111561123f5760185461123d906001600160a01b031682610e9982611531565b505b601880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6018546001600160a01b031633146112bb5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6018546001600160a01b031633146113105760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff161561132057600080fd5b306001600160a01b038216036113695760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610d5f565b6014805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af19250505080156113ef575060408051601f3d908101601f191682019092526113ec91810190613e6d565b60015b6113f857600080fd5b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff1916909117905560185492546114689383169291900416600019612758565b600a54610eb690309061010090046001600160a01b0316600019612758565b50565b60008083156114a0575060075461ffff166114ca565b82156114b9575060075462010000900461ffff166114ca565b50600754640100000000900461ffff165b601554421061152a576000603c601554426114e59190613d66565b6114ef9190613dee565b905060048110611505576101f492505050610c68565b60006115136101f483613d4f565b61151f906109c4613d66565b9350610c6892505050565b9392505050565b6001600160a01b031660009081526020819052604090205490565b6018546001600160a01b031633146115765760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff166115e05760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201526e39903132b2b71032b730b13632b21760891b6064820152608401610d5f565b6018546115f7906001600160a01b03166000611291565b601880546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6018546001600160a01b0316331461166f5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b0383161580159061168f57506001600160a01b03821615155b80156116a357506001600160a01b03811615155b6116ef5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610d5f565b600c80546001600160a01b039485166001600160a01b031991821617909155600d805493851693821693909317909255600e8054919093169116179055565b6018546001600160a01b031633146117585760405162461bcd60e51b8152600401610d5f90613d79565b600a805460ff19166001179055565b6018546001600160a01b031633146117915760405162461bcd60e51b8152600401610d5f90613d79565b80611821576001600160a01b03828116600081815260016020526040808220805460ff1916905560145490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b505050505050565b6002541561187a576203f4806002544261183b9190613d66565b1161187a5760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610d5f565b6001600160a01b03821660009081526001602052604090205460ff16156118e35760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610d5f565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560145491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d1906044016117eb565b5050565b6018546000906001600160a01b031633146119735760405162461bcd60e51b8152600401610d5f90613d79565b600a5461199290309061010090046001600160a01b0316600019612758565b50600190565b6018546001600160a01b031633146119c25760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff1615611a155760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d5f565b601454610100900460ff16611a6c5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d5f565b6014546201000090046001600160a01b0316611a9c576014805462010000600160b01b0319163062010000021790555b601454600b54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260086064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611b0e57600080fd5b505af1925050508015611b1f575060015b50601454600b546001600160a01b03620100009092048216916325a71cae91611b489116611531565b6040518263ffffffff1660e01b8152600401611b6691815260200190565b60408051808303816000875af1925050508015611ba0575060408051601f3d908101601f19168201909252611b9d91810190613e9c565b60015b15611baf576010919091556011555b6014805460ff1916600117905542601555565b6018546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610d5f90613d79565b60008111611c525760405162461bcd60e51b815260206004820152602d60248201527f4d6178207472616e7366657220616d6f756e74206d757374206265206772656160448201526c746572207468616e207a65726f60981b6064820152608401610d5f565b601655565b6001600160a01b0381166000908152600960209081526040808320815160a0810183528154815260018201549381018490526002820154928101929092526003810154606083015260040154608082015290421015611cb95750600092915050565b6000816040015142611ccb9190613d66565b905081606001518110611ce95760808201518251610d2d9190613d66565b60008260600151828460000151611d009190613d4f565b611d0a9190613dee565b9050826080015181611d1c9190613d66565b95945050505050565b6000611d32338484612893565b5060019392505050565b6018546001600160a01b03163314611d665760405162461bcd60e51b8152600401610d5f90613d79565b6008805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff1990941692881692909217929092171617905580611daa8385613ec0565b611db49190613ec0565b6008805467ffff0000000000001916600160301b61ffff93841602179055600754600091611deb9162010000810482169116613ec0565b60085461ffff9182169250600160301b900416811015611e5d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d5f565b50505050565b6018546001600160a01b03163314611e8d5760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff1615611ef557306001600160a01b03821603611ef55760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610d5f565b6018546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f709190613ee2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb69190613efb565b6018546001600160a01b031633146120095760405162461bcd60e51b8152600401610d5f90613d79565b600f805461ff001916610100841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6018546001600160a01b031633146120925760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff16156120ea5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d5f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121539190613f18565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190613f18565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561220f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122339190613f18565b600b546001600160a01b039081166000908152600160205260409020805460ff1916905590915081166123c957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561229e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c29190613f18565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190613f18565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a49190613f18565b600b80546001600160a01b0319166001600160a01b03929092169190911790556123e5565b600b80546001600160a01b0319166001600160a01b0383161790555b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b5482166000908152600160208190526040909120805460ff191690911790559154610eb6923092910416600019612758565b6018546001600160a01b031633146124685760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff16156124c05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d5f565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611487573d6000803e3d6000fd5b6018546001600160a01b031633146125235760405162461bcd60e51b8152600401610d5f90613d79565b82846125316008600a613d40565b61253f906305f5e100613d4f565b6125499190613d4f565b6125539190613dee565b60105580826125646008600a613d40565b612572906305f5e100613d4f565b61257c9190613d4f565b6125869190613dee565b601181905560105411156125e65760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d5f565b600b54612710906125ff906001600160a01b0316611531565b61260a906096613d4f565b6126149190613dee565b60115411156126715760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d5f565b620f42406126816008600a613d40565b61268f906305f5e100613d4f565b6126999190613dee565b60115410156126ba5760405162461bcd60e51b8152600401610d5f90613f35565b620f42406126ca6008600a613d40565b6126d8906305f5e100613d4f565b6126e29190613dee565b6010541015611e5d5760405162461bcd60e51b8152600401610d5f90613f35565b6018546001600160a01b0316331461272d5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166127a45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d5f565b6001600160a01b0382166127f05760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d5f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061152a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130b9565b60006001600160a01b0384166128f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d5f565b6001600160a01b03831661295b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d5f565b600082116129bd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d5f565b6001600160a01b03841660009081526006602052604090205460ff161580156129ff57506001600160a01b03831660009081526006602052604090205460ff16155b15612af357601654821115612a625760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220616d6f756e74206578636565647320746865203125206c6044820152631a5b5a5d60e21b6064820152608401610d5f565b6001600160a01b038316600090815260208190526040812054612a86908490613ddb565b9050601754811115612af15760405162461bcd60e51b815260206004820152602e60248201527f526563697069656e742065786365656473206d6178696d756d2077616c6c657460448201526d0818985b185b98d9481b1a5b5a5d60921b6064820152608401610d5f565b505b6001600160a01b0384166000908152600160205260408120548190819060ff1615612b215760019250612b4f565b6001600160a01b03861660009081526001602052604090205460ff1615612b4b5760019150612b4f565b5060015b600e546001600160a01b0390811690881603612bfd57600b546001600160a01b0387811691161480612b8b57506001600160a01b03861661dead145b612bfd5760405162461bcd60e51b815260206004820152603760248201527f6275794261636b4275726e4c502063616e206f6e6c792073656e6420746f204460448201527f45582070616972206f72206275726e20616464726573730000000000000000006064820152608401610d5f565b612c0787876130ea565b15612d085760145460ff16612d085780612c635760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d5f565b6001600160a01b03871660009081526005602052604090205460ff16158015612ca557506001600160a01b03861660009081526005602052604090205460ff16155b15612d085760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d5f565b8115612d9857600f5460ff16612d9857600f54610100900460ff1615612d98576000612d3330611531565b90506010548110612d965760115460125460ff1615612d8057601354600b546127109190612d69906001600160a01b0316611531565b612d739190613d4f565b612d7d9190613dee565b90505b808210612d8b578091505b612d94826131ff565b505b505b612da6878787868686612db1565b979650505050505050565b6001600160a01b03861660009081526020818152604080832054600990925282205415612eab576000612de389611c57565b6001600160a01b038a16600090815260096020526040902054909150612e1590612e0e908390613d66565b8390612851565b915081871115612e675760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206578636565647320756e6c6f636b656420746f6b656e7300006044820152606401610d5f565b6001600160a01b038916600090815260096020526040902060040154612e8d90886135ea565b6001600160a01b038a16600090815260096020526040902060040155505b6001600160a01b03881660009081526006602052604090205460019060ff1680612eed57506001600160a01b03881660009081526006602052604090205460ff165b15612ef6575060005b6001600160a01b03891660009081526020819052604081208054899290612f1e908490613d66565b909155506000905081612f315787612f3d565b612f3d8a898989613649565b9050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f739190613ddb565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fbf91815260200190565b60405180910390a3601454610100900460ff166130a957612fe08a8a6136f9565b601454610100900460ff16158015612ffd5750612ffd8a8a6130ea565b801561302257506001600160a01b038a1660009081526005602052604090205460ff16155b801561304757506001600160a01b03891660009081526005602052604090205460ff16155b8015613051575084155b156130a95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d5f565b5060019998505050505050505050565b600081848411156130dd5760405162461bcd60e51b8152600401610d5f9190613839565b506000611d1c8486613d66565b6018546000906001600160a01b0384811691161480159061311957506018546001600160a01b03838116911614155b801561313057506018546001600160a01b03163214155b801561315557506001600160a01b03821660009081526004602052604090205460ff16155b801561317a57506001600160a01b03831660009081526004602052604090205460ff16155b801561319157506001600160a01b03821661dead14155b80156131a557506001600160a01b03821615155b80156131ba57506001600160a01b0383163014155b80156131da57506014546001600160a01b03848116620100009092041614155b801561152a5750506014546201000090046001600160a01b0390811691161415919050565b600f805460ff191660011790556040805160808101825260085461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b90049091166060820181905260000361325d57506135dd565b306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902054600019146132c057306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132f5576132f5613da4565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190613f18565b8160018151811061339f5761339f613da4565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b81526101009091049091169063791ac947906133ec908690600090869030904290600401613f83565b600060405180830381600087803b15801561340657600080fd5b505af1925050508015613417575060015b6134225750506135dd565b6000479050600080846060015161ffff16856020015161ffff16846134479190613d4f565b6134519190613dee565b90506000856060015161ffff16866040015161ffff16856134729190613d4f565b61347c9190613dee565b9050600061348a8284613ddb565b6134949086613d66565b875190915061ffff16156134ff57600c546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d80600081146134f4576040519150601f19603f3d011682016040523d82523d6000602084013e6134f9565b606091505b50909450505b602087015161ffff161561356a57600d546040516001600160a01b039091169061d6d89085906000818181858888f193505050503d806000811461355f576040519150601f19603f3d011682016040523d82523d6000602084013e613564565b606091505b50909450505b604087015161ffff16156135d557600e546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d80600081146135ca576040519150601f19603f3d011682016040523d82523d6000602084013e6135cf565b606091505b50909450505b505050505050505b50600f805460ff19169055565b6000806135f78385613ddb565b90508381101561152a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d5f565b600080613656848461148a565b9050806000036136695784915050610d2d565b60006127106136788388613d4f565b6136829190613dee565b905080156136ef5730600090815260208190526040812080548392906136a9908490613ddb565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612da68187613d66565b601454610100900460ff161561375d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d5f565b61376782826130ea565b1580156137815750600b546001600160a01b038281169116145b15611942576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556014805461ff0019166101001790819055620100009004166137f9576014805462010000600160b01b0319163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161205c565b60006020808352835180602085015260005b818110156138675785810183015185820160400152820161384b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461148757600080fd5b600080604083850312156138b057600080fd5b82356138bb81613888565b946020939093013593505050565b6000602082840312156138db57600080fd5b813561152a81613888565b6000806000606084860312156138fb57600080fd5b833561390681613888565b9250602084013561391681613888565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561396657613966613927565b604052919050565b600067ffffffffffffffff82111561398857613988613927565b5060051b60200190565b600082601f8301126139a357600080fd5b813560206139b86139b38361396e565b61393d565b8083825260208201915060208460051b8701019350868411156139da57600080fd5b602086015b848110156139f657803583529183019183016139df565b509695505050505050565b60008060408385031215613a1457600080fd5b823567ffffffffffffffff80821115613a2c57600080fd5b818501915085601f830112613a4057600080fd5b81356020613a506139b38361396e565b82815260059290921b84018101918181019089841115613a6f57600080fd5b948201945b83861015613a96578535613a8781613888565b82529482019490820190613a74565b96505086013592505080821115613aac57600080fd5b50613ab985828601613992565b9150509250929050565b600060208284031215613ad557600080fd5b5035919050565b803561ffff81168114613aee57600080fd5b919050565b600080600060608486031215613b0857600080fd5b613b1184613adc565b9250613b1f60208501613adc565b9150613b2d60408501613adc565b90509250925092565b801515811461148757600080fd5b60008060408385031215613b5757600080fd5b8235613b6281613888565b91506020830135613b7281613b36565b809150509250929050565b60008060408385031215613b9057600080fd5b8235613b6281613b36565b600080600060608486031215613bb057600080fd5b8335613bbb81613888565b92506020840135613bcb81613888565b91506040840135613bdb81613888565b809150509250925092565b60008060408385031215613bf957600080fd5b8235613c0481613888565b91506020830135613b7281613888565b60008060008060808587031215613c2a57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613c97578160001904821115613c7d57613c7d613c46565b80851615613c8a57918102915b93841c9390800290613c61565b509250929050565b600082613cae57506001610c68565b81613cbb57506000610c68565b8160018114613cd15760028114613cdb57613cf7565b6001915050610c68565b60ff841115613cec57613cec613c46565b50506001821b610c68565b5060208310610133831016604e8410600b8410161715613d1a575081810a610c68565b613d248383613c5c565b8060001904821115613d3857613d38613c46565b029392505050565b600061152a60ff841683613c9f565b8082028115828204841417610c6857610c68613c46565b81810381811115610c6857610c68613c46565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103613dd157613dd1613c46565b6001019392505050565b80820180821115610c6857610c68613c46565b600082613e0b57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60008060408385031215613e8057600080fd5b8251613e8b81613888565b6020840151909250613b7281613888565b60008060408385031215613eaf57600080fd5b505080516020909101519092909150565b61ffff818116838216019080821115613edb57613edb613c46565b5092915050565b600060208284031215613ef457600080fd5b5051919050565b600060208284031215613f0d57600080fd5b815161152a81613b36565b600060208284031215613f2a57600080fd5b815161152a81613888565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015613fd55784516001600160a01b031683529383019391830191600101613fb0565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212201b515c8275897495199493ee27bf3bb71553992de62ede03588bf5c9010dfefb64736f6c63430008180033

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

0000000000000000000000003e50546092076300a8f1fdcc43d8c221a42fbf18000000000000000000000000ea4ebd03ed27a6c246749437ccf2cbef006bd1c90000000000000000000000003cdbbdf0588f60116b0a0651ed4bc6c62c7fcf40000000000000000000000000f7fb9dea516d351881c5d72f330cfc49ef52abbd

-----Decoded View---------------
Arg [0] : marketingWallet (address): 0x3E50546092076300a8f1FDCc43d8C221a42Fbf18
Arg [1] : developmentWallet (address): 0xEa4EBd03ed27a6c246749437cCF2CbEf006Bd1c9
Arg [2] : buyBackBurnLPWallet (address): 0x3CdbbDF0588f60116B0A0651ed4BC6c62C7FCF40
Arg [3] : teamFoundationWallet (address): 0xf7Fb9deA516D351881C5d72F330Cfc49ef52aBbD

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000003e50546092076300a8f1fdcc43d8c221a42fbf18
Arg [1] : 000000000000000000000000ea4ebd03ed27a6c246749437ccf2cbef006bd1c9
Arg [2] : 0000000000000000000000003cdbbdf0588f60116b0a0651ed4bc6c62c7fcf40
Arg [3] : 000000000000000000000000f7fb9dea516d351881c5d72f330cfc49ef52abbd


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.