code: func (o *Object) SetAttrValues(key string, attrs []string) error {
  	ctx := context.TODO() // TODO: make it possible to get a context via Object; either new context field, or via some "ImportRun" field?
  
  	exists := asSet(o.Attrs(key))
  	actual := asSet(attrs)
  	o.mu.Lock()
  	defer o.mu.Unlock()
  	// add new values
  	for v := range actual {
  		if exists[v] {
  			delete(exists, v)
  			continue
  		}
  		_, err := o.h.upload(ctx, schema.NewAddAttributeClaim(o.pn, key, v))
  		if err != nil {
  			return err
  		}
  	}
  	// delete unneeded values
  	for v := range exists {
  		_, err := o.h.upload(ctx, schema.NewDelAttributeClaim(o.pn, key, v))
  		if err != nil {
  			return err
  		}
  	}
  	if o.attr == nil {
  		o.attr = make(map[string][]string)
  	}
  	o.attr[key] = attrs
  	return nil
  }
docs: // SetAttrValues sets multi-valued attribute.