Program: 171349
Project: 171349
Buggy source:
public static void addFetishes(GameCharacter character){
  List<Fetish> availableFetishes=new ArrayList<>();
  for (  Fetish f : Fetish.values()) {
    if (f == Fetish.FETISH_PURE_VIRGIN) {
      if (character.hasVagina() && character.getHistory() != History.PROSTITUTE)       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_BIMBO) {
      if (character.isFeminine())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_PREGNANCY) {
      if (character.hasVagina())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_IMPREGNATION) {
      if (character.hasPenis())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_SEEDER) {
      if (character.hasPenis())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_BROODMOTHER) {
      if (character.hasVagina())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_CUM_STUD) {
      if (character.hasPenis())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_BREASTS_SELF) {
      if (character.hasBreasts())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_NON_CON) {
      if (Main.getProperties().nonConContent)       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_INCEST) {
      if (Main.getProperties().incestContent)       availableFetishes.add(f);
    }
 else     if (f.getFetishesForAutomaticUnlock().isEmpty()) {
      availableFetishes.add(f);
    }
  }
  int[] numberProb=new int[]{1,1,2,2,2,2,3,3,3,4,4,5};
  int numberOfFetishes=numberProb[Util.random.nextInt(numberProb.length)];
  int fetishesAssigned=0;
  if (((character.getMother() != null && character.getMother().isPlayer()) || (character.getFather() != null && character.getFather().isPlayer()))) {
    if (Main.getProperties().incestContent && Math.random() > 0.5f) {
      character.addFetish(Fetish.FETISH_INCEST);
      availableFetishes.remove(Fetish.FETISH_INCEST);
      fetishesAssigned++;
    }
  }
 else {
    if (Math.random() > 0.35f) {
      character.addFetish(Fetish.FETISH_TRANSFORMATION_GIVING);
      availableFetishes.remove(Fetish.FETISH_TRANSFORMATION_GIVING);
      fetishesAssigned++;
    }
  }
  while (fetishesAssigned < numberOfFetishes) {
    Fetish f=availableFetishes.get(Util.random.nextInt(availableFetishes.size()));
    character.addFetish(f);
    availableFetishes.remove(f);
    fetishesAssigned++;
  }
}

Fixed version (ground truth):
public static void addFetishes(GameCharacter character){
  List<Fetish> availableFetishes=new ArrayList<>();
  for (  Fetish f : Fetish.values()) {
    if (f == Fetish.FETISH_PURE_VIRGIN) {
      if (character.hasVagina() && character.getHistory() != History.PROSTITUTE)       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_BIMBO) {
      if (character.isFeminine())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_PREGNANCY) {
      if (character.hasVagina())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_IMPREGNATION) {
      if (character.hasPenis() && character.sexualOrientation != SexualOrientation.ANDROPHILIC)       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_SEEDER) {
      if (character.hasPenis() && character.sexualOrientation != SexualOrientation.ANDROPHILIC)       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_BROODMOTHER) {
      if (character.hasVagina())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_CUM_STUD) {
      if (character.hasPenis())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_BREASTS_SELF) {
      if (character.hasBreasts())       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_NON_CON) {
      if (Main.getProperties().nonConContent)       availableFetishes.add(f);
    }
 else     if (f == Fetish.FETISH_INCEST) {
      if (Main.getProperties().incestContent)       availableFetishes.add(f);
    }
 else     if (f.getFetishesForAutomaticUnlock().isEmpty()) {
      availableFetishes.add(f);
    }
  }
  int[] numberProb=new int[]{1,1,2,2,2,2,3,3,3,4,4,5};
  int numberOfFetishes=numberProb[Util.random.nextInt(numberProb.length)];
  int fetishesAssigned=0;
  if (((character.getMother() != null && character.getMother().isPlayer()) || (character.getFather() != null && character.getFather().isPlayer()))) {
    if (Main.getProperties().incestContent && Math.random() > 0.5f) {
      character.addFetish(Fetish.FETISH_INCEST);
      availableFetishes.remove(Fetish.FETISH_INCEST);
      fetishesAssigned++;
    }
  }
 else {
    if (Math.random() > 0.35f) {
      character.addFetish(Fetish.FETISH_TRANSFORMATION_GIVING);
      availableFetishes.remove(Fetish.FETISH_TRANSFORMATION_GIVING);
      fetishesAssigned++;
    }
  }
  while (fetishesAssigned < numberOfFetishes) {
    Fetish f=availableFetishes.get(Util.random.nextInt(availableFetishes.size()));
    character.addFetish(f);
    availableFetishes.remove(f);
    fetishesAssigned++;
  }
}