@Override
  public void runLiveReplay(URI uri) throws IOException {
    if (!uri.getScheme().equals(FAF_LIFE_PROTOCOL)) {
      throw new IllegalArgumentException("Invalid protocol: " + uri.getScheme());
    }

    Map<String, String> queryParams =
        Splitter.on('&').trimResults().withKeyValueSeparator("=").split(uri.getQuery());

    String mod = queryParams.get("mod");
    String mapName = queryParams.get("map");
    Integer replayId = Integer.parseInt(queryParams.get(uri.getPath().split("/")[0]));

    try {
      URL gpgReplayUrl = new URL(GPGNET_SCHEME, uri.getHost(), uri.getPort(), uri.getPath());
      gameService.runWithReplay(gpgReplayUrl, replayId);
    } catch (MalformedURLException e) {
      throw new RuntimeException();
    }
  }
  private void runFafReplayFile(Path path) throws IOException {
    String fileName = path.getFileName().toString();
    byte[] rawReplayBytes = replayFileReader.readReplayData(path);

    Path tempSupComReplayFile =
        preferencesService.getCacheDirectory().resolve(TEMP_SCFA_REPLAY_FILE_NAME);

    Files.createDirectories(tempSupComReplayFile.getParent());
    Files.copy(
        new ByteArrayInputStream(rawReplayBytes),
        tempSupComReplayFile,
        StandardCopyOption.REPLACE_EXISTING);

    LocalReplayInfo replayInfo = replayFileReader.readReplayInfo(path);
    String featuredMod = replayInfo.featuredMod;
    Integer replayId = replayInfo.uid;
    Map<String, Integer> featuredModVersions = replayInfo.featuredModVersions;

    String version = parseSupComVersion(rawReplayBytes);

    gameService.runWithReplay(tempSupComReplayFile, replayId);
  }
 private void runSupComReplayFile(Path path) throws IOException {
   String fileName = path.getFileName().toString();
   String featuredMod = guessModByFileName(fileName);
   gameService.runWithReplay(path, null);
 }