code: public long[] get(long index, final long dest[], final int offset, final int length) {
  		selectUpper.select(index, dest, offset, length);
  		if (l == 0) for(int i = 0; i < length; i++) dest[offset + i] -= index++;
  		else {
  			long position = index * l;
  			for(int i = 0; i < length; i++) {
  				final int startWord = (int)(position / Long.SIZE);
  				final int startBit = (int)(position % Long.SIZE);
  				final int totalOffset = startBit + l;
  				final long result = lowerBits[startWord] >>> startBit;
  				dest[offset + i] = dest[offset + i] - index++ << l | (totalOffset <= Long.SIZE ? result : result | lowerBits[startWord + 1] << -startBit) & lowerBitsMask;
  				position += l;
  			}
  		}
  
  		return dest;
  	}
docs: Extracts a number of consecutive entries into a given array fragment.
  
  @param index the index of the first entry returned.
  @param dest the destination array; it will be filled with {@code length} consecutive entries starting at position {@code offset}.
  @param offset the first position written in {@code dest}.
  @param length the number of elements written in {@code dest} starting at {@code offset}.
  @return {@code dest}
  @see #get(long, long[])