code: func EncodeAll(src []uint32) ([]uint32, error) {
  	i := 0
  	dst := make([]uint32, len(src))
  	j := 0
  
  	for {
  		if i >= len(src) {
  			break
  		}
  		remaining := src[i:]
  
  		if canPack(remaining, 1, 28) {
  			dst[j] = pack28(src[i : i+28])
  			i += 28
  		} else if canPack(remaining, 2, 14) {
  			dst[j] = pack14(src[i : i+14])
  			i += 14
  		} else if canPack(remaining, 3, 9) {
  			dst[j] = pack9(src[i : i+9])
  			i += 9
  		} else if canPack(remaining, 4, 7) {
  			dst[j] = pack7(src[i : i+7])
  			i += 7
  		} else if canPack(remaining, 5, 5) {
  			dst[j] = pack5(src[i : i+5])
  			i += 5
  		} else if canPack(remaining, 7, 4) {
  			dst[j] = pack4(src[i : i+4])
  			i += 4
  		} else if canPack(remaining, 9, 3) {
  			dst[j] = pack3(src[i : i+3])
  			i += 3
  		} else if canPack(remaining, 14, 2) {
  			dst[j] = pack2(src[i : i+2])
  			i += 2
  		} else if canPack(remaining, 28, 1) {
  			dst[j] = pack1(src[i : i+1])
  			i += 1
  		} else {
  			return nil, fmt.Errorf("value out of bounds")
  		}
  		j += 1
  	}
  	return dst[:j], nil
  }
docs: // EncodeAll returns a packed slice of the values from src.  It a value is over
  // 1 << 28, an error is returned.