private void matchComplexRange(int start11, int start12, int end11, int end12, int start21, int start22, int end21, int end22) {
      if (start11 == start21 && end11 == end21) {
        matchComplexRangeLeft(start11, end11, start12, end12, start22, end22);
      }
      else if (start12 == start22 && end12 == end22) {
        matchComplexRangeRight(start12, end12, start11, end11, start21, end21);
      }
      else {
        throw new IllegalStateException();
      }
    }
private void matchComplexRange(int start11, int start12, int end11, int end12, int start21, int start22, int end21, int end22)