Contract 0xe0a189C975e4928222978A74517442239a0b86ff 7

Token Contract 
 
 
Txn Hash
Method
Block
From
To
Value
0xd848ec5c9245268b3d20266eaea0157935c032a0f5b73a6c725df44cc120080bTransfer161316782022-12-07 8:33:4711 hrs 36 mins ago0x1d225b71464128ca3ee0120866ec66842f47e7c3 IN  Keys Token: KEYS Token0 Ether0.00046909 12.94639711
0xda78e533af61d721d83db7e7dbb100c6036297dc30737eee9bdd2bfe5f9ee705Transfer161315642022-12-07 8:10:3511 hrs 59 mins ago0x1d225b71464128ca3ee0120866ec66842f47e7c3 IN  Keys Token: KEYS Token0 Ether0.00047409 13.08435718
0xb87763cccdfaf6b574ba9038ec07f1220f9b4bf58dc09147e96ddced49fe7d20Approve161242372022-12-06 7:23:591 day 12 hrs ago0x311e34a3492aa572195f4c8f3bdfbcbb9fe9c3ea IN  Keys Token: KEYS Token0 Ether0.00068725 14.60227116
0xee78f18cc8c30b3d71c89d4f36224237cd756383ec4eb33740370c3047ad2657Approve161229522022-12-06 3:05:591 day 17 hrs ago0xb8972c85cea07cc3b636e6623df43660b18d3521 IN  Keys Token: KEYS Token0 Ether0.00064314 13.77736355
0x71203a66f14f8e8b3ac04a6574053166a5da5ed8911634a1550d71c96c30b0abApprove161225592022-12-06 1:47:111 day 18 hrs ago0xa0df91342bbb71a9c941d999a602555c18c9bbd5 IN  Keys Token: KEYS Token0 Ether0.00058345 12.39679339
0x5cec23de6f81760c66a451c396bedeaea11c41adf1ef21625dcef89674cff022Approve161213322022-12-05 21:40:471 day 22 hrs ago0xda61d873e95e64d15def0895dc4a285235f15b79 IN  Keys Token: KEYS Token0 Ether0.00065984 14.01976261
0xd222e6936487c075a5b4a28a6475d382f9e11916e6b8061339456013ba2a838dApprove161211352022-12-05 21:01:231 day 23 hrs ago0xcd11696847bb7aeb171099991fcd4652e3822e62 IN  Keys Token: KEYS Token0 Ether0.00063311 13.45198434
0x9796623f63a93e397960386c62ce20f904bea21a54a63b7d32b3996c1240b8d8Approve161205882022-12-05 19:11:232 days 58 mins agoENS Name defimark.eth IN  Keys Token: KEYS Token0 Ether0.00094823 20.14730293
0xbc8d15845815d03e72fe34020cc82ccdc9bf5b1da72a806403a9772e23e69be4Transfer161196362022-12-05 15:56:472 days 4 hrs ago0x4be5881277226ea57438d57f121df53c78e0bdae IN  Keys Token: KEYS Token0 Ether0.00094318 16.21768639
0x95e966116a3391534984e66e7e29dd457c155e48e636c677de661c5c306d0fffApprove161192792022-12-05 14:43:592 days 5 hrs ago0x9b3ed1188fafe9568e24ee2cd00683350879aea6 IN  Keys Token: KEYS Token0 Ether0.00070121 14.89881764
0x5aee47c5d0bd41841b8bd1524f8c9a5d360c236688b58cafffc2309a3407d36bApprove161164172022-12-05 5:09:232 days 15 hrs ago0x92308846e507ee2988b79aaeaf584fca95b22fed IN  Keys Token: KEYS Token0 Ether0.00058828 12.49950588
0x3a365c84b6412ede60db2edf84adba76e608cb53a6278402d31236d72d648196Approve161078932022-12-04 0:33:233 days 19 hrs ago0x0625b5df1981506ae8cc41fc9ed6d7fe044089ff IN  Keys Token: KEYS Token0 Ether0.00057258 12.26593847
0xb2c56ae28ff937d0db6893e2c9963ec66a09cde09c45ad555d2d86fac0041b9eApprove161043492022-12-03 12:40:474 days 7 hrs ago0x95a342a69cb7129a8a2bdd2ba0ad2d4df95b1f36 IN  Keys Token: KEYS Token0 Ether0.00063549 13.50256291
0x1b4790c4886e1d9daa3b7e0436aef2bcb7d8dd9a16b24718a703845f5d231579Approve160908542022-12-01 15:29:116 days 4 hrs agoENS Name ext.eth IN  Keys Token: KEYS Token0 Ether0.00066767 14.18619612
0xc7d652be85d739819a30cd1fc771d3cec9f58b3b7177515789b561b66a8e305cTransfer160891112022-12-01 9:38:236 days 10 hrs ago0x526e5486d147618a73f024d89ca67cba990643f1 IN  Keys Token: KEYS Token0 Ether0.00076714 13.19062661
0x2e6dc8276bc80f29390144646939dcda9cf3b704f7423c1e5fc560aa9a002849Approve160870152022-12-01 2:37:236 days 17 hrs ago0x0496267810e46d6b8f296c6aaac64bf34bdc614f IN  Keys Token: KEYS Token0 Ether0.00050883 10.81124054
0x3a357950a587e5dc8e703f322175c5fa0bd3260bf848b533760819c513957cecTransfer160859322022-11-30 22:59:116 days 21 hrs ago0x4fce374af1c3d29cfb3069afb0684d42f6522a8a IN  Keys Token: KEYS Token0 Ether0.00102368 17.59816438
0xbebd5fdf5c6540b181b7d398c00dab524a2aede8666f9fcc475e6c2125d93c01Approve160853262022-11-30 20:56:476 days 23 hrs ago0xf26d0bab5aa56cbaff390cfee9a01a62b60a437a IN  Keys Token: KEYS Token0 Ether0.00057429 12.30247798
0x235329a9141714e66b027464f18882fe4423eadb1923fcf933b08009834c04a3Approve160824102022-11-30 11:09:117 days 9 hrs ago0xa58ef1ec517440bf3a8c01580686e054b79dcb77 IN  Keys Token: KEYS Token0 Ether0.00056863 12.08183549
0x476ea91ce3eb6d85b8786e06a98248447f4113111f201b09d5e0713d293a9641Approve160809152022-11-30 6:08:117 days 14 hrs ago0x7b84e57b94f94d9de4782be5149b49fe10fcc376 IN  Keys Token: KEYS Token0 Ether0.00058131 12.35135089
0xfc75867096190b24d33991489bddab63863a22a14e6361593e9e1fc919beed14Approve160808872022-11-30 6:02:357 days 14 hrs ago0x7b84e57b94f94d9de4782be5149b49fe10fcc376 IN  Keys Token: KEYS Token0 Ether0.00051166 10.871356
0xc70f395ce24af11e6183d925533f8c5ed539ff22d909bd92b97d478d1978f0b2Transfer160796162022-11-30 1:47:237 days 18 hrs ago0x808e3de77975b9b050d4a7dcbfce909e20fcf4b5 IN  Keys Token: KEYS Token0 Ether0.00072037 12.38653482
0x90d7468cfe2ce35a2810a32b1eee0261a4fec8c43d31121e062d5b0eab2e59d9Approve160777662022-11-29 19:34:238 days 35 mins ago0xa212102878eda968c772b5fb9069258b2bf93678 IN  Keys Token: KEYS Token0 Ether0.00056142 11.92879213
0x97ea672f87b71d7d5d3f7c96756487cfc359a4f0c53cc48d1fae65452d244174Approve160772542022-11-29 17:51:358 days 2 hrs agoENS Name linkparadigm.eth IN  Keys Token: KEYS Token0 Ether0.00061098 12.98175412
0xd3e06af22a33beac97de767453818697d811abfc37ed8bc66dc889ab5181db4bTransfer160770882022-11-29 17:18:238 days 2 hrs ago0xa316c757e3aa5872578d6a790ccfa0767a9468f2 IN  Keys Token: KEYS Token0 Ether0.00069134 11.89225726
[ Download CSV Export 

OVERVIEW

Holding KEYS enables users to buy and sell real estate and luxury assets in both the metaverse and physical world, gain access to exclusive investment opportunities and events, and become part of a powerful network.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2aa396d7e45d6bdaa83c8ab1c2e17587d86b48c46cac6c694ff7337114dfa5c4160685732022-11-28 12:46:119 days 7 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.005 Ether
0x558220db48735c871d4728d136eac72671b3721001442149b9a579c76e4ac221159520282022-11-12 6:05:3525 days 14 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.02819 Ether
0xacced0faa45b9ff210f7d635fac3f2ecbeb756d98db607c8b6c171e0c93672a6159390572022-11-10 10:35:2327 days 9 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.078 Ether
0x64b3d831d0fb9988e617da7daca58e94567c62bfccbaaa0021536cb21e19c1d8159369992022-11-10 3:40:4727 days 16 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.4 Ether
0x77c92643248ae93c61d5f5b88f0640f1e0432a9e0a5cf4e532e0767923b47c60159365022022-11-10 2:01:1127 days 18 hrs ago Keys Token: KEYS Token Uniswap V2: Router 25.9170711 Ether
0x95802397e5d40042a4c54ec1168b9960696d81a1ea4539c201c520cfd3059329158676692022-10-31 11:13:2337 days 8 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.108 Ether
0xf6b36caf9eeffcf8bef9d11bd4d1139bae3d4ff6a0c204d54224e22efcc83069158545852022-10-29 15:24:1139 days 4 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.0015 Ether
0xe94d856110d5eef5142accc4f9c7fd29a62e2c1186ef1e4fc500badff0fcbdb7158363122022-10-27 2:05:5941 days 18 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.093 Ether
0x30647d6e57d55b74287fe343e27c0adf61574e2e108c8773d3d1984eaa342aa1158274372022-10-25 20:21:1142 days 23 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.06776422 Ether
0xe3db4c23b026769c65bc26cc22b5565baf2edaddda5d6cef9d4d946284e55c7c158222732022-10-25 3:01:1143 days 17 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.19 Ether
0x6866f154d2d70232cf39e405f5577a824f4f9e7d5ade2db45fcc5de4212316ca158173212022-10-24 10:18:4744 days 9 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.00370774 Ether
0x9cc420b355641d334261b8380b6e88dd29f009d07a2fb4435493cfa53787e52c158047322022-10-22 16:06:3546 days 4 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.04 Ether
0xc63e772580cb283feb3ce258b7e71ae272828defdc0923b0e4cba6f30046d6fb157701702022-10-17 20:20:1150 days 23 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.606375 Ether
0xc63e772580cb283feb3ce258b7e71ae272828defdc0923b0e4cba6f30046d6fb157701702022-10-17 20:20:1150 days 23 hrs ago 0x810487135d29f35f06f1075b48d5978f1791d743 Keys Token: KEYS Token0.606375 Ether
0x71c3ed06f712170cf6e3dd926ae5d0f4e58638ab74d7a8669d2404d21a9be01c157700922022-10-17 20:04:3551 days 5 mins ago Keys Token: KEYS Token Uniswap V2: Router 20.72765 Ether
0x71c3ed06f712170cf6e3dd926ae5d0f4e58638ab74d7a8669d2404d21a9be01c157700922022-10-17 20:04:3551 days 5 mins ago 0x810487135d29f35f06f1075b48d5978f1791d743 Keys Token: KEYS Token0.72765 Ether
0x33d745f5604ed6b593af5abd4fd59a4074fd9834e3356f183af89880150d6865157700792022-10-17 20:01:5951 days 7 mins ago Keys Token: KEYS Token Uniswap V2: Router 20.24255 Ether
0x33d745f5604ed6b593af5abd4fd59a4074fd9834e3356f183af89880150d6865157700792022-10-17 20:01:5951 days 7 mins ago 0x810487135d29f35f06f1075b48d5978f1791d743 Keys Token: KEYS Token0.24255 Ether
0x878a12e9c885c3c79a383d78249a2c4b0201312a091da50fd70daeb5da26bc0b157700592022-10-17 19:57:5951 days 11 mins ago Keys Token: KEYS Token Uniswap V2: Router 20.9702 Ether
0x878a12e9c885c3c79a383d78249a2c4b0201312a091da50fd70daeb5da26bc0b157700592022-10-17 19:57:5951 days 11 mins ago 0x810487135d29f35f06f1075b48d5978f1791d743 Keys Token: KEYS Token0.9702 Ether
0x0181c74d22ecb56d2bbebdbcb07b6c3b63d4a6802dc7031507f08133174a6538157622912022-10-16 17:53:1152 days 2 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.00389 Ether
0x08835aa0abed5db0f6df099ed10dd042acc66564aeca4fa7bf64a37da8b4ba34157589292022-10-16 6:37:1152 days 13 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.00052 Ether
0x3b58977441312194b6342a9da4c43e5c2408a571506457df2533367bf4924997157499572022-10-15 0:33:3553 days 19 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.08 Ether
0x2ce5a3f4fa68b4148b485ddebdc51dbba74411b2a9e20ad2b1aae6af4be36bfd157488712022-10-14 20:55:2353 days 23 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.105 Ether
0x6ba44b8ad0b737630d7457f3425af6388ab4f63f59bff172a0388061cfa2639a157402752022-10-13 16:05:5955 days 4 hrs ago Keys Token: KEYS Token Uniswap V2: Router 20.35 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KEYS

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : Keys.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.4;

import "./SafeMath.sol";
import "./Address.sol";
import "./IERC20.sol";
import "./IUniswapV2Router02.sol";

/**
 * Contract: KEYS Token
 * Contract Developed By: DeFi Mark ( MoonMark )
 *
 * Keys is a project aimed to create revolutionary blockchain products built
 * Around the exchange of luxury assets in both the metaverse and physical world
 * Exlusive only to $KEYS Token Holders
 * 
 *  Join us on Discord:
 *  https://discord.gg/keystoken
 * 
 */
contract KEYS is IERC20 {
    
    using SafeMath for uint256;
    using Address for address;

    // token data
    string constant _name = "Keys";
    string constant _symbol = "KEYS";
    uint8 constant _decimals = 9;

    // 1 Billion Starting Supply
    uint256 _totalSupply = 10**9 * 10**_decimals;
    
    // Bot Prevention
    uint256 maxTransfer;
    bool maxTransferCheckEnabled;
    
    // balances
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    // Fees
    uint256 public fee = 3; // 3% transfer fee
    
    // fee exemption for staking / utility
    mapping ( address => bool ) public isFeeExempt;

    // Uniswap Router
    IUniswapV2Router02 _router; 
    
    // ETH -> Token
    address[] path;
    
    // Tokens -> ETH
    address[] sellPath;
    
    // owner
    address _owner;
    
    // multisignature wallet
    address _developmentFund;
    
    // Auto Swapper Enabled
    bool swapEnabled;

    modifier onlyOwner() {
        require(msg.sender == _owner, 'Only Owner Function');
        _;
    }

    // initialize some stuff
    constructor () {
        
        // router
        _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        // ETH -> Token
        path = new address[](2);
        path[0] = _router.WETH();
        path[1] = address(this);
        
        // Token -> ETH
        sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = _router.WETH();
        
        // Dev Fund
        _developmentFund = 0xfCacEAa7b4cf845f2cfcE6a3dA680dF1BB05015c;
        
        // Enable Auto Swapper
        swapEnabled = true;
        
        // Anti-Bot Prevention
        maxTransfer = _totalSupply.div(100);
        maxTransferCheckEnabled = true;

        // fee exempt fund + owner + router for LP injection
        isFeeExempt[msg.sender] = true;
        isFeeExempt[_developmentFund] = true;
        isFeeExempt[address(this)] = true;
        
        // allocate tokens to owner
        _balances[msg.sender] = _totalSupply;

        // ownership
        _owner = msg.sender;
        
        // emit allocations
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }
  
    /** Transfer Function */
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    /** Transfer Function */
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, 'Insufficient Allowance');
        return _transferFrom(sender, recipient, amount);
    }
    
    /** Internal Transfer */
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        // make standard checks
        require(recipient != address(0) && sender != address(0), "Transfer To Zero Address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        // check anti-bot
        if (maxTransferCheckEnabled && msg.sender != _owner) {
            require(amount <= maxTransfer, 'Maximum Transfer Threshold Reached');
        }
        
        // subtract full amount from sender
        _balances[sender] = _balances[sender].sub(amount, 'Insufficient Balance');
        
        // fee exempt
        bool takeFee = !( isFeeExempt[sender] || isFeeExempt[recipient] );
        
        // calculate taxed amount
        uint256 taxAmount = takeFee ? amount.mul(fee).div(10**2) : 0;
        
        // amount to give to recipient (amount - tax)
        uint256 receiveAmount = amount.sub(taxAmount);
        
        // give potentially reduced amount to recipient
        _balances[recipient] = _balances[recipient].add(receiveAmount);
        emit Transfer(sender, recipient, receiveAmount);
        
        // allocate to marketing
        if (taxAmount > 0) {
            _balances[_developmentFund] = _balances[_developmentFund].add(taxAmount);
            emit Transfer(sender, _developmentFund, taxAmount);
        }
        return true;
    }
    
    function burnTokens(uint256 numTokens) external {
        _burnTokens(numTokens * 10**_decimals);
    }
    
    function burnAllTokens() external {
        _burnTokens(_balances[msg.sender]);
    }
    
    function burnTokensIncludingDecimals(uint256 numTokens) external {
        _burnTokens(numTokens);
    }
    
    function purchaseTokenForAddress(address receiver) external payable {
        require(msg.value >= 10**4, 'Amount Too Few');
        _purchaseToken(receiver);
    }
    
    function sellTokensForETH(address receiver, uint256 numTokens) external {
        _sellTokensForETH(receiver, numTokens);
    }
    
    function sellTokensForETH(uint256 numTokens) external {
        _sellTokensForETH(msg.sender, numTokens);
    }
    
    function sellTokensForETHWholeTokenAmounts(uint256 numTokens) external {
        _sellTokensForETH(msg.sender, numTokens*10**_decimals);
    }
    

    ///////////////////////////////////
    //////   OWNER FUNCTIONS    ///////
    ///////////////////////////////////
    
    function setUniswapRouterAddress(address router) external onlyOwner {
        _router = IUniswapV2Router02(router);
        emit SetUniswapRouterAddress(router);
    }
    
    function setSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
        emit SetSwapEnabled(enabled);
    }
    
    /** Withdraws Tokens Mistakingly Sent To Contract */
    function withdrawTokens(address token) external onlyOwner {
        uint256 bal = IERC20(token).balanceOf(address(this));
        require(bal > 0, 'Zero Balance');
        IERC20(token).transfer(msg.sender, bal);
    }
    
    /** Sets Maximum Transaction Data */
    function setMaxTransactionData(bool checkEnabled, uint256 transferThreshold) external onlyOwner {
        if (checkEnabled) {
            require(transferThreshold >= _totalSupply.div(1000), 'Threshold Too Few');   
        }
        maxTransferCheckEnabled = checkEnabled;
        maxTransfer = transferThreshold;
        emit MaxTransactionDataSet(checkEnabled, transferThreshold);
    }
    
    /** Updates The Address Of The Development Fund Receiver */
    function updateDevelopmentFundingAddress(address newFund) external onlyOwner {
        _developmentFund = newFund;
        emit UpdatedDevelopmentFundingAddress(newFund);
    }
    
    /** Excludes Contract From Fees */
    function setFeeExemption(address wallet, bool exempt) external onlyOwner {
        require(wallet != address(0));
        isFeeExempt[wallet] = exempt;
        emit SetFeeExemption(wallet, exempt);
    }
    
    /** Sets Transfer Fees */
    function setFee(uint256 newFee) external onlyOwner {
        require(newFee <= 10, 'Fee Too High');
        fee = newFee;
        emit SetFee(newFee);
    }
    
    /** Transfers Ownership To Another User */
    function transferOwnership(address newOwner) external onlyOwner {
        _owner = newOwner;
        emit TransferOwnership(newOwner);
    }
    
    /** Transfers Ownership To Zero Address */
    function renounceOwnership() external onlyOwner {
        _owner = address(0);
        emit TransferOwnership(address(0));
    }
    
    
    ///////////////////////////////////
    //////  INTERNAL FUNCTIONS  ///////
    ///////////////////////////////////
    
    
    function _sellTokensForETH(address receiver, uint256 numberTokens) internal {

        // checks
        require(_balances[msg.sender] >= numberTokens, 'Insufficient Balance');
        require(receiver != address(this) && receiver != address(0), 'Insufficient Destination');
        require(swapEnabled, 'Swapping Disabled');
        
        // transfer in tokens
        _balances[msg.sender] = _balances[msg.sender].sub(numberTokens, 'Insufficient Balance');
        
        // divvy up amount
        uint256 tax = isFeeExempt[msg.sender] ? 0 : numberTokens.mul(fee).div(10**2);
        
        // amount to send to recipient
        uint256 sendAmount = numberTokens.sub(tax);
        require(sendAmount > 0, 'Zero Tokens To Send');
        
        // Allocate To Contract
        _balances[address(this)] = _balances[address(this)].add(sendAmount);
        emit Transfer(msg.sender, address(this), sendAmount);
        
        // Allocate Tax
        if (tax > 0) {
            _balances[_developmentFund] = _balances[_developmentFund].add(tax);
            emit Transfer(msg.sender, _developmentFund, tax);
        }
        
        // Approve Of Router To Move Tokens
        _allowances[address(this)][address(_router)] = sendAmount;
        
        // make the swap
        _router.swapExactTokensForETH(
            sendAmount,
            0,
            sellPath,
            receiver,
            block.timestamp + 30
        );
    
    }
    
    function _purchaseToken(address receiver) internal {
        _router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            receiver,
            block.timestamp + 30
        );
    }
    
    function _burnTokens(uint256 numTokens) internal {
        require(_balances[msg.sender] >= numTokens && numTokens > 0, 'Insufficient Balance');
        // remove from balance and supply
        _balances[msg.sender] = _balances[msg.sender].sub(numTokens, 'Insufficient Balance');
        _totalSupply = _totalSupply.sub(numTokens, 'Insufficient Supply');
        // emit transfer to zero
        emit Transfer(msg.sender, address(0), numTokens);
    }
    
    /** Purchase Tokens For Holder */
    receive() external payable {
        _purchaseToken(msg.sender);
    }
    
    
    ///////////////////////////////////
    //////        EVENTS        ///////
    ///////////////////////////////////
    
    event UpdatedDevelopmentFundingAddress(address newFund);
    event TransferOwnership(address newOwner);
    event SetSwapEnabled(bool enabled);
    event SetFee(uint256 newFee);
    event SetUniswapRouterAddress(address router);
    event SetFeeExemption(address Contract, bool exempt);
    event MaxTransactionDataSet(bool checkEnabled, uint256 transferThreshold);
}

