{
    "Function": "_transfer",
    "File": "contracts/src/vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/ERC20.sol",
    "Parent Contracts": [
        "contracts/src/vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/extensions/IERC20Metadata.sol",
        "contracts/src/vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol",
        "contracts/src/vendor/openzeppelin-solidity/v4.8.3/contracts/utils/Context.sol"
    ],
    "High-Level Calls": [],
    "Internal Calls": [
        "_beforeTokenTransfer",
        "_afterTokenTransfer",
        "require(bool,string)",
        "require(bool,string)",
        "require(bool,string)"
    ],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "function _transfer(address from, address to, uint256 amount) internal virtual {\n    require(from != address(0), \"ERC20: transfer from the zero address\");\n    require(to != address(0), \"ERC20: transfer to the zero address\");\n\n    _beforeTokenTransfer(from, to, amount);\n\n    uint256 fromBalance = _balances[from];\n    require(fromBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n    unchecked {\n      _balances[from] = fromBalance - amount;\n      // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\n      // decrementing then incrementing.\n      _balances[to] += amount;\n    }\n\n    emit Transfer(from, to, amount);\n\n    _afterTokenTransfer(from, to, amount);\n  }"
}