docs: def url_decode(s, charset='utf-8', decode_keys=False, include_empty=True,
                 errors='replace', separator='&', cls=None):
      """Parse a querystring and return it as :class:`MultiDict`.  Per default
      only values are decoded into unicode strings.  If `decode_keys` is set to
      `True` the same will happen for keys.
  
      Per default a missing value for a key will default to an empty key.  If
      you don't want that behavior you can set `include_empty` to `False`.
  
      Per default encoding errors are ignored.  If you want a different behavior
      you can set `errors` to ``'replace'`` or ``'strict'``.  In strict mode a
      `HTTPUnicodeError` is raised.
  
      .. versionchanged:: 0.5
         In previous versions ";" and "&" could be used for url decoding.
         This changed in 0.5 where only "&" is supported.  If you want to
         use ";" instead a different `separator` can be provided.
  
         The `cls` parameter was added.
  
      :param s: a string with the query string to decode.
      :param charset: the charset of the query string.
      :param decode_keys: set to `True` if you want the keys to be decoded
                          as well.
      :param include_empty: Set to `False` if you don't want empty values to
                            appear in the dict.
      :param errors: the decoding error behavior.
      :param separator: the pair separator to be used, defaults to ``&``
      :param cls: an optional dict class to use.  If this is not specified
                         or `None` the default :class:`MultiDict` is used.
      """
      if cls is None:
          cls = MultiDict
      return cls(_url_decode_impl(str(s).split(separator), charset, decode_keys,
                                  include_empty, errors))