code: func (pm *PermanodeMeta) valuesAtSigner(at time.Time,
  	signerFilter string) (v attrValues, ok bool) {
  
  	if pm.attr == nil {
  		return nil, false
  	}
  
  	var m attrValues
  	if signerFilter != "" {
  		m = pm.signer[signerFilter]
  		if m == nil {
  			return nil, true
  		}
  	} else {
  		m = pm.attr
  	}
  	if at.IsZero() {
  		return m, true
  	}
  	if n := len(pm.Claims); n == 0 || !pm.Claims[n-1].Date.After(at) {
  		return m, true
  	}
  	return nil, false
  }
docs: // valuesAtSigner returns an attrValues to query permanode attr values at the
  // given time for the signerFilter, which is the GPG ID of a signer (e.g. 2931A67C26F5ABDA).
  // It returns (nil, true) if signerFilter is not empty but pm has no
  // attributes for it (including if signerFilter is unknown).
  // It returns ok == true if v represents attrValues valid for the specified
  // parameters.
  // It returns (nil, false) if neither pm.attr nor pm.signer should be used for
  // the given time, because e.g. some claims are more recent than this time. In
  // which case, the caller should resort to querying another source, such as pm.Claims.
  // The returned map must not be changed by the caller.