@Override
  public @NotNull List<WslDistributionAndVersion> loadInstalledDistributionsWithVersions() throws IOException, IllegalStateException {
    checkEdtAndReadAction();
    Path wslExe = WSLDistribution.findWslExe();
    if (wslExe == null) {
      LOG.info("Cannot load WSL distributions with versions: wsl.exe is not found in %PATH%");
      return List.of();
    }

    GeneralCommandLine commandLine = new GeneralCommandLine(wslExe.toString(), "--list", "--verbose").
      withCharset(StandardCharsets.UTF_16LE);

    long startNano = System.nanoTime();
    ProcessOutput output;
    try {
      output = ExecUtil.execAndGetOutput(commandLine, WSLDistribution.DEFAULT_TIMEOUT);
    }
    catch (ExecutionException e) {
      throw new IOException("Failed to run " + commandLine.getCommandLineString(), e);
    }
    // Windows Subsystem for Linux has no installed distributions
    if (output.getExitCode() != 0 && output.getStdout().trim().endsWith("https://aka.ms/wslstore")) {
      LOG.info("Windows Subsystem for Linux has no installed distributions");
      return Collections.emptyList();
    }
    if (isWslDisabled(output)) {
      LOG.info("WSL is disabled in the system");
      return Collections.emptyList();
    }
    if (output.isTimeout() || output.getExitCode() != 0 || !output.getStderr().isEmpty()) {
      throw new IOException("Failed to run " + commandLine.getCommandLineString() + ": " + output +
                            ", done in " + TimeoutUtil.getDurationMillis(startNano) + " ms");
    }
    List<WslDistributionAndVersion> versions = parseWslVerboseListOutput(output.getStdoutLines());
    LOG.info("Fetched WSL distributions: " + versions +
             " (\"" + commandLine.getCommandLineString() + "\" done in " + TimeoutUtil.getDurationMillis(startNano) + " ms)");
    return versions;
  }
@Override
  public @NotNull List<WslDistributionAndVersion> loadInstalledDistributionsWithVersions()