contract CanReclaimToken is Ownable {

    /**
     * @dev Reclaim all ERC20 compatible tokens
     * @param token ERC20 The address of the token contract
     */
    function reclaimToken(IERC20 token) external onlyOwner {
        address payable owner = address(uint160(owner()));

        if (address(token) == address(0)) {
            owner.transfer(address(this).balance);
            return;
        }
        uint256 balance = token.balanceOf(address(this));
        token.transfer(owner, balance);
    }

}
/**
 * @title Contracts that should be able to recover tokens
 * @author SylTi
 * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
 * This will prevent any accidental loss of tokens.
 */
function reclaimToken(IERC20 token) external onlyOwner {
    address payable owner = address(uint160(owner()));

    if (address(token) == address(0)) {
        owner.transfer(address(this).balance);
        return;
    }
    uint256 balance = token.balanceOf(address(this));
    token.transfer(owner, balance);
}

/**
 * @dev Reclaim all ERC20 compatible tokens
 * @param token ERC20 The address of the token contract
 */