ETH Price: $3,759.27 (+1.29%)
Gas: 4 Gwei

Contract

0x57B49219614859176Ddb029298486B6c30193Cbd
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Oracle AI (ORACLE) (@$0.0022)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve199461802024-05-25 10:05:111 hr ago1716631511IN
Oracle AI: ORACLE Token
0 ETH0.000214664.57430572
Transfer199451592024-05-25 6:40:114 hrs ago1716619211IN
Oracle AI: ORACLE Token
0 ETH0.0008575710.35191411
Transfer199444542024-05-25 4:18:237 hrs ago1716610703IN
Oracle AI: ORACLE Token
0 ETH0.0006761411.09494654
Transfer199444362024-05-25 4:14:477 hrs ago1716610487IN
Oracle AI: ORACLE Token
0 ETH0.000341284.37312936
Transfer199442702024-05-25 3:41:357 hrs ago1716608495IN
Oracle AI: ORACLE Token
0 ETH0.000233263.82833931
Transfer199442622024-05-25 3:39:597 hrs ago1716608399IN
Oracle AI: ORACLE Token
0 ETH0.000251283.82015938
Transfer199442582024-05-25 3:39:117 hrs ago1716608351IN
Oracle AI: ORACLE Token
0 ETH0.000330173.98614461
Approve199428202024-05-24 22:48:1112 hrs ago1716590891IN
Oracle AI: ORACLE Token
0 ETH0.000137855.10044619
Approve199428202024-05-24 22:48:1112 hrs ago1716590891IN
Oracle AI: ORACLE Token
0 ETH0.000239355.10044619
Transfer199428202024-05-24 22:48:1112 hrs ago1716590891IN
Oracle AI: ORACLE Token
0 ETH0.000312485.12651375
Approve199427452024-05-24 22:33:1113 hrs ago1716589991IN
Oracle AI: ORACLE Token
0 ETH0.000146415.41706046
Approve199427452024-05-24 22:33:1113 hrs ago1716589991IN
Oracle AI: ORACLE Token
0 ETH0.000254215.41706046
Approve199425502024-05-24 21:53:5913 hrs ago1716587639IN
Oracle AI: ORACLE Token
0 ETH0.000343457.35062173
Approve199407192024-05-24 15:45:3519 hrs ago1716565535IN
Oracle AI: ORACLE Token
0 ETH0.0008359917.81403654
Approve199401842024-05-24 13:57:2321 hrs ago1716559043IN
Oracle AI: ORACLE Token
0 ETH0.0004720510.10287108
Transfer199400592024-05-24 13:32:1122 hrs ago1716557531IN
Oracle AI: ORACLE Token
0 ETH0.0012310514.86030388
Transfer199398002024-05-24 12:39:5922 hrs ago1716554399IN
Oracle AI: ORACLE Token
0 ETH0.000502156.43239004
Transfer199392932024-05-24 10:57:5924 hrs ago1716548279IN
Oracle AI: ORACLE Token
0 ETH0.0002534511.34227629
Transfer199381822024-05-24 7:14:2328 hrs ago1716534863IN
Oracle AI: ORACLE Token
0 ETH0.000581917.02436954
Transfer199381412024-05-24 7:06:1128 hrs ago1716534371IN
Oracle AI: ORACLE Token
0 ETH0.0009103911.661848
Transfer199376532024-05-24 5:28:1130 hrs ago1716528491IN
Oracle AI: ORACLE Token
0 ETH0.0010001912.07354774
Approve199376032024-05-24 5:18:1130 hrs ago1716527891IN
Oracle AI: ORACLE Token
0 ETH0.000359177.6535323
Transfer199372812024-05-24 4:13:3531 hrs ago1716524015IN
Oracle AI: ORACLE Token
0 ETH0.000460275.89602485
Approve199369322024-05-24 3:03:2332 hrs ago1716519803IN
Oracle AI: ORACLE Token
0 ETH0.000337067.21381212
Approve199368282024-05-24 2:42:3532 hrs ago1716518555IN
Oracle AI: ORACLE Token
0 ETH0.000294916.28419647
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
199376122024-05-24 5:19:5930 hrs ago1716527999
Oracle AI: ORACLE Token
0.19454871 ETH
199376122024-05-24 5:19:5930 hrs ago1716527999
Oracle AI: ORACLE Token
0.08337802 ETH
199376122024-05-24 5:19:5930 hrs ago1716527999
Oracle AI: ORACLE Token
0.27792673 ETH
199312552024-05-23 8:01:112 days ago1716451271
Oracle AI: ORACLE Token
0.22083713 ETH
199312552024-05-23 8:01:112 days ago1716451271
Oracle AI: ORACLE Token
0.09464448 ETH
199312552024-05-23 8:01:112 days ago1716451271
Oracle AI: ORACLE Token
0.31548162 ETH
199228362024-05-22 3:45:473 days ago1716349547
Oracle AI: ORACLE Token
0.18482689 ETH
199228362024-05-22 3:45:473 days ago1716349547
Oracle AI: ORACLE Token
0.07921152 ETH
199228362024-05-22 3:45:473 days ago1716349547
Oracle AI: ORACLE Token
0.26403841 ETH
199034132024-05-19 10:33:236 days ago1716114803
Oracle AI: ORACLE Token
0.21483643 ETH
199034132024-05-19 10:33:236 days ago1716114803
Oracle AI: ORACLE Token
0.09207275 ETH
199034132024-05-19 10:33:236 days ago1716114803
Oracle AI: ORACLE Token
0.30690919 ETH
199020592024-05-19 6:00:476 days ago1716098447
Oracle AI: ORACLE Token
0.23034458 ETH
199020592024-05-19 6:00:476 days ago1716098447
Oracle AI: ORACLE Token
0.0987191 ETH
199020592024-05-19 6:00:476 days ago1716098447
Oracle AI: ORACLE Token
0.32906368 ETH
198815662024-05-16 9:13:119 days ago1715850791
Oracle AI: ORACLE Token
0.26424992 ETH
198815662024-05-16 9:13:119 days ago1715850791
Oracle AI: ORACLE Token
0.11324996 ETH
198815662024-05-16 9:13:119 days ago1715850791
Oracle AI: ORACLE Token
0.37749988 ETH
198768452024-05-15 17:22:239 days ago1715793743
Oracle AI: ORACLE Token
0.29183802 ETH
198768452024-05-15 17:22:239 days ago1715793743
Oracle AI: ORACLE Token
0.12507344 ETH
198768452024-05-15 17:22:239 days ago1715793743
Oracle AI: ORACLE Token
0.41691146 ETH
198571372024-05-12 23:11:4712 days ago1715555507
Oracle AI: ORACLE Token
0.31712418 ETH
198571372024-05-12 23:11:4712 days ago1715555507
Oracle AI: ORACLE Token
0.13591036 ETH
198571372024-05-12 23:11:4712 days ago1715555507
Oracle AI: ORACLE Token
0.45303454 ETH
198551972024-05-12 16:42:2312 days ago1715532143
Oracle AI: ORACLE Token
0.29168148 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Oracle

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
byzantium EvmVersion
File 1 of 6 : token.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.19;

import "./lib/IRouter02.sol";
import "./lib/IERC20.sol";
import "./lib/IFactoryV2.sol";
import "./lib/IV2Pair.sol";

