docs: public static long[] copy(long[] v, int mincap, int shift) {
      int words = ((mincap - 1) >>> LONG_LOG2_SIZE) + 1;
      if(v.length == words && shift == 0) {
        return Arrays.copyOf(v, v.length);
      }
      long[] ret = new long[words];
      final int shiftWords = shift >>> LONG_LOG2_SIZE;
      final int shiftBits = shift & LONG_LOG2_MASK;
      // Simple case - multiple of word size
      if(shiftBits == 0) {
        for(int i = shiftWords; i < ret.length; i++) {
          ret[i] |= v[i - shiftWords];
        }
        return ret;
      }
      // Overlapping case
      final int unshiftBits = Long.SIZE - shiftBits;
      final int end = Math.min(ret.length, v.length + shiftWords) - 1;
      for(int i = end; i > shiftWords; i--) {
        final int src = i - shiftWords;
        ret[i] |= (v[src] << shiftBits) | (v[src - 1] >>> unshiftBits);
      }
      ret[shiftWords] |= v[0] << shiftBits;
      return ret;
    }