code: func (p *Pss) Register(topic *Topic, hndlr *handler) func() {
  	p.handlersMu.Lock()
  	defer p.handlersMu.Unlock()
  	handlers := p.handlers[*topic]
  	if handlers == nil {
  		handlers = make(map[*handler]bool)
  		p.handlers[*topic] = handlers
  		log.Debug("registered handler", "capabilities", hndlr.caps)
  	}
  	if hndlr.caps == nil {
  		hndlr.caps = &handlerCaps{}
  	}
  	handlers[hndlr] = true
  
  	capabilities, ok := p.getTopicHandlerCaps(*topic)
  	if !ok {
  		capabilities = &handlerCaps{}
  		p.setTopicHandlerCaps(*topic, capabilities)
  	}
  
  	if hndlr.caps.raw {
  		capabilities.raw = true
  	}
  	if hndlr.caps.prox {
  		capabilities.prox = true
  	}
  	return func() { p.deregister(topic, hndlr) }
  }
docs: // Links a handler function to a Topic
  //
  // All incoming messages with an envelope Topic matching the
  // topic specified will be passed to the given Handler function.
  //
  // There may be an arbitrary number of handler functions per topic.
  //
  // Returns a deregister function which needs to be called to
  // deregister the handler,