File 2 of 5 : SafeMath.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.4;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 3 of 5 : Address.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.4;


library Address {

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

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

}

File 4 of 5 : IERC20.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.4;

interface IERC20 {

    function totalSupply() external view returns (uint256);
    
    function symbol() external view returns(string memory);
    
    function name() external view returns(string memory);

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

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

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

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

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

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

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

File 5 of 5 : IUniswapV2Router02.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.4;


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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"checkEnabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"transferThreshold","type":"uint256"}],"name":"MaxTransactionDataSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"SetFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Contract","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"SetFeeExemption","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"}],"name":"SetUniswapRouterAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newFund","type":"address"}],"name":"UpdatedDevelopmentFundingAddress","type":"event"},{"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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"burnTokensIncludingDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"purchaseTokenForAddress","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"sellTokensForETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"sellTokensForETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"sellTokensForETHWholeTokenAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExemption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"checkEnabled","type":"bool"},{"internalType":"uint256","name":"transferThreshold","type":"uint256"}],"name":"setMaxTransactionData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setUniswapRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFund","type":"address"}],"name":"updateDevelopmentFundingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000aba565b633b9aca0062000025919062000bf7565b60005560036005553480156200003a57600080fd5b50737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600267ffffffffffffffff811115620000d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015620001015781602001602082028036833780820191505090505b50600890805190602001906200011992919062000887565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200018357600080fd5b505afa15801562000198573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001be91906200094c565b6008600081548110620001fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503060086001815481106200027f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600267ffffffffffffffff81111562000309577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015620003385781602001602082028036833780820191505090505b50600990805190602001906200035092919062000887565b503060096000815481106200038e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043f57600080fd5b505afa15801562000454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047a91906200094c565b6009600181548110620004b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fcaceaa7b4cf845f2cfce6a3da680df1bb05015c600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60146101000a81548160ff0219169083151502179055506200058b6064600054620007cd60201b620016b11790919060201c565b6001819055506001600260006101000a81548160ff0219169083151502179055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600054600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600054604051620007bf9190620009ee565b60405180910390a362000d6f565b60006200081783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200081f60201b60201c565b905092915050565b6000808311829062000869576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008609190620009ca565b60405180910390fd5b50600083856200087a919062000a27565b9050809150509392505050565b82805482825590600052602060002090810192821562000903579160200282015b82811115620009025782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620008a8565b5b50905062000912919062000916565b5090565b5b808211156200093157600081600090555060010162000917565b5090565b600081519050620009468162000d55565b92915050565b6000602082840312156200095f57600080fd5b60006200096f8482850162000935565b91505092915050565b6000620009858262000a0b565b62000991818562000a16565b9350620009a381856020860162000ca3565b620009ae8162000d37565b840191505092915050565b620009c48162000c8c565b82525050565b60006020820190508181036000830152620009e6818462000978565b905092915050565b600060208201905062000a056000830184620009b9565b92915050565b600081519050919050565b600082825260208201905092915050565b600062000a348262000c8c565b915062000a418362000c8c565b92508262000a545762000a5362000d08565b5b828204905092915050565b6000808291508390505b600185111562000ab15780860481111562000a895762000a8862000cd9565b5b600185161562000a995780820291505b808102905062000aa98562000d48565b945062000a69565b94509492505050565b600062000ac78262000c8c565b915062000ad48362000c96565b925062000b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b0b565b905092915050565b60008262000b1d576001905062000bf0565b8162000b2d576000905062000bf0565b816001811462000b46576002811462000b515762000b87565b600191505062000bf0565b60ff84111562000b665762000b6562000cd9565b5b8360020a91508482111562000b805762000b7f62000cd9565b5b5062000bf0565b5060208310610133831016604e8410600b841016171562000bc15782820a90508381111562000bbb5762000bba62000cd9565b5b62000bf0565b62000bd0848484600162000a5f565b9250905081840481111562000bea5762000be962000cd9565b5b81810290505b9392505050565b600062000c048262000c8c565b915062000c118362000c8c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c4d5762000c4c62000cd9565b5b828202905092915050565b600062000c658262000c6c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101562000cc357808201518184015260208101905062000ca6565b8381111562000cd3576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b62000d608162000c58565b811462000d6c57600080fd5b50565b6139ab8062000d7f6000396000f3fe6080604052600436106101a05760003560e01c8063751fd179116100ec578063ddca3f431161008a578063f209d36511610064578063f209d365146105b5578063f2fde38b146105de578063f417fbed14610607578063ff329ca014610630576101b0565b8063ddca3f4314610545578063e01af92c14610570578063e3f241f814610599576101b0565b8063bd240bb7116100c6578063bd240bb71461049f578063c17e2aa1146104c8578063db15d185146104df578063dd62ed3e14610508576101b0565b8063751fd1791461040e57806395d89b4114610437578063a9059cbb14610462576101b0565b80633f4218e01161015957806369fe0e2d1161013357806369fe0e2d146103685780636d1b229d1461039157806370a08231146103ba578063715018a6146103f7576101b0565b80633f4218e0146102d957806349df728c14610316578063670ecb1c1461033f576101b0565b806306fdde03146101b5578063095ea7b3146101e057806318160ddd1461021d57806323b872dd14610248578063313ce5671461028557806336c1c541146102b0576101b0565b366101b0576101ae33610659565b005b600080fd5b3480156101c157600080fd5b506101ca6106fe565b6040516101d79190612f0d565b60405180910390f35b3480156101ec57600080fd5b50610207600480360381019061020291906129b9565b61073b565b6040516102149190612e7d565b60405180910390f35b34801561022957600080fd5b5061023261082d565b60405161023f91906130ef565b60405180910390f35b34801561025457600080fd5b5061026f600480360381019061026a919061292e565b610836565b60405161027c9190612e7d565b60405180910390f35b34801561029157600080fd5b5061029a610992565b6040516102a79190613164565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190612ac4565b61099b565b005b3480156102e557600080fd5b5061030060048036038101906102fb91906128c9565b6109a7565b60405161030d9190612e7d565b60405180910390f35b34801561032257600080fd5b5061033d600480360381019061033891906128c9565b6109c7565b005b34801561034b57600080fd5b5061036660048036038101906103619190612ac4565b610bb9565b005b34801561037457600080fd5b5061038f600480360381019061038a9190612ac4565b610bde565b005b34801561039d57600080fd5b506103b860048036038101906103b39190612ac4565b610cf2565b005b3480156103c657600080fd5b506103e160048036038101906103dc91906128c9565b610d16565b6040516103ee91906130ef565b60405180910390f35b34801561040357600080fd5b5061040c610d5f565b005b34801561041a57600080fd5b506104356004803603810190610430919061297d565b610e6b565b005b34801561044357600080fd5b5061044c610fc9565b6040516104599190612f0d565b60405180910390f35b34801561046e57600080fd5b50610489600480360381019061048491906129b9565b611006565b6040516104969190612e7d565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906129b9565b61101b565b005b3480156104d457600080fd5b506104dd611029565b005b3480156104eb57600080fd5b50610506600480360381019061050191906128c9565b611073565b005b34801561051457600080fd5b5061052f600480360381019061052a91906128f2565b61117e565b60405161053c91906130ef565b60405180910390f35b34801561055157600080fd5b5061055a611205565b60405161056791906130ef565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190612a36565b61120b565b005b6105b360048036038101906105ae91906128c9565b6112ef565b005b3480156105c157600080fd5b506105dc60048036038101906105d79190612a88565b611340565b005b3480156105ea57600080fd5b50610605600480360381019061060091906128c9565b61148e565b005b34801561061357600080fd5b5061062e60048036038101906106299190612ac4565b611599565b005b34801561063c57600080fd5b50610657600480360381019061065291906128c9565b6115a6565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95346000600885601e426106aa919061322a565b6040518663ffffffff1660e01b81526004016106c99493929190612ec1565b6000604051808303818588803b1580156106e257600080fd5b505af11580156106f6573d6000803e3d6000fd5b505050505050565b60606040518060400160405280600481526020017f4b65797300000000000000000000000000000000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161081b91906130ef565b60405180910390a36001905092915050565b60008054905090565b60006108fe826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116fb9092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061098984848461175f565b90509392505050565b60006009905090565b6109a481611d35565b50565b60066020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e9061300f565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a929190612e10565b60206040518083038186803b158015610aaa57600080fd5b505afa158015610abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae29190612aed565b905060008111610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e906130cf565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610b62929190612e54565b602060405180830381600087803b158015610b7c57600080fd5b505af1158015610b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb49190612a5f565b505050565b610bdb336009600a610bcb9190613304565b83610bd69190613422565b611f4a565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c659061300f565b60405180910390fd5b600a811115610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca99061308f565b60405180910390fd5b806005819055507e172ddfc5ae88d08b3de01a5a187667c37a5a53989e8c175055cb6c993792a781604051610ce791906130ef565b60405180910390a150565b610d136009600a610d039190613304565b82610d0e9190613422565b611d35565b50565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de69061300f565b60405180910390fd5b6000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a46000604051610e619190612e10565b60405180910390a1565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef29061300f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f3557600080fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2293b760d6615c0f087e78599ce64d67197a7dba78cdd9e241f3cd23b46101f38282604051610fbd929190612e2b565b60405180910390a15050565b60606040518060400160405280600481526020017f4b45595300000000000000000000000000000000000000000000000000000000815250905090565b600061101333848461175f565b905092915050565b6110258282611f4a565b5050565b611071600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d35565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa9061300f565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f912f0fa470efc452dee6f5bbed07c0e92665e5c56d9911da09910623af977116816040516111739190612e10565b60405180910390a150565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60055481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461129b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112929061300f565b60405180910390fd5b80600b60146101000a81548160ff0219169083151502179055507f8bcc108c7d867d0a70433f71ecba3056c4dcc48eaabe4ca987f9fb1f836091d5816040516112e49190612e7d565b60405180910390a150565b612710341015611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90612f8f565b60405180910390fd5b61133d81610659565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c79061300f565b60405180910390fd5b8115611430576113ed6103e86000546116b190919063ffffffff16565b81101561142f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114269061306f565b60405180910390fd5b5b81600260006101000a81548160ff021916908315150217905550806001819055507f2c86c6a74f488fc3878b83a7fed7b39783317aff443f0890ea7e2a750eb16c238282604051611482929190612e98565b60405180910390a15050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115159061300f565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a48160405161158e9190612e10565b60405180910390a150565b6115a33382611f4a565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061300f565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7b226bf062af8f4c1ef7acc85de6e11339590a21f25da9a45aa4bd5fdb98b89e816040516116a69190612e10565b60405180910390a150565b60006116f383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612644565b905092915050565b6000838311158290611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a9190612f0d565b60405180910390fd5b5060008385611752919061347c565b9050809150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117ca5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090612f2f565b60405180910390fd5b6000821161184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390612fef565b60405180910390fd5b600260009054906101000a900460ff1680156118b65750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561190157600154821115611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790612f6f565b60405180910390fd5b5b61198a826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116fb9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a705750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b159050600081611a81576000611aaa565b611aa96064611a9b600554876126a790919063ffffffff16565b6116b190919063ffffffff16565b5b90506000611ac1828661272290919063ffffffff16565b9050611b1581600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276c90919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bb591906130ef565b60405180910390a36000821115611d2757611c3a8260036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276c90919063ffffffff16565b60036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d1e91906130ef565b60405180910390a35b600193505050509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015611d845750600081115b611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba9061304f565b60405180910390fd5b611e4c816040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116fb9092919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611edb816040518060400160405280601381526020017f496e73756666696369656e7420537570706c79000000000000000000000000008152506000546116fb9092919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f3f91906130ef565b60405180910390a350565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc39061304f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156120355750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90612fcf565b60405180910390fd5b600b60149054906101000a900460ff166120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba9061302f565b60405180910390fd5b61214c816040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116fb9092919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661220f5761220a60646121fc600554856126a790919063ffffffff16565b6116b190919063ffffffff16565b612212565b60005b90506000612229828461272290919063ffffffff16565b90506000811161226e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612265906130af565b60405180910390fd5b6122c081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161236091906130ef565b60405180910390a360008211156124d2576123e58260036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276c90919063ffffffff16565b60036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124c991906130ef565b60405180910390a35b80600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe5826000600988601e426125c6919061322a565b6040518663ffffffff1660e01b81526004016125e695949392919061310a565b600060405180830381600087803b15801561260057600080fd5b505af1158015612614573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061263d91906129f5565b5050505050565b6000808311829061268b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126829190612f0d565b60405180910390fd5b506000838561269a9190613280565b9050809150509392505050565b6000808314156126ba576000905061271c565b600082846126c89190613422565b90508284826126d79190613280565b14612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90612faf565b60405180910390fd5b809150505b92915050565b600061276483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116fb565b905092915050565b600080828461277b919061322a565b9050838110156127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790612f4f565b60405180910390fd5b8091505092915050565b60006127dd6127d8846131a4565b61317f565b905080838252602082019050828560208602820111156127fc57600080fd5b60005b8581101561282c578161281288826128b4565b8452602084019350602083019250506001810190506127ff565b5050509392505050565b60008135905061284581613930565b92915050565b600082601f83011261285c57600080fd5b815161286c8482602086016127ca565b91505092915050565b60008135905061288481613947565b92915050565b60008151905061289981613947565b92915050565b6000813590506128ae8161395e565b92915050565b6000815190506128c38161395e565b92915050565b6000602082840312156128db57600080fd5b60006128e984828501612836565b91505092915050565b6000806040838503121561290557600080fd5b600061291385828601612836565b925050602061292485828601612836565b9150509250929050565b60008060006060848603121561294357600080fd5b600061295186828701612836565b935050602061296286828701612836565b92505060406129738682870161289f565b9150509250925092565b6000806040838503121561299057600080fd5b600061299e85828601612836565b92505060206129af85828601612875565b9150509250929050565b600080604083850312156129cc57600080fd5b60006129da85828601612836565b92505060206129eb8582860161289f565b9150509250929050565b600060208284031215612a0757600080fd5b600082015167ffffffffffffffff811115612a2157600080fd5b612a2d8482850161284b565b91505092915050565b600060208284031215612a4857600080fd5b6000612a5684828501612875565b91505092915050565b600060208284031215612a7157600080fd5b6000612a7f8482850161288a565b91505092915050565b60008060408385031215612a9b57600080fd5b6000612aa985828601612875565b9250506020612aba8582860161289f565b9150509250929050565b600060208284031215612ad657600080fd5b6000612ae48482850161289f565b91505092915050565b600060208284031215612aff57600080fd5b6000612b0d848285016128b4565b91505092915050565b6000612b228383612b2e565b60208301905092915050565b612b37816134d0565b82525050565b612b46816134d0565b82525050565b6000612b57826131e5565b612b618185613208565b9350612b6c836131d0565b8060005b83811015612ba457612b8182613642565b612b8b8882612b16565b9750612b96836131fb565b925050600181019050612b70565b5085935050505092915050565b612bba816134e2565b82525050565b612bc981613525565b82525050565b6000612bda826131f0565b612be48185613219565b9350612bf4818560208601613537565b612bfd81613655565b840191505092915050565b6000612c15601883613219565b9150612c2082613680565b602082019050919050565b6000612c38601b83613219565b9150612c43826136a9565b602082019050919050565b6000612c5b602283613219565b9150612c66826136d2565b604082019050919050565b6000612c7e600e83613219565b9150612c8982613721565b602082019050919050565b6000612ca1602183613219565b9150612cac8261374a565b604082019050919050565b6000612cc4601883613219565b9150612ccf82613799565b602082019050919050565b6000612ce7602983613219565b9150612cf2826137c2565b604082019050919050565b6000612d0a601383613219565b9150612d1582613811565b602082019050919050565b6000612d2d601183613219565b9150612d388261383a565b602082019050919050565b6000612d50601483613219565b9150612d5b82613863565b602082019050919050565b6000612d73601183613219565b9150612d7e8261388c565b602082019050919050565b6000612d96600c83613219565b9150612da1826138b5565b602082019050919050565b6000612db9601383613219565b9150612dc4826138de565b602082019050919050565b6000612ddc600c83613219565b9150612de782613907565b602082019050919050565b612dfb8161350e565b82525050565b612e0a81613518565b82525050565b6000602082019050612e256000830184612b3d565b92915050565b6000604082019050612e406000830185612b3d565b612e4d6020830184612bb1565b9392505050565b6000604082019050612e696000830185612b3d565b612e766020830184612df2565b9392505050565b6000602082019050612e926000830184612bb1565b92915050565b6000604082019050612ead6000830185612bb1565b612eba6020830184612df2565b9392505050565b6000608082019050612ed66000830187612bc0565b8181036020830152612ee88186612b4c565b9050612ef76040830185612b3d565b612f046060830184612df2565b95945050505050565b60006020820190508181036000830152612f278184612bcf565b905092915050565b60006020820190508181036000830152612f4881612c08565b9050919050565b60006020820190508181036000830152612f6881612c2b565b9050919050565b60006020820190508181036000830152612f8881612c4e565b9050919050565b60006020820190508181036000830152612fa881612c71565b9050919050565b60006020820190508181036000830152612fc881612c94565b9050919050565b60006020820190508181036000830152612fe881612cb7565b9050919050565b6000602082019050818103600083015261300881612cda565b9050919050565b6000602082019050818103600083015261302881612cfd565b9050919050565b6000602082019050818103600083015261304881612d20565b9050919050565b6000602082019050818103600083015261306881612d43565b9050919050565b6000602082019050818103600083015261308881612d66565b9050919050565b600060208201905081810360008301526130a881612d89565b9050919050565b600060208201905081810360008301526130c881612dac565b9050919050565b600060208201905081810360008301526130e881612dcf565b9050919050565b60006020820190506131046000830184612df2565b92915050565b600060a08201905061311f6000830188612df2565b61312c6020830187612bc0565b818103604083015261313e8186612b4c565b905061314d6060830185612b3d565b61315a6080830184612df2565b9695505050505050565b60006020820190506131796000830184612e01565b92915050565b600061318961319a565b90506131958282613584565b919050565b6000604051905090565b600067ffffffffffffffff8211156131bf576131be613613565b5b602082029050602081019050919050565b60008190508160005260206000209050919050565b600081549050919050565b600081519050919050565b6000600182019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006132358261350e565b91506132408361350e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613275576132746135b5565b5b828201905092915050565b600061328b8261350e565b91506132968361350e565b9250826132a6576132a56135e4565b5b828204905092915050565b6000808291508390505b60018511156132fb578086048111156132d7576132d66135b5565b5b60018516156132e65780820291505b80810290506132f485613673565b94506132bb565b94509492505050565b600061330f8261350e565b915061331a83613518565b92506133477fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461334f565b905092915050565b60008261335f576001905061341b565b8161336d576000905061341b565b8160018114613383576002811461338d576133bc565b600191505061341b565b60ff84111561339f5761339e6135b5565b5b8360020a9150848211156133b6576133b56135b5565b5b5061341b565b5060208310610133831016604e8410600b84101617156133f15782820a9050838111156133ec576133eb6135b5565b5b61341b565b6133fe84848460016132b1565b92509050818404811115613415576134146135b5565b5b81810290505b9392505050565b600061342d8261350e565b91506134388361350e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613471576134706135b5565b5b828202905092915050565b60006134878261350e565b91506134928361350e565b9250828210156134a5576134a46135b5565b5b828203905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134db826134ee565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006135308261350e565b9050919050565b60005b8381101561355557808201518184015260208101905061353a565b83811115613564576000848401525b50505050565b600061357d61357883613666565b6134b0565b9050919050565b61358d82613655565b810181811067ffffffffffffffff821117156135ac576135ab613613565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061364e825461356a565b9050919050565b6000601f19601f8301169050919050565b60008160001c9050919050565b60008160011c9050919050565b7f5472616e7366657220546f205a65726f20416464726573730000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4d6178696d756d205472616e73666572205468726573686f6c6420526561636860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e7420546f6f20466577000000000000000000000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742044657374696e6174696f6e0000000000000000600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79204f776e65722046756e6374696f6e00000000000000000000000000600082015250565b7f5377617070696e672044697361626c6564000000000000000000000000000000600082015250565b7f496e73756666696369656e742042616c616e6365000000000000000000000000600082015250565b7f5468726573686f6c6420546f6f20466577000000000000000000000000000000600082015250565b7f46656520546f6f20486967680000000000000000000000000000000000000000600082015250565b7f5a65726f20546f6b656e7320546f2053656e6400000000000000000000000000600082015250565b7f5a65726f2042616c616e63650000000000000000000000000000000000000000600082015250565b613939816134d0565b811461394457600080fd5b50565b613950816134e2565b811461395b57600080fd5b50565b6139678161350e565b811461397257600080fd5b5056fea2646970667358221220820cb2998012b43e1d442e166f730d382bf5d4877a4be72036e91a6717c05edb64736f6c63430008040033

Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.