contract Oracle is IERC20 {

    uint256 public constant maxBuyTaxes = 2500;    
    bool inSwap;
    uint256 public constant maxSellTaxes = 2500;
    uint256 public constant maxTransferTaxes = 2500;
    uint256 constant taxDivisor = 10000;
    uint256 internal _tSupply = 1000000000000000000000000000;
    address private _owner;
    uint256 private timeSinceLastPairCreated = 0;
    
    mapping(address => uint256) internal _tokenOwned;
    mapping(address => bool) allLiquidityPoolPairs;
    mapping(address => mapping(address => uint256)) internal _allowances;
    mapping(address => bool) internal _isExcludedFromFees;
    mapping(address => bool) internal _isExcludedFromLimits;
    mapping(address => bool) internal _liquidityHolders;

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

    TaxPercentages public _taxPercentages =
        TaxPercentages({marketing: 70, dev: 30});

    uint256 internal lastSwap;

    uint256 internal _maxTxAmount = (_tSupply * 400) / 10000;
    uint256 internal _maxWalletSize = (_tSupply * 400) / 10000;
    TaxWallets public _taxWallets;

    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 public swapThreshold;

    bool public tradingEnabled = false;
    bool public _hasLiquidityBeenAdded = false;

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

    bool public liquidityPoolInitialized = false;

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

struct TaxPercentages {
        uint16 marketing;
        uint16 dev;
    }

    struct TaxWallets {
        address payable marketing;
        address payable dev;
    }

    event OwnershipTransferred(
        address indexed pastOwner,
        address indexed newOwner
    );
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event TaxUpdated(uint256 buy, uint256 sell, uint256 transfer);
    event TaxDistributionPercentageUpdated(uint256 marketing, uint256 dev);
    event MaxTransactionAmountUpdated(uint256 amount);
    event SwapSettingsUpdated(uint256 threshold, uint256 time);


    modifier swapLock {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller must be the owner");
        _;
    }

    string internal _name = "Oracle AI";
    string internal _symbol = "ORACLE";
    uint8 internal _decimals = 18;

    constructor() payable {
        // Set the owner.
        _owner = address(msg.sender);

        _tokenOwned[msg.sender] = _tSupply;
        emit Transfer(address(0), msg.sender, _tSupply);

        // Multichain Token - Will need to rephrase
        dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _taxWallets.marketing=payable(0xE46638737702a8A0Ff41df055bF40cE9bE385c4B);
        _taxWallets.dev=payable(0x3F54800d28838A0AB7f25a007B1F9FcFEdC3cc67);

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[_taxWallets.marketing] = true;
        _isExcludedFromFees[_taxWallets.dev] = true;
        _isExcludedFromFees[0xF041690D9cBE398d3D51F25C87902C1403AffE66] = true;
        _isExcludedFromFees[0xe6D5456Ac986A95b5d4D165ae1ed96c8a4E50BB2] = true;
        _isExcludedFromLimits[_taxWallets.marketing] = true;
        _isExcludedFromLimits[_taxWallets.dev] = true;
        _isExcludedFromLimits[0xF041690D9cBE398d3D51F25C87902C1403AffE66] = true;
        _isExcludedFromLimits[0xe6D5456Ac986A95b5d4D165ae1ed96c8a4E50BB2] = true;
        _liquidityHolders[_owner] = true;
    }

    function balanceOf(address account) public view override(IERC20)  returns (uint256) {
        return _tokenOwned[account];
    }
    
    function confirmLP(
    ) public onlyOwner{
        require(!liquidityPoolInitialized, 'LP already initited');
        lpPair = IFactoryV2(dexRouter.factory()).getPair(address(this), dexRouter.WETH());
        setLiquidityPoolPair(lpPair, true);
        liquidityPoolInitialized = true;
        _checkLiquidityAdd(msg.sender);
        allowTrading();
    }

    function setPairAddress (address pair
    ) public onlyOwner{
        require(pair!=address(0),'Invalid address');
        setLiquidityPoolPair(pair, true);
    }

    function isContract(address _addr) public view returns (bool){
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    function preInitializeTransfer(
        address to,
        uint256 amount
    ) public onlyOwner {
        require(!liquidityPoolInitialized,'Liquidity pool must not be initialized');
        amount = amount * 10 ** _decimals;
        _finalizeTransfer(msg.sender, to, amount, false, false, false, true);
    }


    // 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.
    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) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }

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

    function renounceOwnership() public onlyOwner {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }

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

    function totalSupply() external view override returns (uint256) {
        if (_tSupply == 0) {
            revert();
        }
        return _tSupply;
    }

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

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

    function name() external view 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 transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approveContractContingency() public 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] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) public onlyOwner {
        require(newRouter!=address(0),'Invalid address');
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(
            address(this),
            _newRouter.WETH()
        );
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(
                address(this),
                _newRouter.WETH()
            );
        } else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLiquidityPoolPair(
        address pair,
        bool enabled
    ) public onlyOwner {
        require(pair!=address(0),'Invalid address');
        if (!enabled) {
            allLiquidityPoolPairs[pair] = false;
        } else {
            if (timeSinceLastPairCreated != 0) {
                require(
                    block.timestamp - timeSinceLastPairCreated > 3 days,
                    "3 Day cooldown.!"
                );
            }
            allLiquidityPoolPairs[pair] = true;
            timeSinceLastPairCreated = block.timestamp;
        }
    }
    
    function setTaxes(
        uint16 buyFee,
        uint16 sellFee,
        uint16 transferFee
    ) external onlyOwner {
        require(
            buyFee <= maxBuyTaxes &&
                sellFee <= maxSellTaxes &&
                transferFee <= maxTransferTaxes,
            "Cannot exceed maximum"
        );
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
        emit TaxUpdated(buyFee, sellFee, transferFee);
    }

    function setTaxPercentages(
        uint16 marketing
    ) external onlyOwner {
        require(marketing>=0 && marketing<=100,'Percentage should be between 0 - 100');
        _taxPercentages.marketing = marketing;
        _taxPercentages.dev = 100-marketing;
        emit TaxDistributionPercentageUpdated(marketing, _taxPercentages.dev);
    }

    function setMaxTxPercent(
        uint256 percent,
        uint256 divisor
    ) external onlyOwner {
        require(
            (_tSupply * percent) / divisor >= (_tSupply / 1000),
            "Max Transaction amount must be above 0.1% of total supply"
        );
        _maxTxAmount = (_tSupply * percent) / divisor;
        emit MaxTransactionAmountUpdated(_maxTxAmount);
    }


    function setSwapSettings(
        uint256 threshold,
        uint256 thresholdDivisor,
        uint256 time
    ) external onlyOwner {
        require(threshold > 0,'Threshold has to be higher than 0');
        require(thresholdDivisor%10 == 0 && thresholdDivisor > 0,'thresholdDivisor has to be higher than 0 and divisible by 10');
        swapThreshold = (_tSupply * threshold) / thresholdDivisor;
        contractSwapTimer = time;
        emit SwapSettingsUpdated(swapThreshold, time);
    }

    function setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }

    function setWallets(
        address payable marketing,
        address payable dev
    ) external onlyOwner {
        require(!isContract(marketing),'Cannot be a contract');
        require(!isContract(dev),'Cannot be a contract');
        _taxWallets.marketing = payable(marketing);
        _taxWallets.dev = payable(dev);
    }

    function preInitializeTransferMultiple(
        address[] memory accounts,
        uint256[] memory amounts
    ) external onlyOwner {
        require(accounts.length == amounts.length, "Accounts != Amounts");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i] * 10 ** _decimals,'Account have lower tokenb balance than needed');
            preInitializeTransfer(accounts[i], amounts[i]);
        }
    }




    function allowTrading() internal {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiquidityBeenAdded, "Liquidity must be added");
        tradingEnabled = true;
        swapThreshold = (_tSupply * 1) / 1000;

    }

    function takeTax(
        address from,
        bool buy,
        bool sell,
        uint256 amount
    ) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = (amount * currentFee) / taxDivisor;

        _tokenOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }


    function setMaxWalletSize(
        uint256 percent,
        uint256 divisor
    ) external onlyOwner {
        require(
            (_tSupply * percent) / divisor >= (_tSupply / 1000),
            "Max Wallet amount must be above 0.1% of total supply"
        );
        _maxWalletSize = (_tSupply * percent) / divisor;
    }

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


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

    function contractSwap(uint256 contractTokenBalance) internal swapLock {

        TaxPercentages memory taxPercentages = _taxPercentages;

        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();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;

        uint256 devBalance = (amtBalance * taxPercentages.dev) / 100;
        uint256 marketingBalance = amtBalance - devBalance;
        if (taxPercentages.dev > 0) {
            _taxWallets.dev.transfer(devBalance);
        }
        if (taxPercentages.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    function isExcludedFromLimits(address account) public view returns (bool) {
        return _isExcludedFromLimits[account];
    }

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

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

    function getMaxTransaction() public view returns (uint256) {
        return _maxTxAmount / (10 ** _decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return _maxWalletSize / (10 ** _decimals);
    }

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

        _tokenOwned[from] -= amount;
        uint256 amountReceived = (takeFee)
            ? takeTax(from, buy, sell, amount)
            : amount;
        _tokenOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

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

    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");
        // require(liquidityPoolInitialized, "LP must be intiialized first!");


        bool buy = false;
        bool sell = false;
        bool other = false;
        if (allLiquidityPoolPairs[from]) {
            buy = true;
        } else if (allLiquidityPoolPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        
        if (_hasLimits(from, to)) {
            if (!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (buy || sell) {
                if (
                    !_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]
                ) {
                    require(
                        amount <= _maxTxAmount,
                        "Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(
                        balanceOf(to) + amount <= _maxWalletSize,
                        "Transfer amount exceeds the maxWalletSize."
                    );
                }
            }
        }

        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        if (sell) {
            if (!inSwap && contractSwapEnabled) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        contractTokenBalance = swapThreshold;
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }
        }
        return _finalizeTransfer(from, to, amount, takeFee, buy, sell, other);
    }

    function distributeTax() public onlyOwner(){
         if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        contractTokenBalance = swapThreshold;
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
    }

    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 _checkLiquidityAdd(address from) internal {
        require(!_hasLiquidityBeenAdded, "Liquidity already added and marked");
            _liquidityHolders[from] = true;
            _hasLiquidityBeenAdded = true;

            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
    }
    receive() payable external {}
}

File 3 of 6 : IV2Pair.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

interface IV2Pair {
    function sync() external;

    function factory() external view returns (address);

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

File 4 of 6 : IRouter02.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

import "./IRouter01.sol";

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

File 5 of 6 : IRouter01.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

File 6 of 6 : IFactoryV2.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

File 7 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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 approve(address spender, uint256 amount) external returns (bool);

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pastOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SwapSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dev","type":"uint256"}],"name":"TaxDistributionPercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer","type":"uint256"}],"name":"TaxUpdated","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":"_hasLiquidityBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxPercentages","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","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":"dev","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":"confirmLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","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":"address","name":"_addr","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxSellTaxes","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"preInitializeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"preInitializeTransferMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","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":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLiquidityPoolPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxPercentages","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":"dev","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"stateMutability":"payable","type":"receive"}]

6b033b2e3c9fd0803ce80000006001819055600060038190556101f46080526103e860a05260c052600a80546303e801f465ffffffffffff19909116179055610120604052604660e052601e61010052600b805463ffffffff1916621e0046179055612710906200007390610190620003aa565b6200007f9190620003ef565b600d55612710600154610190620000979190620003aa565b620000a39190620003ef565b600e556011805460ff1916905560006012556014805461ffff191690556015805460a060020a60ff021916905560408051808201909152600981527f4f7261636c652041490000000000000000000000000000000000000000000000602082015260169062000113908262000502565b5060408051808201909152600681527f4f5241434c450000000000000000000000000000000000000000000000000000602082015260179062000157908262000502565b506018805460ff1916601217905560028054600160a060020a031916339081179091556001546000828152600460205260408082208390555190917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620001c191815260200190565b60405180910390a360148054757a250d5630b4cf539739df2c5dacb4c659f2488d00006201000060b060020a0319909116179055600f8054600160a060020a031990811673e46638737702a8a0ff41df055bf40ce9be385c4b17825560108054909116733f54800d28838a0ab7f25a007b1f9fcfedc3cc6717815560028054600160a060020a039081166000908152600760209081526040808320805460ff19908116600190811790925530855282852080548216831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054821683179055885486168552828520805482168317905587548616855282852080548216831790557f77ef10186425a1a78edf13b9bebb8754cee52841607e57c71f5b9166a24090a180548216831790557f2dd140052fb6b5caaa0fe79ece247c0405d9c1221162e10a4656dcdfc824bde0805482168317905597548516845260088352818420805489168217905595548416835280832080548816871790557f08b70c88b347aaabebae20588846c06a54b21d54a2c978c7caae342b2718866f80548816871790557f973a8be8e22345978c9ef82208582f094541e6a059394cc2e229a216fd85e9fa8054881687179055935490921681526009909152208054909216179055620005d5565b8082028115828204841417620003e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60008262000426577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6002810460018216806200046f57607f821691505b602082108103620004a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115620004fd576000818152602081206020601f86010481016020861015620004d85750805b6020601f860104820191505b81811015620004f957828155600101620004e4565b5050505b505050565b815167ffffffffffffffff8111156200051f576200051f6200042b565b62000537816200053084546200045a565b84620004af565b602080601f831160018114620005735760008415620005565750858301515b60028086026008870290910a6000190419821617865550620004f9565b600085815260208120601f198616915b82811015620005a45788860151825594840194600190910190840162000583565b5085821015620005c557878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b61356e80620005e56000396000f3fe6080604052600436106102d15760003560e060020a90048063590ffdce11610179578063b3d514fb116100e0578063e2b2d17c11610099578063ee5d9c2d11610073578063ee5d9c2d146108e2578063f94aa1b4146108f7578063fc942c641461093e578063fdb78c0e1461095e57600080fd5b8063e2b2d17c14610897578063e4fcfd18146108ac578063eafb5a3c146108c257600080fd5b8063b3d514fb1461050a578063c9b017d3146107c0578063cab5ebea146107f2578063d3f6a15714610812578063d9ceeafc14610832578063dd62ed3e1461085157600080fd5b8063893d20e811610132578063893d20e8146107385780638a63bd9b1461075657806395d89b411461076b578063a22d483214610780578063a9059cbb146107a0578063b1b08f711461050a57600080fd5b8063590ffdce146106555780635cce86cd146106755780636b51be1a146106ae57806370a08231146106ee578063715018a61461070e578063777c68911461072357600080fd5b80631cc43f071161023857806332cde664116101f1578063452ed4f1116101cb578063452ed4f1146105c25780634ada218b146105e25780634fb2e45d146105fc5780634fbee1931461061c57600080fd5b806332cde6641461056257806336fddb04146105825780633f3cf56c146105a257600080fd5b80631cc43f07146104aa57806323b872dd146104ca57806326003957146104ea5780632b28fc7a1461050a5780632cee760214610520578063313ce5671461054057600080fd5b80630f3d9c9f1161028a5780630f3d9c9f146104025780630fa604e414610419578063104a44711461042e578063162790551461044e57806316b176a61461047557806318160ddd1461049557600080fd5b806303fd2a45146102dd5780630445b66714610310578063069d955f1461033457806306fdde031461038a5780630758d924146103ac578063095ea7b3146103d257600080fd5b366102d857005b600080fd5b3480156102e957600080fd5b506102f361dead81565b604051600160a060020a0390911681526020015b60405180910390f35b34801561031c57600080fd5b5061032660135481565b604051908152602001610307565b34801561034057600080fd5b50600a546103659061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610307565b34801561039657600080fd5b5061039f610978565b6040516103079190612ddd565b3480156103b857600080fd5b506014546102f390620100009004600160a060020a031681565b3480156103de57600080fd5b506103f26103ed366004612e40565b610a0a565b6040519015158152602001610307565b34801561040e57600080fd5b50610417610a21565b005b34801561042557600080fd5b50610326610a9a565b34801561043a57600080fd5b50610417610449366004612e83565b610ac0565b34801561045a57600080fd5b506103f2610469366004612e9e565b3b63ffffffff16151590565b34801561048157600080fd5b50610417610490366004612ebb565b610be9565b3480156104a157600080fd5b50610326610d7e565b3480156104b657600080fd5b506104176104c5366004612fbd565b610d96565b3480156104d657600080fd5b506103f26104e536600461307c565b610f37565b3480156104f657600080fd5b506104176105053660046130bd565b610faf565b34801561051657600080fd5b506103266109c481565b34801561052c57600080fd5b5061041761053b366004612e40565b61109c565b34801561054c57600080fd5b5060185460405160ff9091168152602001610307565b34801561056e57600080fd5b5061041761057d3660046130df565b61118c565b34801561058e57600080fd5b5061041761059d366004613132565b6112b1565b3480156105ae57600080fd5b506104176105bd3660046130bd565b611309565b3480156105ce57600080fd5b506015546102f390600160a060020a031681565b3480156105ee57600080fd5b506014546103f29060ff1681565b34801561060857600080fd5b50610417610617366004612e9e565b61142b565b34801561062857600080fd5b506103f2610637366004612e9e565b600160a060020a031660009081526007602052604090205460ff1690565b34801561066157600080fd5b50610417610670366004613132565b611569565b34801561068157600080fd5b506103f2610690366004612e9e565b600160a060020a031660009081526008602052604090205460ff1690565b3480156106ba57600080fd5b50600b546106d39061ffff808216916201000090041682565b6040805161ffff938416815292909116602083015201610307565b3480156106fa57600080fd5b50610326610709366004612e9e565b6115c1565b34801561071a57600080fd5b506104176115dc565b34801561072f57600080fd5b5061032661166c565b34801561074457600080fd5b50600254600160a060020a03166102f3565b34801561076257600080fd5b506103f261168d565b34801561077757600080fd5b5061039f6116e3565b34801561078c57600080fd5b5061041761079b366004612e9e565b6116f2565b3480156107ac57600080fd5b506103f26107bb366004612e40565b611753565b3480156107cc57600080fd5b506015546103f29074010000000000000000000000000000000000000000900460ff1681565b3480156107fe57600080fd5b5061041761080d366004613167565b61176a565b34801561081e57600080fd5b5061041761082d366004613182565b6117d8565b34801561083e57600080fd5b506014546103f290610100900460ff1681565b34801561085d57600080fd5b5061032661086c366004613182565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b3480156108a357600080fd5b506104176118f0565b3480156108b857600080fd5b5061032660125481565b3480156108ce57600080fd5b506104176108dd366004612e9e565b611b78565b3480156108ee57600080fd5b50610417611f16565b34801561090357600080fd5b50600f5460105461091e91600160a060020a03908116911682565b60408051600160a060020a03938416815292909116602083015201610307565b34801561094a57600080fd5b50610417610959366004613132565b611fd8565b34801561096a57600080fd5b506011546103f29060ff1681565b606060168054610987906131bb565b80601f01602080910402602001604051908101604052809291908181526020018280546109b3906131bb565b8015610a005780601f106109d557610100808354040283529160200191610a00565b820191906000526020600020905b8154815290600101906020018083116109e357829003601f168201915b5050505050905090565b6000610a173384846120ea565b5060015b92915050565b600254600160a060020a03163314610a575760405160e560020a62461bcd028152600401610a4e906131f8565b60405180910390fd5b42601254600c54610a689190613248565b1015610a98576000610a79306115c1565b90506013548110610a965750601354610a91816121fd565b42600c555b505b565b601854600090610aae9060ff16600a613342565b600e54610abb919061336a565b905090565b600254600160a060020a03163314610aed5760405160e560020a62461bcd028152600401610a4e906131f8565b60648161ffff161115610b6a5760405160e560020a62461bcd028152602060048201526024808201527f50657263656e746167652073686f756c64206265206265747765656e2030202d60448201527f20313030000000000000000000000000000000000000000000000000000000006064820152608401610a4e565b600b805461ffff191661ffff8316179055610b8681606461337e565b600b805463ffff000019166201000061ffff938416810291909117918290556040805185851681529190920490921660208301527f4b3b1a3c79096c2f80317c279dcb144c53be34043e6580db9c88d2ca81023f3491015b60405180910390a150565b600254600160a060020a03163314610c165760405160e560020a62461bcd028152600401610a4e906131f8565b60008311610c8f5760405160e560020a62461bcd02815260206004820152602160248201527f5468726573686f6c642068617320746f20626520686967686572207468616e2060448201527f30000000000000000000000000000000000000000000000000000000000000006064820152608401610a4e565b610c9a600a836133a0565b158015610ca75750600082115b610d1c5760405160e560020a62461bcd02815260206004820152603c60248201527f7468726573686f6c6444697669736f722068617320746f20626520686967686560448201527f72207468616e203020616e6420646976697369626c65206279203130000000006064820152608401610a4e565b8183600154610d2b91906133b4565b610d35919061336a565b6013819055601282905560408051918252602082018390527fa9c2e33ddea0675d960a3cc03d364783d03ffc4cad71b5fd3b6b32be3b97185791015b60405180910390a1505050565b6000600154600003610d8f57600080fd5b5060015490565b600254600160a060020a03163314610dc35760405160e560020a62461bcd028152600401610a4e906131f8565b8051825114610e175760405160e560020a62461bcd02815260206004820152601360248201527f4163636f756e747320213d20416d6f756e7473000000000000000000000000006044820152606401610a4e565b60005b82518160ff161015610f3257601854610e379060ff16600a613342565b828260ff1681518110610e4c57610e4c6133cb565b6020026020010151610e5e91906133b4565b610e67336115c1565b1015610ede5760405160e560020a62461bcd02815260206004820152602d60248201527f4163636f756e742068617665206c6f77657220746f6b656e622062616c616e6360448201527f65207468616e206e6565646564000000000000000000000000000000000000006064820152608401610a4e565b610f20838260ff1681518110610ef657610ef66133cb565b6020026020010151838360ff1681518110610f1357610f136133cb565b602002602001015161109c565b80610f2a816133e4565b915050610e1a565b505050565b600160a060020a038316600090815260066020908152604080832033845290915281205460001914610f9c57600160a060020a038416600090815260066020908152604080832033845290915281208054849290610f96908490613403565b90915550505b610fa78484846124de565b949350505050565b600254600160a060020a03163314610fdc5760405160e560020a62461bcd028152600401610a4e906131f8565b6103e8600154610fec919061336a565b8183600154610ffb91906133b4565b611005919061336a565b101561107c5760405160e560020a62461bcd02815260206004820152603460248201527f4d61782057616c6c657420616d6f756e74206d7573742062652061626f76652060448201527f302e3125206f6620746f74616c20737570706c790000000000000000000000006064820152608401610a4e565b808260015461108b91906133b4565b611095919061336a565b600e555050565b600254600160a060020a031633146110c95760405160e560020a62461bcd028152600401610a4e906131f8565b60155474010000000000000000000000000000000000000000900460ff161561115d5760405160e560020a62461bcd02815260206004820152602660248201527f4c697175696469747920706f6f6c206d757374206e6f7420626520696e69746960448201527f616c697a656400000000000000000000000000000000000000000000000000006064820152608401610a4e565b60185461116e9060ff16600a613342565b61117890826133b4565b9050610f3233838360008060006001612983565b600254600160a060020a031633146111b95760405160e560020a62461bcd028152600401610a4e906131f8565b6109c48361ffff16111580156111d557506109c48261ffff1611155b80156111e757506109c48161ffff1611155b6112365760405160e560020a62461bcd02815260206004820152601560248201527f43616e6e6f7420657863656564206d6178696d756d00000000000000000000006044820152606401610a4e565b600a805461ffff838116640100000000810265ffff000000001987841662010000810263ffffffff19909616948a16948517959095171617909355604080519182526020820192909252908101919091527fad292e707e8a094bdd1cff9ec5263d8e4e538d8e6e457c032a2dbf7174ebec4b90606001610d71565b600254600160a060020a031633146112de5760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a03919091166000908152600860205260409020805460ff1916911515919091179055565b600254600160a060020a031633146113365760405160e560020a62461bcd028152600401610a4e906131f8565b6103e8600154611346919061336a565b818360015461135591906133b4565b61135f919061336a565b10156113d65760405160e560020a62461bcd02815260206004820152603960248201527f4d6178205472616e73616374696f6e20616d6f756e74206d757374206265206160448201527f626f766520302e3125206f6620746f74616c20737570706c79000000000000006064820152608401610a4e565b80826001546113e591906133b4565b6113ef919061336a565b600d8190556040519081527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac9060200160405180910390a15050565b600254600160a060020a031633146114585760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a0381166114815760405160e560020a62461bcd028152600401610a4e90613416565b61deac19600160a060020a038216016114af5760405160e560020a62461bcd028152600401610a4e90613416565b6002546114c690600160a060020a03166000611569565b6114d1816001611569565b6002546000906114e990600160a060020a03166115c1565b11156115105760025461150e90600160a060020a031682611509826115c1565b6124de565b505b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03831690811790915560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600254600160a060020a031633146115965760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a03919091166000908152600760205260409020805460ff1916911515919091179055565b600160a060020a031660009081526004602052604090205490565b600254600160a060020a031633146116095760405160e560020a62461bcd028152600401610a4e906131f8565b60025461162090600160a060020a03166000611569565b6002805473ffffffffffffffffffffffffffffffffffffffff1916905560405160009081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6018546000906116809060ff16600a613342565b600d54610abb919061336a565b600254600090600160a060020a031633146116bd5760405160e560020a62461bcd028152600401610a4e906131f8565b6014546116dd903090620100009004600160a060020a03166000196120ea565b50600190565b606060178054610987906131bb565b600254600160a060020a0316331461171f5760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a0381166117485760405160e560020a62461bcd028152600401610a4e90613473565b610a96816001611fd8565b60006117603384846124de565b5060019392505050565b600254600160a060020a031633146117975760405160e560020a62461bcd028152600401610a4e906131f8565b6011805460ff19168215159081179091556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001610bde565b600254600160a060020a031633146118055760405160e560020a62461bcd028152600401610a4e906131f8565b813b63ffffffff161561185d5760405160e560020a62461bcd02815260206004820152601460248201527f43616e6e6f74206265206120636f6e74726163740000000000000000000000006044820152606401610a4e565b803b63ffffffff16156118b55760405160e560020a62461bcd02815260206004820152601460248201527f43616e6e6f74206265206120636f6e74726163740000000000000000000000006044820152606401610a4e565b600f8054600160a060020a0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560108054929093169116179055565b600254600160a060020a0316331461191d5760405160e560020a62461bcd028152600401610a4e906131f8565b60155474010000000000000000000000000000000000000000900460ff161561198b5760405160e560020a62461bcd02815260206004820152601360248201527f4c5020616c726561647920696e697469746564000000000000000000000000006044820152606401610a4e565b601460029054906101000a9004600160a060020a0316600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0591906134aa565b600160a060020a031663e6a4390530601460029054906101000a9004600160a060020a0316600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8e91906134aa565b60405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb91906134aa565b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169182179055611b32906001611fd8565b6015805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055611b7033612a5c565b610a98612b50565b600254600160a060020a03163314611ba55760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a038116611bce5760405160e560020a62461bcd028152600401610a4e90613473565b6000819050600081600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3a91906134aa565b600160a060020a031663e6a439053084600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cae91906134aa565b60405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381865afa158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b91906134aa565b9050600160a060020a038116611ea55781600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9091906134aa565b600160a060020a031663c9c653963084600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0491906134aa565b60405160e060020a63ffffffff8516028152600160a060020a039283166004820152911660248201526044016020604051808303816000875af1158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7391906134aa565b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055611ece565b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b6014805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a0385811682029290921792839055610f32923092919004166000196120ea565b600254600160a060020a03163314611f435760405160e560020a62461bcd028152600401610a4e906131f8565b601454610100900460ff1615611f9e5760405160e560020a62461bcd02815260206004820152601b60248201527f43616e6e6f742063616c6c206166746572206c697175696469747900000000006044820152606401610a4e565b600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610a96573d6000803e3d6000fd5b600254600160a060020a031633146120055760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a03821661202e5760405160e560020a62461bcd028152600401610a4e90613473565b806120555750600160a060020a03166000908152600560205260409020805460ff19169055565b600354156120bf576203f4806003544261206f9190613403565b116120bf5760405160e560020a62461bcd02815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610a4e565b600160a060020a0382166000908152600560205260409020805460ff19166001179055426003555050565b600160a060020a0383166121435760405160e560020a62461bcd02815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a4e565b600160a060020a03821661219c5760405160e560020a62461bcd02815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a4e565b600160a060020a0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000805460ff19166001178155604080518082018252600b5461ffff80821683526201000091829004166020808401919091523085526006815283852060145492909204600160a060020a03168552529120546000191461228957306000908152600660209081526040808320601454620100009004600160a060020a03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122be576122be6133cb565b6020026020010190600160a060020a03169081600160a060020a031681525050601460029054906101000a9004600160a060020a0316600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015612334573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235891906134aa565b8160018151811061236b5761236b6133cb565b600160a060020a0392831660209182029290920101526014546040517f791ac947000000000000000000000000000000000000000000000000000000008152620100009091049091169063791ac947906123d29086906000908690309042906004016134c7565b600060405180830381600087803b1580156123ec57600080fd5b505af1158015612400573d6000803e3d6000fd5b5050506020830151303191506000906064906124209061ffff16846133b4565b61242a919061336a565b905060006124388284613403565b602086015190915061ffff161561248557601054604051600160a060020a039091169083156108fc029084906000818181858888f19350505050158015612483573d6000803e3d6000fd5b505b845161ffff16156124cc57600f54604051600160a060020a039091169082156108fc029083906000818181858888f193505050501580156124ca573d6000803e3d6000fd5b505b50506000805460ff1916905550505050565b6000600160a060020a03841661255f5760405160e560020a62461bcd02815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a4e565b600160a060020a0383166125de5760405160e560020a62461bcd02815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a4e565b600082116126575760405160e560020a62461bcd02815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a4e565b600160a060020a0384166000908152600560205260408120548190819060ff161561268557600192506126b3565b600160a060020a03861660009081526005602052604090205460ff16156126af57600191506126b3565b5060015b6126bd8787612c2f565b156128bc5760145460ff166127175760405160e560020a62461bcd02815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a4e565b82806127205750815b156127e757600160a060020a03871660009081526008602052604090205460ff161580156127675750600160a060020a03861660009081526008602052604090205460ff16155b156127e757600d548511156127e75760405160e560020a62461bcd02815260206004820152603060248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f72616e73616374696f6e416d6f756e74000000000000000000000000000000006064820152608401610a4e565b601454600160a060020a03878116620100009092041614801590612809575081155b156128bc57600160a060020a03861660009081526008602052604090205460ff166128bc57600e548561283b886115c1565b6128459190613248565b11156128bc5760405160e560020a62461bcd02815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a4e565b600160a060020a03871660009081526007602052604090205460019060ff16806128fe5750600160a060020a03871660009081526007602052604090205460ff165b15612907575060005b82156129685760005460ff16158015612922575060115460ff165b156129685742601254600c546129389190613248565b1015612968576000612949306115c1565b905060135481106129665750601354612961816121fd565b42600c555b505b61297788888884888888612983565b98975050505050505050565b600160a060020a0387166000908152600460205260408120805487919083906129ad908490613403565b9091555060009050856129c057866129cc565b6129cc8986868a612d06565b600160a060020a0389166000908152600460205260408120805492935083929091906129f9908490613248565b9250508190555087600160a060020a031689600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a4591815260200190565b60405180910390a350600198975050505050505050565b601454610100900460ff1615612add5760405160e560020a62461bcd02815260206004820152602260248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610a4e565b600160a060020a038116600090815260096020908152604091829020805460ff1990811660019081179092556014805461ff001916610100179055601180549091168217905591519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579101610bde565b60145460ff1615612ba65760405160e560020a62461bcd02815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a4e565b601454610100900460ff16612c005760405160e560020a62461bcd02815260206004820152601760248201527f4c6971756964697479206d7573742062652061646465640000000000000000006044820152606401610a4e565b6014805460ff1916600190811790915580546103e891612c2091906133b4565b612c2a919061336a565b601355565b600254600090600160a060020a03848116911614801590612c5e5750600254600160a060020a03838116911614155b8015612c755750600254600160a060020a03163214155b8015612c9a5750600160a060020a03821660009081526009602052604090205460ff16155b8015612cbf5750600160a060020a03831660009081526009602052604090205460ff16155b8015612cd65750600160a060020a03821661dead14155b8015612cea5750600160a060020a03821615155b8015612cff5750600160a060020a0383163014155b9392505050565b6000808415612d1c5750600a5461ffff16612d46565b8315612d355750600a5462010000900461ffff16612d46565b50600a54640100000000900461ffff165b6000612710612d5583866133b4565b612d5f919061336a565b30600090815260046020526040812080549293508392909190612d83908490613248565b90915550506040518181523090600160a060020a038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612dd28185613403565b979650505050505050565b600060208083528351808285015260005b81811015612e0a57858101830151858201604001528201612dee565b506000604082860101526040601f19601f8301168501019250505092915050565b600160a060020a0381168114610a9657600080fd5b60008060408385031215612e5357600080fd5b8235612e5e81612e2b565b946020939093013593505050565b803561ffff81168114612e7e57600080fd5b919050565b600060208284031215612e9557600080fd5b612cff82612e6c565b600060208284031215612eb057600080fd5b8135612cff81612e2b565b600080600060608486031215612ed057600080fd5b505081359360208301359350604090920135919050565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612f2957612f29612ee7565b604052919050565b600067ffffffffffffffff821115612f4b57612f4b612ee7565b5060209081020190565b600082601f830112612f6657600080fd5b81356020612f7b612f7683612f31565b612f00565b82815291810284018101918181019086841115612f9757600080fd5b8286015b84811015612fb25780358352918301918301612f9b565b509695505050505050565b60008060408385031215612fd057600080fd5b823567ffffffffffffffff80821115612fe857600080fd5b818501915085601f830112612ffc57600080fd5b8135602061300c612f7683612f31565b8281529181028401810191818101908984111561302857600080fd5b948201945b8386101561304f57853561304081612e2b565b8252948201949082019061302d565b9650508601359250508082111561306557600080fd5b5061307285828601612f55565b9150509250929050565b60008060006060848603121561309157600080fd5b833561309c81612e2b565b925060208401356130ac81612e2b565b929592945050506040919091013590565b600080604083850312156130d057600080fd5b50508035926020909101359150565b6000806000606084860312156130f457600080fd5b6130fd84612e6c565b925061310b60208501612e6c565b915061311960408501612e6c565b90509250925092565b80358015158114612e7e57600080fd5b6000806040838503121561314557600080fd5b823561315081612e2b565b915061315e60208401613122565b90509250929050565b60006020828403121561317957600080fd5b612cff82613122565b6000806040838503121561319557600080fd5b82356131a081612e2b565b915060208301356131b081612e2b565b809150509250929050565b6002810460018216806131cf57607f821691505b6020821081036131f25760e060020a634e487b7102600052602260045260246000fd5b50919050565b60208082526018908201527f43616c6c6572206d75737420626520746865206f776e65720000000000000000604082015260600190565b60e060020a634e487b7102600052601160045260246000fd5b80820180821115610a1b57610a1b61322f565b600181815b8085111561329857816000190482111561327c5761327c61322f565b8085161561328957918102915b60029094049390800290613260565b509250929050565b6000826132af57506001610a1b565b816132bc57506000610a1b565b81600181146132d257600281146132dc576132f9565b6001915050610a1b565b60ff8411156132ed576132ed61322f565b8360020a915050610a1b565b5060208310610133831016604e8410600b841016171561331c575081810a610a1b565b613326838361325b565b806000190482111561333a5761333a61322f565b029392505050565b6000612cff60ff8416836132a0565b60e060020a634e487b7102600052601260045260246000fd5b60008261337957613379613351565b500490565b61ffff8281168282160390808211156133995761339961322f565b5092915050565b6000826133af576133af613351565b500690565b8082028115828204841417610a1b57610a1b61322f565b60e060020a634e487b7102600052603260045260246000fd5b600060ff821660ff81036133fa576133fa61322f565b60010192915050565b81810381811115610a1b57610a1b61322f565b6020808252603c908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f206164647265737300000000606082015260800190565b6020808252600f908201527f496e76616c696420616464726573730000000000000000000000000000000000604082015260600190565b6000602082840312156134bc57600080fd5b8151612cff81612e2b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613517578451600160a060020a0316835293830193918301916001016134f2565b5050600160a060020a0396909616606085015250505060800152939250505056fea2646970667358221220a4f9f0e0d9bd749984690e33eca8b379954972c1cc06048ec14789c337aaef7764736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102d15760003560e060020a90048063590ffdce11610179578063b3d514fb116100e0578063e2b2d17c11610099578063ee5d9c2d11610073578063ee5d9c2d146108e2578063f94aa1b4146108f7578063fc942c641461093e578063fdb78c0e1461095e57600080fd5b8063e2b2d17c14610897578063e4fcfd18146108ac578063eafb5a3c146108c257600080fd5b8063b3d514fb1461050a578063c9b017d3146107c0578063cab5ebea146107f2578063d3f6a15714610812578063d9ceeafc14610832578063dd62ed3e1461085157600080fd5b8063893d20e811610132578063893d20e8146107385780638a63bd9b1461075657806395d89b411461076b578063a22d483214610780578063a9059cbb146107a0578063b1b08f711461050a57600080fd5b8063590ffdce146106555780635cce86cd146106755780636b51be1a146106ae57806370a08231146106ee578063715018a61461070e578063777c68911461072357600080fd5b80631cc43f071161023857806332cde664116101f1578063452ed4f1116101cb578063452ed4f1146105c25780634ada218b146105e25780634fb2e45d146105fc5780634fbee1931461061c57600080fd5b806332cde6641461056257806336fddb04146105825780633f3cf56c146105a257600080fd5b80631cc43f07146104aa57806323b872dd146104ca57806326003957146104ea5780632b28fc7a1461050a5780632cee760214610520578063313ce5671461054057600080fd5b80630f3d9c9f1161028a5780630f3d9c9f146104025780630fa604e414610419578063104a44711461042e578063162790551461044e57806316b176a61461047557806318160ddd1461049557600080fd5b806303fd2a45146102dd5780630445b66714610310578063069d955f1461033457806306fdde031461038a5780630758d924146103ac578063095ea7b3146103d257600080fd5b366102d857005b600080fd5b3480156102e957600080fd5b506102f361dead81565b604051600160a060020a0390911681526020015b60405180910390f35b34801561031c57600080fd5b5061032660135481565b604051908152602001610307565b34801561034057600080fd5b50600a546103659061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610307565b34801561039657600080fd5b5061039f610978565b6040516103079190612ddd565b3480156103b857600080fd5b506014546102f390620100009004600160a060020a031681565b3480156103de57600080fd5b506103f26103ed366004612e40565b610a0a565b6040519015158152602001610307565b34801561040e57600080fd5b50610417610a21565b005b34801561042557600080fd5b50610326610a9a565b34801561043a57600080fd5b50610417610449366004612e83565b610ac0565b34801561045a57600080fd5b506103f2610469366004612e9e565b3b63ffffffff16151590565b34801561048157600080fd5b50610417610490366004612ebb565b610be9565b3480156104a157600080fd5b50610326610d7e565b3480156104b657600080fd5b506104176104c5366004612fbd565b610d96565b3480156104d657600080fd5b506103f26104e536600461307c565b610f37565b3480156104f657600080fd5b506104176105053660046130bd565b610faf565b34801561051657600080fd5b506103266109c481565b34801561052c57600080fd5b5061041761053b366004612e40565b61109c565b34801561054c57600080fd5b5060185460405160ff9091168152602001610307565b34801561056e57600080fd5b5061041761057d3660046130df565b61118c565b34801561058e57600080fd5b5061041761059d366004613132565b6112b1565b3480156105ae57600080fd5b506104176105bd3660046130bd565b611309565b3480156105ce57600080fd5b506015546102f390600160a060020a031681565b3480156105ee57600080fd5b506014546103f29060ff1681565b34801561060857600080fd5b50610417610617366004612e9e565b61142b565b34801561062857600080fd5b506103f2610637366004612e9e565b600160a060020a031660009081526007602052604090205460ff1690565b34801561066157600080fd5b50610417610670366004613132565b611569565b34801561068157600080fd5b506103f2610690366004612e9e565b600160a060020a031660009081526008602052604090205460ff1690565b3480156106ba57600080fd5b50600b546106d39061ffff808216916201000090041682565b6040805161ffff938416815292909116602083015201610307565b3480156106fa57600080fd5b50610326610709366004612e9e565b6115c1565b34801561071a57600080fd5b506104176115dc565b34801561072f57600080fd5b5061032661166c565b34801561074457600080fd5b50600254600160a060020a03166102f3565b34801561076257600080fd5b506103f261168d565b34801561077757600080fd5b5061039f6116e3565b34801561078c57600080fd5b5061041761079b366004612e9e565b6116f2565b3480156107ac57600080fd5b506103f26107bb366004612e40565b611753565b3480156107cc57600080fd5b506015546103f29074010000000000000000000000000000000000000000900460ff1681565b3480156107fe57600080fd5b5061041761080d366004613167565b61176a565b34801561081e57600080fd5b5061041761082d366004613182565b6117d8565b34801561083e57600080fd5b506014546103f290610100900460ff1681565b34801561085d57600080fd5b5061032661086c366004613182565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b3480156108a357600080fd5b506104176118f0565b3480156108b857600080fd5b5061032660125481565b3480156108ce57600080fd5b506104176108dd366004612e9e565b611b78565b3480156108ee57600080fd5b50610417611f16565b34801561090357600080fd5b50600f5460105461091e91600160a060020a03908116911682565b60408051600160a060020a03938416815292909116602083015201610307565b34801561094a57600080fd5b50610417610959366004613132565b611fd8565b34801561096a57600080fd5b506011546103f29060ff1681565b606060168054610987906131bb565b80601f01602080910402602001604051908101604052809291908181526020018280546109b3906131bb565b8015610a005780601f106109d557610100808354040283529160200191610a00565b820191906000526020600020905b8154815290600101906020018083116109e357829003601f168201915b5050505050905090565b6000610a173384846120ea565b5060015b92915050565b600254600160a060020a03163314610a575760405160e560020a62461bcd028152600401610a4e906131f8565b60405180910390fd5b42601254600c54610a689190613248565b1015610a98576000610a79306115c1565b90506013548110610a965750601354610a91816121fd565b42600c555b505b565b601854600090610aae9060ff16600a613342565b600e54610abb919061336a565b905090565b600254600160a060020a03163314610aed5760405160e560020a62461bcd028152600401610a4e906131f8565b60648161ffff161115610b6a5760405160e560020a62461bcd028152602060048201526024808201527f50657263656e746167652073686f756c64206265206265747765656e2030202d60448201527f20313030000000000000000000000000000000000000000000000000000000006064820152608401610a4e565b600b805461ffff191661ffff8316179055610b8681606461337e565b600b805463ffff000019166201000061ffff938416810291909117918290556040805185851681529190920490921660208301527f4b3b1a3c79096c2f80317c279dcb144c53be34043e6580db9c88d2ca81023f3491015b60405180910390a150565b600254600160a060020a03163314610c165760405160e560020a62461bcd028152600401610a4e906131f8565b60008311610c8f5760405160e560020a62461bcd02815260206004820152602160248201527f5468726573686f6c642068617320746f20626520686967686572207468616e2060448201527f30000000000000000000000000000000000000000000000000000000000000006064820152608401610a4e565b610c9a600a836133a0565b158015610ca75750600082115b610d1c5760405160e560020a62461bcd02815260206004820152603c60248201527f7468726573686f6c6444697669736f722068617320746f20626520686967686560448201527f72207468616e203020616e6420646976697369626c65206279203130000000006064820152608401610a4e565b8183600154610d2b91906133b4565b610d35919061336a565b6013819055601282905560408051918252602082018390527fa9c2e33ddea0675d960a3cc03d364783d03ffc4cad71b5fd3b6b32be3b97185791015b60405180910390a1505050565b6000600154600003610d8f57600080fd5b5060015490565b600254600160a060020a03163314610dc35760405160e560020a62461bcd028152600401610a4e906131f8565b8051825114610e175760405160e560020a62461bcd02815260206004820152601360248201527f4163636f756e747320213d20416d6f756e7473000000000000000000000000006044820152606401610a4e565b60005b82518160ff161015610f3257601854610e379060ff16600a613342565b828260ff1681518110610e4c57610e4c6133cb565b6020026020010151610e5e91906133b4565b610e67336115c1565b1015610ede5760405160e560020a62461bcd02815260206004820152602d60248201527f4163636f756e742068617665206c6f77657220746f6b656e622062616c616e6360448201527f65207468616e206e6565646564000000000000000000000000000000000000006064820152608401610a4e565b610f20838260ff1681518110610ef657610ef66133cb565b6020026020010151838360ff1681518110610f1357610f136133cb565b602002602001015161109c565b80610f2a816133e4565b915050610e1a565b505050565b600160a060020a038316600090815260066020908152604080832033845290915281205460001914610f9c57600160a060020a038416600090815260066020908152604080832033845290915281208054849290610f96908490613403565b90915550505b610fa78484846124de565b949350505050565b600254600160a060020a03163314610fdc5760405160e560020a62461bcd028152600401610a4e906131f8565b6103e8600154610fec919061336a565b8183600154610ffb91906133b4565b611005919061336a565b101561107c5760405160e560020a62461bcd02815260206004820152603460248201527f4d61782057616c6c657420616d6f756e74206d7573742062652061626f76652060448201527f302e3125206f6620746f74616c20737570706c790000000000000000000000006064820152608401610a4e565b808260015461108b91906133b4565b611095919061336a565b600e555050565b600254600160a060020a031633146110c95760405160e560020a62461bcd028152600401610a4e906131f8565b60155474010000000000000000000000000000000000000000900460ff161561115d5760405160e560020a62461bcd02815260206004820152602660248201527f4c697175696469747920706f6f6c206d757374206e6f7420626520696e69746960448201527f616c697a656400000000000000000000000000000000000000000000000000006064820152608401610a4e565b60185461116e9060ff16600a613342565b61117890826133b4565b9050610f3233838360008060006001612983565b600254600160a060020a031633146111b95760405160e560020a62461bcd028152600401610a4e906131f8565b6109c48361ffff16111580156111d557506109c48261ffff1611155b80156111e757506109c48161ffff1611155b6112365760405160e560020a62461bcd02815260206004820152601560248201527f43616e6e6f7420657863656564206d6178696d756d00000000000000000000006044820152606401610a4e565b600a805461ffff838116640100000000810265ffff000000001987841662010000810263ffffffff19909616948a16948517959095171617909355604080519182526020820192909252908101919091527fad292e707e8a094bdd1cff9ec5263d8e4e538d8e6e457c032a2dbf7174ebec4b90606001610d71565b600254600160a060020a031633146112de5760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a03919091166000908152600860205260409020805460ff1916911515919091179055565b600254600160a060020a031633146113365760405160e560020a62461bcd028152600401610a4e906131f8565b6103e8600154611346919061336a565b818360015461135591906133b4565b61135f919061336a565b10156113d65760405160e560020a62461bcd02815260206004820152603960248201527f4d6178205472616e73616374696f6e20616d6f756e74206d757374206265206160448201527f626f766520302e3125206f6620746f74616c20737570706c79000000000000006064820152608401610a4e565b80826001546113e591906133b4565b6113ef919061336a565b600d8190556040519081527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac9060200160405180910390a15050565b600254600160a060020a031633146114585760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a0381166114815760405160e560020a62461bcd028152600401610a4e90613416565b61deac19600160a060020a038216016114af5760405160e560020a62461bcd028152600401610a4e90613416565b6002546114c690600160a060020a03166000611569565b6114d1816001611569565b6002546000906114e990600160a060020a03166115c1565b11156115105760025461150e90600160a060020a031682611509826115c1565b6124de565b505b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03831690811790915560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600254600160a060020a031633146115965760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a03919091166000908152600760205260409020805460ff1916911515919091179055565b600160a060020a031660009081526004602052604090205490565b600254600160a060020a031633146116095760405160e560020a62461bcd028152600401610a4e906131f8565b60025461162090600160a060020a03166000611569565b6002805473ffffffffffffffffffffffffffffffffffffffff1916905560405160009081907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6018546000906116809060ff16600a613342565b600d54610abb919061336a565b600254600090600160a060020a031633146116bd5760405160e560020a62461bcd028152600401610a4e906131f8565b6014546116dd903090620100009004600160a060020a03166000196120ea565b50600190565b606060178054610987906131bb565b600254600160a060020a0316331461171f5760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a0381166117485760405160e560020a62461bcd028152600401610a4e90613473565b610a96816001611fd8565b60006117603384846124de565b5060019392505050565b600254600160a060020a031633146117975760405160e560020a62461bcd028152600401610a4e906131f8565b6011805460ff19168215159081179091556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001610bde565b600254600160a060020a031633146118055760405160e560020a62461bcd028152600401610a4e906131f8565b813b63ffffffff161561185d5760405160e560020a62461bcd02815260206004820152601460248201527f43616e6e6f74206265206120636f6e74726163740000000000000000000000006044820152606401610a4e565b803b63ffffffff16156118b55760405160e560020a62461bcd02815260206004820152601460248201527f43616e6e6f74206265206120636f6e74726163740000000000000000000000006044820152606401610a4e565b600f8054600160a060020a0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560108054929093169116179055565b600254600160a060020a0316331461191d5760405160e560020a62461bcd028152600401610a4e906131f8565b60155474010000000000000000000000000000000000000000900460ff161561198b5760405160e560020a62461bcd02815260206004820152601360248201527f4c5020616c726561647920696e697469746564000000000000000000000000006044820152606401610a4e565b601460029054906101000a9004600160a060020a0316600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0591906134aa565b600160a060020a031663e6a4390530601460029054906101000a9004600160a060020a0316600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8e91906134aa565b60405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb91906134aa565b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169182179055611b32906001611fd8565b6015805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055611b7033612a5c565b610a98612b50565b600254600160a060020a03163314611ba55760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a038116611bce5760405160e560020a62461bcd028152600401610a4e90613473565b6000819050600081600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3a91906134aa565b600160a060020a031663e6a439053084600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cae91906134aa565b60405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381865afa158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b91906134aa565b9050600160a060020a038116611ea55781600160a060020a031663c45a01556040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9091906134aa565b600160a060020a031663c9c653963084600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0491906134aa565b60405160e060020a63ffffffff8516028152600160a060020a039283166004820152911660248201526044016020604051808303816000875af1158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7391906134aa565b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055611ece565b6015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b6014805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a0385811682029290921792839055610f32923092919004166000196120ea565b600254600160a060020a03163314611f435760405160e560020a62461bcd028152600401610a4e906131f8565b601454610100900460ff1615611f9e5760405160e560020a62461bcd02815260206004820152601b60248201527f43616e6e6f742063616c6c206166746572206c697175696469747900000000006044820152606401610a4e565b600254604051600160a060020a0390911690303180156108fc02916000818181858888f19350505050158015610a96573d6000803e3d6000fd5b600254600160a060020a031633146120055760405160e560020a62461bcd028152600401610a4e906131f8565b600160a060020a03821661202e5760405160e560020a62461bcd028152600401610a4e90613473565b806120555750600160a060020a03166000908152600560205260409020805460ff19169055565b600354156120bf576203f4806003544261206f9190613403565b116120bf5760405160e560020a62461bcd02815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610a4e565b600160a060020a0382166000908152600560205260409020805460ff19166001179055426003555050565b600160a060020a0383166121435760405160e560020a62461bcd02815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a4e565b600160a060020a03821661219c5760405160e560020a62461bcd02815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a4e565b600160a060020a0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000805460ff19166001178155604080518082018252600b5461ffff80821683526201000091829004166020808401919091523085526006815283852060145492909204600160a060020a03168552529120546000191461228957306000908152600660209081526040808320601454620100009004600160a060020a03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122be576122be6133cb565b6020026020010190600160a060020a03169081600160a060020a031681525050601460029054906101000a9004600160a060020a0316600160a060020a031663ad5c46486040518163ffffffff1660e060020a028152600401602060405180830381865afa158015612334573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235891906134aa565b8160018151811061236b5761236b6133cb565b600160a060020a0392831660209182029290920101526014546040517f791ac947000000000000000000000000000000000000000000000000000000008152620100009091049091169063791ac947906123d29086906000908690309042906004016134c7565b600060405180830381600087803b1580156123ec57600080fd5b505af1158015612400573d6000803e3d6000fd5b5050506020830151303191506000906064906124209061ffff16846133b4565b61242a919061336a565b905060006124388284613403565b602086015190915061ffff161561248557601054604051600160a060020a039091169083156108fc029084906000818181858888f19350505050158015612483573d6000803e3d6000fd5b505b845161ffff16156124cc57600f54604051600160a060020a039091169082156108fc029083906000818181858888f193505050501580156124ca573d6000803e3d6000fd5b505b50506000805460ff1916905550505050565b6000600160a060020a03841661255f5760405160e560020a62461bcd02815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a4e565b600160a060020a0383166125de5760405160e560020a62461bcd02815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a4e565b600082116126575760405160e560020a62461bcd02815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a4e565b600160a060020a0384166000908152600560205260408120548190819060ff161561268557600192506126b3565b600160a060020a03861660009081526005602052604090205460ff16156126af57600191506126b3565b5060015b6126bd8787612c2f565b156128bc5760145460ff166127175760405160e560020a62461bcd02815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a4e565b82806127205750815b156127e757600160a060020a03871660009081526008602052604090205460ff161580156127675750600160a060020a03861660009081526008602052604090205460ff16155b156127e757600d548511156127e75760405160e560020a62461bcd02815260206004820152603060248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f72616e73616374696f6e416d6f756e74000000000000000000000000000000006064820152608401610a4e565b601454600160a060020a03878116620100009092041614801590612809575081155b156128bc57600160a060020a03861660009081526008602052604090205460ff166128bc57600e548561283b886115c1565b6128459190613248565b11156128bc5760405160e560020a62461bcd02815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a4e565b600160a060020a03871660009081526007602052604090205460019060ff16806128fe5750600160a060020a03871660009081526007602052604090205460ff165b15612907575060005b82156129685760005460ff16158015612922575060115460ff165b156129685742601254600c546129389190613248565b1015612968576000612949306115c1565b905060135481106129665750601354612961816121fd565b42600c555b505b61297788888884888888612983565b98975050505050505050565b600160a060020a0387166000908152600460205260408120805487919083906129ad908490613403565b9091555060009050856129c057866129cc565b6129cc8986868a612d06565b600160a060020a0389166000908152600460205260408120805492935083929091906129f9908490613248565b9250508190555087600160a060020a031689600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a4591815260200190565b60405180910390a350600198975050505050505050565b601454610100900460ff1615612add5760405160e560020a62461bcd02815260206004820152602260248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610a4e565b600160a060020a038116600090815260096020908152604091829020805460ff1990811660019081179092556014805461ff001916610100179055601180549091168217905591519182527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579101610bde565b60145460ff1615612ba65760405160e560020a62461bcd02815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a4e565b601454610100900460ff16612c005760405160e560020a62461bcd02815260206004820152601760248201527f4c6971756964697479206d7573742062652061646465640000000000000000006044820152606401610a4e565b6014805460ff1916600190811790915580546103e891612c2091906133b4565b612c2a919061336a565b601355565b600254600090600160a060020a03848116911614801590612c5e5750600254600160a060020a03838116911614155b8015612c755750600254600160a060020a03163214155b8015612c9a5750600160a060020a03821660009081526009602052604090205460ff16155b8015612cbf5750600160a060020a03831660009081526009602052604090205460ff16155b8015612cd65750600160a060020a03821661dead14155b8015612cea5750600160a060020a03821615155b8015612cff5750600160a060020a0383163014155b9392505050565b6000808415612d1c5750600a5461ffff16612d46565b8315612d355750600a5462010000900461ffff16612d46565b50600a54640100000000900461ffff165b6000612710612d5583866133b4565b612d5f919061336a565b30600090815260046020526040812080549293508392909190612d83908490613248565b90915550506040518181523090600160a060020a038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612dd28185613403565b979650505050505050565b600060208083528351808285015260005b81811015612e0a57858101830151858201604001528201612dee565b506000604082860101526040601f19601f8301168501019250505092915050565b600160a060020a0381168114610a9657600080fd5b60008060408385031215612e5357600080fd5b8235612e5e81612e2b565b946020939093013593505050565b803561ffff81168114612e7e57600080fd5b919050565b600060208284031215612e9557600080fd5b612cff82612e6c565b600060208284031215612eb057600080fd5b8135612cff81612e2b565b600080600060608486031215612ed057600080fd5b505081359360208301359350604090920135919050565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612f2957612f29612ee7565b604052919050565b600067ffffffffffffffff821115612f4b57612f4b612ee7565b5060209081020190565b600082601f830112612f6657600080fd5b81356020612f7b612f7683612f31565b612f00565b82815291810284018101918181019086841115612f9757600080fd5b8286015b84811015612fb25780358352918301918301612f9b565b509695505050505050565b60008060408385031215612fd057600080fd5b823567ffffffffffffffff80821115612fe857600080fd5b818501915085601f830112612ffc57600080fd5b8135602061300c612f7683612f31565b8281529181028401810191818101908984111561302857600080fd5b948201945b8386101561304f57853561304081612e2b565b8252948201949082019061302d565b9650508601359250508082111561306557600080fd5b5061307285828601612f55565b9150509250929050565b60008060006060848603121561309157600080fd5b833561309c81612e2b565b925060208401356130ac81612e2b565b929592945050506040919091013590565b600080604083850312156130d057600080fd5b50508035926020909101359150565b6000806000606084860312156130f457600080fd5b6130fd84612e6c565b925061310b60208501612e6c565b915061311960408501612e6c565b90509250925092565b80358015158114612e7e57600080fd5b6000806040838503121561314557600080fd5b823561315081612e2b565b915061315e60208401613122565b90509250929050565b60006020828403121561317957600080fd5b612cff82613122565b6000806040838503121561319557600080fd5b82356131a081612e2b565b915060208301356131b081612e2b565b809150509250929050565b6002810460018216806131cf57607f821691505b6020821081036131f25760e060020a634e487b7102600052602260045260246000fd5b50919050565b60208082526018908201527f43616c6c6572206d75737420626520746865206f776e65720000000000000000604082015260600190565b60e060020a634e487b7102600052601160045260246000fd5b80820180821115610a1b57610a1b61322f565b600181815b8085111561329857816000190482111561327c5761327c61322f565b8085161561328957918102915b60029094049390800290613260565b509250929050565b6000826132af57506001610a1b565b816132bc57506000610a1b565b81600181146132d257600281146132dc576132f9565b6001915050610a1b565b60ff8411156132ed576132ed61322f565b8360020a915050610a1b565b5060208310610133831016604e8410600b841016171561331c575081810a610a1b565b613326838361325b565b806000190482111561333a5761333a61322f565b029392505050565b6000612cff60ff8416836132a0565b60e060020a634e487b7102600052601260045260246000fd5b60008261337957613379613351565b500490565b61ffff8281168282160390808211156133995761339961322f565b5092915050565b6000826133af576133af613351565b500690565b8082028115828204841417610a1b57610a1b61322f565b60e060020a634e487b7102600052603260045260246000fd5b600060ff821660ff81036133fa576133fa61322f565b60010192915050565b81810381811115610a1b57610a1b61322f565b6020808252603c908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f206164647265737300000000606082015260800190565b6020808252600f908201527f496e76616c696420616464726573730000000000000000000000000000000000604082015260600190565b6000602082840312156134bc57600080fd5b8151612cff81612e2b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613517578451600160a060020a0316835293830193918301916001016134f2565b5050600160a060020a0396909616606085015250505060800152939250505056fea2646970667358221220a4f9f0e0d9bd749984690e33eca8b379954972c1cc06048ec14789c337aaef7764736f6c63430008130033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

A novel AI trading companion designed to capture the emergence of trends.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.