private static <T> int getStartShift(T @NotNull [] o1, T @NotNull [] o2, @NotNull HashingStrategy<? super T> strategy) {
    int size = Math.min(o1.length, o2.length);
    int idx = 0;
    for (int i = 0; i < size; i++) {
      if (!strategy.equals(o1[i], o2[i])) break;
      ++idx;
    }
    return idx;
  }
private static <T> int getStartShift(T @NotNull [] o1, T @NotNull [] o2, @NotNull HashingStrategy<? super T> strategy)