code: func (g *CookieGenerator) DecodeToken(encrypted []byte) (*Cookie, error) {
  	// if the client didn't send any Cookie, DecodeToken will be called with a nil-slice
  	if len(encrypted) == 0 {
  		return nil, nil
  	}
  
  	data, err := g.cookieProtector.DecodeToken(encrypted)
  	if err != nil {
  		return nil, err
  	}
  	t := &token{}
  	rest, err := asn1.Unmarshal(data, t)
  	if err != nil {
  		return nil, err
  	}
  	if len(rest) != 0 {
  		return nil, fmt.Errorf("rest when unpacking token: %d", len(rest))
  	}
  	cookie := &Cookie{
  		RemoteAddr: decodeRemoteAddr(t.RemoteAddr),
  		SentTime:   time.Unix(t.Timestamp, 0),
  	}
  	if len(t.OriginalDestConnectionID) > 0 {
  		cookie.OriginalDestConnectionID = protocol.ConnectionID(t.OriginalDestConnectionID)
  	}
  	return cookie, nil
  }
docs: // DecodeToken decodes a Cookie