/*                                                                       
 https://twitter.com/CFNY69696969                                                                                                         
                                                                                                               
                                                                                                               
                                               .]]`.]/@@@OOO@@O@@\`                            ,],]].          
                                           ,/@@@@@@@@@@@@OOOOOOOOOOO@\`                      .@@@@@@@@\.       
                                         /@@@@@@@@@@@@@@@@@OOOOOOOOOOOOO@@\].                   .`.,@@@@^      
                                       /@@@@@@@@@@@@@@@@@@@@@O@OOOOOOOOOOOOO@O@@@`             /@@^@@@@@^      
                                     ,@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOO@O@\          =@@@@,[[[        
                                    /@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOO@`       /@\.[             
                                  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOOO@.    \@@@/              
             .]]]`                @O@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOO@O@`      [               
          ,@@@@@@@@^             =OO@@@@@OOOOoOOOOoOOOOOO@@@@@@@OOOOOOOOOOOOOOOOOOOOOOOO@`                     
         /@@@@@@@@@@             @@@@@@@@@@@@@@@@@@OOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOO@                     
       .@@@\/  =@@@`            =O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOOOOOOO\                    
        @@/` ,@@@^              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOOOOOO@@`                   
             \@@@@^            =@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOO^                   
              \@`.]\           @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOO@                   
               =@@@@\         =@@OOOOOOOOOOOOOOoOOOOOOO@@@@@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOO@.                  
                =@@[.         =@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@OOOOOOOO@OOOOOOOOOOOOOOOOOOO@                   
                              =OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoO@@@OOOOOOOOOOOOOOOOOOOOOOO/                   
                              =OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@OO@OOOOOOOOOOOOOOOO@^   ,@@@/@@@@`      
                             /OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOO@@OOOOOOOOOOOOOOO@      [@\/@@@@@`    
                            /@@@@@OOOOOOOOOOOOOOOOOOOOOoOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOO^       .   =@@@@.   
                            OOO@@@@@@@OOOOOOOOOoOOOOoOOOOOOOOOOOOOOOOOOOOOO@@@@@@@OOOOOO@@.     /@@@\\@@@@@    
                            OOOOOO@@@@@OOOOOO@@@@@@@@@@@@OOOOOOOOOOOOOOOOOO@@@@@@@@@@OOOO^     .\@@@^ [[[.     
                            OOOOoOOOOOOOOOOOO@@@@@@OOOOO@@@@@OOOOOOOOOOOOOO@@@@@@@@@@@OO@`   ,@@@].`           
                            OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOOOOOOOoOOO@@@@@@@@@@@@^   .\@@@@.            
                           =OOOOOOOOOOOOOOOOOOOOOO@@@@@@@@OoOOOOOOOOOOOOOOOO@@@@@@@@@@@@\       [              
          ,@@@@`          .OOOOOOOOOOoOOOOOoOOOOOOOOOOOOOOOOOO@OOOOOOOOOOOOO@@@@@OOOO@@@@\                     
         //@.@@`         .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOooOOOOOOOOOOOOOOOOOO@@@OoOOOOOOO@@@\                    
        .@` @@\          =OOOoOOOOOOOOOO@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@OOOOOOOOOOO@@@@^                   
            ,[,@.        OOOOOOOOOOOOOOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@^                   
              @/`        OOO@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOOOOOOOOO@@@@`                   
                         =@OoOOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@/.                    
                         ,OOOoOOOOOOOOOOOOOOOOOOO@OOOOOOOOOOOOOOOOOOOOOOOoOOOOOOOOOOO`                         
                          OOOOOOOOOOOOOOOOOOOOOOOOoOOO@OOOOOOOOOOOOOOOOOOOOOOOOOOOO/                           
                          =OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@OOOO[                             
                           OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO^                                  
                           =OOOOOOOOOOOOOOOOOO@@@@@@OOOOOOOOOOOOOOOOOOOOOOOO@@@@@@]                            
                           =OOOO@OOOOOOOOOOOOOOOO@OoOOOOOOOOOOOOOOOOOOOOOOOO@@OO@OOO\.                         
                           =OOOOOOOOOOOOOOOOoO@OOOOOOOOOOOOOOOOOOOOOOoOOOoOOOOOOOOOOO@@\`                      
                            \OOOOOOOOOOOOO@OOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOO@OOOOOOOOO@OO@...                   
                            =OoOOO@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOO@O@@OOOOOO@O@@OOO@^                 
                          ]@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOO@@@@@OOOOOOO@OOOOOO                 
                        ,@@OO@oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo@OOO@OOOOOOO@@OOOOO^                 
                       /OO@OOO@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@OOOOOO@@OOOO@@O@@@\]`           
                       \OOOO@O@@OoOoOOOOOOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@OOOOO@@OO@O@@OOOOOOOOO@@\]      
                     ]@O@OOOOOOOO@@OOOOOOOOOOOOOOOO@OOOOOOOOOOOOOOOOOOOOOOOOO@OOOOO@@OO@@@O@OOOOOOOOOOOOO@O@@@@
                  .@OOOOOOOOOOOOOOOOO@@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@OOOOOOOOOOOOO@@OOOOOOOOOOOOOOOOOOO
                 .@OOOOOOOOOOOOOOOOOOOO@OO@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@OOOOOOOOOOOOO@@OOOOOOOOOOOOOOOOOOOO
                 =O@@@@@@@@@@@@@@@@@OOO@OOOOOO@@OOOOOOOOOOOOOOOOOOOOOOOOOO@O@@OOOOOOOOOO@@OOOOOOOOOOOOOOOOOOOOO
               ./@O@OOO@@@@OOOOOOOO@@@OOOOOOOOOOO@@OOOOOOOOOOOOOOOOOOOOO@OO\O\@OOOOOOOO@@OO@OOOOOOOOOOOOOOOOOOO
             ]@@OOOOOOOOO@@OOOOOOOOO@O@@@@OO@@OOOOOO@@OoOOOOOOOOOOOOOO@@OOO@oo@OO@O@O@@OOOOOOOOOOOOOOOOOOOOOOOO
      ,]/@@OO@@OOOOOOOOOOO@@@OOOOOOOOOO@O@@@@`,`=@@OOOO@@OOOOOOOOOOO@OOOOOO@oo@OO@O@@OOOOOOOOOOOOOOOOOOOOOOOOOO
  ,@OOOOOOOOOOOOOOOOOOOOOOOOO@@OOOOOOOOOOOOO@\/O@@OOOOOO@O@@OOOoOO@@OOOOO@@@o=@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOO
,@OOOOOOOOOOOOOOOOOOOOOOOOOOO@OO@@@@@OOOOOOOO@@OOO@@@OOOO@O@O@OO@@@OOOO@@OO@oo@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
              
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract IVToken {
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;
    address public taxAddress;
    uint256 public taxRate;

    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    constructor() {
        name = "ConfusedNickYoung";
        symbol = "???";
        decimals = 18;
        totalSupply = 10000000000000 * 10**uint256(decimals);
        taxAddress = 0x66A5ACDF8b744CDB40E32eECEdc22f686c46624b;
        taxRate = 1;
        balanceOf[msg.sender] = totalSupply;
    }

    function transfer(address to, uint256 value) public returns (bool) {
        uint256 taxAmount = (value * taxRate) / 100;
        uint256 taxedValue = value - taxAmount;

        require(to != address(0), "Invalid address");
        require(balanceOf[msg.sender] >= value, "Insufficient balance");

        balanceOf[msg.sender] -= value;
        balanceOf[taxAddress] += taxAmount;
        balanceOf[to] += taxedValue;

        emit Transfer(msg.sender, to, taxedValue);
        emit Transfer(msg.sender, taxAddress, taxAmount);
        return true;
    }

    function approve(address spender, uint256 value) public returns (bool) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        uint256 taxAmount = (value * taxRate) / 100;
        uint256 taxedValue = value - taxAmount;

        require(from != address(0), "Invalid address");
        require(to != address(0), "Invalid address");
        require(balanceOf[from] >= value, "Insufficient balance");
        require(allowance[from][msg.sender] >= value, "Allowance exceeded");

        balanceOf[from] -= value;
        balanceOf[taxAddress] += taxAmount;
        balanceOf[to] += taxedValue;
        allowance[from][msg.sender] -= value;

        emit Transfer(from, to, taxedValue);
        emit Transfer(from, taxAddress, taxAmount);
        return true;
    }
}