code: func (e *Expander) readVarUint() (uint, error) {
  	u := uint(0)
  	b := make([]byte, 1)
  	m := uint(1)
  	for {
  		if n, err := e.r.Read(b); n != 1 || err != nil {
  			return 0, err
  		}
  
  		u += m * uint(b[0]&byte(0x7F))
  		m *= 128
  
  		if b[0] < 128 {
  			break
  		}
  	}
  
  	return u, nil
  }
docs: // readVarUint: since the compressed data consists of varints (see
  // bmcompress.go) for details then the fundamental operation is
  // reading varints