code: public long[] select(long rank, long[] dest, final int offset, final int length) {
  		if (length == 0) return dest;
  		final long s = select(rank);
  		dest[offset] = s;
  		int curr = (int)(s / Long.SIZE);
  
  		long window = bits[curr] & -1L << s;
  		window &= window - 1;
  
  		for(int i = 1; i < length; i++) {
  			while(window == 0) window = bits[++curr];
  			dest[offset + i] = curr * Long.SIZE + Long.numberOfTrailingZeros(window);
  			window &= window - 1;
  		}
  
  		return dest;
  	}
docs: Performs a bulk select of consecutive ranks into a given array fragment.
  
  @param rank the first rank to select.
  @param dest the destination array; it will be filled with {@code length} positions of consecutive bits starting at position {@code offset}.
  @param offset the first bit position written in {@code dest}.
  @param length the number of bit positions in {@code dest} starting at {@code offset}.
  @return {@code dest}
  @see #select(long, long[])