code: public static BitStore asStore(byte[] bytes, int offset, int length) {
  		if (bytes == null) throw new IllegalArgumentException("null bytes");
  		int size = bytes.length << 3;
  		if (offset < 0) throw new IllegalArgumentException("negative offset");
  		if (length < 0) throw new IllegalArgumentException("negative length");
  		int finish = offset + length;
  		if (finish < 0) throw new IllegalArgumentException("index overflow");
  		if (finish > size) throw new IllegalArgumentException("exceeds size");
  		return new BytesBitStore(bytes, offset, finish, true);
  	}
docs: Exposes a subrange of the bits of a byte array as a {@link BitStore}. The
  returned bit store is a live view over the bytes; changes made to the
  array are reflected in bit store and vice versa. The size of the returned
  bit vector is the length of the sub range.
  
  @param bytes
  the byte data
  @param offset
  the index, in bits of the first bit in the bit store
  @param length
  the number of bits spanned by the bit store
  @return a {@link BitStore} over some range of bytes
  @see #asStore(byte[])
  @see BitVector#fromByteArray(byte[], int)