code: func (f *fragment) rangeBetween(bitDepth uint, predicateMin, predicateMax uint64) (*Row, error) {
  	b := f.row(uint64(bitDepth))
  	keep1 := NewRow() // GTE
  	keep2 := NewRow() // LTE
  
  	// Filter any bits that don't match the current bit value.
  	for i := int(bitDepth - 1); i >= 0; i-- {
  		row := f.row(uint64(i))
  		bit1 := (predicateMin >> uint(i)) & 1
  		bit2 := (predicateMax >> uint(i)) & 1
  
  		// GTE predicateMin
  		// If bit is set then remove all unset columns not already kept.
  		if bit1 == 1 {
  			b = b.Difference(b.Difference(row).Difference(keep1))
  		} else {
  			// If bit is unset then add columns with set bit to keep.
  			// Don't bother to compute this on the final iteration.
  			if i > 0 {
  				keep1 = keep1.Union(b.Intersect(row))
  			}
  		}
  
  		// LTE predicateMin
  		// If bit is zero then remove all set bits not in excluded bitmap.
  		if bit2 == 0 {
  			b = b.Difference(row.Difference(keep2))
  		} else {
  			// If bit is set then add columns for set bits to exclude.
  			// Don't bother to compute this on the final iteration.
  			if i > 0 {
  				keep2 = keep2.Union(b.Difference(row))
  			}
  		}
  	}
  
  	return b, nil
  }
docs: // rangeBetween returns bitmaps with a bsiGroup value encoding matching any value between predicateMin and predicateMax.