Program: 101044
Project: 101044
Buggy source:
public void dump(){
  System.out.println("String_Node_Str" + base.length);
  System.out.println("String_Node_Str" + last);
  int vc=0;
  for (int i=0; i < base.length; i++) {
    if (base[i] != BASE_EMPTY || check[i] >= 0)     vc++;
  }
  System.out.println("String_Node_Str" + vc);
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    System.out.print(String.format("String_Node_Str",i));
  }
  System.out.println();
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    if (base[i] == BASE_EMPTY) {
      System.out.print("String_Node_Str");
    }
 else {
      System.out.print(String.format("String_Node_Str",base[i]));
    }
  }
  System.out.println();
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    if (check[i] < 0) {
      System.out.print("String_Node_Str");
    }
 else {
      System.out.print(String.format("String_Node_Str",check[i]));
    }
  }
  System.out.println();
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    if (tail[i] < 0) {
      System.out.print("String_Node_Str");
    }
 else {
      System.out.print(String.format("String_Node_Str",tail[i]));
    }
  }
  System.out.println();
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    System.out.print(String.format("String_Node_Str",term.get(i) ? 1 : 0));
  }
  System.out.println();
  int count=0;
  for (  int i : tail) {
    if (i != -1)     count++;
  }
  System.out.println("String_Node_Str" + count);
  System.out.println();
  System.out.print("String_Node_Str");
  char[] tailChars=tails.subSequence(0,Math.min(tails.length(),64)).toString().toCharArray();
  for (int i=0; i < tailChars.length; i++) {
    char c=tailChars[i];
    if (c == '\0') {
      System.out.print("String_Node_Str");
      continue;
    }
    if (c == '\1') {
      int index=tailChars[i + 1] + (tailChars[i + 2] << 16);
      i+=2;
      System.out.print(String.format("String_Node_Str",index));
      continue;
    }
    System.out.print(c);
  }
  System.out.println("String_Node_Str");
  System.out.println("String_Node_Str" + tails.length());
{
    System.out.print("String_Node_Str");
    int c=0;
    for (    Map.Entry<Character,Integer> e : charCodes.entrySet()) {
      System.out.print(String.format("String_Node_Str",e.getKey(),e.getValue()));
      c++;
      if (c > 16)       break;
    }
    System.out.println();
    System.out.println("String_Node_Str" + charCodes.size());
  }
{
    System.out.println("String_Node_Str");
    int min=Integer.MAX_VALUE;
    int max=Integer.MIN_VALUE;
    int maxDelta=Integer.MIN_VALUE;
    for (int i=0; i < base.length; i++) {
      int b=base[i];
      if (b == BASE_EMPTY)       continue;
      min=Math.min(min,b);
      max=Math.max(max,b);
      maxDelta=Math.max(maxDelta,Math.abs(i - b));
    }
    System.out.println("String_Node_Str" + maxDelta);
    System.out.println("String_Node_Str" + max);
    System.out.println("String_Node_Str" + min);
  }
{
    System.out.println("String_Node_Str");
    int min=Integer.MAX_VALUE;
    for (int i=0; i < base.length; i++) {
      int b=check[i];
      if (b == BASE_EMPTY)       continue;
      min=Math.min(min,b);
    }
    System.out.println("String_Node_Str" + min);
  }
  System.out.println();
}

Fixed version (ground truth):
public void dump(){
  System.out.println("String_Node_Str" + base.length);
  System.out.println("String_Node_Str" + last);
  int vc=0;
  for (int i=0; i < base.length; i++) {
    if (base[i] != BASE_EMPTY || check[i] >= 0)     vc++;
  }
  System.out.println("String_Node_Str" + vc);
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    System.out.print(String.format("String_Node_Str",i));
  }
  System.out.println();
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    if (base[i] == BASE_EMPTY) {
      System.out.print("String_Node_Str");
    }
 else {
      System.out.print(String.format("String_Node_Str",base[i]));
    }
  }
  System.out.println();
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    System.out.print(String.format("String_Node_Str",check[i]));
  }
  System.out.println();
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    if (tail[i] < 0) {
      System.out.print("String_Node_Str");
    }
 else {
      System.out.print(String.format("String_Node_Str",tail[i]));
    }
  }
  System.out.println();
  System.out.print("String_Node_Str");
  for (int i=0; i < 16; i++) {
    System.out.print(String.format("String_Node_Str",term.get(i) ? 1 : 0));
  }
  System.out.println();
  int count=0;
  for (  int i : tail) {
    if (i != -1)     count++;
  }
  System.out.println("String_Node_Str" + count);
  System.out.println();
  System.out.print("String_Node_Str");
  char[] tailChars=tails.subSequence(0,Math.min(tails.length(),64)).toString().toCharArray();
  for (int i=0; i < tailChars.length; i++) {
    char c=tailChars[i];
    if (c == '\0') {
      System.out.print("String_Node_Str");
      continue;
    }
    if (c == '\1') {
      int index=tailChars[i + 1] + (tailChars[i + 2] << 16);
      i+=2;
      System.out.print(String.format("String_Node_Str",index));
      continue;
    }
    System.out.print(c);
  }
  System.out.println("String_Node_Str");
  System.out.println("String_Node_Str" + tails.length());
{
    System.out.print("String_Node_Str");
    int c=0;
    for (    Map.Entry<Character,Integer> e : charCodes.entrySet()) {
      System.out.print(String.format("String_Node_Str",e.getKey(),e.getValue()));
      c++;
      if (c > 16)       break;
    }
    System.out.println();
    System.out.println("String_Node_Str" + charCodes.size());
  }
{
    System.out.println("String_Node_Str");
    int min=Integer.MAX_VALUE;
    int max=Integer.MIN_VALUE;
    int maxDelta=Integer.MIN_VALUE;
    for (int i=0; i < base.length; i++) {
      int b=base[i];
      if (b == BASE_EMPTY)       continue;
      min=Math.min(min,b);
      max=Math.max(max,b);
      maxDelta=Math.max(maxDelta,Math.abs(i - b));
    }
    System.out.println("String_Node_Str" + maxDelta);
    System.out.println("String_Node_Str" + max);
    System.out.println("String_Node_Str" + min);
  }
{
    System.out.println("String_Node_Str");
    int min=Integer.MAX_VALUE;
    for (int i=0; i < base.length; i++) {
      int b=check[i];
      if (b == BASE_EMPTY)       continue;
      min=Math.min(min,b);
    }
    System.out.println("String_Node_Str" + min);
  }
  System.out.println();
}