interface IERC20 {

    function totalSupply() external view returns (uint256);


    function balanceOf(address account) external view returns (uint256);


    function transfer(address recipient, uint256 amount)

        external

        returns (bool);


    function allowance(address owner, address spender)

        external

        view

        returns (uint256);


    function approve(address spender, uint256 amount) external returns (bool);



    /**

     * @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);


    event Transfer(address indexed from, address indexed to, uint256 value);


    event Approval(

        address indexed owner,

        address indexed spender,

        uint256 value

    );

}
function transferFrom(

    address sender,

    address recipient,

    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.
 
 */