Program: 93777
Project: 93777
Buggy source:
/** 
 * Load all the kits
 * @return
 */
public Map<String,KitInstance> loadKits(){
  final Map<String,KitInstance> result=new LinkedHashMap<String,KitInstance>();
  final List<MaterialContainer> items=new ArrayList<MaterialContainer>();
  final ExtendedConfiguration kits=getYml("String_Node_Str");
  final Map<String,List<String>> kitParents=new HashMap<String,List<String>>();
  final Map<ArmorPart,MaterialContainer> armor=new EnumMap<Type.ArmorPart,MaterialContainer>(ArmorPart.class);
  final ConfigurationSection kitNodes=kits.getConfigurationSection("String_Node_Str");
  if (kitNodes == null) {
    ACLogger.severe("String_Node_Str");
    return result;
  }
  for (  final String kitName : kitNodes.getKeys(false)) {
    int delay=0;
    final ConfigurationSection kitNode=kitNodes.getConfigurationSection(kitName);
    ConfigurationSection kitItems=null;
    ConfigurationSection armorItems=null;
    List<String> parents=null;
    try {
      kitItems=kitNode.getConfigurationSection("String_Node_Str");
      armorItems=kitNode.getConfigurationSection("String_Node_Str");
      parents=kitNode.getStringList("String_Node_Str");
    }
 catch (    final NullPointerException e) {
      DebugLog.INSTANCE.warning("String_Node_Str" + kitName);
      continue;
    }
    if (kitItems != null)     for (    final String item : kitItems.getKeys(false)) {
      final MaterialContainer m=Utils.checkMaterial(item);
      m.setAmount(kitItems.getInt(item,1));
      if (!m.isNull())       items.add(m);
    }
    delay=kitNode.getInt("String_Node_Str",0);
    if (armorItems != null) {
      for (      final ArmorPart part : ArmorPart.values()) {
        final String partId=armorItems.getString(part.toString());
        if (partId == null)         continue;
        final MaterialContainer m=Utils.checkMaterial(partId);
        if (!m.isNull())         armor.put(part,m);
      }
      result.put(kitName,new ArmoredKitInstance(kitName,delay,new ArrayList<MaterialContainer>(items),new EnumMap<Type.ArmorPart,MaterialContainer>(armor)));
    }
 else     result.put(kitName,new KitInstance(kitName,delay,new ArrayList<MaterialContainer>(items)));
    if (parents != null)     kitParents.put(kitName,parents);
 else     ACLogger.info(kitName + "String_Node_Str");
    items.clear();
    armor.clear();
  }
  for (  final Entry<String,List<String>> entry : kitParents.entrySet()) {
    KitInstance kit=result.get(entry.getKey());
    for (    final String parent : entry.getValue()) {
      final KitInstance parentKit=result.get(parent);
      if (parentKit == null)       continue;
      if (parentKit instanceof ArmoredKitInstance && !(kit instanceof ArmoredKitInstance)) {
        kit=new ArmoredKitInstance(kit);
        result.put(kit.getName(),kit);
      }
      kit.addParent(parentKit);
    }
  }
  return result;
}

Fixed version (ground truth):
/** 
 * Load all the kits
 * @return
 */
public Map<String,KitInstance> loadKits(){
  final Map<String,KitInstance> result=new LinkedHashMap<String,KitInstance>();
  final List<MaterialContainer> items=new ArrayList<MaterialContainer>();
  final ExtendedConfiguration kits=getYml("String_Node_Str");
  final Map<String,List<String>> kitParents=new HashMap<String,List<String>>();
  final Map<ArmorPart,MaterialContainer> armor=new EnumMap<Type.ArmorPart,MaterialContainer>(ArmorPart.class);
  final ConfigurationSection kitNodes=kits.getConfigurationSection("String_Node_Str");
  if (kitNodes == null) {
    ACLogger.severe("String_Node_Str");
    return result;
  }
  for (  final String kitName : kitNodes.getKeys(false)) {
    int delay=0;
    final ConfigurationSection kitNode=kitNodes.getConfigurationSection(kitName);
    ConfigurationSection kitItems=null;
    ConfigurationSection armorItems=null;
    List<String> parents=null;
    try {
      kitItems=kitNode.getConfigurationSection("String_Node_Str");
      armorItems=kitNode.getConfigurationSection("String_Node_Str");
      parents=kitNode.getStringList("String_Node_Str");
    }
 catch (    final NullPointerException e) {
      DebugLog.INSTANCE.warning("String_Node_Str" + kitName);
      continue;
    }
    if (kitItems != null)     for (    final String item : kitItems.getKeys(false)) {
      try {
        final MaterialContainer m=Utils.checkMaterial(item);
        m.setAmount(kitItems.getInt(item,1));
        if (!m.isNull())         items.add(m);
      }
 catch (      final InvalidInputException e) {
        DebugLog.INSTANCE.log(Level.WARNING,"String_Node_Str" + item,e);
      }
    }
    delay=kitNode.getInt("String_Node_Str",0);
    if (armorItems != null) {
      for (      final ArmorPart part : ArmorPart.values()) {
        final String partId=armorItems.getString(part.toString());
        if (partId == null)         continue;
        try {
          final MaterialContainer m=Utils.checkMaterial(partId);
          if (!m.isNull())           armor.put(part,m);
        }
 catch (        final InvalidInputException e) {
          DebugLog.INSTANCE.log(Level.WARNING,"String_Node_Str" + partId,e);
        }
      }
      result.put(kitName,new ArmoredKitInstance(kitName,delay,new ArrayList<MaterialContainer>(items),new EnumMap<Type.ArmorPart,MaterialContainer>(armor)));
    }
 else     result.put(kitName,new KitInstance(kitName,delay,new ArrayList<MaterialContainer>(items)));
    if (parents != null)     kitParents.put(kitName,parents);
 else     ACLogger.info(kitName + "String_Node_Str");
    items.clear();
    armor.clear();
  }
  for (  final Entry<String,List<String>> entry : kitParents.entrySet()) {
    KitInstance kit=result.get(entry.getKey());
    for (    final String parent : entry.getValue()) {
      final KitInstance parentKit=result.get(parent);
      if (parentKit == null)       continue;
      if (parentKit instanceof ArmoredKitInstance && !(kit instanceof ArmoredKitInstance)) {
        kit=new ArmoredKitInstance(kit);
        result.put(kit.getName(),kit);
      }
      kit.addParent(parentKit);
    }
  }
  return result;
}