code: func (z *Keys) UnmarshalMsg(bts []byte) (o []byte, err error) {
  	var xsz uint32
  	xsz, bts, err = msgp.ReadArrayHeaderBytes(bts)
  	if err != nil {
  		return
  	}
  	if cap((*z)) >= int(xsz) {
  		(*z) = (*z)[:xsz]
  	} else {
  		(*z) = make(Keys, xsz)
  	}
  	for bzg := range *z {
  		if msgp.IsNil(bts) {
  			bts, err = msgp.ReadNilBytes(bts)
  			if err != nil {
  				return
  			}
  			(*z)[bzg] = nil
  		} else {
  			if (*z)[bzg] == nil {
  				(*z)[bzg] = new(Key)
  			}
  			bts, err = (*z)[bzg].UnmarshalMsg(bts)
  			if err != nil {
  				return
  			}
  		}
  	}
  	o = bts
  	return
  }
docs: // UnmarshalMsg implements msgp.Unmarshaler