]> granicus.if.org Git - ejabberd/commitdiff
Switch to stand-alone XMPP library
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sat, 19 Nov 2016 10:03:33 +0000 (13:03 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sat, 19 Nov 2016 10:03:33 +0000 (13:03 +0300)
55 files changed:
Makefile.in
include/flex_offline.hrl [deleted file]
include/jid.hrl [deleted file]
include/mam_query.hrl [deleted file]
include/muc_register.hrl [deleted file]
include/muc_request.hrl [deleted file]
include/muc_roomconfig.hrl [deleted file]
include/muc_roominfo.hrl [deleted file]
include/ns.hrl [deleted file]
include/pubsub_get_pending.hrl [deleted file]
include/pubsub_node_config.hrl [deleted file]
include/pubsub_publish_options.hrl [deleted file]
include/pubsub_subscribe_authorization.hrl [deleted file]
include/pubsub_subscribe_options.hrl [deleted file]
include/xmpp.hrl [deleted file]
include/xmpp_codec.hrl [deleted file]
rebar.config
specs/flex_offline.cfg [deleted file]
specs/flex_offline.xdata [deleted file]
specs/mam_query.cfg [deleted file]
specs/mam_query.xdata [deleted file]
specs/muc_register.cfg [deleted file]
specs/muc_register.xdata [deleted file]
specs/muc_request.cfg [deleted file]
specs/muc_request.xdata [deleted file]
specs/muc_roomconfig.cfg [deleted file]
specs/muc_roomconfig.xdata [deleted file]
specs/muc_roominfo.cfg [deleted file]
specs/muc_roominfo.xdata [deleted file]
specs/pubsub_get_pending.cfg [deleted file]
specs/pubsub_get_pending.xdata [deleted file]
specs/pubsub_node_config.cfg [deleted file]
specs/pubsub_node_config.xdata [deleted file]
specs/pubsub_publish_options.cfg [deleted file]
specs/pubsub_publish_options.xdata [deleted file]
specs/pubsub_subscribe_authorization.cfg [deleted file]
specs/pubsub_subscribe_authorization.xdata [deleted file]
specs/pubsub_subscribe_options.cfg [deleted file]
specs/pubsub_subscribe_options.xdata [deleted file]
specs/xmpp_codec.spec [deleted file]
src/flex_offline.erl [deleted file]
src/jid.erl [deleted file]
src/mam_query.erl [deleted file]
src/muc_register.erl [deleted file]
src/muc_request.erl [deleted file]
src/muc_roomconfig.erl [deleted file]
src/muc_roominfo.erl [deleted file]
src/pubsub_get_pending.erl [deleted file]
src/pubsub_node_config.erl [deleted file]
src/pubsub_publish_options.erl [deleted file]
src/pubsub_subscribe_authorization.erl [deleted file]
src/pubsub_subscribe_options.erl [deleted file]
src/xdata_codec.erl [deleted file]
src/xmpp.erl [deleted file]
src/xmpp_codec.erl [deleted file]

index b7c229fcc87edcaea4c0cc251591ed66ad0a9a41..00fd4f62c72a994ef5f24ed1c6741fa033bcc85f 100644 (file)
@@ -108,14 +108,6 @@ edoc:
        $(ERL) -noinput +B -eval \
         'case edoc:application(ejabberd, ".", []) of ok -> halt(0); error -> halt(1) end.'
 
-spec:
-       $(ERL) -noinput +B -pa ebin -pa deps/*/ebin -eval \
-       'case fxml_gen:compile("specs/xmpp_codec.spec", [{add_type_specs, xmpp_element}, {erl_dir, "src"}, {hrl_dir, "include"}]) of ok -> halt(0); _ -> halt(1) end.'
-
-xdata:
-       $(ERL) -noinput +B -pa ebin -pa deps/*/ebin -eval \
-       'case xdata_codec:compile("specs", [{erl_dir, "src"}, {hrl_dir, "include"}]) of ok -> halt(0); _ -> halt(1) end.'
-
 JOIN_PATHS=$(if $(wordlist 2,1000,$(1)),$(firstword $(1))/$(call JOIN_PATHS,$(wordlist 2,1000,$(1))),$(1))
 
 VERSIONED_DEP=$(if $(DEP_$(1)_VERSION),$(DEP_$(1)_VERSION),$(1))
@@ -347,5 +339,5 @@ quicktest:
        $(REBAR) skip_deps=true ct suites=elixir
 
 .PHONY: src edoc dialyzer Makefile TAGS clean clean-rel distclean rel \
-       install uninstall uninstall-binary uninstall-all translations deps test spec \
+       install uninstall uninstall-binary uninstall-all translations deps test \
        quicktest erlang_plt deps_plt ejabberd_plt
diff --git a/include/flex_offline.hrl b/include/flex_offline.hrl
deleted file mode 100644 (file)
index 74a38fb..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: flex_offline.xdata
-%% Form type: http://jabber.org/protocol/offline
-%% Document: XEP-0013
-
-
--type property() :: {'number_of_messages', non_neg_integer()}.
--type result() :: [property()].
-
--type form() :: [property() | xdata_field()].
diff --git a/include/jid.hrl b/include/jid.hrl
deleted file mode 100644 (file)
index 965985c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-%%%-------------------------------------------------------------------
-%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%% @copyright (C) 2016, Evgeny Khramtsov
-%%% @doc
-%%%
-%%% @end
-%%% Created : 10 Jul 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%%-------------------------------------------------------------------
--record(jid, {user = <<"">> :: binary(),
-              server = <<"">> :: binary(),
-              resource = <<"">> :: binary(),
-              luser = <<"">> :: binary(),
-              lserver = <<"">> :: binary(),
-              lresource = <<"">> :: binary()}).
-
--type(jid() :: #jid{}).
--type(ljid() :: {binary(), binary(), binary()}).
diff --git a/include/mam_query.hrl b/include/mam_query.hrl
deleted file mode 100644 (file)
index 4ec48c0..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: mam_query.xdata
-%% Form type: urn:xmpp:mam:1
-%% Document: XEP-0313
-
-
--type property() :: {'with', jid:jid()} |
-                    {'start', erlang:timestamp()} |
-                    {'end', erlang:timestamp()} |
-                    {'withtext', binary()}.
--type result() :: [property()].
-
--type form() :: [property() | xdata_field()].
diff --git a/include/muc_register.hrl b/include/muc_register.hrl
deleted file mode 100644 (file)
index 0cfc928..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: muc_register.xdata
-%% Form type: http://jabber.org/protocol/muc#register
-%% Document: XEP-0045
-
-
--type property() :: {'allow', boolean()} |
-                    {'email', binary()} |
-                    {'faqentry', [binary()]} |
-                    {'first', binary()} |
-                    {'last', binary()} |
-                    {'roomnick', binary()} |
-                    {'url', binary()}.
--type result() :: [property()].
-
--type form() :: [property() | xdata_field()].
diff --git a/include/muc_request.hrl b/include/muc_request.hrl
deleted file mode 100644 (file)
index bc14be3..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: muc_request.xdata
-%% Form type: http://jabber.org/protocol/muc#request
-%% Document: XEP-0045
-
-
--type property() :: {'role', participant} |
-                    {'jid', jid:jid()} |
-                    {'roomnick', binary()} |
-                    {'request_allow', boolean()}.
--type result() :: [property()].
-
--type options(T) :: [{binary(), T}].
--type property_with_options() ::
-      {'role', participant, options(participant)}.
--type form() :: [property() | property_with_options() | xdata_field()].
diff --git a/include/muc_roomconfig.hrl b/include/muc_roomconfig.hrl
deleted file mode 100644 (file)
index 89cfc33..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: muc_roomconfig.xdata
-%% Form type: http://jabber.org/protocol/muc#roomconfig
-%% Document: XEP-0045
-
--type 'allow_private_messages_from_visitors'() :: nobody | moderators | anyone.
--type 'maxusers'() :: none | non_neg_integer().
--type 'presencebroadcast'() :: moderator | participant | visitor.
--type 'whois'() :: moderators | anyone.
-
--type property() :: {'maxhistoryfetch', binary()} |
-                    {'allowpm', binary()} |
-                    {'allow_private_messages', boolean()} |
-                    {'allow_private_messages_from_visitors', 'allow_private_messages_from_visitors'()} |
-                    {'allow_visitor_status', boolean()} |
-                    {'allow_visitor_nickchange', boolean()} |
-                    {'allow_voice_requests', boolean()} |
-                    {'allow_subscription', boolean()} |
-                    {'voice_request_min_interval', non_neg_integer()} |
-                    {'captcha_protected', boolean()} |
-                    {'captcha_whitelist', [jid:jid()]} |
-                    {'allow_query_users', boolean()} |
-                    {'allowinvites', boolean()} |
-                    {'changesubject', boolean()} |
-                    {'enablelogging', boolean()} |
-                    {'getmemberlist', [binary()]} |
-                    {'lang', binary()} |
-                    {'pubsub', binary()} |
-                    {'maxusers', 'maxusers'()} |
-                    {'membersonly', boolean()} |
-                    {'moderatedroom', boolean()} |
-                    {'members_by_default', boolean()} |
-                    {'passwordprotectedroom', boolean()} |
-                    {'persistentroom', boolean()} |
-                    {'presencebroadcast', ['presencebroadcast'()]} |
-                    {'publicroom', boolean()} |
-                    {'public_list', boolean()} |
-                    {'roomadmins', [jid:jid()]} |
-                    {'roomdesc', binary()} |
-                    {'roomname', binary()} |
-                    {'roomowners', [jid:jid()]} |
-                    {'roomsecret', binary()} |
-                    {'whois', 'whois'()} |
-                    {'mam', boolean()}.
--type result() :: [property()].
-
--type options(T) :: [{binary(), T}].
--type property_with_options() ::
-      {'allowpm', binary(), options(binary())} |
-      {'allow_private_messages_from_visitors', 'allow_private_messages_from_visitors'(), options('allow_private_messages_from_visitors'())} |
-      {'getmemberlist', [binary()], options(binary())} |
-      {'maxusers', 'maxusers'(), options('maxusers'())} |
-      {'presencebroadcast', ['presencebroadcast'()], options('presencebroadcast'())} |
-      {'whois', 'whois'(), options('whois'())}.
--type form() :: [property() | property_with_options() | xdata_field()].
diff --git a/include/muc_roominfo.hrl b/include/muc_roominfo.hrl
deleted file mode 100644 (file)
index cf4f4eb..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: muc_roominfo.xdata
-%% Form type: http://jabber.org/protocol/muc#roominfo
-%% Document: XEP-0045
-
-
--type property() :: {'maxhistoryfetch', non_neg_integer()} |
-                    {'contactjid', [jid:jid()]} |
-                    {'description', binary()} |
-                    {'lang', binary()} |
-                    {'ldapgroup', binary()} |
-                    {'logs', binary()} |
-                    {'occupants', non_neg_integer()} |
-                    {'subject', binary()} |
-                    {'subjectmod', boolean()}.
--type result() :: [property()].
-
--type form() :: [property() | xdata_field()].
diff --git a/include/ns.hrl b/include/ns.hrl
deleted file mode 100644 (file)
index d94c2a9..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-%%%----------------------------------------------------------------------
-%%%
-%%% ejabberd, Copyright (C) 2002-2016   ProcessOne
-%%%
-%%% This program is free software; you can redistribute it and/or
-%%% modify it under the terms of the GNU General Public License as
-%%% published by the Free Software Foundation; either version 2 of the
-%%% License, or (at your option) any later version.
-%%%
-%%% This program is distributed in the hope that it will be useful,
-%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
-%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-%%% General Public License for more details.
-%%%
-%%% You should have received a copy of the GNU General Public License along
-%%% with this program; if not, write to the Free Software Foundation, Inc.,
-%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-%%%
-%%%----------------------------------------------------------------------
-
--define(NS_COMPONENT, <<"jabber:component:accept">>).
--define(NS_SERVER, <<"jabber:server">>).
--define(NS_SERVER_DIALBACK, <<"jabber:server:dialback">>).
--define(NS_CLIENT, <<"jabber:client">>).
--define(NS_DISCO_ITEMS,
-       <<"http://jabber.org/protocol/disco#items">>).
--define(NS_DISCO_INFO,
-       <<"http://jabber.org/protocol/disco#info">>).
--define(NS_VCARD, <<"vcard-temp">>).
--define(NS_VCARD_UPDATE, <<"vcard-temp:x:update">>).
--define(NS_AUTH, <<"jabber:iq:auth">>).
--define(NS_AUTH_ERROR, <<"jabber:iq:auth:error">>).
--define(NS_REGISTER, <<"jabber:iq:register">>).
--define(NS_SEARCH, <<"jabber:iq:search">>).
--define(NS_ROSTER, <<"jabber:iq:roster">>).
--define(NS_ROSTER_VER,
-       <<"urn:xmpp:features:rosterver">>).
--define(NS_PRIVACY, <<"jabber:iq:privacy">>).
--define(NS_BLOCKING, <<"urn:xmpp:blocking">>).
--define(NS_PRIVATE, <<"jabber:iq:private">>).
--define(NS_VERSION, <<"jabber:iq:version">>).
--define(NS_TIME, <<"urn:xmpp:time">>).
--define(NS_LAST, <<"jabber:iq:last">>).
--define(NS_XDATA, <<"jabber:x:data">>).
--define(NS_IQDATA, <<"jabber:iq:data">>).
--define(NS_DELAY, <<"urn:xmpp:delay">>).
--define(NS_HINTS, <<"urn:xmpp:hints">>).
--define(NS_EXPIRE, <<"jabber:x:expire">>).
--define(NS_EVENT, <<"jabber:x:event">>).
--define(NS_CHATSTATES,
-       <<"http://jabber.org/protocol/chatstates">>).
--define(NS_XCONFERENCE, <<"jabber:x:conference">>).
--define(NS_STATS,
-       <<"http://jabber.org/protocol/stats">>).
--define(NS_MUC, <<"http://jabber.org/protocol/muc">>).
--define(NS_MUC_USER,
-       <<"http://jabber.org/protocol/muc#user">>).
--define(NS_MUC_ADMIN,
-       <<"http://jabber.org/protocol/muc#admin">>).
--define(NS_MUC_OWNER,
-       <<"http://jabber.org/protocol/muc#owner">>).
--define(NS_MUC_UNIQUE,
-       <<"http://jabber.org/protocol/muc#unique">>).
--define(NS_PUBSUB,
-       <<"http://jabber.org/protocol/pubsub">>).
--define(NS_PUBSUB_EVENT,
-       <<"http://jabber.org/protocol/pubsub#event">>).
--define(NS_PUBSUB_META_DATA,
-       <<"http://jabber.org/protocol/pubsub#meta-data">>).
--define(NS_PUBSUB_OWNER,
-       <<"http://jabber.org/protocol/pubsub#owner">>).
--define(NS_PUBSUB_NMI,
-       <<"http://jabber.org/protocol/pubsub#node-meta-info">>).
--define(NS_PUBSUB_ERRORS,
-       <<"http://jabber.org/protocol/pubsub#errors">>).
--define(NS_PUBSUB_NODE_CONFIG,
-       <<"http://jabber.org/protocol/pubsub#node_config">>).
--define(NS_PUBSUB_SUB_OPTIONS,
-       <<"http://jabber.org/protocol/pubsub#subscribe_options">>).
--define(NS_PUBSUB_SUBSCRIBE_OPTIONS,
-       <<"http://jabber.org/protocol/pubsub#subscribe_options">>).
--define(NS_PUBSUB_PUBLISH_OPTIONS,
-       <<"http://jabber.org/protocol/pubsub#publish_options">>).
--define(NS_PUBSUB_SUB_AUTH,
-       <<"http://jabber.org/protocol/pubsub#subscribe_authorization">>).
--define(NS_PUBSUB_GET_PENDING,
-       <<"http://jabber.org/protocol/pubsub#get-pending">>).
--define(NS_COMMANDS,
-       <<"http://jabber.org/protocol/commands">>).
--define(NS_BYTESTREAMS,
-       <<"http://jabber.org/protocol/bytestreams">>).
--define(NS_ADMIN,
-       <<"http://jabber.org/protocol/admin">>).
--define(NS_ADMIN_ANNOUNCE,
-       <<"http://jabber.org/protocol/admin#announce">>).
--define(NS_ADMIN_ANNOUNCE_ALL,
-       <<"http://jabber.org/protocol/admin#announce-all">>).
--define(NS_ADMIN_SET_MOTD,
-       <<"http://jabber.org/protocol/admin#set-motd">>).
--define(NS_ADMIN_EDIT_MOTD,
-       <<"http://jabber.org/protocol/admin#edit-motd">>).
--define(NS_ADMIN_DELETE_MOTD,
-       <<"http://jabber.org/protocol/admin#delete-motd">>).
--define(NS_ADMIN_ANNOUNCE_ALLHOSTS,
-       <<"http://jabber.org/protocol/admin#announce-allhosts">>).
--define(NS_ADMIN_ANNOUNCE_ALL_ALLHOSTS,
-       <<"http://jabber.org/protocol/admin#announce-all-allhosts">>).
--define(NS_ADMIN_SET_MOTD_ALLHOSTS,
-       <<"http://jabber.org/protocol/admin#set-motd-allhosts">>).
--define(NS_ADMIN_EDIT_MOTD_ALLHOSTS,
-       <<"http://jabber.org/protocol/admin#edit-motd-allhosts">>).
--define(NS_ADMIN_DELETE_MOTD_ALLHOSTS,
-       <<"http://jabber.org/protocol/admin#delete-motd-allhosts">>).
--define(NS_SERVERINFO,
-       <<"http://jabber.org/network/serverinfo">>).
--define(NS_RSM, <<"http://jabber.org/protocol/rsm">>).
--define(NS_EJABBERD_CONFIG, <<"ejabberd:config">>).
--define(NS_STREAM,
-       <<"http://etherx.jabber.org/streams">>).
--define(NS_STANZAS,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>).
--define(NS_STREAMS,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>).
--define(NS_TLS, <<"urn:ietf:params:xml:ns:xmpp-tls">>).
--define(NS_SASL,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>).
--define(NS_SESSION,
-       <<"urn:ietf:params:xml:ns:xmpp-session">>).
--define(NS_BIND,
-       <<"urn:ietf:params:xml:ns:xmpp-bind">>).
--define(NS_FEATURE_IQAUTH,
-       <<"http://jabber.org/features/iq-auth">>).
--define(NS_FEATURE_IQREGISTER,
-       <<"http://jabber.org/features/iq-register">>).
--define(NS_FEATURE_COMPRESS,
-       <<"http://jabber.org/features/compress">>).
--define(NS_FEATURE_MSGOFFLINE, <<"msgoffline">>).
--define(NS_FLEX_OFFLINE, <<"http://jabber.org/protocol/offline">>).
--define(NS_COMPRESS,
-       <<"http://jabber.org/protocol/compress">>).
--define(NS_CAPS, <<"http://jabber.org/protocol/caps">>).
--define(NS_SHIM, <<"http://jabber.org/protocol/shim">>).
--define(NS_ADDRESS,
-       <<"http://jabber.org/protocol/address">>).
--define(NS_OOB, <<"jabber:x:oob">>).
--define(NS_CAPTCHA, <<"urn:xmpp:captcha">>).
--define(NS_MEDIA, <<"urn:xmpp:media-element">>).
--define(NS_BOB, <<"urn:xmpp:bob">>).
--define(NS_MAM_TMP, <<"urn:xmpp:mam:tmp">>).
--define(NS_MAM_0, <<"urn:xmpp:mam:0">>).
--define(NS_MAM_1, <<"urn:xmpp:mam:1">>).
--define(NS_SID_0, <<"urn:xmpp:sid:0">>).
--define(NS_PING, <<"urn:xmpp:ping">>).
--define(NS_CARBONS_2, <<"urn:xmpp:carbons:2">>).
--define(NS_CARBONS_1, <<"urn:xmpp:carbons:1">>).
--define(NS_FORWARD, <<"urn:xmpp:forward:0">>).
--define(NS_CLIENT_STATE,  <<"urn:xmpp:csi:0">>).
--define(NS_STREAM_MGMT_2,  <<"urn:xmpp:sm:2">>).
--define(NS_STREAM_MGMT_3,  <<"urn:xmpp:sm:3">>).
--define(NS_HTTP_UPLOAD, <<"urn:xmpp:http:upload">>).
--define(NS_HTTP_UPLOAD_OLD, <<"eu:siacs:conversations:http:upload">>).
--define(NS_THUMBS_1, <<"urn:xmpp:thumbs:1">>).
--define(NS_NICK,  <<"http://jabber.org/protocol/nick">>).
--define(NS_SIC_0, <<"urn:xmpp:sic:0">>).
--define(NS_SIC_1, <<"urn:xmpp:sic:1">>).
--define(NS_MIX_0, <<"urn:xmpp:mix:0">>).
--define(NS_MIX_SERVICEINFO_0, <<"urn:xmpp:mix:0#serviceinfo">>).
--define(NS_MIX_NODES_MESSAGES, <<"urn:xmpp:mix:nodes:messages">>).
--define(NS_MIX_NODES_PRESENCE, <<"urn:xmpp:mix:nodes:presence">>).
--define(NS_MIX_NODES_PARTICIPANTS, <<"urn:xmpp:mix:nodes:participants">>).
--define(NS_MIX_NODES_SUBJECT, <<"urn:xmpp:mix:nodes:subject">>).
--define(NS_MIX_NODES_CONFIG, <<"urn:xmpp:mix:nodes:config">>).
--define(NS_PRIVILEGE, <<"urn:xmpp:privilege:1">>).
--define(NS_DELEGATION, <<"urn:xmpp:delegation:1">>).
--define(NS_MUCSUB, <<"urn:xmpp:mucsub:0">>).
--define(NS_MUCSUB_NODES_PRESENCE, <<"urn:xmpp:mucsub:nodes:presence">>).
--define(NS_MUCSUB_NODES_MESSAGES, <<"urn:xmpp:mucsub:nodes:messages">>).
--define(NS_MUCSUB_NODES_PARTICIPANTS, <<"urn:xmpp:mucsub:nodes:participants">>).
--define(NS_MUCSUB_NODES_AFFILIATIONS, <<"urn:xmpp:mucsub:nodes:affiliations">>).
--define(NS_MUCSUB_NODES_SUBJECT, <<"urn:xmpp:mucsub:nodes:subject">>).
--define(NS_MUCSUB_NODES_CONFIG, <<"urn:xmpp:mucsub:nodes:config">>).
--define(NS_MUCSUB_NODES_SYSTEM, <<"urn:xmpp:mucsub:nodes:system">>).
diff --git a/include/pubsub_get_pending.hrl b/include/pubsub_get_pending.hrl
deleted file mode 100644 (file)
index 4ddf9ba..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_get_pending.xdata
-%% Form type: http://jabber.org/protocol/pubsub#subscribe_authorization
-%% Document: XEP-0060
-
-
--type property() :: {'node', binary()}.
--type result() :: [property()].
-
--type options(T) :: [{binary(), T}].
--type property_with_options() ::
-      {'node', binary(), options(binary())}.
--type form() :: [property() | property_with_options() | xdata_field()].
diff --git a/include/pubsub_node_config.hrl b/include/pubsub_node_config.hrl
deleted file mode 100644 (file)
index e1519cd..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_node_config.xdata
-%% Form type: http://jabber.org/protocol/pubsub#node_config
-%% Document: XEP-0060
-
--type 'access_model'() :: authorize | open | presence | roster | whitelist.
--type 'children_association_policy'() :: all | owners | whitelist.
--type 'itemreply'() :: owner | publisher | none.
--type 'node_type'() :: leaf | collection.
--type 'notification_type'() :: normal | headline.
--type 'publish_model'() :: publishers | subscribers | open.
--type 'send_last_published_item'() :: never | on_sub | on_sub_and_presence.
-
--type property() :: {'access_model', 'access_model'()} |
-                    {'body_xslt', binary()} |
-                    {'children_association_policy', 'children_association_policy'()} |
-                    {'children_association_whitelist', [jid:jid()]} |
-                    {'children', [binary()]} |
-                    {'children_max', binary()} |
-                    {'collection', [binary()]} |
-                    {'contact', [jid:jid()]} |
-                    {'dataform_xslt', binary()} |
-                    {'deliver_notifications', boolean()} |
-                    {'deliver_payloads', boolean()} |
-                    {'description', binary()} |
-                    {'item_expire', binary()} |
-                    {'itemreply', 'itemreply'()} |
-                    {'language', binary()} |
-                    {'max_items', non_neg_integer()} |
-                    {'max_payload_size', non_neg_integer()} |
-                    {'node_type', 'node_type'()} |
-                    {'notification_type', 'notification_type'()} |
-                    {'notify_config', boolean()} |
-                    {'notify_delete', boolean()} |
-                    {'notify_retract', boolean()} |
-                    {'notify_sub', boolean()} |
-                    {'persist_items', boolean()} |
-                    {'presence_based_delivery', boolean()} |
-                    {'publish_model', 'publish_model'()} |
-                    {'purge_offline', boolean()} |
-                    {'roster_groups_allowed', [binary()]} |
-                    {'send_last_published_item', 'send_last_published_item'()} |
-                    {'tempsub', boolean()} |
-                    {'subscribe', boolean()} |
-                    {'title', binary()} |
-                    {'type', binary()}.
--type result() :: [property()].
-
--type options(T) :: [{binary(), T}].
--type property_with_options() ::
-      {'access_model', 'access_model'(), options('access_model'())} |
-      {'children_association_policy', 'children_association_policy'(), options('children_association_policy'())} |
-      {'itemreply', 'itemreply'(), options('itemreply'())} |
-      {'language', binary(), options(binary())} |
-      {'node_type', 'node_type'(), options('node_type'())} |
-      {'notification_type', 'notification_type'(), options('notification_type'())} |
-      {'publish_model', 'publish_model'(), options('publish_model'())} |
-      {'roster_groups_allowed', [binary()], options(binary())} |
-      {'send_last_published_item', 'send_last_published_item'(), options('send_last_published_item'())}.
--type form() :: [property() | property_with_options() | xdata_field()].
diff --git a/include/pubsub_publish_options.hrl b/include/pubsub_publish_options.hrl
deleted file mode 100644 (file)
index 3b04b48..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_publish_options.xdata
-%% Form type: http://jabber.org/protocol/pubsub#publish-options
-%% Document: XEP-0060
-
--type 'access_model'() :: authorize | open | presence | roster | whitelist.
-
--type property() :: {'access_model', 'access_model'()}.
--type result() :: [property()].
-
--type options(T) :: [{binary(), T}].
--type property_with_options() ::
-      {'access_model', 'access_model'(), options('access_model'())}.
--type form() :: [property() | property_with_options() | xdata_field()].
diff --git a/include/pubsub_subscribe_authorization.hrl b/include/pubsub_subscribe_authorization.hrl
deleted file mode 100644 (file)
index fb67ab4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_subscribe_authorization.xdata
-%% Form type: http://jabber.org/protocol/pubsub#subscribe_authorization
-%% Document: XEP-0060
-
-
--type property() :: {'allow', boolean()} |
-                    {'node', binary()} |
-                    {'subscriber_jid', jid:jid()} |
-                    {'subid', binary()}.
--type result() :: [property()].
-
--type form() :: [property() | xdata_field()].
diff --git a/include/pubsub_subscribe_options.hrl b/include/pubsub_subscribe_options.hrl
deleted file mode 100644 (file)
index 9a05822..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_subscribe_options.xdata
-%% Form type: http://jabber.org/protocol/pubsub#subscribe_options
-%% Document: XEP-0060
-
--type 'show-values'() :: away | chat | dnd | online | xa.
--type 'subscription_type'() :: items | nodes.
--type 'subscription_depth'() :: 1 | all.
-
--type property() :: {'deliver', boolean()} |
-                    {'digest', boolean()} |
-                    {'digest_frequency', binary()} |
-                    {'expire', binary()} |
-                    {'include_body', boolean()} |
-                    {'show-values', ['show-values'()]} |
-                    {'subscription_type', 'subscription_type'()} |
-                    {'subscription_depth', 'subscription_depth'()}.
--type result() :: [property()].
-
--type options(T) :: [{binary(), T}].
--type property_with_options() ::
-      {'show-values', ['show-values'()], options('show-values'())} |
-      {'subscription_type', 'subscription_type'(), options('subscription_type'())} |
-      {'subscription_depth', 'subscription_depth'(), options('subscription_depth'())}.
--type form() :: [property() | property_with_options() | xdata_field()].
diff --git a/include/xmpp.hrl b/include/xmpp.hrl
deleted file mode 100644 (file)
index f8a6159..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-%%%-------------------------------------------------------------------
-%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%% @copyright (C) 2015, Evgeny Khramtsov
-%%% @doc
-%%%
-%%% @end
-%%% Created : 10 Dec 2015 by Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%%-------------------------------------------------------------------
--include("ns.hrl").
--include("jid.hrl").
--include("xmpp_codec.hrl").
--include("fxml.hrl").
-
--type iq_type() :: get | set | result | error.
--type message_type() :: chat | error | groupchat | headline | normal.
--type presence_type() :: available | error | probe | subscribe |
-                        subscribed | unavailable | unsubscribe |
-                        unsubscribed.
-
--type stanza() :: iq() | presence() | message().
-
--define(is_stanza(Pkt),
-       (is_record(Pkt, iq) or
-        is_record(Pkt, message) or
-        is_record(Pkt, presence))).
diff --git a/include/xmpp_codec.hrl b/include/xmpp_codec.hrl
deleted file mode 100644 (file)
index 03421d9..0000000
+++ /dev/null
@@ -1,1092 +0,0 @@
-%% Created automatically by XML generator (fxml_gen.erl)
-%% Source: xmpp_codec.spec
-
--record(vcard_xupdate, {us = {<<>>, <<>>} :: {binary(), binary()},
-                       hash :: binary()}).
--type vcard_xupdate() :: #vcard_xupdate{}.
-
--record(ps_affiliation, {xmlns = <<>> :: binary(),
-                        node = <<>> :: binary(),
-                        type :: member | none | outcast |
-                                owner | publisher | publish_only,
-                        jid :: jid:jid()}).
--type ps_affiliation() :: #ps_affiliation{}.
-
--type ps_error_type() :: 'closed-node' | 'configuration-required' |
-                        'invalid-jid' | 'invalid-options' |
-                        'invalid-payload' | 'invalid-subid' |
-                        'item-forbidden' | 'item-required' | 'jid-required' |
-                        'max-items-exceeded' | 'max-nodes-exceeded' |
-                        'nodeid-required' | 'not-in-roster-group' |
-                        'not-subscribed' | 'payload-too-big' |
-                        'payload-required' | 'pending-subscription' |
-                        'presence-subscription-required' | 'subid-required' |
-                        'too-many-subscriptions' | 'unsupported' |
-                        'unsupported-access-model'.
--type ps_feature() :: 'access-authorize' | 'access-open' |
-                     'access-presence' | 'access-roster' |
-                     'access-whitelist' | 'auto-create' |
-                     'auto-subscribe' | 'collections' | 'config-node' |
-                     'create-and-configure' | 'create-nodes' |
-                     'delete-items' | 'delete-nodes' |
-                     'filtered-notifications' | 'get-pending' |
-                     'instant-nodes' | 'item-ids' | 'last-published' |
-                     'leased-subscription' | 'manage-subscriptions' |
-                     'member-affiliation' | 'meta-data' |
-                     'modify-affiliations' | 'multi-collection' |
-                     'multi-subscribe' | 'outcast-affiliation' |
-                     'persistent-items' | 'presence-notifications' |
-                     'presence-subscribe' | 'publish' |
-                     'publish-options' | 'publish-only-affiliation' |
-                     'publisher-affiliation' | 'purge-nodes' |
-                     'retract-items' | 'retrieve-affiliations' |
-                     'retrieve-default' | 'retrieve-items' |
-                     'retrieve-subscriptions' | 'subscribe' |
-                     'subscription-options' | 'subscription-notifications'.
--record(ps_error, {type :: ps_error_type(), feature :: ps_feature()}).
--type ps_error() :: #ps_error{}.
-
--record(chatstate, {type :: active | composing | gone | inactive | paused}).
--type chatstate() :: #chatstate{}.
-
--record(csi, {type :: active | inactive}).
--type csi() :: #csi{}.
-
--record(hint, {type :: 'no-copy' | 'no-store' | 'no-storage' | 'store' |
-                      'no-permanent-store' | 'no-permanent-storage'}).
--type hint() :: #hint{}.
-
--record(iq, {id = <<>> :: binary(),
-             type :: 'error' | 'get' | 'result' | 'set',
-             lang = <<>> :: binary(),
-             from :: jid:jid(),
-             to :: jid:jid(),
-             sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type iq() :: #iq{}.
-
--record(feature_register, {}).
--type feature_register() :: #feature_register{}.
-
--record(adhoc_note, {type = info :: 'error' | 'info' | 'warn',
-                     data = <<>> :: binary()}).
--type adhoc_note() :: #adhoc_note{}.
-
--record(address, {type :: 'bcc' | 'cc' | 'noreply' | 'ofrom' | 'replyroom' | 'replyto' | 'to',
-                  jid :: jid:jid(),
-                  desc = <<>> :: binary(),
-                  node = <<>> :: binary(),
-                  delivered :: boolean()}).
--type address() :: #address{}.
-
--record(sasl_success, {text = <<>> :: binary()}).
--type sasl_success() :: #sasl_success{}.
-
--record(mam_result, {xmlns = <<>> :: binary(),
-                     queryid = <<>> :: binary(),
-                     id = <<>> :: binary(),
-                     sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type mam_result() :: #mam_result{}.
-
--record(rsm_first, {index :: non_neg_integer(),
-                    data = <<>> :: binary()}).
--type rsm_first() :: #rsm_first{}.
-
--record(text, {lang = <<>> :: binary(),
-               data = <<>> :: binary()}).
--type text() :: #text{}.
-
--record(streamhost, {jid :: jid:jid(),
-                     host = <<>> :: binary(),
-                     port = 1080 :: non_neg_integer()}).
--type streamhost() :: #streamhost{}.
-
--record(sm_resume, {h :: non_neg_integer(),
-                    previd = <<>> :: binary(),
-                    xmlns = <<>> :: binary()}).
--type sm_resume() :: #sm_resume{}.
-
--record(carbons_enable, {}).
--type carbons_enable() :: #carbons_enable{}.
-
--record(carbons_private, {}).
--type carbons_private() :: #carbons_private{}.
-
--record(expire, {seconds :: non_neg_integer(),
-                 stored :: non_neg_integer()}).
--type expire() :: #expire{}.
-
--record(muc_unsubscribe, {}).
--type muc_unsubscribe() :: #muc_unsubscribe{}.
-
--record(ps_unsubscribe, {node = <<>> :: binary(),
-                         jid :: jid:jid(),
-                         subid = <<>> :: binary()}).
--type ps_unsubscribe() :: #ps_unsubscribe{}.
-
--record(mix_leave, {}).
--type mix_leave() :: #mix_leave{}.
-
--record(ping, {}).
--type ping() :: #ping{}.
-
--record(delay, {stamp :: erlang:timestamp(),
-                from :: jid:jid(),
-                desc = <<>> :: binary()}).
--type delay() :: #delay{}.
-
--record(muc_history, {maxchars :: non_neg_integer(),
-                      maxstanzas :: non_neg_integer(),
-                      seconds :: non_neg_integer(),
-                      since :: erlang:timestamp()}).
--type muc_history() :: #muc_history{}.
-
--record(thumbnail, {uri = <<>> :: binary(),
-                    'media-type' = <<>> :: binary(),
-                    width :: non_neg_integer(),
-                    height :: non_neg_integer()}).
--type thumbnail() :: #thumbnail{}.
-
--record(privilege_perm, {access :: 'message' | 'presence' | 'roster',
-                         type :: 'both' | 'get' | 'managed_entity' | 'none' | 'outgoing' | 'roster' | 'set'}).
--type privilege_perm() :: #privilege_perm{}.
-
--record(muc_decline, {reason = <<>> :: binary(),
-                      from :: jid:jid(),
-                      to :: jid:jid()}).
--type muc_decline() :: #muc_decline{}.
-
--record(sm_a, {h :: non_neg_integer(),
-               xmlns = <<>> :: binary()}).
--type sm_a() :: #sm_a{}.
-
--record(stream_start, {from :: jid:jid(),
-                       to :: jid:jid(),
-                       id = <<>> :: binary(),
-                       version :: {non_neg_integer(),non_neg_integer()},
-                       xmlns = <<>> :: binary(),
-                       stream_xmlns = <<>> :: binary(),
-                       db_xmlns = <<>> :: binary(),
-                       lang = <<>> :: binary()}).
--type stream_start() :: #stream_start{}.
-
--record(muc_subscribe, {nick = <<>> :: binary(),
-                        events = [] :: [binary()]}).
--type muc_subscribe() :: #muc_subscribe{}.
-
--record(stanza_id, {by :: jid:jid(),
-                    id = <<>> :: binary()}).
--type stanza_id() :: #stanza_id{}.
-
--record(starttls_proceed, {}).
--type starttls_proceed() :: #starttls_proceed{}.
-
--record(forwarded, {delay :: #delay{},
-                    xml_els = [] :: [fxml:xmlel()]}).
--type forwarded() :: #forwarded{}.
-
--record(privilege, {perms = [] :: [#privilege_perm{}],
-                    forwarded :: #forwarded{}}).
--type privilege() :: #privilege{}.
-
--record(client_id, {id = <<>> :: binary()}).
--type client_id() :: #client_id{}.
-
--record(sm_resumed, {h :: non_neg_integer(),
-                     previd = <<>> :: binary(),
-                     xmlns = <<>> :: binary()}).
--type sm_resumed() :: #sm_resumed{}.
-
--record(sm_enable, {max :: non_neg_integer(),
-                    resume = false :: boolean(),
-                    xmlns = <<>> :: binary()}).
--type sm_enable() :: #sm_enable{}.
-
--record(starttls_failure, {}).
--type starttls_failure() :: #starttls_failure{}.
-
--record(sasl_challenge, {text = <<>> :: binary()}).
--type sasl_challenge() :: #sasl_challenge{}.
-
--record(handshake, {data = <<>> :: binary()}).
--type handshake() :: #handshake{}.
-
--record(gone, {uri = <<>> :: binary()}).
--type gone() :: #gone{}.
-
--record(x_conference, {jid :: jid:jid(),
-                       password = <<>> :: binary(),
-                       reason = <<>> :: binary(),
-                       continue :: boolean(),
-                       thread = <<>> :: binary()}).
--type x_conference() :: #x_conference{}.
-
--record(private, {xml_els = [] :: [fxml:xmlel()]}).
--type private() :: #private{}.
-
--record(delegation_query, {to :: jid:jid(),
-                           delegate = [] :: [binary()]}).
--type delegation_query() :: #delegation_query{}.
-
--record(db_verify, {from = <<>> :: binary(),
-                    to = <<>> :: binary(),
-                    id = <<>> :: binary(),
-                    type :: 'error' | 'invalid' | 'valid',
-                    key = <<>> :: binary(),
-                    sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type db_verify() :: #db_verify{}.
-
--record(nick, {name = <<>> :: binary()}).
--type nick() :: #nick{}.
-
--record(p1_ack, {}).
--type p1_ack() :: #p1_ack{}.
-
--record(feature_sm, {xmlns = <<>> :: binary()}).
--type feature_sm() :: #feature_sm{}.
-
--record(ps_item, {xmlns = <<>> :: binary(),
-                  id = <<>> :: binary(),
-                  xml_els = [] :: [fxml:xmlel()],
-                  node = <<>> :: binary(),
-                  publisher = <<>> :: binary()}).
--type ps_item() :: #ps_item{}.
-
--record(ps_publish, {node = <<>> :: binary(),
-                     items = [] :: [#ps_item{}]}).
--type ps_publish() :: #ps_publish{}.
-
--record(roster_item, {jid :: jid:jid(),
-                      name = <<>> :: binary(),
-                      groups = [] :: [binary()],
-                      subscription = none :: 'both' | 'from' | 'none' | 'remove' | 'to',
-                      ask :: 'subscribe'}).
--type roster_item() :: #roster_item{}.
-
--record(roster_query, {items = [] :: [#roster_item{}],
-                       ver :: binary()}).
--type roster_query() :: #roster_query{}.
-
--record(sm_r, {xmlns = <<>> :: binary()}).
--type sm_r() :: #sm_r{}.
-
--record(muc_actor, {jid :: jid:jid(),
-                    nick = <<>> :: binary()}).
--type muc_actor() :: #muc_actor{}.
-
--record(stat_error, {code :: integer(),
-                     reason = <<>> :: binary()}).
--type stat_error() :: #stat_error{}.
-
--record(stat, {name = <<>> :: binary(),
-               units = <<>> :: binary(),
-               value = <<>> :: binary(),
-               error :: #stat_error{}}).
--type stat() :: #stat{}.
-
--record(addresses, {list = [] :: [#address{}]}).
--type addresses() :: #addresses{}.
-
--record('see-other-host', {host :: binary() | inet:ip_address() | {binary() | inet:ip_address(),non_neg_integer()}}).
--type 'see-other-host'() :: #'see-other-host'{}.
-
--record(compress, {methods = [] :: [binary()]}).
--type compress() :: #compress{}.
-
--record(starttls, {required = false :: boolean()}).
--type starttls() :: #starttls{}.
-
--record(last, {seconds :: non_neg_integer(),
-               status = <<>> :: binary()}).
--type last() :: #last{}.
-
--record(redirect, {uri = <<>> :: binary()}).
--type redirect() :: #redirect{}.
-
--record(sm_enabled, {id = <<>> :: binary(),
-                     location = <<>> :: binary(),
-                     max :: non_neg_integer(),
-                     resume = false :: boolean(),
-                     xmlns = <<>> :: binary()}).
--type sm_enabled() :: #sm_enabled{}.
-
--record(muc_unique, {name = <<>> :: binary()}).
--type muc_unique() :: #muc_unique{}.
-
--record(sasl_response, {text = <<>> :: binary()}).
--type sasl_response() :: #sasl_response{}.
-
--record(legacy_auth, {username :: binary(),
-                      password :: binary(),
-                      digest :: binary(),
-                      resource :: binary()}).
--type legacy_auth() :: #legacy_auth{}.
-
--record(ps_subscribe, {node = <<>> :: binary(),
-                       jid :: jid:jid()}).
--type ps_subscribe() :: #ps_subscribe{}.
-
--record(message, {id = <<>> :: binary(),
-                  type = normal :: 'chat' | 'error' | 'groupchat' | 'headline' | 'normal',
-                  lang = <<>> :: binary(),
-                  from :: jid:jid(),
-                  to :: jid:jid(),
-                  subject = [] :: [#text{}],
-                  body = [] :: [#text{}],
-                  thread :: binary(),
-                  sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type message() :: #message{}.
-
--record(sasl_auth, {mechanism = <<>> :: binary(),
-                    text = <<>> :: binary()}).
--type sasl_auth() :: #sasl_auth{}.
-
--record(p1_push, {}).
--type p1_push() :: #p1_push{}.
-
--record(feature_csi, {xmlns = <<>> :: binary()}).
--type feature_csi() :: #feature_csi{}.
-
--record(disco_item, {jid :: jid:jid(),
-                     name = <<>> :: binary(),
-                     node = <<>> :: binary()}).
--type disco_item() :: #disco_item{}.
-
--record(unblock, {items = [] :: [jid:jid()]}).
--type unblock() :: #unblock{}.
-
--record(block, {items = [] :: [jid:jid()]}).
--type block() :: #block{}.
-
--record(compression, {methods = [] :: [binary()]}).
--type compression() :: #compression{}.
-
--record(muc_subscriptions, {list = [] :: [jid:jid()]}).
--type muc_subscriptions() :: #muc_subscriptions{}.
-
--record(ps_subscription, {xmlns = <<>> :: binary(),
-                          jid :: jid:jid(),
-                          type :: 'none' | 'pending' | 'subscribed' | 'unconfigured',
-                          node = <<>> :: binary(),
-                          subid = <<>> :: binary(),
-                          expiry :: erlang:timestamp()}).
--type ps_subscription() :: #ps_subscription{}.
-
--record(bob_data, {cid = <<>> :: binary(),
-                   'max-age' :: non_neg_integer(),
-                   type = <<>> :: binary(),
-                   data = <<>> :: binary()}).
--type bob_data() :: #bob_data{}.
-
--record(muc_item, {actor :: #muc_actor{},
-                   continue :: binary(),
-                   reason = <<>> :: binary(),
-                   affiliation :: 'admin' | 'member' | 'none' | 'outcast' | 'owner',
-                   role :: 'moderator' | 'none' | 'participant' | 'visitor',
-                   jid :: jid:jid(),
-                   nick = <<>> :: binary()}).
--type muc_item() :: #muc_item{}.
-
--record(muc_admin, {items = [] :: [#muc_item{}]}).
--type muc_admin() :: #muc_admin{}.
-
--record(shim, {headers = [] :: [{binary(),binary()}]}).
--type shim() :: #shim{}.
-
--record(mam_prefs, {xmlns = <<>> :: binary(),
-                    default :: 'always' | 'never' | 'roster',
-                    always :: [jid:jid()],
-                    never :: [jid:jid()]}).
--type mam_prefs() :: #mam_prefs{}.
-
--record(caps, {node = <<>> :: binary(),
-               version = <<>> :: binary(),
-               hash = <<>> :: binary(),
-               exts = [] :: [binary()]}).
--type caps() :: #caps{}.
-
--record(muc, {history :: #muc_history{},
-              password :: binary()}).
--type muc() :: #muc{}.
-
--record(stream_features, {sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type stream_features() :: #stream_features{}.
-
--record(stats, {list = [] :: [#stat{}],
-                node = <<>> :: binary()}).
--type stats() :: #stats{}.
-
--record(ps_items, {xmlns = <<>> :: binary(),
-                   node = <<>> :: binary(),
-                   items = [] :: [#ps_item{}],
-                   max_items :: non_neg_integer(),
-                   subid = <<>> :: binary(),
-                   retract :: binary()}).
--type ps_items() :: #ps_items{}.
-
--record(presence, {id = <<>> :: binary(),
-                   type = available :: 'available' | 'error' | 'probe' | 'subscribe' | 'subscribed' | 'unavailable' | 'unsubscribe' | 'unsubscribed',
-                   lang = <<>> :: binary(),
-                   from :: jid:jid(),
-                   to :: jid:jid(),
-                   show :: 'away' | 'chat' | 'dnd' | 'xa',
-                   status = [] :: [#text{}],
-                   priority :: integer(),
-                   sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type presence() :: #presence{}.
-
--record(sic, {ip :: inet:ip_address(),
-              port :: non_neg_integer(),
-              xmlns = <<>> :: binary()}).
--type sic() :: #sic{}.
-
--record(carbons_sent, {forwarded :: #forwarded{}}).
--type carbons_sent() :: #carbons_sent{}.
-
--record(mam_archived, {by :: jid:jid(),
-                       id = <<>> :: binary()}).
--type mam_archived() :: #mam_archived{}.
-
--record(p1_rebind, {}).
--type p1_rebind() :: #p1_rebind{}.
-
--record(compress_failure, {reason :: 'processing-failed' | 'setup-failed' | 'unsupported-method'}).
--type compress_failure() :: #compress_failure{}.
-
--record(sasl_abort, {}).
--type sasl_abort() :: #sasl_abort{}.
-
--record(xevent, {offline = false :: boolean(),
-                 delivered = false :: boolean(),
-                 displayed = false :: boolean(),
-                 composing = false :: boolean(),
-                 id :: binary()}).
--type xevent() :: #xevent{}.
-
--record(vcard_email, {home = false :: boolean(),
-                      work = false :: boolean(),
-                      internet = false :: boolean(),
-                      pref = false :: boolean(),
-                      x400 = false :: boolean(),
-                      userid :: binary()}).
--type vcard_email() :: #vcard_email{}.
-
--record(db_result, {from = <<>> :: binary(),
-                    to = <<>> :: binary(),
-                    type :: 'error' | 'invalid' | 'valid',
-                    key = <<>> :: binary(),
-                    sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type db_result() :: #db_result{}.
-
--record(carbons_received, {forwarded :: #forwarded{}}).
--type carbons_received() :: #carbons_received{}.
-
--record(ps_retract, {node = <<>> :: binary(),
-                     notify = false :: boolean(),
-                     items = [] :: [#ps_item{}]}).
--type ps_retract() :: #ps_retract{}.
-
--record(upload_slot, {get :: binary(),
-                      put :: binary(),
-                      xmlns = <<>> :: binary()}).
--type upload_slot() :: #upload_slot{}.
-
--record(mix_participant, {jid :: jid:jid(),
-                          nick = <<>> :: binary()}).
--type mix_participant() :: #mix_participant{}.
-
--record(vcard_geo, {lat :: binary(),
-                    lon :: binary()}).
--type vcard_geo() :: #vcard_geo{}.
-
--record(compressed, {}).
--type compressed() :: #compressed{}.
-
--record(sasl_failure, {reason :: 'aborted' | 'account-disabled' | 'bad-protocol' | 'credentials-expired' | 'encryption-required' | 'incorrect-encoding' | 'invalid-authzid' | 'invalid-mechanism' | 'malformed-request' | 'mechanism-too-weak' | 'not-authorized' | 'temporary-auth-failure',
-                       text = [] :: [#text{}]}).
--type sasl_failure() :: #sasl_failure{}.
-
--record(block_list, {items = [] :: [jid:jid()]}).
--type block_list() :: #block_list{}.
-
--record(upload_request, {filename :: binary(),
-                         size :: non_neg_integer(),
-                         'content-type' = <<>> :: binary(),
-                         xmlns = <<>> :: binary()}).
--type upload_request() :: #upload_request{}.
-
--record(xdata_option, {label = <<>> :: binary(),
-                       value :: binary()}).
--type xdata_option() :: #xdata_option{}.
-
--record(xdata_field, {label = <<>> :: binary(),
-                      type :: 'boolean' | 'fixed' | 'hidden' | 'jid-multi' | 'jid-single' | 'list-multi' | 'list-single' | 'text-multi' | 'text-private' | 'text-single',
-                      var = <<>> :: binary(),
-                      required = false :: boolean(),
-                      desc = <<>> :: binary(),
-                      values = [] :: [binary()],
-                      options = [] :: [#xdata_option{}],
-                      sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type xdata_field() :: #xdata_field{}.
-
--record(version, {name :: binary(),
-                  ver :: binary(),
-                  os :: binary()}).
--type version() :: #version{}.
-
--record(bind, {jid :: jid:jid(),
-               resource = <<>> :: binary()}).
--type bind() :: #bind{}.
-
--record(rosterver_feature, {}).
--type rosterver_feature() :: #rosterver_feature{}.
-
--record(muc_invite, {reason = <<>> :: binary(),
-                     from :: jid:jid(),
-                     to :: jid:jid(),
-                     continue :: binary()}).
--type muc_invite() :: #muc_invite{}.
-
--record(delegated, {ns = <<>> :: binary(),
-                    attrs = [] :: [binary()]}).
--type delegated() :: #delegated{}.
-
--record(carbons_disable, {}).
--type carbons_disable() :: #carbons_disable{}.
-
--record(bytestreams, {hosts = [] :: [#streamhost{}],
-                      used :: jid:jid(),
-                      activate :: jid:jid(),
-                      dstaddr = <<>> :: binary(),
-                      mode = tcp :: 'tcp' | 'udp',
-                      sid = <<>> :: binary()}).
--type bytestreams() :: #bytestreams{}.
-
--record(adhoc_actions, {execute :: 'complete' | 'next' | 'prev',
-                        prev = false :: boolean(),
-                        next = false :: boolean(),
-                        complete = false :: boolean()}).
--type adhoc_actions() :: #adhoc_actions{}.
-
--record(vcard_org, {name :: binary(),
-                    units = [] :: [binary()]}).
--type vcard_org() :: #vcard_org{}.
-
--record(rsm_set, {'after' :: binary(),
-                  before :: binary(),
-                  count :: non_neg_integer(),
-                  first :: #rsm_first{},
-                  index :: non_neg_integer(),
-                  last :: binary(),
-                  max :: non_neg_integer()}).
--type rsm_set() :: #rsm_set{}.
-
--record(mam_fin, {xmlns = <<>> :: binary(),
-                  id = <<>> :: binary(),
-                  rsm :: #rsm_set{},
-                  stable :: boolean(),
-                  complete :: boolean()}).
--type mam_fin() :: #mam_fin{}.
-
--record(disco_items, {node = <<>> :: binary(),
-                      items = [] :: [#disco_item{}],
-                      rsm :: #rsm_set{}}).
--type disco_items() :: #disco_items{}.
-
--record(vcard_tel, {home = false :: boolean(),
-                    work = false :: boolean(),
-                    voice = false :: boolean(),
-                    fax = false :: boolean(),
-                    pager = false :: boolean(),
-                    msg = false :: boolean(),
-                    cell = false :: boolean(),
-                    video = false :: boolean(),
-                    bbs = false :: boolean(),
-                    modem = false :: boolean(),
-                    isdn = false :: boolean(),
-                    pcs = false :: boolean(),
-                    pref = false :: boolean(),
-                    number :: binary()}).
--type vcard_tel() :: #vcard_tel{}.
-
--record(media_uri, {type = <<>> :: binary(),
-                    uri = <<>> :: binary()}).
--type media_uri() :: #media_uri{}.
-
--record(media, {height :: non_neg_integer(),
-                width :: non_neg_integer(),
-                uri = [] :: [#media_uri{}]}).
--type media() :: #media{}.
-
--record(muc_destroy, {xmlns = <<>> :: binary(),
-                      jid :: jid:jid(),
-                      reason = <<>> :: binary(),
-                      password :: binary()}).
--type muc_destroy() :: #muc_destroy{}.
-
--record(muc_user, {decline :: #muc_decline{},
-                   destroy :: #muc_destroy{},
-                   invites = [] :: [#muc_invite{}],
-                   items = [] :: [#muc_item{}],
-                   status_codes = [] :: [pos_integer()],
-                   password :: binary()}).
--type muc_user() :: #muc_user{}.
-
--record(vcard_key, {type :: binary(),
-                    cred :: binary()}).
--type vcard_key() :: #vcard_key{}.
-
--record(vcard_name, {family :: binary(),
-                     given :: binary(),
-                     middle :: binary(),
-                     prefix :: binary(),
-                     suffix :: binary()}).
--type vcard_name() :: #vcard_name{}.
-
--record(identity, {category = <<>> :: binary(),
-                   type = <<>> :: binary(),
-                   lang = <<>> :: binary(),
-                   name = <<>> :: binary()}).
--type identity() :: #identity{}.
-
--record(bookmark_conference, {name = <<>> :: binary(),
-                              jid :: jid:jid(),
-                              autojoin = false :: boolean(),
-                              nick :: binary(),
-                              password :: binary()}).
--type bookmark_conference() :: #bookmark_conference{}.
-
--record(xmpp_session, {optional = false :: boolean()}).
--type xmpp_session() :: #xmpp_session{}.
-
--record(bookmark_url, {name = <<>> :: binary(),
-                       url = <<>> :: binary()}).
--type bookmark_url() :: #bookmark_url{}.
-
--record(bookmark_storage, {conference = [] :: [#bookmark_conference{}],
-                           url = [] :: [#bookmark_url{}]}).
--type bookmark_storage() :: #bookmark_storage{}.
-
--record(oob_x, {url :: binary(),
-                desc = <<>> :: binary(),
-                sid = <<>> :: binary()}).
--type oob_x() :: #oob_x{}.
-
--record(vcard_sound, {phonetic :: binary(),
-                      binval :: binary(),
-                      extval :: binary()}).
--type vcard_sound() :: #vcard_sound{}.
-
--record(vcard_photo, {type :: binary(),
-                      binval :: binary(),
-                      extval :: binary()}).
--type vcard_photo() :: #vcard_photo{}.
-
--record(vcard_label, {home = false :: boolean(),
-                      work = false :: boolean(),
-                      postal = false :: boolean(),
-                      parcel = false :: boolean(),
-                      dom = false :: boolean(),
-                      intl = false :: boolean(),
-                      pref = false :: boolean(),
-                      line = [] :: [binary()]}).
--type vcard_label() :: #vcard_label{}.
-
--record(vcard_adr, {home = false :: boolean(),
-                    work = false :: boolean(),
-                    postal = false :: boolean(),
-                    parcel = false :: boolean(),
-                    dom = false :: boolean(),
-                    intl = false :: boolean(),
-                    pref = false :: boolean(),
-                    pobox :: binary(),
-                    extadd :: binary(),
-                    street :: binary(),
-                    locality :: binary(),
-                    region :: binary(),
-                    pcode :: binary(),
-                    ctry :: binary()}).
--type vcard_adr() :: #vcard_adr{}.
-
--record(search_item, {jid :: jid:jid(),
-                      first :: binary(),
-                      last :: binary(),
-                      nick :: binary(),
-                      email :: binary()}).
--type search_item() :: #search_item{}.
-
--record(xdata, {type :: 'cancel' | 'form' | 'result' | 'submit',
-                instructions = [] :: [binary()],
-                title :: binary(),
-                reported :: [#xdata_field{}],
-                items = [] :: [[#xdata_field{}]],
-                fields = [] :: [#xdata_field{}]}).
--type xdata() :: #xdata{}.
-
--record(xcaptcha, {xdata :: #xdata{}}).
--type xcaptcha() :: #xcaptcha{}.
-
--record(adhoc_command, {node = <<>> :: binary(),
-                        action = execute :: 'cancel' | 'complete' | 'execute' | 'next' | 'prev',
-                        sid = <<>> :: binary(),
-                        status :: 'canceled' | 'completed' | 'executing',
-                        lang = <<>> :: binary(),
-                        actions :: #adhoc_actions{},
-                        notes = [] :: [#adhoc_note{}],
-                        xdata :: #xdata{}}).
--type adhoc_command() :: #adhoc_command{}.
-
--record(search, {instructions :: binary(),
-                 first :: binary(),
-                 last :: binary(),
-                 nick :: binary(),
-                 email :: binary(),
-                 items = [] :: [#search_item{}],
-                 xdata :: #xdata{}}).
--type search() :: #search{}.
-
--record(mam_query, {xmlns = <<>> :: binary(),
-                    id = <<>> :: binary(),
-                    start :: erlang:timestamp(),
-                    'end' :: erlang:timestamp(),
-                    with :: jid:jid(),
-                    withtext :: binary(),
-                    rsm :: #rsm_set{},
-                    xdata :: #xdata{}}).
--type mam_query() :: #mam_query{}.
-
--record(pubsub_owner, {affiliations :: {binary(),[#ps_affiliation{}]},
-                       configure :: {binary(),'undefined' | #xdata{}},
-                       default :: {binary(),'undefined' | #xdata{}},
-                       delete :: {binary(),binary()},
-                       purge :: binary(),
-                       subscriptions :: {binary(),[#ps_subscription{}]}}).
--type pubsub_owner() :: #pubsub_owner{}.
-
--record(ps_options, {node = <<>> :: binary(),
-                     jid :: jid:jid(),
-                     subid = <<>> :: binary(),
-                     xdata :: #xdata{}}).
--type ps_options() :: #ps_options{}.
-
--record(pubsub, {subscriptions :: {binary(),[#ps_subscription{}]},
-                 subscription :: #ps_subscription{},
-                 affiliations :: {binary(),[#ps_affiliation{}]},
-                 publish :: #ps_publish{},
-                 publish_options :: #xdata{},
-                 subscribe :: #ps_subscribe{},
-                 unsubscribe :: #ps_unsubscribe{},
-                 options :: #ps_options{},
-                 items :: #ps_items{},
-                 retract :: #ps_retract{},
-                 create :: binary(),
-                 configure :: {binary(),'undefined' | #xdata{}},
-                 default :: {binary(),'undefined' | #xdata{}},
-                 delete :: {binary(),binary()},
-                 purge :: binary(),
-                 rsm :: #rsm_set{}}).
--type pubsub() :: #pubsub{}.
-
--record(ps_event, {items :: #ps_items{},
-                   purge :: binary(),
-                   subscription :: #ps_subscription{},
-                   delete :: {binary(),binary()},
-                   create :: binary(),
-                   configuration :: {binary(),'undefined' | #xdata{}}}).
--type ps_event() :: #ps_event{}.
-
--record(register, {registered = false :: boolean(),
-                   remove = false :: boolean(),
-                   instructions :: binary(),
-                   username :: binary(),
-                   nick :: binary(),
-                   password :: binary(),
-                   name :: binary(),
-                   first :: binary(),
-                   last :: binary(),
-                   email :: binary(),
-                   address :: binary(),
-                   city :: binary(),
-                   state :: binary(),
-                   zip :: binary(),
-                   phone :: binary(),
-                   url :: binary(),
-                   date :: binary(),
-                   misc :: binary(),
-                   text :: binary(),
-                   key :: binary(),
-                   xdata :: #xdata{},
-                   sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type register() :: #register{}.
-
--record(disco_info, {node = <<>> :: binary(),
-                     identities = [] :: [#identity{}],
-                     features = [] :: [binary()],
-                     xdata = [] :: [#xdata{}]}).
--type disco_info() :: #disco_info{}.
-
--record(offline_item, {node = <<>> :: binary(),
-                       action :: 'remove' | 'view'}).
--type offline_item() :: #offline_item{}.
-
--record(offline, {items = [] :: [#offline_item{}],
-                  purge = false :: boolean(),
-                  fetch = false :: boolean()}).
--type offline() :: #offline{}.
-
--record(muc_owner, {destroy :: #muc_destroy{},
-                    config :: #xdata{},
-                    items = [] :: [#muc_item{}]}).
--type muc_owner() :: #muc_owner{}.
-
--record(sasl_mechanisms, {list = [] :: [binary()]}).
--type sasl_mechanisms() :: #sasl_mechanisms{}.
-
--record(sm_failed, {reason :: atom() | #gone{} | #redirect{},
-                    h :: non_neg_integer(),
-                    xmlns = <<>> :: binary()}).
--type sm_failed() :: #sm_failed{}.
-
--record(stanza_error, {type :: 'auth' | 'cancel' | 'continue' | 'modify' | 'wait',
-                       code :: non_neg_integer(),
-                       by = <<>> :: binary(),
-                       reason :: atom() | #gone{} | #redirect{},
-                       text :: #text{},
-                       sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
--type stanza_error() :: #stanza_error{}.
-
--record(delegation, {delegated = [] :: [#delegated{}],
-                     forwarded :: #forwarded{}}).
--type delegation() :: #delegation{}.
-
--record(mix_join, {jid :: jid:jid(),
-                   subscribe = [] :: [binary()]}).
--type mix_join() :: #mix_join{}.
-
--record(privacy_item, {order :: non_neg_integer(),
-                       action :: 'allow' | 'deny',
-                       type :: 'group' | 'jid' | 'subscription',
-                       value = <<>> :: binary(),
-                       message = false :: boolean(),
-                       iq = false :: boolean(),
-                       presence_in = false :: boolean(),
-                       presence_out = false :: boolean()}).
--type privacy_item() :: #privacy_item{}.
-
--record(privacy_list, {name = <<>> :: binary(),
-                       items = [] :: [#privacy_item{}]}).
--type privacy_list() :: #privacy_list{}.
-
--record(privacy_query, {lists = [] :: [#privacy_list{}],
-                        default :: 'none' | binary(),
-                        active :: 'none' | binary()}).
--type privacy_query() :: #privacy_query{}.
-
--record(stream_error, {reason :: atom() | #'see-other-host'{},
-                       text :: #text{}}).
--type stream_error() :: #stream_error{}.
-
--record(vcard_logo, {type :: binary(),
-                     binval :: binary(),
-                     extval :: binary()}).
--type vcard_logo() :: #vcard_logo{}.
-
--record(vcard_temp, {version :: binary(),
-                     fn :: binary(),
-                     n :: #vcard_name{},
-                     nickname :: binary(),
-                     photo :: #vcard_photo{},
-                     bday :: binary(),
-                     adr = [] :: [#vcard_adr{}],
-                     label = [] :: [#vcard_label{}],
-                     tel = [] :: [#vcard_tel{}],
-                     email = [] :: [#vcard_email{}],
-                     jabberid :: binary(),
-                     mailer :: binary(),
-                     tz :: binary(),
-                     geo :: #vcard_geo{},
-                     title :: binary(),
-                     role :: binary(),
-                     logo :: #vcard_logo{},
-                     org :: #vcard_org{},
-                     categories = [] :: [binary()],
-                     note :: binary(),
-                     prodid :: binary(),
-                     rev :: binary(),
-                     sort_string :: binary(),
-                     sound :: #vcard_sound{},
-                     uid :: binary(),
-                     url :: binary(),
-                     class :: 'confidential' | 'private' | 'public',
-                     key :: #vcard_key{},
-                     desc :: binary()}).
--type vcard_temp() :: #vcard_temp{}.
-
--record(time, {tzo :: {integer(),integer()},
-               utc :: erlang:timestamp()}).
--type time() :: #time{}.
-
--type xmpp_element() :: compression() |
-                        ps_subscription() |
-                        xdata_option() |
-                        version() |
-                        sm_a() |
-                        bob_data() |
-                        media() |
-                        stanza_id() |
-                        starttls_proceed() |
-                        forwarded() |
-                        client_id() |
-                        sm_resumed() |
-                        xevent() |
-                        privacy_list() |
-                        carbons_sent() |
-                        mam_archived() |
-                        p1_rebind() |
-                        sasl_abort() |
-                        db_result() |
-                        carbons_received() |
-                        upload_slot() |
-                        mix_participant() |
-                        compressed() |
-                        block_list() |
-                        delegated() |
-                        rsm_set() |
-                        'see-other-host'() |
-                        hint() |
-                        stream_start() |
-                        text() |
-                        vcard_org() |
-                        shim() |
-                        search_item() |
-                        offline_item() |
-                        feature_sm() |
-                        roster_item() |
-                        muc_item() |
-                        vcard_temp() |
-                        address() |
-                        sasl_success() |
-                        addresses() |
-                        muc_subscriptions() |
-                        disco_items() |
-                        compress() |
-                        bytestreams() |
-                        adhoc_actions() |
-                        privacy_query() |
-                        muc_history() |
-                        identity() |
-                        feature_csi() |
-                        delay() |
-                        thumbnail() |
-                        vcard_tel() |
-                        vcard_geo() |
-                        vcard_photo() |
-                        pubsub_owner() |
-                        pubsub() |
-                        muc_owner() |
-                        muc_actor() |
-                        ps_error() |
-                        starttls_failure() |
-                        sasl_challenge() |
-                        x_conference() |
-                        private() |
-                        sasl_failure() |
-                        vcard_name() |
-                        adhoc_note() |
-                        rosterver_feature() |
-                        muc_invite() |
-                        vcard_xupdate() |
-                        carbons_disable() |
-                        bookmark_conference() |
-                        offline() |
-                        time() |
-                        ps_subscribe() |
-                        sm_enable() |
-                        handshake() |
-                        compress_failure() |
-                        bookmark_storage() |
-                        muc_decline() |
-                        legacy_auth() |
-                        search() |
-                        ps_publish() |
-                        nick() |
-                        p1_ack() |
-                        block() |
-                        delegation() |
-                        mix_join() |
-                        xmpp_session() |
-                        xdata() |
-                        iq() |
-                        xcaptcha() |
-                        streamhost() |
-                        bind() |
-                        ps_retract() |
-                        last() |
-                        redirect() |
-                        sm_enabled() |
-                        vcard_sound() |
-                        ps_event() |
-                        mam_result() |
-                        rsm_first() |
-                        stat() |
-                        upload_request() |
-                        xdata_field() |
-                        adhoc_command() |
-                        sm_failed() |
-                        ping() |
-                        privilege_perm() |
-                        privacy_item() |
-                        disco_item() |
-                        ps_item() |
-                        mam_prefs() |
-                        sasl_mechanisms() |
-                        caps() |
-                        muc() |
-                        stream_features() |
-                        stats() |
-                        ps_items() |
-                        sic() |
-                        ps_options() |
-                        starttls() |
-                        db_verify() |
-                        roster_query() |
-                        media_uri() |
-                        muc_destroy() |
-                        vcard_key() |
-                        csi() |
-                        delegation_query() |
-                        mam_query() |
-                        bookmark_url() |
-                        vcard_email() |
-                        vcard_label() |
-                        vcard_logo() |
-                        disco_info() |
-                        feature_register() |
-                        register() |
-                        sm_r() |
-                        stat_error() |
-                        stanza_error() |
-                        stream_error() |
-                        muc_user() |
-                        vcard_adr() |
-                        gone() |
-                        carbons_private() |
-                        mix_leave() |
-                        muc_subscribe() |
-                        privilege() |
-                        muc_unique() |
-                        sasl_response() |
-                        message() |
-                        presence() |
-                        sm_resume() |
-                        carbons_enable() |
-                        expire() |
-                        muc_unsubscribe() |
-                        ps_unsubscribe() |
-                        chatstate() |
-                        sasl_auth() |
-                        p1_push() |
-                        oob_x() |
-                        unblock() |
-                        muc_admin() |
-                        ps_affiliation() |
-                        mam_fin().
index f9af6a5685b76344c29c31b63f075d6a5611dfc1..0fa157e7a0f79a7f982cb796898472f165381972 100644 (file)
@@ -13,6 +13,7 @@
         {fast_tls, ".*", {git, "https://github.com/processone/fast_tls", {tag, "1.0.7"}}},
         {stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.6"}}},
         {fast_xml, ".*", {git, "https://github.com/processone/fast_xml", {tag, "1.1.16"}}},
+       {xmpp, ".*", {git, "https://github.com/processone/xmpp", {tag, "1.0.2"}}},
         {stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.0.7"}}},
         {esip, ".*", {git, "https://github.com/processone/esip", {tag, "1.0.8"}}},
         {fast_yaml, ".*", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.6"}}},
@@ -55,6 +56,7 @@
                   luerl,
                   stun,
                   fast_yaml,
+                 xmpp,
                   p1_utils,
                   p1_mysql,
                   p1_pgsql,
@@ -65,7 +67,9 @@
 {erl_first_files, ["src/ejabberd_config.erl", "src/gen_mod.erl"]}.
 
 {erl_opts, [nowarn_deprecated_function,
-            {i, "include"}, {i, "deps/fast_xml/include"},
+            {i, "include"},
+           {i, "deps/fast_xml/include"},
+           {i, "deps/xmpp/include"},
             {if_var_false, debug, no_debug_info},
             {if_var_true, debug, debug_info},
             {if_var_true, roster_gateway_workaround, {d, 'ROSTER_GATWAY_WORKAROUND'}},
                    {if_var_false, elixir, "(\"Elixir.*\":_/_)"},
                    {if_var_false, redis, "(\"eredis\":_/_)"}]}.
 
-{eunit_compile_opts, [{i, "tools"}, {i, "include"},
-                     {i, "deps/fast_xml/include"}]}.
+{eunit_compile_opts, [{i, "tools"},
+                     {i, "include"},
+                     {i, "deps/fast_xml/include"},
+                     {i, "deps/xmpp/include"}]}.
 
 {if_version_above, "17", {cover_enabled, true}}.
 {cover_export_enabled, true}.
diff --git a/specs/flex_offline.cfg b/specs/flex_offline.cfg
deleted file mode 100644 (file)
index 5d5b268..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[{decode, [{<<"number_of_messages">>, {dec_int, [0, infinity]}}]}].
diff --git a/specs/flex_offline.xdata b/specs/flex_offline.xdata
deleted file mode 100644 (file)
index d0c7862..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/offline</name>
-  <doc>XEP-0013</doc>
-  <desc>
-    Service Discovery extension for number of messages
-    in an offline message queue.
-  </desc>
-  <field
-      var='number_of_messages'
-      type='text-single'
-      label='Number of Offline Messages'/>
-</form_type>
diff --git a/specs/mam_query.cfg b/specs/mam_query.cfg
deleted file mode 100644 (file)
index a8921a5..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[{decode, [{<<"start">>, {xmpp_util, decode_timestamp, []}},
-          {<<"end">>, {xmpp_util, decode_timestamp, []}}]},
- {specs, [{<<"start">>, "erlang:timestamp()"},
-         {<<"end">>, "erlang:timestamp()"}]}].
-
-%% Local Variables:
-%% mode: erlang
-%% End:
-%% vim: set filetype=erlang tabstop=8:
diff --git a/specs/mam_query.xdata b/specs/mam_query.xdata
deleted file mode 100644 (file)
index 58fad41..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<form_type>
-  <name>urn:xmpp:mam:1</name>
-  <doc>XEP-0313</doc>
-  <desc>Form to query message archives</desc>
-  <field var='with'
-         type='jid-single'
-         label='User JID'/>
-  <field var='start'
-        type='text-single'
-        label='Search from the date'/>
-  <field var='end'
-        type='text-single'
-        label='Search until the date'/>
-  <field var='withtext'
-        type='text-single'
-        label='Search the text'/>
-</form_type>
-
-<!--
-Local Variables:
-mode: xml
-End:
--->
diff --git a/specs/muc_register.cfg b/specs/muc_register.cfg
deleted file mode 100644 (file)
index 3efd0cf..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-[{prefix, <<"muc#register_">>},
- {required, [<<"muc#register_roomnick">>]}].
diff --git a/specs/muc_register.xdata b/specs/muc_register.xdata
deleted file mode 100644 (file)
index e808b44..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/muc#register</name>
-  <doc>XEP-0045</doc>
-  <desc>
-    Forms enabling user registration with a
-    Multi-User Chat (MUC) room or admin approval
-    of user registration requests.
-  </desc>
-  <field 
-     var='muc#register_allow'
-     type='boolean'
-     label='Allow this person to register with the room?'/>
-  <field
-      var='muc#register_email'
-      type='text-single'
-      label='Email Address'/>
-  <field
-      var='muc#register_faqentry'
-      type='text-multi'
-      label='FAQ Entry'/>
-  <field
-      var='muc#register_first'
-      type='text-single'
-      label='Given Name'/>
-  <field
-      var='muc#register_last'
-      type='text-single'
-      label='Family Name'/>
-  <field
-      var='muc#register_roomnick'
-      type='text-single'
-      label='Nickname'/>
-  <field
-      var='muc#register_url'
-      type='text-single'
-      label='A Web Page'/>
-</form_type>
diff --git a/specs/muc_request.cfg b/specs/muc_request.cfg
deleted file mode 100644 (file)
index 4811b32..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-[{prefix, <<"muc#">>},
- {required, [<<"muc#role">>]}].
diff --git a/specs/muc_request.xdata b/specs/muc_request.xdata
deleted file mode 100644 (file)
index 64fa138..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/muc#request</name>
-  <doc>XEP-0045</doc>
-  <desc>
-    Forms enabling voice requests in a 
-    Multi-User Chat (MUC) room or admin
-    approval of such requests.
-  </desc>
-  <field var='muc#role'
-         type='list-single'
-         label='Requested role'>
-    <option label='Participant'>
-      <value>participant</value>
-    </option>
-  </field>
-  <field var='muc#jid'
-         type='jid-single'
-         label='User JID'/>
-  <field var='muc#roomnick'
-         type='text-single'
-         label='Nickname'/>
-  <field var='muc#request_allow'
-         type='boolean'
-         label='Grant voice to this person?'/>
-</form_type>
-
-<!--
-Local Variables:
-mode: xml
-End:
--->
diff --git a/specs/muc_roomconfig.cfg b/specs/muc_roomconfig.cfg
deleted file mode 100644 (file)
index de16099..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[{prefix, <<"muc#roomconfig_">>},
- {prefix, <<"muc#">>},
- {decode, [{<<"muc#roomconfig_maxusers">>,
-           {dec_enum_int, [[none], 0, infinity]}},
-          {<<"voice_request_min_interval">>,
-           {dec_int, [0, infinity]}}]}].
-
-%% Local Variables:
-%% mode: erlang
-%% End:
-%% vim: set filetype=erlang tabstop=8:
diff --git a/specs/muc_roomconfig.xdata b/specs/muc_roomconfig.xdata
deleted file mode 100644 (file)
index cab6465..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/muc#roomconfig</name>
-  <doc>XEP-0045</doc>
-  <desc>
-    Forms enabling creation and configuration of
-    a Multi-User Chat (MUC) room.
-  </desc>
-  <field
-      var='muc#maxhistoryfetch'
-      type='text-single'
-      label='Maximum Number of History Messages Returned by Room'/>
-  <field
-      var='muc#roomconfig_allowpm'
-      type='list-single'
-      label='Roles that May Send Private Messages'/>
-  <field
-      var='allow_private_messages'
-      type='boolean'
-      label='Allow users to send private messages'/>
-  <field
-      var='allow_private_messages_from_visitors'
-      type='list-single'
-      label='Allow visitors to send private messages to'>
-    <option label='nobody'>
-      <value>nobody</value>
-    </option>
-    <option label='moderators only'>
-      <value>moderators</value>
-    </option>
-    <option label='anyone'>
-      <value>anyone</value>
-    </option>
-  </field>
-  <field
-      var='allow_visitor_status'
-      type='boolean'
-      label='Allow visitors to send status text in presence updates'/>
-  <field
-      var='allow_visitor_nickchange'
-      type='boolean'
-      label='Allow visitors to change nickname'/>
-  <field
-      var='allow_voice_requests'
-      type='boolean'
-      label='Allow visitors to send voice requests'/>
-  <field
-      var='allow_subscription'
-      type='boolean'
-      label='Allow subscription'/>
-  <field
-      var='voice_request_min_interval'
-      type='text-single'
-      label='Minimum interval between voice requests (in seconds)'/>
-  <field
-      var='captcha_protected'
-      type='boolean'
-      label='Make room CAPTCHA protected'/>
-  <field
-      var='captcha_whitelist'
-      type='jid-multi'
-      label='Exclude Jabber IDs from CAPTCHA challenge'/>
-  <field
-      var='allow_query_users'
-      type='boolean'
-      label='Allow users to query other users'/>
-  <field
-      var='muc#roomconfig_allowinvites'
-      type='boolean'
-      label='Allow users to send invites'/>
-  <field
-      var='muc#roomconfig_changesubject'
-      type='boolean'
-      label='Allow users to change the subject'/>
-  <field
-      var='muc#roomconfig_enablelogging'
-      type='boolean'
-      label='Enable logging'/>
-  <field
-      var='muc#roomconfig_getmemberlist'
-      type='list-multi'
-      label='Roles and Affiliations that May Retrieve Member List'/>
-  <field
-      var='muc#roomconfig_lang'
-      type='text-single'
-      label='Natural Language for Room Discussions'/>
-  <field
-      var='muc#roomconfig_pubsub'
-      type='text-single'
-      label='XMPP URI of Associated Publish-Subscribe Node'/>
-  <field
-      var='muc#roomconfig_maxusers'
-      type='list-single'
-      label='Maximum Number of Occupants'>
-    <option label='No limit'>
-      <value>none</value>
-    </option>
-    <option><value>5</value></option>
-    <option><value>10</value></option>
-    <option><value>20</value></option>
-    <option><value>30</value></option>
-    <option><value>50</value></option>
-    <option><value>100</value></option>
-    <option><value>200</value></option>
-    <option><value>500</value></option>
-    <option><value>1000</value></option>
-    <option><value>2000</value></option>
-    <option><value>5000</value></option>
-  </field>
-  <field
-      var='muc#roomconfig_membersonly'
-      type='boolean'
-      label='Make room members-only'/>
-  <field
-      var='muc#roomconfig_moderatedroom'
-      type='boolean'
-      label='Make room moderated'/>
-  <field
-      var='members_by_default'
-      type='boolean'
-      label='Default users as participants'/>
-  <field
-      var='muc#roomconfig_passwordprotectedroom'
-      type='boolean'
-      label='Make room password protected'/>
-  <field
-      var='muc#roomconfig_persistentroom'
-      type='boolean'
-      label='Make room persistent'/>
-  <field
-      var='muc#roomconfig_presencebroadcast'
-      type='list-multi'
-      label='Roles for which Presence is Broadcasted'>
-    <option label='Moderator'>
-      <value>moderator</value>
-    </option>
-    <option label='Participant'>
-      <value>participant</value>
-    </option>
-    <option label='Visitor'>
-      <value>visitor</value>
-    </option>
-  </field>
-  <field
-      var='muc#roomconfig_publicroom'
-      type='boolean'
-      label='Make room public searchable'/>
-  <field
-      var='public_list'
-      type='boolean'
-      label='Make participants list public'/>
-  <field
-      var='muc#roomconfig_roomadmins'
-      type='jid-multi'
-      label='Full List of Room Admins'/>
-  <field
-      var='muc#roomconfig_roomdesc'
-      type='text-single'
-      label='Room description'/>
-  <field
-      var='muc#roomconfig_roomname'
-      type='text-single'
-      label='Room title'/>
-  <field
-      var='muc#roomconfig_roomowners'
-      type='jid-multi'
-      label='Full List of Room Owners'/>
-  <field
-      var='muc#roomconfig_roomsecret'
-      type='text-private'
-      label='Password'/>
-  <field
-      var='muc#roomconfig_whois'
-      type='list-single'
-      label='Present real Jabber IDs to'>
-    <option label='moderators only'>
-      <value>moderators</value>
-    </option>
-    <option label='anyone'>
-      <value>anyone</value>
-    </option>
-  </field>
-  <field
-      var='mam'
-      type='boolean'
-      label='Enable message archiving'/>
-</form_type>
-
-<!--
-Local Variables:
-mode: xml
-End:
--->
diff --git a/specs/muc_roominfo.cfg b/specs/muc_roominfo.cfg
deleted file mode 100644 (file)
index 98a985e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[{prefix, <<"muc#roominfo_">>},
- {prefix, <<"muc#">>},
- {decode, [{<<"muc#maxhistoryfetch">>,
-           {dec_int, [0, infinity]}},
-          {<<"muc#roominfo_occupants">>,
-           {dec_int, [0, infinity]}}]}].
-
-%% Local Variables:
-%% mode: erlang
-%% End:
-%% vim: set filetype=erlang tabstop=8:
diff --git a/specs/muc_roominfo.xdata b/specs/muc_roominfo.xdata
deleted file mode 100644 (file)
index 70f6963..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/muc#roominfo</name>
-  <doc>XEP-0045</doc>
-  <desc>
-    Forms enabling the communication of extended service discovery
-    information about a Multi-User Chat (MUC) room.
-  </desc>
-  <field
-      var='muc#maxhistoryfetch'
-      type='text-single'
-      label='Maximum Number of History Messages Returned by Room'/>
-  <field
-      var='muc#roominfo_contactjid'
-      type='jid-multi'
-      label='Contact Addresses (normally, room owner or owners)'/>
-  <field
-      var='muc#roominfo_description'
-      type='text-single'
-      label='Room description'/>
-  <field
-      var='muc#roominfo_lang'
-      type='text-single'
-      label='Natural Language for Room Discussions'/>
-  <field
-      var='muc#roominfo_ldapgroup'
-      type='text-single'
-      label='An associated LDAP group that defines 
-             room membership; this should be an LDAP 
-             Distinguished Name according to an 
-             implementation-specific or 
-             deployment-specific definition of a 
-             group.'/>
-  <field
-      var='muc#roominfo_logs'
-      type='text-single'
-      label='URL for Archived Discussion Logs'/>
-  <field
-      var='muc#roominfo_occupants'
-      type='text-single'
-      label='Number of occupants'/>
-  <field
-      var='muc#roominfo_subject'
-      type='text-single'
-      label='Current Discussion Topic'/>
-  <field
-      var='muc#roominfo_subjectmod'
-      type='boolean'
-      label='The room subject can be modified by participants'/>
-</form_type>
-
-<!--
-Local Variables:
-mode: xml
-End:
--->
diff --git a/specs/pubsub_get_pending.cfg b/specs/pubsub_get_pending.cfg
deleted file mode 100644 (file)
index 4ae57ac..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-[{prefix, <<"pubsub#">>},
- {required, [<<"pubsub#node">>]}].
-
-%% Local Variables:
-%% mode: erlang
-%% End:
-%% vim: set filetype=erlang tabstop=8:
diff --git a/specs/pubsub_get_pending.xdata b/specs/pubsub_get_pending.xdata
deleted file mode 100644 (file)
index 1a6f552..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/pubsub#subscribe_authorization</name>
-  <doc>XEP-0060</doc>
-  <desc>Forms enabling authorization of subscriptions to pubsub nodes</desc> 
-  <field
-      var='pubsub#node'
-      type='list-single'
-      label='The NodeID of the relevant node'/>  
-</form_type>
-
-<!--
-Local Variables:
-mode: xml
-End:
--->
diff --git a/specs/pubsub_node_config.cfg b/specs/pubsub_node_config.cfg
deleted file mode 100644 (file)
index f3bf72d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[{prefix, <<"pubsub#">>},
- {decode, [{<<"pubsub#max_items">>, {dec_int, [0,infinity]}},
-          {<<"pubsub#max_payload_size">>, {dec_int, [0,infinity]}}]}].
-
-%% Local Variables:
-%% mode: erlang
-%% End:
-%% vim: set filetype=erlang tabstop=8:
diff --git a/specs/pubsub_node_config.xdata b/specs/pubsub_node_config.xdata
deleted file mode 100644 (file)
index 1691808..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/pubsub#node_config</name>
-  <doc>XEP-0060</doc>
-  <desc>Forms enabling configuration of pubsub nodes</desc>
-  <field var='pubsub#access_model'
-         type='list-single'
-         label='Specify the access model'>
-    <option label='Subscription requests must be approved and only subscribers may retrieve items'>
-      <value>authorize</value>
-    </option>
-    <option label='Anyone may subscribe and retrieve items'>
-      <value>open</value>
-    </option>
-    <option label='Anyone with a presence subscription of both or from may subscribe and retrieve items'>
-      <value>presence</value>
-    </option>
-    <option label='Anyone in the specified roster group(s) may subscribe and retrieve items'>
-      <value>roster</value>
-    </option>
-    <option label='Only those on a whitelist may subscribe and retrieve items'>
-      <value>whitelist</value>
-    </option>
-  </field>
-  <field var='pubsub#body_xslt'
-         type='text-single'
-         label='The URL of an XSL transformation which can be
-                applied to payloads in order to generate an
-                appropriate message body element.'/>
-  <field var='pubsub#children_association_policy'
-         type='list-single'
-         label='Who may associate leaf nodes with a collection'>
-    <option label='Anyone may associate leaf nodes with the collection'>
-      <value>all</value>
-    </option>
-    <option label='Only collection node owners may associate leaf nodes with the collection'>
-      <value>owners</value>
-    </option>
-    <option label='Only those on a whitelist may associate leaf nodes with the collection'>
-      <value>whitelist</value>
-    </option>
-  </field>
-  <field var='pubsub#children_association_whitelist'
-         type='jid-multi'
-         label='The list of JIDs that may associate leaf nodes with a collection'/>
-  <field var='pubsub#children'
-         type='text-multi'
-         label='The child nodes (leaf or collection) associated with a collection'/>
-  <field var='pubsub#children_max'
-         type='text-single'
-         label='The maximum number of child nodes that can be associated with a collection'/>
-  <field var='pubsub#collection'
-         type='text-multi'
-         label='The collections with which a node is affiliated'/>
-  <field var='pubsub#contact'
-         type='jid-multi'
-         label='The JIDs of those to contact with questions'/>
-  <field var='pubsub#dataform_xslt'
-         type='text-single'
-         label='The URL of an XSL transformation which can be
-                applied to the payload format in order to generate
-                a valid Data Forms result that the client could
-                display using a generic Data Forms rendering
-                engine'/>
-  <field var='pubsub#deliver_notifications' type='boolean'
-         label='Deliver event notifications'>
-    <value>true</value>
-  </field>
-  <field var='pubsub#deliver_payloads'
-         type='boolean'
-         label='Deliver payloads with event notifications'/>
-  <field var='pubsub#description'
-         type='text-single'
-         label='A description of the node'/>
-  <field var='pubsub#item_expire'
-         type='text-single'
-         label='Number of seconds after which to automatically purge items'/>
-  <field var='pubsub#itemreply'
-         type='list-single'
-         label='Whether owners or publisher should receive replies to items'>
-    <option label='Statically specify a replyto of the node owner(s)'>
-      <value>owner</value>
-    </option>
-    <option label='Dynamically specify a replyto of the item publisher'>
-      <value>publisher</value>
-    </option>
-    <option>
-      <value>none</value>
-    </option>
-  </field>
-  <field var='pubsub#language'
-         type='list-single'
-         label='The default language of the node'/>
-  <field var='pubsub#max_items'
-         type='text-single'
-         label='Max # of items to persist'>
-  </field>
-  <field var='pubsub#max_payload_size'
-         type='text-single'
-         label='Max payload size in bytes'/>
-  <field var='pubsub#node_type'
-         type='list-single'
-         label='Whether the node is a leaf (default) or a collection'>
-    <option label='The node is a leaf node (default)'>
-      <value>leaf</value>
-    </option>
-    <option label='The node is a collection node'>
-      <value>collection</value>
-    </option>
-  </field>
-  <field var='pubsub#notification_type' type='list-single'
-         label='Specify the event message type'>
-    <option label='Messages of type normal'>
-      <value>normal</value>
-    </option>
-    <option label='Messages of type headline'>
-      <value>headline</value>
-    </option>
-  </field>
-  <field var='pubsub#notify_config'
-         type='boolean'
-        label='Notify subscribers when the node configuration changes'/>
-  <field var='pubsub#notify_delete'
-         type='boolean'
-         label='Notify subscribers when the node is deleted'/>
-  <field var='pubsub#notify_retract'
-         type='boolean'
-         label='Notify subscribers when items are removed from the node'/>
-  <field var='pubsub#notify_sub'
-         type='boolean'
-         label='Whether to notify owners about new subscribers and unsubscribes'/>
-  <field var='pubsub#persist_items'
-         type='boolean'
-         label='Persist items to storage'/>
-  <field var='pubsub#presence_based_delivery'
-         type='boolean'
-         label='Only deliver notifications to available users'/>
-  <field var='pubsub#publish_model'
-         type='list-single'
-         label='Specify the publisher model'>
-    <option label='Only publishers may publish'>
-      <value>publishers</value>
-    </option>
-    <option label='Subscribers may publish'>
-      <value>subscribers</value>
-    </option>
-    <option label='Anyone may publish'>
-      <value>open</value>
-    </option>
-  </field>
-  <field var='pubsub#purge_offline'
-         type='boolean'
-         label='Purge all items when the relevant publisher goes offline'/>
-  <field var='pubsub#roster_groups_allowed'
-         type='list-multi'
-         label='Roster groups allowed to subscribe'/>
-  <field var='pubsub#send_last_published_item'
-         type='list-single'
-         label='When to send the last published item'>
-    <option label='Never'>
-      <value>never</value>
-    </option>
-    <option label='When a new subscription is processed'>
-      <value>on_sub</value>
-    </option>
-    <option label='When a new subscription is processed and whenever a subscriber comes online'>
-      <value>on_sub_and_presence</value>
-    </option>
-  </field>
-  <field var='pubsub#tempsub'
-         type='boolean'
-         label='Whether to make all subscriptions temporary, based on subscriber presence'/>
-  <field var='pubsub#subscribe' type='boolean'
-         label='Whether to allow subscriptions'>
-    <value>1</value>
-  </field>
-  <field var='pubsub#title'
-         type='text-single'
-         label='A friendly name for the node'/>
-  <field var='pubsub#type'
-         type='text-single'
-         label='The type of node data, usually specified by
-                the namespace of the payload (if any)'/>
-</form_type>
-
-<!--
-Local Variables:
-mode: xml
-End:
--->
diff --git a/specs/pubsub_publish_options.cfg b/specs/pubsub_publish_options.cfg
deleted file mode 100644 (file)
index 2a853e8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-[{prefix, <<"pubsub#">>}].
-
-%% Local Variables:
-%% mode: erlang
-%% End:
-%% vim: set filetype=erlang tabstop=8:
diff --git a/specs/pubsub_publish_options.xdata b/specs/pubsub_publish_options.xdata
deleted file mode 100644 (file)
index 26cac6a..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/pubsub#publish-options</name>
-  <doc>XEP-0060</doc>
-  <desc>
-    Forms enabling publication with options; each field must specify whether it
-    defines METADATA to be attached to the item, a per-item OVERRIDE of the node
-    configuration, or a PRECONDITION to be checked against the node configuration.
-  </desc>
-  <field var='pubsub#access_model'
-         type='list-single'
-         label='Specify the access model'>
-    <option label='Access model of authorize'>
-      <value>authorize</value>
-    </option>
-    <option label='Access model of open'>
-      <value>open</value>
-    </option>
-    <option label='Access model of presence'>
-      <value>presence</value>
-    </option>
-    <option label='Access model of roster'>
-      <value>roster</value>
-    </option>
-    <option label='Access model of whitelist'>
-      <value>whitelist</value>
-    </option>
-  </field>
-</form_type>
-
-<!--
-Local Variables:
-mode: xml
-End:
--->
diff --git a/specs/pubsub_subscribe_authorization.cfg b/specs/pubsub_subscribe_authorization.cfg
deleted file mode 100644 (file)
index 1f38fdb..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-[{prefix, <<"pubsub#">>},
- {required, [<<"pubsub#node">>, <<"pubsub#subscriber_jid">>, <<"pubsub#allow">>]}].
-
-%% Local Variables:
-%% mode: erlang
-%% End:
-%% vim: set filetype=erlang tabstop=8:
diff --git a/specs/pubsub_subscribe_authorization.xdata b/specs/pubsub_subscribe_authorization.xdata
deleted file mode 100644 (file)
index 250d875..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/pubsub#subscribe_authorization</name>
-  <doc>XEP-0060</doc>
-  <desc>Forms enabling authorization of subscriptions to pubsub nodes</desc>
-  <field
-      var='pubsub#allow'
-      type='boolean'
-      label='Allow this Jabber ID to subscribe to this pubsub node?'/>
-  <field
-      var='pubsub#node'
-      type='text-single'
-      label='Node ID'/>
-  <field
-      var='pubsub#subscriber_jid'
-      type='jid-single'
-      label='Subscriber Address'/>
-  <field
-      var='pubsub#subid'
-      type='text-single'
-      label='The subscription identifier associated with the subscription request'/>
-</form_type>
-
-<!--
-Local Variables:
-mode: xml
-End:
--->
diff --git a/specs/pubsub_subscribe_options.cfg b/specs/pubsub_subscribe_options.cfg
deleted file mode 100644 (file)
index e4ac06a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[{prefix, <<"pubsub#">>}].
diff --git a/specs/pubsub_subscribe_options.xdata b/specs/pubsub_subscribe_options.xdata
deleted file mode 100644 (file)
index 59b1346..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<form_type>
-  <name>http://jabber.org/protocol/pubsub#subscribe_options</name>
-  <doc>XEP-0060</doc>
-  <desc>Forms enabling configuration of subscription options for pubsub nodes</desc>
-  <field
-      var='pubsub#deliver'
-      type='boolean'
-      label='Whether an entity wants to receive
-             or disable notifications'/>
-  <field
-      var='pubsub#digest'
-      type='boolean'
-      label='Whether an entity wants to receive digests
-             (aggregations) of notifications or all
-             notifications individually'/>
-  <field var='pubsub#digest_frequency'
-         type='text-single'
-         label='The minimum number of milliseconds between
-                sending any two notification digests'/>
-  <field
-      var='pubsub#expire'
-      type='text-single'
-      label='The DateTime at which a leased subscription
-             will end or has ended'/>
-  <field
-      var='pubsub#include_body'
-      type='boolean'
-      label='Whether an entity wants to receive an XMPP
-             message body in addition to the payload
-             format'/>
-  <field
-      var='pubsub#show-values'
-      type='list-multi'
-      label='The presence states for which an entity
-             wants to receive notifications'>
-    <option label='XMPP Show Value of Away'>
-      <value>away</value>
-    </option>
-    <option label='XMPP Show Value of Chat'>
-      <value>chat</value>
-    </option>
-    <option label='XMPP Show Value of DND (Do Not Disturb)'>
-      <value>dnd</value>
-    </option>
-    <option label='Mere Availability in XMPP (No Show Value)'>
-      <value>online</value>
-    </option>
-    <option label='XMPP Show Value of XA (Extended Away)'>
-      <value>xa</value>
-    </option>
-  </field>
-  <field var='pubsub#subscription_type'
-         type='list-single'>
-    <option label='Receive notification of new items only'>
-      <value>items</value>
-    </option>
-    <option label='Receive notification of new nodes only'>
-      <value>nodes</value>
-    </option>
-  </field>
-  <field var='pubsub#subscription_depth'
-         type='list-single'>
-    <option label='Receive notification from direct child nodes only'>
-      <value>1</value>
-    </option>
-    <option label='Receive notification from all descendent nodes'>
-      <value>all</value>
-    </option>
-  </field>
-</form_type>
diff --git a/specs/xmpp_codec.spec b/specs/xmpp_codec.spec
deleted file mode 100644 (file)
index 0aa124e..0000000
+++ /dev/null
@@ -1,3588 +0,0 @@
--xml(last,
-     #elem{name = <<"query">>,
-           xmlns = <<"jabber:iq:last">>,
-           result = {last, '$seconds', '$status'},
-           attrs = [#attr{name = <<"seconds">>,
-                          enc = {enc_int, []},
-                          dec = {dec_int, [0, infinity]}}],
-           cdata = #cdata{default = <<"">>, label = '$status'}}).
-
--xml(version_name,
-     #elem{name = <<"name">>,
-           xmlns = <<"jabber:iq:version">>,
-           result = '$cdata',
-           cdata = #cdata{label = '$cdata', required = true}}).
-
--xml(version_ver,
-     #elem{name = <<"version">>,
-           xmlns = <<"jabber:iq:version">>,
-           result = '$cdata',
-           cdata = #cdata{label = '$cdata', required = true}}).
-
--xml(version_os,
-     #elem{name = <<"os">>,
-           xmlns = <<"jabber:iq:version">>,
-           result = '$cdata',
-           cdata = #cdata{label = '$cdata', required = true}}).
-
--xml(version,
-     #elem{name = <<"query">>,
-           xmlns = <<"jabber:iq:version">>,
-           result = {version, '$name', '$ver', '$os'},
-           refs = [#ref{name = version_name,
-                        label = '$name',
-                        min = 0, max = 1},
-                   #ref{name = version_ver,
-                        label = '$ver',
-                        min = 0, max = 1},
-                   #ref{name = version_os,
-                        label = '$os',
-                        min = 0, max = 1}]}).
-
--xml(roster_group,
-     #elem{name = <<"group">>,
-           xmlns = <<"jabber:iq:roster">>,
-           result = '$cdata',
-           cdata = #cdata{required = true, label = '$cdata'}}).
-
--xml(roster_item,
-     #elem{name = <<"item">>,
-           xmlns = <<"jabber:iq:roster">>,
-           result = {roster_item, '$jid', '$name',
-                     '$groups', '$subscription', '$ask'},
-           attrs = [#attr{name = <<"jid">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"name">>,
-                         default = <<"">>},
-                    #attr{name = <<"subscription">>,
-                          default = none,
-                          enc = {enc_enum, []},
-                          dec = {dec_enum, [[none,to,from,both,remove]]}},
-                    #attr{name = <<"ask">>,
-                          enc = {enc_enum, []},
-                          dec = {dec_enum, [[subscribe]]}}],
-           refs = [#ref{name = roster_group, label = '$groups'}]}).
-
--xml(roster_query,
-     #elem{name = <<"query">>,
-           xmlns = <<"jabber:iq:roster">>,
-           result = {roster_query, '$items', '$ver'},
-           attrs = [#attr{name = <<"ver">>, default = undefined}],
-           refs = [#ref{name = roster_item, label = '$items'}]}).
-
--xml(rosterver_feature,
-     #elem{name = <<"ver">>,
-          xmlns = <<"urn:xmpp:features:rosterver">>,
-          result = {rosterver_feature}}).
-
--xml(privacy_message, #elem{name = <<"message">>, xmlns = <<"jabber:iq:privacy">>,
-                            result = true}).
--xml(privacy_iq, #elem{name = <<"iq">>, xmlns = <<"jabber:iq:privacy">>,
-                       result = true}).
--xml(privacy_presence_in, #elem{name = <<"presence-in">>,
-                                xmlns = <<"jabber:iq:privacy">>,
-                                result = true}).
--xml(privacy_presence_out, #elem{name = <<"presence-out">>,
-                                 xmlns = <<"jabber:iq:privacy">>,
-                                 result = true}).
-
--xml(privacy_item,
-     #elem{name = <<"item">>,
-           xmlns = <<"jabber:iq:privacy">>,
-           result = {privacy_item, '$order', '$action', '$type', '$value',
-                    '$message', '$iq', '$presence_in', '$presence_out'},
-           attrs = [#attr{name = <<"action">>,
-                          required = true,
-                          dec = {dec_enum, [[allow, deny]]},
-                          enc = {enc_enum, []}},
-                    #attr{name = <<"order">>,
-                          required = true,
-                          dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                    #attr{name = <<"type">>,
-                          dec = {dec_enum, [[group, jid, subscription]]},
-                          enc = {enc_enum, []}},
-                    #attr{name = <<"value">>}],
-           refs = [#ref{name = privacy_message, default = false,
-                       min = 0, max = 1, label = '$message'},
-                   #ref{name = privacy_iq, default = false,
-                       min = 0, max = 1, label = '$iq'},
-                   #ref{name = privacy_presence_in, default = false,
-                       min = 0, max = 1, label = '$presence_in'},
-                   #ref{name = privacy_presence_out, default = false,
-                        min = 0, max = 1, label = '$presence_out'}]}).
-
--xml(privacy_list,
-     #elem{name = <<"list">>,
-           xmlns = <<"jabber:iq:privacy">>,
-           result = {privacy_list, '$name', '$items'},
-           attrs = [#attr{name = <<"name">>,
-                          required = true}],
-           refs = [#ref{name = privacy_item,
-                        label = '$items'}]}).
-
--xml(privacy_default_list,
-     #elem{name = <<"default">>,
-           xmlns = <<"jabber:iq:privacy">>,
-           result = '$name',
-           attrs = [#attr{name = <<"name">>,
-                          default = none}]}).
-
--xml(privacy_active_list,
-     #elem{name = <<"active">>,
-           xmlns = <<"jabber:iq:privacy">>,
-           result = '$name',
-           attrs = [#attr{name = <<"name">>,
-                          default = none}]}).
-
--xml(privacy,
-     #elem{name = <<"query">>,
-           xmlns = <<"jabber:iq:privacy">>,
-           result = {privacy_query, '$lists', '$default', '$active'},
-           refs = [#ref{name = privacy_list,
-                        label = '$lists'},
-                   #ref{name = privacy_default_list,
-                        min = 0, max = 1,
-                        label = '$default'},
-                   #ref{name = privacy_active_list,
-                        min = 0, max = 1,
-                        label = '$active'}]}).
-
--xml(block_item,
-     #elem{name = <<"item">>,
-           xmlns = <<"urn:xmpp:blocking">>,
-           result = '$jid',
-           attrs = [#attr{name = <<"jid">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}]}).
-
--xml(block,
-     #elem{name = <<"block">>,
-           xmlns = <<"urn:xmpp:blocking">>,
-           result = {block, '$items'},
-           refs = [#ref{name = block_item,
-                        label = '$items'}]}).
-
--xml(unblock,
-     #elem{name = <<"unblock">>,
-           xmlns = <<"urn:xmpp:blocking">>,
-           result = {unblock, '$items'},
-           refs = [#ref{name = block_item,
-                        label = '$items'}]}).
-
--xml(block_list,
-     #elem{name = <<"blocklist">>,
-           xmlns = <<"urn:xmpp:blocking">>,
-           result = {block_list, '$items'},
-          refs = [#ref{name = block_item,
-                        label = '$items'}]}).
-
--xml(disco_identity,
-     #elem{name = <<"identity">>,
-           xmlns = <<"http://jabber.org/protocol/disco#info">>,
-           result = {identity, '$category', '$type', '$lang', '$name'},
-           attrs = [#attr{name = <<"category">>,
-                          required = true},
-                    #attr{name = <<"type">>,
-                          required = true},
-                    #attr{name = <<"xml:lang">>,
-                          label = '$lang'},
-                    #attr{name = <<"name">>}]}).
-
--xml(disco_feature,
-     #elem{name = <<"feature">>,
-           xmlns = <<"http://jabber.org/protocol/disco#info">>,
-           result = '$var',
-           attrs = [#attr{name = <<"var">>,
-                          required = true}]}).
-
--xml(disco_info,
-     #elem{name = <<"query">>,
-           xmlns = <<"http://jabber.org/protocol/disco#info">>,
-           result = {disco_info, '$node', '$identities', '$features', '$xdata'},
-           attrs = [#attr{name = <<"node">>}],
-           refs = [#ref{name = disco_identity,
-                        label = '$identities'},
-                   #ref{name = disco_feature,
-                        label = '$features'},
-                   #ref{name = xdata,
-                        label = '$xdata'}]}).
-
--xml(disco_item,
-     #elem{name = <<"item">>,
-           xmlns = <<"http://jabber.org/protocol/disco#items">>,
-           result = {disco_item, '$jid', '$name', '$node'},
-           attrs = [#attr{name = <<"jid">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []},
-                          required = true},
-                    #attr{name = <<"name">>},
-                    #attr{name = <<"node">>}]}).
--xml(disco_items,
-     #elem{name = <<"query">>,
-           xmlns = <<"http://jabber.org/protocol/disco#items">>,
-           result = {disco_items, '$node', '$items', '$rsm'},
-           attrs = [#attr{name = <<"node">>}],
-           refs = [#ref{name = disco_item,
-                        label = '$items'},
-                  #ref{name = rsm_set, min = 0, max = 1,
-                       label = '$rsm'}]}).
-
--xml(private,
-     #elem{name = <<"query">>,
-           xmlns = <<"jabber:iq:private">>,
-           result = {private, '$_xmls'}}).
-
--xml(conference_nick,
-     #elem{name = <<"nick">>,
-           xmlns = <<"storage:bookmarks">>,
-           result = '$cdata'}).
-
--xml(conference_password,
-     #elem{name = <<"password">>,
-           xmlns = <<"storage:bookmarks">>,
-           result = '$cdata'}).
-
--xml(bookmark_conference,
-     #elem{name = <<"conference">>,
-           xmlns = <<"storage:bookmarks">>,
-           result = {bookmark_conference, '$name', '$jid',
-                     '$autojoin', '$nick', '$password'},
-           attrs = [#attr{name = <<"name">>,
-                          required = true},
-                    #attr{name = <<"jid">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"autojoin">>,
-                          default = false,
-                          dec = {dec_bool, []},
-                          enc = {enc_bool, []}}],
-           refs = [#ref{name = conference_nick,
-                        label = '$nick',
-                        min = 0, max = 1},
-                   #ref{name = conference_password,
-                        label = '$password',
-                        min = 0, max = 1}]}).
-
--xml(bookmark_url,
-     #elem{name = <<"url">>,
-           xmlns = <<"storage:bookmarks">>,
-           result = {bookmark_url, '$name', '$url'},
-           attrs = [#attr{name = <<"name">>,
-                          required = true},
-                    #attr{name = <<"url">>,
-                          required = true}]}).
-
--xml(bookmarks_storage,
-     #elem{name = <<"storage">>,
-           xmlns = <<"storage:bookmarks">>,
-           result = {bookmark_storage, '$conference', '$url'},
-           refs = [#ref{name = bookmark_conference,
-                        label = '$conference'},
-                   #ref{name = bookmark_url,
-                        label = '$url'}]}).
-
--xml(stat_error,
-     #elem{name = <<"error">>,
-           xmlns = <<"http://jabber.org/protocol/stats">>,
-           result = {stat_error, '$code', '$reason'},
-          cdata = #cdata{default = <<"">>, label = '$reason'},
-           attrs = [#attr{name = <<"code">>,
-                          required = true,
-                          enc = {enc_int, []},
-                          dec = {dec_int, []}}]}).
-
--xml(stat,
-     #elem{name = <<"stat">>,
-           xmlns = <<"http://jabber.org/protocol/stats">>,
-           result = {stat, '$name', '$units', '$value', '$error'},
-           attrs = [#attr{name = <<"name">>,
-                          required = true},
-                    #attr{name = <<"units">>, default = <<"">>},
-                    #attr{name = <<"value">>, default = <<"">>}],
-           refs = [#ref{name = stat_error, label = '$error',
-                       min = 0, max = 1}]}).
-
--xml(stats,
-     #elem{name = <<"query">>,
-           xmlns = <<"http://jabber.org/protocol/stats">>,
-           result = {stats, '$list', '$node'},
-          attrs = [#attr{name = <<"node">>, default = <<"">>}],
-           refs = [#ref{name = stat, label = '$list'}]}).
-
--xml(iq,
-     #elem{name = <<"iq">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = {iq, '$id', '$type', '$lang', '$from', '$to', '$_els'},
-           attrs = [#attr{name = <<"id">>,
-                          required = true},
-                    #attr{name = <<"type">>,
-                          required = true,
-                          enc = {enc_enum, []},
-                          dec = {dec_enum, [[get, set, result, error]]}},
-                    #attr{name = <<"from">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"to">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"xml:lang">>,
-                          label = '$lang'}]}).
-
--xml(message_subject,
-     #elem{name = <<"subject">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = {text, '$lang', '$data'},
-           cdata = #cdata{label = '$data'},
-           attrs = [#attr{name = <<"xml:lang">>, label = '$lang'}]}).
-
--xml(message_body,
-     #elem{name = <<"body">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = {text, '$lang', '$data'},
-           cdata = #cdata{label = '$data'},
-           attrs = [#attr{name = <<"xml:lang">>, label = '$lang'}]}).
-
--xml(message_thread,
-     #elem{name = <<"thread">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = '$cdata'}).
-
--xml(message,
-     #elem{name = <<"message">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = {message, '$id', '$type', '$lang', '$from', '$to',
-                     '$subject', '$body', '$thread', '$_els'},
-           attrs = [#attr{name = <<"id">>},
-                    #attr{name = <<"type">>,
-                          default = normal,
-                          enc = {enc_enum, []},
-                          dec = {dec_enum, [[chat, normal, groupchat,
-                                             headline, error]]}},
-                    #attr{name = <<"from">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"to">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"xml:lang">>,
-                          label = '$lang'}],
-           refs = [#ref{name = message_subject, label = '$subject'},
-                   #ref{name = message_thread, min = 0, max = 1, label = '$thread'},
-                   #ref{name = message_body, label = '$body'}]}).
-
--xml(presence_show,
-     #elem{name = <<"show">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = '$cdata',
-           cdata = #cdata{enc = {enc_enum, []},
-                          dec = {dec_enum, [[away, chat, dnd, xa]]}}}).
-
--xml(presence_status,
-     #elem{name = <<"status">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = {text, '$lang', '$data'},
-           cdata = #cdata{label = '$data'},
-           attrs = [#attr{name = <<"xml:lang">>,
-                          label = '$lang'}]}).
-
--xml(presence_priority,
-     #elem{name = <<"priority">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = '$cdata',
-           cdata = #cdata{enc = {enc_int, []},
-                          dec = {dec_int, []}}}).
-
--xml(presence,
-     #elem{name = <<"presence">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = {presence, '$id', '$type', '$lang', '$from', '$to',
-                     '$show', '$status', '$priority', '$_els'},
-           attrs = [#attr{name = <<"id">>},
-                    #attr{name = <<"type">>,
-                         default = available,
-                          enc = {enc_enum, []},
-                          dec = {dec_enum, [[unavailable, subscribe, subscribed,
-                                             unsubscribe, unsubscribed,
-                                             available, probe, error]]}},
-                    #attr{name = <<"from">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"to">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"xml:lang">>,
-                          label = '$lang'}],
-           refs = [#ref{name = presence_show, min = 0, max = 1, label = '$show'},
-                   #ref{name = presence_status, label = '$status'},
-                   #ref{name = presence_priority, min = 0, max = 1,
-                        label = '$priority'}]}).
-
--xml(error_bad_request,
-     #elem{name = <<"bad-request">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'bad-request'}).
--xml(error_conflict,
-     #elem{name = <<"conflict">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'conflict'}).
--xml(error_feature_not_implemented,
-     #elem{name = <<"feature-not-implemented">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'feature-not-implemented'}).
--xml(error_forbidden,
-     #elem{name = <<"forbidden">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'forbidden'}).
--xml(error_gone,
-     #elem{name = <<"gone">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           cdata = #cdata{label = '$uri'},
-           result = {'gone', '$uri'}}).
--xml(error_internal_server_error,
-     #elem{name = <<"internal-server-error">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'internal-server-error'}).
--xml(error_item_not_found,
-     #elem{name = <<"item-not-found">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'item-not-found'}).
--xml(error_jid_malformed,
-     #elem{name = <<"jid-malformed">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'jid-malformed'}).
--xml(error_not_acceptable,
-     #elem{name = <<"not-acceptable">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'not-acceptable'}).
--xml(error_not_allowed,
-     #elem{name = <<"not-allowed">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'not-allowed'}).
--xml(error_not_authorized,
-     #elem{name = <<"not-authorized">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'not-authorized'}).
--xml(error_payment_required,
-     #elem{name = <<"payment-required">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'payment-required'}).
--xml(error_policy_violation,
-     #elem{name = <<"policy-violation">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'policy-violation'}).
--xml(error_recipient_unavailable,
-     #elem{name = <<"recipient-unavailable">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'recipient-unavailable'}).
--xml(error_redirect,
-     #elem{name = <<"redirect">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           cdata = #cdata{label = '$uri'},
-           result = {'redirect', '$uri'}}).
--xml(error_registration_required,
-     #elem{name = <<"registration-required">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'registration-required'}).
--xml(error_remote_server_not_found,
-     #elem{name = <<"remote-server-not-found">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'remote-server-not-found'}).
--xml(error_remote_server_timeout,
-     #elem{name = <<"remote-server-timeout">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'remote-server-timeout'}).
--xml(error_resource_constraint,
-     #elem{name = <<"resource-constraint">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'resource-constraint'}).
--xml(error_service_unavailable,
-     #elem{name = <<"service-unavailable">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'service-unavailable'}).
--xml(error_subscription_required,
-     #elem{name = <<"subscription-required">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'subscription-required'}).
--xml(error_undefined_condition,
-     #elem{name = <<"undefined-condition">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'undefined-condition'}).
--xml(error_unexpected_request,
-     #elem{name = <<"unexpected-request">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           result = 'unexpected-request'}).
-
--xml(error_text,
-     #elem{name = <<"text">>,
-           result = {text, '$lang', '$data'},
-           cdata = #cdata{label = '$data'},
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-           attrs = [#attr{name = <<"xml:lang">>,
-                          label = '$lang'}]}).
-
--xml(error,
-     #elem{name = <<"error">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = {stanza_error, '$type', '$code', '$by', '$reason', '$text', '$_els'},
-           attrs = [#attr{name = <<"type">>,
-                          label = '$type',
-                          required = true,
-                          dec = {dec_enum, [[auth, cancel, continue,
-                                             modify, wait]]},
-                          enc = {enc_enum, []}},
-                   #attr{name = <<"code">>,
-                         label = '$code',
-                         enc = {enc_int, []},
-                          dec = {dec_int, [0, infinity]}},
-                    #attr{name = <<"by">>}],
-           refs = [#ref{name = error_text,
-                        min = 0, max = 1, label = '$text'},
-                   #ref{name = error_bad_request,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_conflict,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_feature_not_implemented,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_forbidden,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_gone,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_internal_server_error,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_item_not_found,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_jid_malformed,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_not_acceptable,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_not_allowed,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_not_authorized,
-                        min = 0, max = 1, label = '$reason'},
-                  #ref{name = error_payment_required,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_policy_violation,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_recipient_unavailable,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_redirect,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_registration_required,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_remote_server_not_found,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_remote_server_timeout,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_resource_constraint,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_service_unavailable,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_subscription_required,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_undefined_condition,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_unexpected_request,
-                        min = 0, max = 1, label = '$reason'}]}).
-
--xml(bind_jid,
-     #elem{name = <<"jid">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
-           result = '$cdata',
-           cdata = #cdata{dec = {dec_jid, []},
-                          enc = {enc_jid, []}}}).
-
--xml(bind_resource,
-     #elem{name = <<"resource">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
-           result = '$cdata',
-           cdata = #cdata{dec = {resourceprep, []},
-                          enc = {resourceprep, []}}}).
-
--xml(bind, #elem{name = <<"bind">>,
-                 xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                 result = {bind, '$jid', '$resource'},
-                 refs = [#ref{name = bind_jid,
-                              label = '$jid',
-                              min = 0, max = 1},
-                         #ref{name = bind_resource,
-                              min = 0, max = 1,
-                             default = <<"">>,
-                              label = '$resource'}]}).
-
--xml(legacy_auth_username,
-     #elem{name = <<"username">>,
-          xmlns = <<"jabber:iq:auth">>,
-          result = '$cdata'}).
--xml(legacy_auth_password,
-     #elem{name = <<"password">>,
-          xmlns = <<"jabber:iq:auth">>,
-          result = '$cdata'}).
--xml(legacy_auth_digest,
-     #elem{name = <<"digest">>,
-          xmlns = <<"jabber:iq:auth">>,
-          result = '$cdata'}).
--xml(legacy_auth_resource,
-     #elem{name = <<"resource">>,
-          xmlns = <<"jabber:iq:auth">>,
-          result = '$cdata'}).
-
--xml(legacy_auth,
-     #elem{name = <<"query">>,
-          xmlns = <<"jabber:iq:auth">>,
-          result = {legacy_auth, '$username', '$password',
-                    '$digest', '$resource'},
-          refs = [#ref{name = legacy_auth_username, min = 0, max = 1,
-                       label = '$username'},
-                  #ref{name = legacy_auth_password, min = 0, max = 1,
-                       label = '$password'},
-                  #ref{name = legacy_auth_digest, min = 0, max = 1,
-                       label = '$digest'},
-                  #ref{name = legacy_auth_resource, min = 0, max = 1,
-                       label = '$resource'}]}).
-
--xml(sasl_auth,
-     #elem{name = <<"auth">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-           cdata = #cdata{label = '$text',
-                          dec = {base64, mime_decode, []},
-                          enc = {base64, encode, []}},
-           result = {sasl_auth, '$mechanism', '$text'},
-           attrs = [#attr{name = <<"mechanism">>,
-                          required = true}]}).
-
--xml(sasl_abort,
-     #elem{name = <<"abort">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-           result = {sasl_abort}}).
-
--xml(sasl_challenge,
-     #elem{name = <<"challenge">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-           cdata = #cdata{label = '$text',
-                          dec = {base64, mime_decode, []},
-                          enc = {base64, encode, []}},
-           result = {sasl_challenge, '$text'}}).
-
--xml(sasl_response,
-     #elem{name = <<"response">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-           cdata = #cdata{label = '$text',
-                          dec = {base64, mime_decode, []},
-                          enc = {base64, encode, []}},
-           result = {sasl_response, '$text'}}).
-
--xml(sasl_success,
-     #elem{name = <<"success">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-           cdata = #cdata{label = '$text',
-                          dec = {base64, mime_decode, []},
-                          enc = {base64, encode, []}},
-           result = {sasl_success, '$text'}}).
-
--xml(sasl_failure_text,
-     #elem{name = <<"text">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-           result = {text, '$lang', '$data'},
-           cdata = #cdata{label = '$data'},
-           attrs = [#attr{name = <<"xml:lang">>,
-                          label = '$lang'}]}).
-
--xml(sasl_failure_aborted,
-     #elem{name = <<"aborted">>,
-           result = 'aborted',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_account_disabled,
-     #elem{name = <<"account-disabled">>,
-           result = 'account-disabled',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_credentials_expired,
-     #elem{name = <<"credentials-expired">>,
-           result = 'credentials-expired',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_encryption_required,
-     #elem{name = <<"encryption-required">>,
-           result = 'encryption-required',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_incorrect_encoding,
-     #elem{name = <<"incorrect-encoding">>,
-           result = 'incorrect-encoding',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_invalid_authzid,
-     #elem{name = <<"invalid-authzid">>,
-           result = 'invalid-authzid',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_invalid_mechanism,
-     #elem{name = <<"invalid-mechanism">>,
-           result = 'invalid-mechanism',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_malformed_request,
-     #elem{name = <<"malformed-request">>,
-           result = 'malformed-request',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_mechanism_too_weak,
-     #elem{name = <<"mechanism-too-weak">>,
-           result = 'mechanism-too-weak',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_not_authorized,
-     #elem{name = <<"not-authorized">>,
-           result = 'not-authorized',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_bad_protocol,
-     #elem{name = <<"bad-protocol">>,
-           result = 'bad-protocol',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
--xml(sasl_failure_temporary_auth_failure,
-     #elem{name = <<"temporary-auth-failure">>,
-           result = 'temporary-auth-failure',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
-
--xml(sasl_failure,
-     #elem{name = <<"failure">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-           result = {sasl_failure, '$reason', '$text'},
-           refs = [#ref{name = sasl_failure_text,
-                        label = '$text'},
-                   #ref{name = sasl_failure_aborted,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_account_disabled,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_credentials_expired,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_encryption_required,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_incorrect_encoding,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_invalid_authzid,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_invalid_mechanism,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_malformed_request,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_mechanism_too_weak,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_not_authorized,
-                        min = 0, max = 1, label = '$reason'},
-                  #ref{name = sasl_failure_bad_protocol,
-                       min = 0, max = 1, label = '$reason'},
-                   #ref{name = sasl_failure_temporary_auth_failure,
-                        min = 0, max = 1, label = '$reason'}]}).
-
--xml(sasl_mechanism,
-     #elem{name = <<"mechanism">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-           result = '$cdata'}).
-
--xml(sasl_mechanisms,
-     #elem{name = <<"mechanisms">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-           result = {sasl_mechanisms, '$list'},
-           refs = [#ref{name = sasl_mechanism,
-                        label = '$list'}]}).
-
--xml(starttls_required,
-     #elem{name = <<"required">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-           result = true}).
-
--xml(starttls,
-     #elem{name = <<"starttls">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-           result = {starttls, '$required'},
-           refs = [#ref{name = starttls_required,
-                        label = '$required',
-                        min = 0, max = 1,
-                        default = false}]}).
-
--xml(starttls_proceed,
-     #elem{name = <<"proceed">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-           result = {starttls_proceed}}).
-
--xml(starttls_failure,
-     #elem{name = <<"failure">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-           result = {starttls_failure}}).
-
--xml(compress_failure_setup_failed,
-     #elem{name = <<"setup-failed">>,
-           xmlns = <<"http://jabber.org/protocol/compress">>,
-           result = 'setup-failed'}).
--xml(compress_failure_processing_failed,
-     #elem{name = <<"processing-failed">>,
-           xmlns = <<"http://jabber.org/protocol/compress">>,
-           result = 'processing-failed'}).
--xml(compress_failure_unsupported_method,
-     #elem{name = <<"unsupported-method">>,
-           xmlns = <<"http://jabber.org/protocol/compress">>,
-           result = 'unsupported-method'}).
-
--xml(compress_failure,
-     #elem{name = <<"failure">>,
-           xmlns = <<"http://jabber.org/protocol/compress">>,
-           result = {compress_failure, '$reason'},
-           refs = [#ref{name = compress_failure_setup_failed,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = compress_failure_processing_failed,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = compress_failure_unsupported_method,
-                        min = 0, max = 1, label = '$reason'}]}).
-
--xml(compress_method,
-     #elem{name = <<"method">>,
-           xmlns = <<"http://jabber.org/protocol/compress">>,
-           result = '$cdata'}).
-
--xml(compress,
-     #elem{name = <<"compress">>,
-           xmlns = <<"http://jabber.org/protocol/compress">>,
-           result = {compress, '$methods'},
-           refs = [#ref{name = compress_method,
-                        label = '$methods'}]}).
-
--xml(compressed,
-     #elem{name = <<"compressed">>,
-           xmlns = <<"http://jabber.org/protocol/compress">>,
-           result = {compressed}}).
-
--xml(compression_method,
-     #elem{name = <<"method">>,
-           xmlns = <<"http://jabber.org/features/compress">>,
-           result = '$cdata'}).
-
--xml(compression,
-     #elem{name = <<"compression">>,
-           xmlns = <<"http://jabber.org/features/compress">>,
-           result = {compression, '$methods'},
-           refs = [#ref{name = compression_method, label = '$methods'}]}).
-
--xml(stream_features,
-     #elem{name = <<"stream:features">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>],
-           result = {stream_features, '$_els'}}).
-
--xml(p1_push,
-     #elem{name = <<"push">>,
-           result = {p1_push},
-           xmlns = <<"p1:push">>}).
-
--xml(p1_rebind,
-     #elem{name = <<"rebind">>,
-           result = {p1_rebind},
-           xmlns = <<"p1:rebind">>}).
-
--xml(p1_ack,
-     #elem{name = <<"ack">>,
-           result = {p1_ack},
-           xmlns = <<"p1:ack">>}).
-
--xml(caps,
-     #elem{name = <<"c">>,
-           xmlns = <<"http://jabber.org/protocol/caps">>,
-           result = {caps, '$node', '$version', '$hash', '$exts'},
-           attrs = [#attr{name = <<"hash">>},
-                    #attr{name = <<"node">>},
-                   #attr{name = <<"ext">>,
-                         label = '$exts',
-                         default = [],
-                         dec = {re, split, ["\\h+"]},
-                         enc = {join, [$ ]}},
-                    #attr{name = <<"ver">>,
-                         label = '$version'}]}).
-
--xml(feature_register,
-     #elem{name = <<"register">>,
-           xmlns = <<"http://jabber.org/features/iq-register">>,
-           result = {feature_register}}).
-
--xml(register_registered,
-     #elem{name = <<"registered">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = true}).
--xml(register_remove,
-     #elem{name = <<"remove">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = true}).
--xml(register_instructions,
-     #elem{name = <<"instructions">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_username,
-     #elem{name = <<"username">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_nick,
-     #elem{name = <<"nick">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_password,
-     #elem{name = <<"password">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_name,
-     #elem{name = <<"name">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_first,
-     #elem{name = <<"first">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_last,
-     #elem{name = <<"last">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_email,
-     #elem{name = <<"email">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_address,
-     #elem{name = <<"address">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_city,
-     #elem{name = <<"city">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_state,
-     #elem{name = <<"state">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_zip,
-     #elem{name = <<"zip">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_phone,
-     #elem{name = <<"phone">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_url,
-     #elem{name = <<"url">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_date,
-     #elem{name = <<"date">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_misc,
-     #elem{name = <<"misc">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_text,
-     #elem{name = <<"text">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
--xml(register_key,
-     #elem{name = <<"key">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = '$cdata'}).
-
--xml(register,
-     #elem{name = <<"query">>,
-           xmlns = <<"jabber:iq:register">>,
-           result = {register, '$registered', '$remove', '$instructions',
-                     '$username', '$nick', '$password', '$name',
-                     '$first', '$last', '$email', '$address',
-                     '$city', '$state', '$zip', '$phone', '$url',
-                     '$date', '$misc', '$text', '$key', '$xdata', '$_els'},
-           refs = [#ref{name = xdata, min = 0, max = 1,
-                       label = '$xdata'},
-                  #ref{name = register_registered, min = 0, max = 1,
-                        default = false, label = '$registered'},
-                   #ref{name = register_remove, min = 0, max = 1,
-                        default = false, label = '$remove'},
-                   #ref{name = register_instructions, min = 0, max = 1,
-                        label = '$instructions'},
-                   #ref{name = register_username, min = 0, max = 1,
-                        label = '$username'},
-                   #ref{name = register_nick, min = 0, max = 1,
-                        label = '$nick'},
-                   #ref{name = register_password, min = 0, max = 1,
-                        label = '$password'},
-                   #ref{name = register_name, min = 0, max = 1,
-                        label = '$name'},
-                   #ref{name = register_first, min = 0, max = 1,
-                        label = '$first'},
-                   #ref{name = register_last, min = 0, max = 1,
-                        label = '$last'},
-                   #ref{name = register_email, min = 0, max = 1,
-                        label = '$email'},
-                   #ref{name = register_address, min = 0, max = 1,
-                        label = '$address'},
-                   #ref{name = register_city, min = 0, max = 1,
-                        label = '$city'},
-                   #ref{name = register_state, min = 0, max = 1,
-                        label = '$state'},
-                   #ref{name = register_zip, min = 0, max = 1,
-                        label = '$zip'},
-                   #ref{name = register_phone, min = 0, max = 1,
-                        label = '$phone'},
-                   #ref{name = register_url, min = 0, max = 1,
-                        label = '$url'},
-                   #ref{name = register_date, min = 0, max = 1,
-                        label = '$date'},
-                   #ref{name = register_misc, min = 0, max = 1,
-                        label = '$misc'},
-                   #ref{name = register_text, min = 0, max = 1,
-                        label = '$text'},
-                   #ref{name = register_key, min = 0, max = 1,
-                        label = '$key'}]}).
-
--xml(session_optional,
-     #elem{name = <<"optional">>,
-          xmlns = <<"urn:ietf:params:xml:ns:xmpp-session">>,
-           result = true}).
-
--xml(session,
-     #elem{name = <<"session">>,
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-session">>,
-           result = {xmpp_session, '$optional'},
-          refs = [#ref{name = session_optional,
-                       min = 0, max = 1, default = false,
-                       label = '$optional'}]}).
-
--xml(ping,
-     #elem{name = <<"ping">>,
-           xmlns = <<"urn:xmpp:ping">>,
-           result = {ping}}).
-
--xml(time_utc,
-     #elem{name = <<"utc">>,
-           xmlns = <<"urn:xmpp:time">>,
-           result = '$cdata',
-           cdata = #cdata{dec = {dec_utc, []},
-                          enc = {enc_utc, []}}}).
-
--xml(time_tzo,
-     #elem{name = <<"tzo">>,
-           xmlns = <<"urn:xmpp:time">>,
-           result = '$cdata',
-           cdata = #cdata{dec = {dec_tzo, []},
-                          enc = {enc_tzo, []}}}).
-
--xml(time,
-     #elem{name = <<"time">>,
-           xmlns = <<"urn:xmpp:time">>,
-           result = {time, '$tzo', '$utc'},
-           refs = [#ref{name = time_tzo,
-                        label = '$tzo',
-                        min = 0, max = 1},
-                   #ref{name = time_utc,
-                        label = '$utc',
-                        min = 0, max = 1}]}).
-
--xml(stream_error_text,
-     #elem{name = <<"text">>,
-           result = {text, '$lang', '$data'},
-           cdata = #cdata{label = '$data'},
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
-           attrs = [#attr{name = <<"xml:lang">>,
-                          label = '$lang'}]}).
-
--xml(stream_error_bad_format,
-     #elem{name = <<"bad-format">>,
-           result = 'bad-format',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).       
--xml(stream_error_bad_namespace_prefix,
-     #elem{name = <<"bad-namespace-prefix">>,
-           result = 'bad-namespace-prefix',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_conflict,
-     #elem{name = <<"conflict">>,
-           result = 'conflict',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_connection_timeout,
-     #elem{name = <<"connection-timeout">>,
-           result = 'connection-timeout',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_host_gone,
-     #elem{name = <<"host-gone">>,
-           result = 'host-gone',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_host_unknown,
-     #elem{name = <<"host-unknown">>,
-           result = 'host-unknown',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_improper_addressing,
-     #elem{name = <<"improper-addressing">>,
-           result = 'improper-addressing',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_internal_server_error,
-     #elem{name = <<"internal-server-error">>,
-           result = 'internal-server-error',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_invalid_from,
-     #elem{name = <<"invalid-from">>,
-           result = 'invalid-from',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_invalid_id,
-     #elem{name = <<"invalid-id">>,
-           result = 'invalid-id',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_invalid_namespace,
-     #elem{name = <<"invalid-namespace">>,
-           result = 'invalid-namespace',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_invalid_xml,
-     #elem{name = <<"invalid-xml">>,
-           result = 'invalid-xml',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_not_authorized,
-     #elem{name = <<"not-authorized">>,
-           result = 'not-authorized',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_not_well_formed,
-     #elem{name = <<"not-well-formed">>,
-           result = 'not-well-formed',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_policy_violation,
-     #elem{name = <<"policy-violation">>,
-           result = 'policy-violation',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_remote_connection_failed,
-     #elem{name = <<"remote-connection-failed">>,
-           result = 'remote-connection-failed',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_reset,
-     #elem{name = <<"reset">>,
-           result = 'reset',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_resource_constraint,
-     #elem{name = <<"resource-constraint">>,
-           result = 'resource-constraint',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_restricted_xml,
-     #elem{name = <<"restricted-xml">>,
-           result = 'restricted-xml',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_see_other_host,
-     #elem{name = <<"see-other-host">>,
-           cdata = #cdata{required = true, label = '$host',
-                         dec = {dec_host_port, []},
-                         enc = {enc_host_port, []}},
-           result = {'see-other-host', '$host'},
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_system_shutdown,
-     #elem{name = <<"system-shutdown">>,
-           result = 'system-shutdown',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_undefined_condition,
-     #elem{name = <<"undefined-condition">>,
-           result = 'undefined-condition',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_unsupported_encoding,
-     #elem{name = <<"unsupported-encoding">>,
-           result = 'unsupported-encoding',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_unsupported_stanza_type,
-     #elem{name = <<"unsupported-stanza-type">>,
-           result = 'unsupported-stanza-type',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
--xml(stream_error_unsupported_version,
-     #elem{name = <<"unsupported-version">>,
-           result = 'unsupported-version',
-           xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
-
--xml(stream_error,
-     #elem{name = <<"stream:error">>,
-           xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-           result = {stream_error, '$reason', '$text'},
-           refs = [#ref{name = stream_error_text,
-                        label = '$text',
-                        min = 0, max = 1},
-                   #ref{name = stream_error_bad_format,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_bad_namespace_prefix,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_conflict,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_connection_timeout,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_host_gone,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_host_unknown,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_improper_addressing,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_internal_server_error,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_invalid_from,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_invalid_id,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_invalid_namespace,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_invalid_xml,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_not_authorized,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_not_well_formed,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_policy_violation,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_remote_connection_failed,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_reset,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_resource_constraint,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_restricted_xml,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_see_other_host,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_system_shutdown,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_undefined_condition,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_unsupported_encoding,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_unsupported_stanza_type,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = stream_error_unsupported_version,
-                        min = 0, max = 1, label = '$reason'}
-                  ]}).
-
--xml(vcard_HOME, #elem{name = <<"HOME">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_WORK, #elem{name = <<"WORK">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_VOICE, #elem{name = <<"VOICE">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_FAX, #elem{name = <<"FAX">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_PAGER, #elem{name = <<"PAGER">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_MSG, #elem{name = <<"MSG">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_CELL, #elem{name = <<"CELL">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_VIDEO, #elem{name = <<"VIDEO">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_BBS, #elem{name = <<"BBS">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_MODEM, #elem{name = <<"MODEM">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_ISDN, #elem{name = <<"ISDN">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_PCS, #elem{name = <<"PCS">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_POSTAL, #elem{name = <<"POSTAL">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_PARCEL, #elem{name = <<"PARCEL">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_DOM, #elem{name = <<"DOM">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_INTL, #elem{name = <<"INTL">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_PREF, #elem{name = <<"PREF">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_INTERNET, #elem{name = <<"INTERNET">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_X400, #elem{name = <<"X400">>, xmlns = <<"vcard-temp">>, result = true}).
--xml(vcard_FAMILY, #elem{name = <<"FAMILY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_GIVEN, #elem{name = <<"GIVEN">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_MIDDLE, #elem{name = <<"MIDDLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_PREFIX, #elem{name = <<"PREFIX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_SUFFIX, #elem{name = <<"SUFFIX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_POBOX, #elem{name = <<"POBOX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_EXTADD, #elem{name = <<"EXTADD">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_STREET, #elem{name = <<"STREET">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_LOCALITY, #elem{name = <<"LOCALITY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_REGION, #elem{name = <<"REGION">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_PCODE, #elem{name = <<"PCODE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_CTRY, #elem{name = <<"CTRY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_LINE, #elem{name = <<"LINE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_NUMBER, #elem{name = <<"NUMBER">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_USERID, #elem{name = <<"USERID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_LAT, #elem{name = <<"LAT">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_LON, #elem{name = <<"LON">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_ORGNAME, #elem{name = <<"ORGNAME">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_ORGUNIT, #elem{name = <<"ORGUNIT">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_PHONETIC, #elem{name = <<"PHONETIC">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_CRED, #elem{name = <<"CRED">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_VERSION, #elem{name = <<"VERSION">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_FN, #elem{name = <<"FN">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_NICKNAME, #elem{name = <<"NICKNAME">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_BDAY, #elem{name = <<"BDAY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_JABBERID, #elem{name = <<"JABBERID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_MAILER, #elem{name = <<"MAILER">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_TZ, #elem{name = <<"TZ">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_TITLE, #elem{name = <<"TITLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_ROLE, #elem{name = <<"ROLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_KEYWORD, #elem{name = <<"KEYWORD">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_NOTE, #elem{name = <<"NOTE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_PRODID, #elem{name = <<"PRODID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_REV, #elem{name = <<"REV">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_SORT_STRING, #elem{name = <<"SORT-STRING">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_UID, #elem{name = <<"UID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_URL, #elem{name = <<"URL">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_DESC, #elem{name = <<"DESC">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_TYPE, #elem{name = <<"TYPE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_EXTVAL, #elem{name = <<"EXTVAL">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
--xml(vcard_PUBLIC, #elem{name = <<"PUBLIC">>, xmlns = <<"vcard-temp">>, result = public}).
--xml(vcard_PRIVATE, #elem{name = <<"PRIVATE">>, xmlns = <<"vcard-temp">>, result = private}).
--xml(vcard_CONFIDENTIAL, #elem{name = <<"CONFIDENTIAL">>, xmlns = <<"vcard-temp">>, result = confidential}).
-
--xml(vcard_N,
-     #elem{name = <<"N">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_name, '$family', '$given', '$middle',
-                     '$prefix', '$suffix'},
-           refs = [#ref{name = vcard_FAMILY, min = 0, max = 1, label = '$family'},
-                   #ref{name = vcard_GIVEN, min = 0, max = 1, label = '$given'},
-                   #ref{name = vcard_MIDDLE, min = 0, max = 1, label = '$middle'},
-                   #ref{name = vcard_PREFIX, min = 0, max = 1, label = '$prefix'},
-                   #ref{name = vcard_SUFFIX, min = 0, max = 1, label = '$suffix'}]}).
-
--xml(vcard_ADR,
-     #elem{name = <<"ADR">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_adr, '$home', '$work', '$postal', '$parcel',
-                     '$dom', '$intl', '$pref', '$pobox', '$extadd', '$street',
-                     '$locality', '$region', '$pcode', '$ctry'},
-           refs = [#ref{name = vcard_HOME, default = false,
-                        min = 0, max = 1, label = '$home'},
-                   #ref{name = vcard_WORK, default = false,
-                        min = 0, max = 1, label = '$work'},
-                   #ref{name = vcard_POSTAL, default = false,
-                        min = 0, max = 1, label = '$postal'},
-                   #ref{name = vcard_PARCEL, default = false,
-                        min = 0, max = 1, label = '$parcel'},
-                   #ref{name = vcard_DOM, default = false,
-                        min = 0, max = 1, label = '$dom'},
-                   #ref{name = vcard_INTL, default = false,
-                        min = 0, max = 1, label = '$intl'},
-                   #ref{name = vcard_PREF, default = false,
-                        min = 0, max = 1, label = '$pref'},
-                   #ref{name = vcard_POBOX, min = 0, max = 1, label = '$pobox'},
-                   #ref{name = vcard_EXTADD, min = 0, max = 1, label = '$extadd'},
-                   #ref{name = vcard_STREET, min = 0, max = 1, label = '$street'},
-                   #ref{name = vcard_LOCALITY, min = 0, max = 1, label = '$locality'},
-                   #ref{name = vcard_REGION, min = 0, max = 1, label = '$region'},
-                   #ref{name = vcard_PCODE, min = 0, max = 1, label = '$pcode'},
-                   #ref{name = vcard_CTRY, min = 0, max = 1, label = '$ctry'}]}).
-
--xml(vcard_LABEL,
-     #elem{name = <<"LABEL">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_label, '$home', '$work', '$postal', '$parcel',
-                     '$dom', '$intl', '$pref', '$line'},
-           refs = [#ref{name = vcard_HOME, default = false,
-                        min = 0, max = 1, label = '$home'},
-                   #ref{name = vcard_WORK, default = false,
-                        min = 0, max = 1, label = '$work'},
-                   #ref{name = vcard_POSTAL, default = false,
-                        min = 0, max = 1, label = '$postal'},
-                   #ref{name = vcard_PARCEL, default = false,
-                        min = 0, max = 1, label = '$parcel'},
-                   #ref{name = vcard_DOM, default = false,
-                        min = 0, max = 1, label = '$dom'},
-                   #ref{name = vcard_INTL, default = false,
-                        min = 0, max = 1, label = '$intl'},
-                   #ref{name = vcard_PREF, default = false,
-                        min = 0, max = 1, label = '$pref'},
-                   #ref{name = vcard_LINE, label = '$line'}]}).
-
--xml(vcard_TEL,
-     #elem{name = <<"TEL">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_tel, '$home', '$work', '$voice', '$fax',
-                     '$pager', '$msg', '$cell', '$video', '$bbs',
-                     '$modem', '$isdn', '$pcs', '$pref', '$number'},
-           refs = [#ref{name = vcard_HOME, default = false,
-                        min = 0, max = 1, label = '$home'},
-                   #ref{name = vcard_WORK, default = false,
-                        min = 0, max = 1, label = '$work'},
-                   #ref{name = vcard_VOICE, default = false,
-                        min = 0, max = 1, label = '$voice'},
-                   #ref{name = vcard_FAX, default = false,
-                        min = 0, max = 1, label = '$fax'},
-                   #ref{name = vcard_PAGER, default = false,
-                        min = 0, max = 1, label = '$pager'},
-                   #ref{name = vcard_MSG, default = false,
-                        min = 0, max = 1, label = '$msg'},
-                   #ref{name = vcard_CELL, default = false,
-                        min = 0, max = 1, label = '$cell'},
-                   #ref{name = vcard_VIDEO, default = false,
-                        min = 0, max = 1, label = '$video'},
-                   #ref{name = vcard_BBS, default = false,
-                        min = 0, max = 1, label = '$bbs'},
-                   #ref{name = vcard_MODEM, default = false,
-                        min = 0, max = 1, label = '$modem'},
-                   #ref{name = vcard_ISDN, default = false,
-                        min = 0, max = 1, label = '$isdn'},
-                   #ref{name = vcard_PCS, default = false,
-                        min = 0, max = 1, label = '$pcs'},
-                   #ref{name = vcard_PREF, default = false,
-                        min = 0, max = 1, label = '$pref'},
-                   #ref{name = vcard_NUMBER,
-                        min = 0, max = 1, label = '$number'}]}).
-
--xml(vcard_EMAIL,
-     #elem{name = <<"EMAIL">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_email, '$home', '$work',
-                     '$internet', '$pref', '$x400', '$userid'},
-           refs = [#ref{name = vcard_HOME, default = false,
-                        min = 0, max = 1, label = '$home'},
-                   #ref{name = vcard_WORK, default = false,
-                        min = 0, max = 1, label = '$work'},
-                   #ref{name = vcard_INTERNET, default = false,
-                        min = 0, max = 1, label = '$internet'},
-                   #ref{name = vcard_PREF, default = false,
-                        min = 0, max = 1, label = '$pref'},
-                   #ref{name = vcard_X400, default = false,
-                        min = 0, max = 1, label = '$x400'},
-                   #ref{name = vcard_USERID,
-                        min = 0, max = 1, label = '$userid'}]}).
-
--xml(vcard_GEO,
-     #elem{name = <<"GEO">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_geo, '$lat', '$lon'},
-           refs = [#ref{name = vcard_LAT, min = 0, max = 1, label = '$lat'},
-                   #ref{name = vcard_LON, min = 0, max = 1, label = '$lon'}]}).
-
--xml(vcard_BINVAL,
-     #elem{name = <<"BINVAL">>,
-           xmlns = <<"vcard-temp">>,
-           cdata = #cdata{dec = {base64, decode, []},
-                          enc = {base64, encode, []}},
-           result = '$cdata'}).
-
--xml(vcard_LOGO,
-     #elem{name = <<"LOGO">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_logo, '$type', '$binval', '$extval'},
-           refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
-                   #ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
-                   #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}).
-
--xml(vcard_PHOTO,
-     #elem{name = <<"PHOTO">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_photo, '$type', '$binval', '$extval'},
-           refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
-                   #ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
-                   #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}).
-
--xml(vcard_ORG,
-     #elem{name = <<"ORG">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_org, '$name', '$units'},
-           refs = [#ref{name = vcard_ORGNAME,
-                        label = '$name',
-                        min = 0, max = 1},
-                   #ref{name = vcard_ORGUNIT,
-                        label = '$units'}]}).
-
--xml(vcard_SOUND,
-     #elem{name = <<"SOUND">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_sound, '$phonetic', '$binval', '$extval'},
-           refs = [#ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
-                   #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'},
-                   #ref{name = vcard_PHONETIC, min = 0, max = 1, label = '$phonetic'}]}).
-
--xml(vcard_KEY,
-     #elem{name = <<"KEY">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_key, '$type', '$cred'},
-           refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
-                   #ref{name = vcard_CRED, min = 0, max = 1, label = '$cred'}]}).
-
--xml(vcard_CATEGORIES,
-     #elem{name = <<"CATEGORIES">>,
-           xmlns = <<"vcard-temp">>,
-           result = '$keywords',
-           refs = [#ref{name = vcard_KEYWORD, label = '$keywords'}]}).
-
--xml(vcard_CLASS,
-     #elem{name = <<"CLASS">>,
-           xmlns = <<"vcard-temp">>,
-           result = '$class',
-           refs = [#ref{name = vcard_PUBLIC, min = 0, max = 1, label = '$class'},
-                   #ref{name = vcard_PRIVATE, min = 0, max = 1, label = '$class'},
-                   #ref{name = vcard_CONFIDENTIAL, min = 0, max = 1, label = '$class'}]}).
-
-%% {vcard_AGENT,
-%%  #elem{name = <<"AGENT">>,
-%%        xmlns = <<"vcard-temp">>,
-%%        result = {vcard_agent, '$vcard', '$extval'},
-%%        refs = [#ref{name = vcard, min = 0, max = 1, label = '$vcard'},
-%%                #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}).
-
--xml(vcard_temp,
-     #elem{name = <<"vCard">>,
-           xmlns = <<"vcard-temp">>,
-           result = {vcard_temp, '$version', '$fn', '$n', '$nickname', '$photo',
-                     '$bday', '$adr', '$label', '$tel', '$email', '$jabberid',
-                     '$mailer', '$tz', '$geo', '$title', '$role', '$logo',
-                     '$org', '$categories', '$note', '$prodid', %% '$agent',
-                     '$rev', '$sort_string', '$sound', '$uid', '$url', '$class',
-                     '$key', '$desc'},
-           refs = [#ref{name = vcard_N, min = 0, max = 1, label = '$n'},
-                   #ref{name = vcard_ADR, label = '$adr'},
-                   #ref{name = vcard_LABEL, label = '$label'},
-                   #ref{name = vcard_TEL, label = '$tel'},
-                   #ref{name = vcard_EMAIL, label = '$email'},
-                   #ref{name = vcard_GEO, min = 0, max = 1, label = '$geo'},
-                   #ref{name = vcard_LOGO, min = 0, max = 1, label = '$logo'},
-                   #ref{name = vcard_PHOTO, min = 0, max = 1, label = '$photo'},
-                   #ref{name = vcard_ORG, min = 0, max = 1, label = '$org'},
-                   #ref{name = vcard_SOUND, min = 0, max = 1, label = '$sound'},
-                   #ref{name = vcard_KEY, min = 0, max = 1, label = '$key'},
-                   #ref{name = vcard_VERSION, min = 0, max = 1, label = '$version'},
-                   #ref{name = vcard_FN, min = 0, max = 1, label = '$fn'},
-                   #ref{name = vcard_NICKNAME, min = 0, max = 1, label = '$nickname'},
-                   #ref{name = vcard_BDAY, min = 0, max = 1, label = '$bday'},
-                   #ref{name = vcard_JABBERID, min = 0, max = 1, label = '$jabberid'},
-                   #ref{name = vcard_MAILER, min = 0, max = 1, label = '$mailer'},
-                   #ref{name = vcard_TZ, min = 0, max = 1, label = '$tz'},
-                   #ref{name = vcard_TITLE, min = 0, max = 1, label = '$title'},
-                   #ref{name = vcard_ROLE, min = 0, max = 1, label = '$role'},
-                   #ref{name = vcard_NOTE, min = 0, max = 1, label = '$note'},
-                   #ref{name = vcard_PRODID, min = 0, max = 1, label = '$prodid'},
-                   #ref{name = vcard_REV, min = 0, max = 1, label = '$rev'},
-                   %%#ref{name = vcard_AGENT, min = 0, max = 1, label = '$agent'},
-                   #ref{name = vcard_SORT_STRING, min = 0, max = 1,
-                        label = '$sort_string'},
-                   #ref{name = vcard_UID, min = 0, max = 1, label = '$uid'},
-                   #ref{name = vcard_URL, min = 0, max = 1, label = '$url'},
-                   #ref{name = vcard_DESC, min = 0, max = 1, label = '$desc'},
-                   #ref{name = vcard_CATEGORIES, default = [], min = 0, max = 1,
-                        label = '$categories'},
-                   #ref{name = vcard_CLASS, min = 0, max = 1, label = '$class'}]}).
-
--xml(vcard_xupdate_photo,
-     #elem{name = <<"photo">>,
-          xmlns = <<"vcard-temp:x:update">>,
-          result = '$cdata'}).
-
--record(vcard_xupdate, {us = {<<>>, <<>>} :: {binary(), binary()},
-                       hash :: binary()}).
--type vcard_xupdate() :: #vcard_xupdate{}.
-
--xml(vcard_xupdate,
-     #elem{name = <<"x">>,
-          xmlns = <<"vcard-temp:x:update">>,
-          result = {vcard_xupdate, '$_', '$hash'},
-          refs = [#ref{name = vcard_xupdate_photo, min = 0, max = 1,
-                       label = '$hash'}]}).
-
--xml(xdata_field_required,
-     #elem{name = <<"required">>,
-           xmlns = <<"jabber:x:data">>,
-           result = true}).
-
--xml(xdata_field_desc,
-     #elem{name = <<"desc">>, xmlns = <<"jabber:x:data">>, result = '$cdata'}).
-
--xml(xdata_field_value,
-     #elem{name = <<"value">>, xmlns = <<"jabber:x:data">>, result = '$cdata'}).
-
--xml(xdata_field_option,
-     #elem{name = <<"option">>,
-           xmlns = <<"jabber:x:data">>,
-           result = {xdata_option, '$label', '$value'},
-          attrs = [#attr{name = <<"label">>}],
-           refs = [#ref{name = xdata_field_value,
-                        label = '$value',
-                        min = 1, max = 1}]}).
-
--xml(xdata_field,
-     #elem{name = <<"field">>,
-           xmlns = <<"jabber:x:data">>,
-           result = {xdata_field, '$label', '$type', '$var',
-                     '$required', '$desc', '$values', '$options', '$_els'},
-           attrs = [#attr{name = <<"label">>},
-                    #attr{name = <<"type">>,
-                          enc = {enc_enum, []},
-                          dec = {dec_enum, [['boolean',
-                                             'fixed',
-                                             'hidden',
-                                             'jid-multi',
-                                             'jid-single',
-                                             'list-multi',
-                                             'list-single',
-                                             'text-multi',
-                                             'text-private',
-                                             'text-single']]}},
-                    #attr{name = <<"var">>}],
-           refs = [#ref{name = xdata_field_required,
-                        label = '$required',
-                        default = false,
-                        min = 0, max = 1},
-                   #ref{name = xdata_field_desc,
-                       default = <<"">>,
-                        label = '$desc',
-                        min = 0, max = 1},
-                   #ref{name = xdata_field_value,
-                        label = '$values'},
-                   #ref{name = xdata_field_option,
-                        label = '$options'}]}).
-
--xml(xdata_instructions,  #elem{name = <<"instructions">>,
-                                xmlns = <<"jabber:x:data">>,
-                                result = '$cdata'}).
--xml(xdata_title, #elem{name = <<"title">>,
-                        xmlns = <<"jabber:x:data">>,
-                        result = '$cdata'}).
--xml(xdata_reported, #elem{name = <<"reported">>,
-                           xmlns = <<"jabber:x:data">>,
-                           result = '$fields',
-                           refs = [#ref{name = xdata_field,
-                                        label = '$fields'}]}).
--xml(xdata_item,  #elem{name = <<"item">>,
-                        xmlns = <<"jabber:x:data">>,
-                        result = '$fields',
-                        refs = [#ref{name = xdata_field,
-                                     label = '$fields'}]}).
-
--xml(xdata,
-     #elem{name = <<"x">>,
-           xmlns = <<"jabber:x:data">>,
-           result = {xdata, '$type', '$instructions', '$title',
-                     '$reported', '$items', '$fields'},
-           attrs = [#attr{name = <<"type">>,
-                          required = true,
-                          dec = {dec_enum, [[cancel, form, result, submit]]},
-                          enc = {enc_enum, []}}],
-           refs = [#ref{name = xdata_instructions,
-                        label = '$instructions'},
-                   #ref{name = xdata_title,
-                        label = '$title',
-                        min = 0, max = 1},
-                   #ref{name = xdata_reported,
-                        label = '$reported',
-                        min = 0, max = 1},
-                   #ref{name = xdata_item,
-                        label = '$items'},
-                   #ref{name = xdata_field,
-                        label = '$fields'}]}).
-
--xml(pubsub_subscription,
-     #elem{name = <<"subscription">>,
-           xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#owner">>,
-                   <<"http://jabber.org/protocol/pubsub#event">>],
-          result = {ps_subscription, '$xmlns', '$jid', '$type',
-                    '$node', '$subid', '$expiry'},
-          attrs = [#attr{name = <<"xmlns">>},
-                   #attr{name = <<"jid">>,
-                         required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                   #attr{name = <<"node">>},
-                    #attr{name = <<"subid">>},
-                    #attr{name = <<"subscription">>,
-                          label = '$type',
-                          dec = {dec_enum, [[none, pending, subscribed,
-                                             unconfigured]]},
-                          enc = {enc_enum, []}},
-                   #attr{name = <<"expiry">>,
-                         dec = {dec_utc, []},
-                         enc = {enc_utc, []}}]}).
-
--record(ps_affiliation, {xmlns = <<>> :: binary(),
-                        node = <<>> :: binary(),
-                        type :: member | none | outcast |
-                                owner | publisher | publish_only,
-                        jid :: jid:jid()}).
--type ps_affiliation() :: #ps_affiliation{}.
-
--xml(pubsub_affiliation,
-     #elem{name = <<"affiliation">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub">>,
-           result = {ps_affiliation, '$xmlns', '$node', '$type', '$_'},
-           attrs = [#attr{name = <<"node">>, required = true},
-                   #attr{name = <<"xmlns">>},
-                    #attr{name = <<"affiliation">>,
-                          label = '$type',
-                          required = true,
-                          dec = {dec_ps_aff, []},
-                          enc = {enc_ps_aff, []}}]}).
-
--xml(pubsub_owner_affiliation,
-     #elem{name = <<"affiliation">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#owner">>,
-           result = {ps_affiliation, '$xmlns', '$_', '$type', '$jid'},
-           attrs = [#attr{name = <<"jid">>,
-                         required = true,
-                         dec = {dec_jid, []},
-                         enc = {enc_jid, []}},
-                   #attr{name = <<"xmlns">>},
-                    #attr{name = <<"affiliation">>,
-                          label = '$type',
-                          required = true,
-                         dec = {dec_ps_aff, []},
-                          enc = {enc_ps_aff, []}}]}).
-
--xml(pubsub_event_configuration,
-     #elem{name = <<"configuration">>,
-          xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
-          result = {'$node', '$xdata'},
-          attrs = [#attr{name = <<"node">>, required = true}],
-          refs = [#ref{name = xdata, min = 0, max = 1}]}).
-
--xml(pubsub_event_retract,
-     #elem{name = <<"retract">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
-           result = '$id',
-           attrs = [#attr{name = <<"id">>, required = true}]}).
-
--xml(pubsub_item,
-     #elem{name = <<"item">>,
-           xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#event">>],
-           result = {ps_item, '$xmlns', '$id', '$_xmls', '$node', '$publisher'},
-           attrs = [#attr{name = <<"id">>},
-                   #attr{name = <<"xmlns">>},
-                    #attr{name = <<"node">>},
-                    #attr{name = <<"publisher">>}]}).
-
--xml(pubsub_items,
-     #elem{name = <<"items">>,
-           xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#event">>],
-           result = {ps_items, '$xmlns', '$node', '$items', '$max_items',
-                     '$subid', '$retract'},
-           attrs = [#attr{name = <<"xmlns">>},
-                   #attr{name = <<"max_items">>,
-                          dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                    #attr{name = <<"node">>,
-                          required = true},
-                    #attr{name = <<"subid">>}],
-           refs = [#ref{name = pubsub_event_retract, label = '$retract',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_item, label = '$items'}]}).
-
--xml(pubsub_event,
-     #elem{name = <<"event">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
-           result = {ps_event, '$items', '$purge', '$subscription', '$delete',
-                   '$create', '$configuration'},
-           refs = [#ref{name = pubsub_items, label = '$items',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_subscription, min = 0, max = 1,
-                       label = '$subscription'},
-                  #ref{name = pubsub_purge, min = 0, max = 1,
-                       label = '$purge'},
-                  #ref{name = pubsub_delete, min = 0, max = 1,
-                       label = '$delete'},
-                  #ref{name = pubsub_create, min = 0, max = 1,
-                       label = '$create'},
-                  #ref{name = pubsub_event_configuration, min = 0, max = 1,
-                       label = '$configuration'}]}).
-
--xml(pubsub_subscriptions,
-     #elem{name = <<"subscriptions">>,
-           xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#owner">>],
-           result = {'$node', '$subscriptions'},
-           attrs = [#attr{name = <<"node">>}],
-           refs = [#ref{name = pubsub_subscription, label = '$subscriptions'}]}).
-
--xml(pubsub_affiliations,
-     #elem{name = <<"affiliations">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub">>,
-           result = {'$node', '$affiliations'},
-          attrs = [#attr{name = <<"node">>}],
-           refs = [#ref{name = pubsub_affiliation, label = '$affiliations'}]}).
-
--xml(pubsub_owner_affiliations,
-     #elem{name = <<"affiliations">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#owner">>,
-           result = {'$node', '$affiliations'},
-          attrs = [#attr{name = <<"node">>}],
-           refs = [#ref{name = pubsub_owner_affiliation, label = '$affiliations'}]}).
-
--xml(pubsub_subscribe,
-     #elem{name = <<"subscribe">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub">>,
-           result = {ps_subscribe, '$node', '$jid'},
-           attrs = [#attr{name = <<"node">>},
-                    #attr{name = <<"jid">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}]}).
-
--xml(pubsub_unsubscribe,
-     #elem{name = <<"unsubscribe">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub">>,
-           result = {ps_unsubscribe, '$node', '$jid', '$subid'},
-           attrs = [#attr{name = <<"node">>},
-                    #attr{name = <<"subid">>},
-                    #attr{name = <<"jid">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}]}).
-
--xml(pubsub_publish,
-     #elem{name = <<"publish">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub">>,
-           result = {ps_publish, '$node', '$items'},
-           attrs = [#attr{name = <<"node">>,
-                          required = true}],
-           refs = [#ref{name = pubsub_item, label = '$items'}]}).
-
--xml(pubsub_options,
-     #elem{name = <<"options">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub">>,
-           result = {ps_options, '$node', '$jid', '$subid', '$xdata'},
-           attrs = [#attr{name = <<"node">>},
-                    #attr{name = <<"subid">>},
-                    #attr{name = <<"jid">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}],
-           refs = [#ref{name = xdata, min = 0, max = 1,
-                        label = '$xdata'}]}).
-
--xml(pubsub_retract,
-     #elem{name = <<"retract">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub">>,
-           result = {ps_retract, '$node', '$notify', '$items'},
-           attrs = [#attr{name = <<"node">>,
-                          required = true},
-                    #attr{name = <<"notify">>,
-                          default = false,
-                          dec = {dec_bool, []},
-                          enc = {enc_bool, []}}],
-           refs = [#ref{name = pubsub_item, label = '$items'}]}).
-
--xml(pubsub_create,
-     #elem{name = <<"create">>,
-          xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#event">>],
-          result = '$node',
-          attrs = [#attr{name = <<"node">>}]}).
-
--xml(pubsub_configure,
-     #elem{name = <<"configure">>,
-          xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#owner">>],
-          result = {'$node', '$xdata'},
-          attrs = [#attr{name = <<"node">>}],
-          refs = [#ref{name = xdata, min = 0, max = 1}]}).
-
--xml(pubsub_publish_options,
-     #elem{name = <<"publish-options">>,
-          xmlns = <<"http://jabber.org/protocol/pubsub">>,
-          result = '$xdata',
-          refs = [#ref{name = xdata, min = 0, max = 1}]}).
-
--xml(pubsub_default,
-     #elem{name = <<"default">>,
-          xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#owner">>],
-          result = {'$node', '$xdata'},
-          attrs = [#attr{name = <<"node">>}],
-          refs = [#ref{name = xdata, min = 0, max = 1}]}).
-
--xml(pubsub_redirect,
-     #elem{name = <<"redirect">>,
-          xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#owner">>,
-                   <<"http://jabber.org/protocol/pubsub#event">>],
-          result = '$uri',
-          attrs = [#attr{name = <<"uri">>, required = true}]}).
-
--xml(pubsub_delete,
-     #elem{name = <<"delete">>,
-          xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#owner">>,
-                   <<"http://jabber.org/protocol/pubsub#event">>],
-          result = {'$node', '$uri'},
-          attrs = [#attr{name = <<"node">>, required = true}],
-          refs = [#ref{name = pubsub_redirect, min = 0, max = 1,
-                       label = '$uri', default = <<>>}]}).
-
--xml(pubsub_purge,
-     #elem{name = <<"purge">>,
-          xmlns = [<<"http://jabber.org/protocol/pubsub">>,
-                   <<"http://jabber.org/protocol/pubsub#owner">>,
-                   <<"http://jabber.org/protocol/pubsub#event">>],
-          result = '$node',
-          attrs = [#attr{name = <<"node">>, required = true}]}).
-
--xml(pubsub,
-     #elem{name = <<"pubsub">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub">>,
-           result = {pubsub, '$subscriptions', '$subscription',
-                    '$affiliations', '$publish', '$publish_options',
-                    '$subscribe', '$unsubscribe', '$options', '$items',
-                    '$retract', '$create', '$configure', '$default', '$delete',
-                    '$purge', '$rsm'},
-           refs = [#ref{name = pubsub_subscriptions, label = '$subscriptions',
-                        min = 0, max = 1},
-                   #ref{name = pubsub_affiliations, label = '$affiliations',
-                        min = 0, max = 1},
-                   #ref{name = pubsub_subscribe, label = '$subscribe',
-                        min = 0, max = 1},
-                   #ref{name = pubsub_unsubscribe, label = '$unsubscribe',
-                        min = 0, max = 1},
-                   #ref{name = pubsub_options, label = '$options',
-                        min = 0, max = 1},
-                   #ref{name = pubsub_items, label = '$items',
-                        min = 0, max = 1},
-                   #ref{name = pubsub_retract, label = '$retract',
-                        min = 0, max = 1},
-                  #ref{name = pubsub_create, label = '$create',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_configure, label = '$configure',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_publish_options, min = 0, max = 1,
-                       label = '$publish_options'},
-                  #ref{name = pubsub_default, label = '$default',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_delete, label = '$delete',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_purge, label = '$purge',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_subscription, label = '$subscription',
-                       min = 0, max = 1},
-                  #ref{name = rsm_set, min = 0, max = 1, label = '$rsm'},
-                   #ref{name = pubsub_publish, label = '$publish',
-                        min = 0, max = 1}]}).
-
--xml(pubsub_owner,
-     #elem{name = <<"pubsub">>,
-          xmlns = <<"http://jabber.org/protocol/pubsub#owner">>,
-          result = {pubsub_owner, '$affiliations', '$configure', '$default',
-                    '$delete', '$purge', '$subscriptions'},
-          refs = [#ref{name = pubsub_owner_affiliations,
-                       label = '$affiliations', min = 0, max = 1},
-                  #ref{name = pubsub_configure, label = '$configure',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_default, label = '$default',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_delete, label = '$delete',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_purge, label = '$purge',
-                       min = 0, max = 1},
-                  #ref{name = pubsub_subscriptions,
-                       label = '$subscriptions', min = 0, max = 1}]}).
-
--type ps_error_type() :: 'closed-node' | 'configuration-required' |
-                        'invalid-jid' | 'invalid-options' |
-                        'invalid-payload' | 'invalid-subid' |
-                        'item-forbidden' | 'item-required' | 'jid-required' |
-                        'max-items-exceeded' | 'max-nodes-exceeded' |
-                        'nodeid-required' | 'not-in-roster-group' |
-                        'not-subscribed' | 'payload-too-big' |
-                        'payload-required' | 'pending-subscription' |
-                        'presence-subscription-required' | 'subid-required' |
-                        'too-many-subscriptions' | 'unsupported' |
-                        'unsupported-access-model'.
--type ps_feature() :: 'access-authorize' | 'access-open' |
-                     'access-presence' | 'access-roster' |
-                     'access-whitelist' | 'auto-create' |
-                     'auto-subscribe' | 'collections' | 'config-node' |
-                     'create-and-configure' | 'create-nodes' |
-                     'delete-items' | 'delete-nodes' |
-                     'filtered-notifications' | 'get-pending' |
-                     'instant-nodes' | 'item-ids' | 'last-published' |
-                     'leased-subscription' | 'manage-subscriptions' |
-                     'member-affiliation' | 'meta-data' |
-                     'modify-affiliations' | 'multi-collection' |
-                     'multi-subscribe' | 'outcast-affiliation' |
-                     'persistent-items' | 'presence-notifications' |
-                     'presence-subscribe' | 'publish' |
-                     'publish-options' | 'publish-only-affiliation' |
-                     'publisher-affiliation' | 'purge-nodes' |
-                     'retract-items' | 'retrieve-affiliations' |
-                     'retrieve-default' | 'retrieve-items' |
-                     'retrieve-subscriptions' | 'subscribe' |
-                     'subscription-options' | 'subscription-notifications'.
--record(ps_error, {type :: ps_error_type(), feature :: ps_feature()}).
--type ps_error() :: #ps_error{}.
-
--xml(pubsub_error_closed_node,
-     #elem{name = <<"closed-node">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'closed-node', '$_'}}).
--xml(pubsub_error_configuration_required,
-     #elem{name = <<"configuration-required">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'configuration-required', '$_'}}).
--xml(pubsub_error_invalid_jid,
-     #elem{name = <<"invalid-jid">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'invalid-jid', '$_'}}).
--xml(pubsub_error_invalid_options,
-     #elem{name = <<"invalid-options">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'invalid-options', '$_'}}).
--xml(pubsub_error_invalid_payload,
-     #elem{name = <<"invalid-payload">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'invalid-payload', '$_'}}).
--xml(pubsub_error_invalid_subid,
-     #elem{name = <<"invalid-subid">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'invalid-subid', '$_'}}).
--xml(pubsub_error_item_forbidden,
-     #elem{name = <<"item-forbidden">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'item-forbidden', '$_'}}).
--xml(pubsub_error_item_required,
-     #elem{name = <<"item-required">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'item-required', '$_'}}).
--xml(pubsub_error_jid_required,
-     #elem{name = <<"jid-required">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'jid-required', '$_'}}).
--xml(pubsub_error_max_items_exceeded,
-     #elem{name = <<"max-items-exceeded">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'max-items-exceeded', '$_'}}).
--xml(pubsub_error_max_nodes_exceeded,
-     #elem{name = <<"max-nodes-exceeded">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'max-nodes-exceeded', '$_'}}).
--xml(pubsub_error_nodeid_required,
-     #elem{name = <<"nodeid-required">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'nodeid-required', '$_'}}).
--xml(pubsub_error_not_in_roster_group,
-     #elem{name = <<"not-in-roster-group">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'not-in-roster-group', '$_'}}).
--xml(pubsub_error_not_subscribed,
-     #elem{name = <<"not-subscribed">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'not-subscribed', '$_'}}).
--xml(pubsub_error_payload_too_big,
-     #elem{name = <<"payload-too-big">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'payload-too-big', '$_'}}).
--xml(pubsub_error_payload_required,
-     #elem{name = <<"payload-required">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'payload-required', '$_'}}).
--xml(pubsub_error_pending_subscription,
-     #elem{name = <<"pending-subscription">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'pending-subscription', '$_'}}).
--xml(pubsub_error_presence_subscription_required,
-     #elem{name = <<"presence-subscription-required">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'presence-subscription-required', '$_'}}).
--xml(pubsub_error_subid_required,
-     #elem{name = <<"subid-required">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'subid-required', '$_'}}).
--xml(pubsub_error_too_many_subscriptions,
-     #elem{name = <<"too-many-subscriptions">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'too-many-subscriptions', '$_'}}).
--xml(pubsub_error_unsupported,
-     #elem{name = <<"unsupported">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'unsupported', '$feature'},
-          attrs = [#attr{name = <<"feature">>, required = true,
-                         dec = {dec_enum, [['access-authorize',
-                                             'access-open',
-                                             'access-presence',
-                                             'access-roster',
-                                             'access-whitelist',
-                                             'auto-create',
-                                             'auto-subscribe',
-                                             'collections',
-                                             'config-node',
-                                             'create-and-configure',
-                                             'create-nodes',
-                                             'delete-items',
-                                             'delete-nodes',
-                                             'filtered-notifications',
-                                             'get-pending',
-                                             'instant-nodes',
-                                             'item-ids',
-                                             'last-published',
-                                             'leased-subscription',
-                                             'manage-subscriptions',
-                                             'member-affiliation',
-                                             'meta-data',
-                                             'modify-affiliations',
-                                             'multi-collection',
-                                             'multi-subscribe',
-                                             'outcast-affiliation',
-                                             'persistent-items',
-                                             'presence-notifications',
-                                             'presence-subscribe',
-                                             'publish',
-                                             'publish-options',
-                                             'publish-only-affiliation',
-                                             'publisher-affiliation',
-                                             'purge-nodes',
-                                             'retract-items',
-                                             'retrieve-affiliations',
-                                             'retrieve-default',
-                                             'retrieve-items',
-                                             'retrieve-subscriptions',
-                                             'subscribe',
-                                             'subscription-options',
-                                             'subscription-notifications']]},
-                         enc = {enc_enum, []}}]}).
--xml(pubsub_error_unsupported_access_model,
-     #elem{name = <<"unsupported-access-model">>,
-           xmlns = <<"http://jabber.org/protocol/pubsub#errors">>,
-           result = {ps_error, 'unsupported-access-model', '$_'}}).
-
--xml(shim_header,
-     #elem{name = <<"header">>,
-           xmlns = <<"http://jabber.org/protocol/shim">>,
-           result = {'$name', '$cdata'},
-           attrs = [#attr{name = <<"name">>,
-                          required = true}]}).
-
--xml(shim_headers,
-     #elem{name = <<"headers">>,
-           xmlns = <<"http://jabber.org/protocol/shim">>,
-           result = {shim, '$headers'},
-           refs = [#ref{name = shim_header, label = '$headers'}]}).
-
--record(chatstate, {type :: active | composing | gone | inactive | paused}).
--type chatstate() :: #chatstate{}.
-
--xml(chatstate_active,
-     #elem{name = <<"active">>,
-           xmlns = <<"http://jabber.org/protocol/chatstates">>,
-           result = {chatstate, active}}).
-
--xml(chatstate_composing,
-     #elem{name = <<"composing">>,
-           xmlns = <<"http://jabber.org/protocol/chatstates">>,
-           result = {chatstate, composing}}).
-
--xml(chatstate_gone,
-     #elem{name = <<"gone">>,
-           xmlns = <<"http://jabber.org/protocol/chatstates">>,
-           result = {chatstate, gone}}).
-
--xml(chatstate_inactive,
-     #elem{name = <<"inactive">>,
-           xmlns = <<"http://jabber.org/protocol/chatstates">>,
-           result = {chatstate, inactive}}).
-
--xml(chatstate_paused,
-     #elem{name = <<"paused">>,
-           xmlns = <<"http://jabber.org/protocol/chatstates">>,
-           result = {chatstate, paused}}).
-
--xml(delay,
-     #elem{name = <<"delay">>,
-           xmlns = <<"urn:xmpp:delay">>,
-           result = {delay, '$stamp', '$from', '$desc'},
-          cdata = #cdata{label = '$desc', default = <<"">>},
-           attrs = [#attr{name = <<"stamp">>,
-                          required = true,
-                          dec = {dec_utc, []},
-                          enc = {enc_utc, []}},
-                    #attr{name = <<"from">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}]}).
-
--xml(bytestreams_streamhost,
-     #elem{name = <<"streamhost">>,
-           xmlns = <<"http://jabber.org/protocol/bytestreams">>,
-           result = {streamhost, '$jid', '$host', '$port'},
-           attrs = [#attr{name = <<"jid">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"host">>,
-                          required = true},
-                    #attr{name = <<"port">>,
-                          default = 1080,
-                          dec = {dec_int, [0, 65535]},
-                          enc = {enc_int, []}}]}).
-
--xml(bytestreams_streamhost_used,
-     #elem{name = <<"streamhost-used">>,
-           xmlns = <<"http://jabber.org/protocol/bytestreams">>,
-           result = '$jid',
-           attrs = [#attr{name = <<"jid">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}]}).
-
--xml(bytestreams_activate,
-     #elem{name = <<"activate">>,
-           xmlns = <<"http://jabber.org/protocol/bytestreams">>,
-           cdata = #cdata{enc = {enc_jid, []}, dec = {dec_jid, []}},
-           result = '$cdata'}).
-
--xml(bytestreams,
-     #elem{name = <<"query">>,
-           xmlns = <<"http://jabber.org/protocol/bytestreams">>,
-           result = {bytestreams, '$hosts', '$used', '$activate',
-                     '$dstaddr', '$mode', '$sid'},
-           attrs = [#attr{name = <<"dstaddr">>},
-                    #attr{name = <<"sid">>},
-                    #attr{name = <<"mode">>,
-                          default = tcp,
-                          dec = {dec_enum, [[tcp, udp]]},
-                          enc = {enc_enum, []}}],
-           refs = [#ref{name = bytestreams_streamhost, label = '$hosts'},
-                   #ref{name = bytestreams_streamhost_used,
-                        min = 0, max = 1, label = '$used'},
-                   #ref{name = bytestreams_activate,
-                        min = 0, max = 1, label = '$activate'}]}).
-
--xml(muc_history,
-     #elem{name = <<"history">>,
-           xmlns = <<"http://jabber.org/protocol/muc">>,
-           result = {muc_history, '$maxchars', '$maxstanzas',
-                     '$seconds', '$since'},
-           attrs = [#attr{name = <<"maxchars">>,
-                          dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                    #attr{name = <<"maxstanzas">>,
-                          dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                    #attr{name = <<"seconds">>,
-                          dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                    #attr{name = <<"since">>,
-                          dec = {dec_utc, []},
-                          enc = {enc_utc, []}}]}).
-
--xml(muc_reason,
-     #elem{name = <<"reason">>,
-           xmlns = [<<"http://jabber.org/protocol/muc#user">>,
-                   <<"http://jabber.org/protocol/muc#admin">>,
-                   <<"http://jabber.org/protocol/muc#owner">>],
-           result = '$cdata'}).
-
--xml(muc_user_decline,
-     #elem{name = <<"decline">>,
-           xmlns = <<"http://jabber.org/protocol/muc#user">>,
-           result = {muc_decline, '$reason', '$from', '$to'},
-           attrs = [#attr{name = <<"to">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"from">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}],
-           refs = [#ref{name = muc_reason, min = 0,
-                       default = <<"">>,
-                        max = 1, label = '$reason'}]}).
-
--xml(muc_destroy,
-     #elem{name = <<"destroy">>,
-          xmlns = [<<"http://jabber.org/protocol/muc#user">>,
-                   <<"http://jabber.org/protocol/muc#owner">>],
-          result = {muc_destroy, '$xmlns', '$jid', '$reason', '$password'},
-          attrs = [#attr{name = <<"jid">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                   #attr{name = <<"xmlns">>}],
-          refs = [#ref{name = muc_reason, min = 0,
-                       default = <<"">>,
-                        max = 1, label = '$reason'},
-                  #ref{name = muc_password, min = 0, max = 1,
-                       label = '$password'}]}).
-
--xml(muc_user_invite,
-     #elem{name = <<"invite">>,
-           xmlns = <<"http://jabber.org/protocol/muc#user">>,
-           result = {muc_invite, '$reason', '$from', '$to', '$continue'},
-           attrs = [#attr{name = <<"to">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"from">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}],
-           refs = [#ref{name = muc_reason, min = 0, default = <<"">>,
-                        max = 1, label = '$reason'},
-                  #ref{name = muc_user_continue, min = 0, max = 1,
-                       label = '$continue'}]}).
-
--xml(muc_user_actor,
-     #elem{name = <<"actor">>,
-           xmlns = <<"http://jabber.org/protocol/muc#user">>,
-           result = {muc_actor, '$jid', '$nick'},
-           attrs = [#attr{name = <<"jid">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"nick">>}]}).
-
--xml(muc_user_continue,
-     #elem{name = <<"continue">>,
-           xmlns = <<"http://jabber.org/protocol/muc#user">>,
-           result = '$thread',
-           attrs = [#attr{name = <<"thread">>}]}).
-
--xml(muc_user_status,
-     #elem{name = <<"status">>,
-           xmlns = <<"http://jabber.org/protocol/muc#user">>,
-           result = '$code',
-           attrs = [#attr{name = <<"code">>,
-                          dec = {dec_int, [100, 999]},
-                          enc = {enc_int, []}}]}).
-
--xml(muc_user_item,
-     #elem{name = <<"item">>,
-           xmlns = <<"http://jabber.org/protocol/muc#user">>,
-           result = {muc_item, '$actor', '$continue', '$reason',
-                     '$affiliation', '$role', '$jid', '$nick'},
-           refs = [#ref{name = muc_user_actor,
-                        min = 0, max = 1, label = '$actor'},
-                   #ref{name = muc_user_continue,
-                        min = 0, max = 1, label = '$continue'},
-                   #ref{name = muc_reason, default = <<"">>,
-                        min = 0, max = 1, label = '$reason'}],
-           attrs = [#attr{name = <<"affiliation">>,
-                          dec = {dec_enum, [[admin, member, none,
-                                             outcast, owner]]},
-                          enc = {enc_enum, []}},
-                    #attr{name = <<"role">>,
-                          dec = {dec_enum, [[moderator, none,
-                                             participant, visitor]]},
-                          enc = {enc_enum, []}},
-                    #attr{name = <<"jid">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"nick">>}]}).
-
--xml(muc_user,
-     #elem{name = <<"x">>,
-           xmlns = <<"http://jabber.org/protocol/muc#user">>,
-           result = {muc_user, '$decline', '$destroy', '$invites',
-                     '$items', '$status_codes', '$password'},
-           refs = [#ref{name = muc_user_decline, min = 0,
-                        max = 1, label = '$decline'},
-                   #ref{name = muc_destroy, min = 0, max = 1,
-                        label = '$destroy'},
-                  #ref{name = muc_password, min = 0, max = 1,
-                       label = '$password'},
-                   #ref{name = muc_user_invite, label = '$invites'},
-                   #ref{name = muc_user_item, label = '$items'},
-                   #ref{name = muc_user_status, label = '$status_codes'}]}).
-
--xml(muc_password,
-     #elem{name = <<"password">>,
-           xmlns = [<<"http://jabber.org/protocol/muc#owner">>,
-                   <<"http://jabber.org/protocol/muc#user">>,
-                   <<"http://jabber.org/protocol/muc">>],
-           result = '$cdata'}).
-
--xml(muc_owner,
-     #elem{name = <<"query">>,
-           xmlns = <<"http://jabber.org/protocol/muc#owner">>,
-           result = {muc_owner, '$destroy', '$config', '$items'},
-           refs = [#ref{name = muc_destroy, min = 0, max = 1,
-                       label = '$destroy'},
-                   #ref{name = xdata, min = 0, max = 1,
-                       label = '$config'},
-                  #ref{name = muc_owner_item, label = '$items'}]}).
-
--xml(muc_owner_item,
-     #elem{name = <<"item">>,
-           xmlns = <<"http://jabber.org/protocol/muc#owner">>,
-           result = {muc_item, '$actor', '$continue', '$reason',
-                     '$affiliation', '$role', '$jid', '$nick'},
-           refs = [#ref{name = muc_admin_actor,
-                        min = 0, max = 1, label = '$actor'},
-                   #ref{name = muc_admin_continue,
-                        min = 0, max = 1, label = '$continue'},
-                   #ref{name = muc_reason, default = <<"">>,
-                        min = 0, max = 1, label = '$reason'}],
-           attrs = [#attr{name = <<"affiliation">>,
-                          dec = {dec_enum, [[admin, member, none,
-                                             outcast, owner]]},
-                          enc = {enc_enum, []}},
-                    #attr{name = <<"role">>,
-                          dec = {dec_enum, [[moderator, none,
-                                             participant, visitor]]},
-                          enc = {enc_enum, []}},
-                    #attr{name = <<"jid">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"nick">>}]}).
-
--xml(muc_admin_item,
-     #elem{name = <<"item">>,
-           xmlns = <<"http://jabber.org/protocol/muc#admin">>,
-           result = {muc_item, '$actor', '$continue', '$reason',
-                     '$affiliation', '$role', '$jid', '$nick'},
-           refs = [#ref{name = muc_admin_actor,
-                        min = 0, max = 1, label = '$actor'},
-                   #ref{name = muc_admin_continue,
-                        min = 0, max = 1, label = '$continue'},
-                   #ref{name = muc_reason, default = <<"">>,
-                        min = 0, max = 1, label = '$reason'}],
-           attrs = [#attr{name = <<"affiliation">>,
-                          dec = {dec_enum, [[admin, member, none,
-                                             outcast, owner]]},
-                          enc = {enc_enum, []}},
-                    #attr{name = <<"role">>,
-                          dec = {dec_enum, [[moderator, none,
-                                             participant, visitor]]},
-                          enc = {enc_enum, []}},
-                    #attr{name = <<"jid">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"nick">>}]}).
-
--xml(muc_admin_actor,
-     #elem{name = <<"actor">>,
-           xmlns = <<"http://jabber.org/protocol/muc#admin">>,
-           result = {muc_actor, '$jid', '$nick'},
-           attrs = [#attr{name = <<"jid">>,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                    #attr{name = <<"nick">>}]}).
-
--xml(muc_admin_continue,
-     #elem{name = <<"continue">>,
-           xmlns = <<"http://jabber.org/protocol/muc#admin">>,
-           result = '$thread',
-           attrs = [#attr{name = <<"thread">>}]}).
-
--xml(muc_admin,
-     #elem{name = <<"query">>,
-          xmlns = <<"http://jabber.org/protocol/muc#admin">>,
-          result = {muc_admin, '$items'},
-          refs = [#ref{name = muc_admin_item, label = '$items'}]}).
-
--xml(muc,
-     #elem{name = <<"x">>,
-           xmlns = <<"http://jabber.org/protocol/muc">>,
-           result = {muc, '$history', '$password'},
-           refs = [#ref{name = muc_history, min = 0, max = 1,
-                        label = '$history'},
-                  #ref{name = muc_password, min = 0, max = 1,
-                       label = '$password'}]}).
-
--xml(muc_unique,
-     #elem{name = <<"unique">>,
-          xmlns = <<"http://jabber.org/protocol/muc#unique">>,
-          result = {muc_unique, '$name'},
-          cdata = #cdata{default = <<"">>,
-                         label = '$name'}}).
-
--xml(x_conference,
-     #elem{name = <<"x">>,
-          xmlns = <<"jabber:x:conference">>,
-          result = {x_conference, '$jid', '$password', '$reason',
-                    '$continue', '$thread'},
-          attrs = [#attr{name = <<"jid">>,
-                         required = true,
-                         dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                   #attr{name = <<"password">>, default = <<"">>},
-                   #attr{name = <<"reason">>, default = <<"">>},
-                   #attr{name = <<"thread">>, default = <<"">>},
-                   #attr{name = <<"continue">>,
-                         dec = {dec_bool, []},
-                         enc = {enc_bool, []}}]}).
-
--xml(muc_subscription,
-     #elem{name = <<"subscription">>,
-          xmlns = <<"urn:xmpp:mucsub:0">>,
-          result = '$jid',
-           attrs = [#attr{name = <<"jid">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}]}).
-
--xml(muc_subscriptions,
-     #elem{name = <<"subscriptions">>,
-          xmlns = <<"urn:xmpp:mucsub:0">>,
-          result = {muc_subscriptions, '$list'},
-          refs = [#ref{name = muc_subscription, label = '$list'}]}).
-
--xml(muc_subscribe_event,
-     #elem{name = <<"event">>,
-          xmlns = <<"urn:xmpp:mucsub:0">>,
-          result = '$node',
-          attrs = [#attr{name = <<"node">>, required = true}]}).
-
--xml(muc_subscribe,
-     #elem{name = <<"subscribe">>,
-          xmlns = <<"urn:xmpp:mucsub:0">>,
-          result = {muc_subscribe, '$nick', '$events'},
-          attrs = [#attr{name = <<"nick">>, required = true}],
-          refs = [#ref{name = muc_subscribe_event, label = '$events'}]}).
-
--xml(muc_unsubscribe,
-     #elem{name = <<"unsubscribe">>,
-          xmlns = <<"urn:xmpp:mucsub:0">>,
-          result = {muc_unsubscribe}}).
-
--xml(rsm_after,
-     #elem{name = <<"after">>,
-           xmlns = <<"http://jabber.org/protocol/rsm">>,
-           result = '$cdata'}).
-
--xml(rsm_before,
-     #elem{name = <<"before">>,
-           xmlns = <<"http://jabber.org/protocol/rsm">>,
-          cdata = #cdata{default = <<"">>},
-           result = '$cdata'}).
-
--xml(rsm_last,
-     #elem{name = <<"last">>,
-           xmlns = <<"http://jabber.org/protocol/rsm">>,
-           result = '$cdata'}).
-
--xml(rsm_count,
-     #elem{name = <<"count">>, result = '$cdata',
-           xmlns = <<"http://jabber.org/protocol/rsm">>,
-           cdata = #cdata{dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}}}).
-
--xml(rsm_index,
-     #elem{name = <<"index">>, result = '$cdata',
-           xmlns = <<"http://jabber.org/protocol/rsm">>,
-           cdata = #cdata{dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}}}).
-
--xml(rsm_max,
-     #elem{name = <<"max">>, result = '$cdata',
-           xmlns = <<"http://jabber.org/protocol/rsm">>,
-           cdata = #cdata{dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}}}).
-
--xml(rsm_first,
-     #elem{name = <<"first">>,
-           xmlns = <<"http://jabber.org/protocol/rsm">>,
-           result = {rsm_first, '$index', '$data'},
-           cdata = #cdata{label = '$data'},
-           attrs = [#attr{name = <<"index">>,
-                          dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}}]}).
-
--xml(rsm_set,
-     #elem{name = <<"set">>,
-           xmlns = <<"http://jabber.org/protocol/rsm">>,
-           result = {rsm_set, '$after', '$before', '$count',
-                     '$first', '$index', '$last', '$max'},
-           refs = [#ref{name = rsm_after, label = '$after', min = 0, max = 1},
-                   #ref{name = rsm_before, label = '$before', min = 0, max = 1},
-                   #ref{name = rsm_count, label = '$count', min = 0, max = 1},
-                   #ref{name = rsm_first, label = '$first', min = 0, max = 1},
-                   #ref{name = rsm_index, label = '$index', min = 0, max = 1},
-                   #ref{name = rsm_last, label = '$last', min = 0, max = 1},
-                   #ref{name = rsm_max, label = '$max', min = 0, max = 1}]}).
-
--xml(mam_start,
-     #elem{name = <<"start">>,
-           xmlns = <<"urn:xmpp:mam:tmp">>,
-           result = '$cdata',
-           cdata = #cdata{required = true,
-                          dec = {dec_utc, []},
-                          enc = {enc_utc, []}}}).
-
--xml(mam_end,
-     #elem{name = <<"end">>,
-           xmlns = <<"urn:xmpp:mam:tmp">>,
-           result = '$cdata',
-           cdata = #cdata{required = true,
-                          dec = {dec_utc, []},
-                          enc = {enc_utc, []}}}).
-
--xml(mam_with,
-     #elem{name = <<"with">>,
-           xmlns = <<"urn:xmpp:mam:tmp">>,
-           result = '$cdata',
-           cdata = #cdata{required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}}).
-
--xml(mam_withtext,
-     #elem{name = <<"withtext">>,
-          xmlns = <<"urn:xmpp:mam:tmp">>,
-          result = '$cdata',
-          cdata = #cdata{required = true}}).
-
--xml(mam_query,
-     #elem{name = <<"query">>,
-           xmlns = [<<"urn:xmpp:mam:0">>, <<"urn:xmpp:mam:1">>, <<"urn:xmpp:mam:tmp">>],
-           result = {mam_query, '$xmlns', '$id', '$start', '$end', '$with',
-                    '$withtext', '$rsm', '$xdata'},
-           attrs = [#attr{name = <<"queryid">>, label = '$id'},
-                   #attr{name = <<"xmlns">>}],
-           refs = [#ref{name = mam_start, min = 0, max = 1, label = '$start'},
-                   #ref{name = mam_end, min = 0, max = 1, label = '$end'},
-                   #ref{name = mam_with, min = 0, max = 1, label = '$with'},
-                  #ref{name = mam_withtext, min = 0, max = 1, label = '$withtext'},
-                   #ref{name = rsm_set, min = 0, max = 1, label = '$rsm'},
-                  #ref{name = xdata, min = 0, max = 1, label = '$xdata'}]}).
-
--xml(mam_archived,
-     #elem{name = <<"archived">>,
-           xmlns = <<"urn:xmpp:mam:tmp">>,
-           result = {mam_archived, '$by', '$id'},
-           attrs = [#attr{name = <<"id">>},
-                    #attr{name = <<"by">>,
-                          required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}]}).
-
--xml(mam_result,
-     #elem{name = <<"result">>,
-           xmlns = [<<"urn:xmpp:mam:0">>, <<"urn:xmpp:mam:1">>, <<"urn:xmpp:mam:tmp">>],
-           result = {mam_result, '$xmlns', '$queryid', '$id', '$_els'},
-           attrs = [#attr{name = <<"queryid">>},
-                   #attr{name = <<"xmlns">>},
-                    #attr{name = <<"id">>}]}).
-
--xml(mam_jid,
-     #elem{name = <<"jid">>,
-           xmlns = [<<"urn:xmpp:mam:0">>, <<"urn:xmpp:mam:1">>, <<"urn:xmpp:mam:tmp">>],
-           result = '$cdata',
-           cdata = #cdata{required = true,
-                          dec = {dec_jid, []},
-                          enc = {enc_jid, []}}}).
-
--xml(mam_never,
-     #elem{name = <<"never">>,
-           xmlns = [<<"urn:xmpp:mam:0">>, <<"urn:xmpp:mam:1">>, <<"urn:xmpp:mam:tmp">>],
-           result = '$jids',
-           refs = [#ref{name = mam_jid, label = '$jids'}]}).
-
--xml(mam_always,
-     #elem{name = <<"always">>,
-           xmlns = [<<"urn:xmpp:mam:0">>, <<"urn:xmpp:mam:1">>, <<"urn:xmpp:mam:tmp">>],
-           result = '$jids',
-           refs = [#ref{name = mam_jid, label = '$jids'}]}).
-
--xml(mam_prefs,
-     #elem{name = <<"prefs">>,
-           xmlns = [<<"urn:xmpp:mam:0">>, <<"urn:xmpp:mam:1">>, <<"urn:xmpp:mam:tmp">>],
-           result = {mam_prefs, '$xmlns', '$default', '$always', '$never'},
-           attrs = [#attr{name = <<"default">>,
-                          dec = {dec_enum, [[always, never, roster]]},
-                          enc = {enc_enum, []}},
-                   #attr{name = <<"xmlns">>}],
-           refs = [#ref{name = mam_always, label = '$always',
-                        min = 0, max = 1},
-                   #ref{name = mam_never, label = '$never',
-                        min = 0, max = 1}]}).
-
--xml(mam_fin,
-     #elem{name = <<"fin">>,
-          xmlns = [<<"urn:xmpp:mam:0">>, <<"urn:xmpp:mam:1">>],
-          result = {mam_fin, '$xmlns', '$id', '$rsm', '$stable', '$complete'},
-          attrs = [#attr{name = <<"queryid">>, label = '$id'},
-                   #attr{name = <<"xmlns">>},
-                   #attr{name = <<"stable">>, label = '$stable',
-                         dec = {dec_bool, []},
-                         enc = {enc_bool, []}},
-                   #attr{name = <<"complete">>, label = '$complete',
-                         dec = {dec_bool, []},
-                         enc = {enc_bool, []}}],
-          refs = [#ref{name = rsm_set, min = 0, max = 1, label = '$rsm'}]}).
-
--xml(forwarded,
-     #elem{name = <<"forwarded">>,
-           xmlns = <<"urn:xmpp:forward:0">>,
-           result = {forwarded, '$delay', '$_xmls'},
-           refs = [#ref{name = delay, min = 0,
-                        max = 1, label = '$delay'}]}).
-
--xml(carbons_disable,
-     #elem{name = <<"disable">>,
-           xmlns = <<"urn:xmpp:carbons:2">>,
-           result = {carbons_disable}}).
-
--xml(carbons_enable,
-     #elem{name = <<"enable">>,
-          xmlns = <<"urn:xmpp:carbons:2">>,
-          result = {carbons_enable}}).
-
--xml(carbons_private,
-     #elem{name = <<"private">>,
-          xmlns = <<"urn:xmpp:carbons:2">>,
-          result = {carbons_private}}).
-
--xml(carbons_received,
-     #elem{name = <<"received">>,
-          xmlns = <<"urn:xmpp:carbons:2">>,
-          result = {carbons_received, '$forwarded'},
-          refs = [#ref{name = forwarded, min = 1,
-                        max = 1, label = '$forwarded'}]}).
-
--xml(carbons_sent,
-     #elem{name = <<"sent">>,
-          xmlns = <<"urn:xmpp:carbons:2">>,
-          result = {carbons_sent, '$forwarded'},
-          refs = [#ref{name = forwarded, min = 1,
-                        max = 1, label = '$forwarded'}]}).
-
--xml(feature_csi,
-     #elem{name = <<"csi">>,
-          xmlns = <<"urn:xmpp:csi:0">>,
-          result = {feature_csi, '$xmlns'},
-          attrs = [#attr{name = <<"xmlns">>}]}).
-
--record(csi, {type :: active | inactive}).
--type csi() :: #csi{}.
-
--xml(csi_active,
-     #elem{name = <<"active">>,
-          xmlns = <<"urn:xmpp:csi:0">>,
-          result = {csi, active}}).
-
--xml(csi_inactive,
-     #elem{name = <<"inactive">>,
-          xmlns = <<"urn:xmpp:csi:0">>,
-          result = {csi, inactive}}).
-
--xml(feature_sm,
-     #elem{name = <<"sm">>,
-          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-          result = {feature_sm, '$xmlns'},
-          attrs = [#attr{name = <<"xmlns">>}]}).
-
--xml(sm_enable,
-     #elem{name = <<"enable">>,
-          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-          result = {sm_enable, '$max', '$resume', '$xmlns'},
-          attrs = [#attr{name = <<"max">>,
-                         dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                   #attr{name = <<"xmlns">>},
-                   #attr{name = <<"resume">>,
-                         default = false,
-                         dec = {dec_bool, []},
-                          enc = {enc_bool, []}}]}).
-
--xml(sm_enabled,
-     #elem{name = <<"enabled">>,
-          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-          result = {sm_enabled, '$id', '$location', '$max', '$resume', '$xmlns'},
-          attrs = [#attr{name = <<"id">>},
-                   #attr{name = <<"location">>},
-                   #attr{name = <<"xmlns">>},
-                   #attr{name = <<"max">>,
-                         dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                   #attr{name = <<"resume">>,
-                         default = false,
-                         dec = {dec_bool, []},
-                          enc = {enc_bool, []}}]}).
-
--xml(sm_resume,
-     #elem{name = <<"resume">>,
-          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-          result = {sm_resume, '$h', '$previd', '$xmlns'},
-          attrs = [#attr{name = <<"h">>,
-                         required = true,
-                         dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                   #attr{name = <<"xmlns">>},
-                   #attr{name = <<"previd">>,
-                         required = true}]}).
-
--xml(sm_resumed,
-     #elem{name = <<"resumed">>,
-          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-          result = {sm_resumed, '$h', '$previd', '$xmlns'},
-          attrs = [#attr{name = <<"h">>,
-                         required = true,
-                         dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                   #attr{name = <<"xmlns">>},
-                   #attr{name = <<"previd">>,
-                         required = true}]}).
-
--xml(sm_r,
-     #elem{name = <<"r">>,
-          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-          result = {sm_r, '$xmlns'},
-          attrs = [#attr{name = <<"xmlns">>}]}).
-
--xml(sm_a,
-     #elem{name = <<"a">>,
-          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-          result = {sm_a, '$h', '$xmlns'},
-          attrs = [#attr{name = <<"h">>,
-                         required = true,
-                         dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                   #attr{name = <<"xmlns">>}]}).
-
--xml(sm_failed,
-     #elem{name = <<"failed">>,
-          xmlns = [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-          result = {sm_failed, '$reason', '$h', '$xmlns'},
-          attrs = [#attr{name = <<"h">>,
-                         dec = {dec_int, [0, infinity]},
-                         enc = {enc_int, []}},
-                   #attr{name = <<"xmlns">>}],
-          refs = [#ref{name = error_bad_request,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_conflict,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_feature_not_implemented,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_forbidden,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_gone,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_internal_server_error,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_item_not_found,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_jid_malformed,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_not_acceptable,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_not_allowed,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_not_authorized,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_policy_violation,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_recipient_unavailable,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_redirect,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_registration_required,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_remote_server_not_found,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_remote_server_timeout,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_resource_constraint,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_service_unavailable,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_subscription_required,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_undefined_condition,
-                        min = 0, max = 1, label = '$reason'},
-                   #ref{name = error_unexpected_request,
-                        min = 0, max = 1, label = '$reason'}]}).
-
--xml(offline_purge,
-     #elem{name = <<"purge">>,
-          xmlns = <<"http://jabber.org/protocol/offline">>,
-          result = true}).
-
--xml(offline_fetch,
-     #elem{name = <<"fetch">>,
-          xmlns = <<"http://jabber.org/protocol/offline">>,
-          result = true}).
-
--xml(offline_item,
-     #elem{name = <<"item">>,
-          xmlns = <<"http://jabber.org/protocol/offline">>,
-          result = {offline_item, '$node', '$action'},
-          attrs = [#attr{name = <<"node">>},
-                   #attr{name = <<"action">>,
-                         dec = {dec_enum, [[view, remove]]},
-                          enc = {enc_enum, []}}]}).
-
--xml(offline,
-     #elem{name = <<"offline">>,
-          xmlns = <<"http://jabber.org/protocol/offline">>,
-          result = {offline, '$items', '$purge', '$fetch'},
-          refs = [#ref{name = offline_purge, min = 0, max = 1,
-                       label = '$purge', default = false},
-                  #ref{name = offline_fetch, min = 0, max = 1,
-                       label = '$fetch', default = false},
-                  #ref{name = offline_item, min = 0, label = '$items'}]}).
-
--xml(mix_subscribe,
-     #elem{name = <<"subscribe">>,
-          xmlns = <<"urn:xmpp:mix:0">>,
-          result = '$node',
-          attrs = [#attr{name = <<"node">>,
-                         required = true,
-                         label = '$node'}]}).
-
--xml(mix_join,
-     #elem{name = <<"join">>,
-          xmlns = <<"urn:xmpp:mix:0">>,
-          result = {mix_join, '$jid', '$subscribe'},
-          attrs = [#attr{name = <<"jid">>,
-                         label = '$jid',
-                         dec = {dec_jid, []},
-                          enc = {enc_jid, []}}],
-          refs = [#ref{name = mix_subscribe, min = 0, label = '$subscribe'}]}).
-
--xml(mix_leave,
-     #elem{name = <<"leave">>,
-          xmlns = <<"urn:xmpp:mix:0">>,
-          result = {mix_leave}}).
-
--xml(mix_participant,
-     #elem{name = <<"participant">>,
-          xmlns = <<"urn:xmpp:mix:0">>,
-          result = {mix_participant, '$jid', '$nick'},
-          attrs = [#attr{name = <<"jid">>,
-                         required = true,
-                         label = '$jid',
-                         dec = {dec_jid, []},
-                          enc = {enc_jid, []}},
-                   #attr{name = <<"nick">>,
-                         label = '$nick'}]}).
-
--record(hint, {type :: 'no-copy' | 'no-store' | 'no-storage' | 'store' |
-                      'no-permanent-store' | 'no-permanent-storage'}).
--type hint() :: #hint{}.
-
--xml(hint_no_copy,
-     #elem{name = <<"no-copy">>,
-          xmlns = <<"urn:xmpp:hints">>,
-          result = {hint, 'no-copy'}}).
-
--xml(hint_no_store,
-     #elem{name = <<"no-store">>,
-          xmlns = <<"urn:xmpp:hints">>,
-          result = {hint, 'no-store'}}).
-
--xml(hint_no_storage,
-     #elem{name = <<"no-storage">>,
-          xmlns = <<"urn:xmpp:hints">>,
-          result = {hint, 'no-storage'}}).
-
--xml(hint_store,
-     #elem{name = <<"store">>,
-          xmlns = <<"urn:xmpp:hints">>,
-          result = {hint, 'store'}}).
-
--xml(hint_no_permanent_store,
-     #elem{name = <<"no-permanent-store">>,
-          xmlns = <<"urn:xmpp:hints">>,
-          result = {hint, 'no-permanent-store'}}).
-
--xml(hint_no_permanent_storage,
-     #elem{name = <<"no-permanent-storage">>,
-          xmlns = <<"urn:xmpp:hints">>,
-          result = {hint, 'no-permanent-storage'}}).
-
--xml(search_instructions,
-     #elem{name = <<"instructions">>,
-           xmlns = <<"jabber:iq:search">>,
-           result = '$cdata'}).
-
--xml(search_first,
-     #elem{name = <<"first">>,
-          xmlns = <<"jabber:iq:search">>,
-          cdata = #cdata{default = <<"">>},
-           result = '$cdata'}).
--xml(search_last,
-     #elem{name = <<"last">>,
-           xmlns = <<"jabber:iq:search">>,
-           cdata = #cdata{default = <<"">>},
-           result = '$cdata'}).
--xml(search_nick,
-     #elem{name = <<"nick">>,
-           xmlns = <<"jabber:iq:search">>,
-           cdata = #cdata{default = <<"">>},
-           result = '$cdata'}).
--xml(search_email,
-     #elem{name = <<"email">>,
-           xmlns = <<"jabber:iq:search">>,
-           cdata = #cdata{default = <<"">>},
-           result = '$cdata'}).
-
--xml(search_item,
-     #elem{name = <<"item">>,
-          xmlns = <<"jabber:iq:search">>,
-          result = {search_item, '$jid', '$first', '$last', '$nick', '$email'},
-          attrs = [#attr{name = <<"jid">>,
-                         required = true,
-                         enc = {enc_jid, []},
-                         dec = {dec_jid, []}}],
-          refs = [#ref{name = search_first, min = 0, max = 1,
-                       label = '$first'},
-                  #ref{name = search_last, min = 0, max = 1,
-                       label = '$last'},
-                  #ref{name = search_nick, min = 0, max = 1,
-                       label = '$nick'},
-                  #ref{name = search_email, min = 0, max = 1,
-                       label = '$email'}]}).
-
--xml(search,
-     #elem{name = <<"query">>,
-          xmlns = <<"jabber:iq:search">>,
-          result = {search, '$instructions', '$first', '$last',
-                    '$nick', '$email', '$items', '$xdata'},
-          refs = [#ref{name = search_instructions, min = 0, max = 1,
-                        label = '$instructions'},
-                  #ref{name = search_first, min = 0, max = 1,
-                       label = '$first'},
-                  #ref{name = search_last, min = 0, max = 1,
-                       label = '$last'},
-                  #ref{name = search_nick, min = 0, max = 1,
-                       label = '$nick'},
-                  #ref{name = search_email, min = 0, max = 1,
-                       label = '$email'},
-                  #ref{name = search_item, label = '$items'},
-                  #ref{name = xdata, min = 0, max = 1,
-                       label = '$xdata'}]}).
-
--xml(xevent_offline,
-     #elem{name = <<"offline">>,
-          xmlns = <<"jabber:x:event">>,
-          result = true}).
--xml(xevent_delivered,
-     #elem{name = <<"delivered">>,
-          xmlns = <<"jabber:x:event">>,
-          result = true}).
--xml(xevent_displayed,
-     #elem{name = <<"displayed">>,
-          xmlns = <<"jabber:x:event">>,
-          result = true}).
--xml(xevent_composing,
-     #elem{name = <<"composing">>,
-          xmlns = <<"jabber:x:event">>,
-          result = true}).
--xml(xevent_id,
-     #elem{name = <<"id">>,
-          xmlns = <<"jabber:x:event">>,
-          cdata = #cdata{},
-           result = '$cdata'}).
-
--xml(xevent,
-     #elem{name = <<"x">>,
-          xmlns = <<"jabber:x:event">>,
-          result = {xevent, '$offline', '$delivered', '$displayed',
-                    '$composing', '$id'},
-          refs = [#ref{name = xevent_offline, min = 0, max = 1,
-                       label = '$offline', default = false},
-                  #ref{name = xevent_delivered, min = 0, max = 1,
-                       label = '$delivered', default = false},
-                  #ref{name = xevent_displayed, min = 0, max = 1,
-                       label = '$displayed', default = false},
-                  #ref{name = xevent_composing, min = 0, max = 1,
-                       label = '$composing', default = false},
-                  #ref{name = xevent_id, min = 0, max = 1,
-                       label = '$id'}]}).
-
--xml(expire,
-     #elem{name = <<"x">>,
-          xmlns = <<"jabber:x:expire">>,
-          result = {expire, '$seconds', '$stored'},
-          attrs = [#attr{name = <<"seconds">>,
-                         required = true,
-                         dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}},
-                   #attr{name = <<"stored">>,
-                         dec = {dec_int, [0, infinity]},
-                          enc = {enc_int, []}}]}).
-
--xml(nick,
-     #elem{name = <<"nick">>,
-          xmlns = <<"http://jabber.org/protocol/nick">>,
-          result = {nick, '$name'},
-          cdata = #cdata{label = '$name',
-                         required = true}}).
-
--xml(address,
-     #elem{name = <<"address">>,
-          xmlns = <<"http://jabber.org/protocol/address">>,
-          result = {address, '$type', '$jid', '$desc', '$node', '$delivered'},
-          attrs = [#attr{name = <<"type">>,
-                         required = true,
-                         dec = {dec_enum, [[bcc, cc, noreply, ofrom,
-                                            replyroom, replyto, to]]},
-                         enc = {enc_enum, []}},
-                   #attr{name = <<"jid">>,
-                         enc = {enc_jid, []},
-                         dec = {dec_jid, []}},
-                   #attr{name = <<"desc">>},
-                   #attr{name = <<"node">>},
-                   #attr{name = <<"delivered">>,
-                         enc = {enc_bool, []},
-                         dec = {dec_bool, []}}]}).
-
--xml(addresses,
-     #elem{name = <<"addresses">>,
-          xmlns = <<"http://jabber.org/protocol/address">>,
-          result = {addresses, '$list'},
-          %% TODO: 'min' should be '1', but this is not implemented
-          refs = [#ref{name = address, label = '$list'}]}).
-
--xml(stanza_id,
-     #elem{name = <<"stanza-id">>,
-          xmlns = <<"urn:xmpp:sid:0">>,
-          result = {stanza_id, '$by', '$id'},
-          attrs = [#attr{name = <<"id">>, required = true},
-                   #attr{name = <<"by">>, required = true,
-                         enc = {enc_jid, []},
-                         dec = {dec_jid, []}}]}).
-
--xml(client_id,
-     #elem{name = <<"client-id">>,
-          xmlns = <<"urn:xmpp:sid:0">>,
-          result = {client_id, '$id'},
-          attrs = [#attr{name = <<"id">>, required = true}]}).
-
--xml(adhoc_command_prev,
-     #elem{name = <<"prev">>,
-          xmlns = <<"http://jabber.org/protocol/commands">>,
-          result = true}).
--xml(adhoc_command_next,
-     #elem{name = <<"next">>,
-          xmlns = <<"http://jabber.org/protocol/commands">>,
-          result = true}).
--xml(adhoc_command_complete,
-     #elem{name = <<"complete">>,
-          xmlns = <<"http://jabber.org/protocol/commands">>,
-          result = true}).
-
--xml(adhoc_command_actions,
-     #elem{name = <<"actions">>,
-          xmlns = <<"http://jabber.org/protocol/commands">>,
-          result = {adhoc_actions, '$execute', '$prev', '$next', '$complete'},
-          attrs = [#attr{name = <<"execute">>,
-                         dec = {dec_enum, [[complete, next, prev]]},
-                         enc = {enc_enum, []}}],
-          refs = [#ref{name = adhoc_command_prev, min = 0, max = 1,
-                       default = false, label = '$prev'},
-                  #ref{name = adhoc_command_next, min = 0, max = 1,
-                       default = false, label = '$next'},
-                  #ref{name = adhoc_command_complete, min = 0, max = 1,
-                       default = false, label = '$complete'}]}).
-
--xml(adhoc_command_notes,
-     #elem{name = <<"note">>,
-          xmlns = <<"http://jabber.org/protocol/commands">>,
-          result = {adhoc_note, '$type', '$data'},
-          attrs = [#attr{name = <<"type">>, default = info,
-                         dec = {dec_enum, [[info, warn, error]]},
-                         enc = {enc_enum, []}}],
-          cdata = #cdata{default = <<"">>, label = '$data'}}).
-
--xml(adhoc_command,
-     #elem{name = <<"command">>,
-          xmlns = <<"http://jabber.org/protocol/commands">>,
-          result = {adhoc_command, '$node', '$action', '$sid',
-                    '$status', '$lang', '$actions', '$notes', '$xdata'},
-          attrs = [#attr{name = <<"node">>, required = true},
-                   #attr{name = <<"xml:lang">>, label = '$lang'},
-                   #attr{name = <<"sessionid">>, label = '$sid'},
-                   #attr{name = <<"status">>,
-                         dec = {dec_enum, [[canceled, completed, executing]]},
-                         enc = {enc_enum, []}},
-                   #attr{name = <<"action">>, default = execute,
-                         dec = {dec_enum, [[cancel, complete,
-                                            execute, next, prev]]},
-                         enc = {enc_enum, []}}],
-          refs = [#ref{name = adhoc_command_actions, min = 0, max = 1,
-                       label = '$actions'},
-                  #ref{name = xdata, min = 0, max = 1},
-                  #ref{name = adhoc_command_notes, label = '$notes'}]}).
-
--xml(db_result,
-     #elem{name = <<"db:result">>,
-          xmlns = <<"jabber:server">>,
-          result = {db_result, '$from', '$to', '$type', '$key', '$_els'},
-          cdata = #cdata{default = <<"">>, label = '$key'},
-          attrs = [#attr{name = <<"from">>, required = true,
-                         dec = {nameprep, []}, enc = {nameprep, []}},
-                   #attr{name = <<"to">>, required = true,
-                         dec = {nameprep, []}, enc = {nameprep, []}},
-                   #attr{name = <<"type">>,
-                         dec = {dec_enum, [[valid, invalid, error]]},
-                         enc = {enc_enum, []}}]}).
-
--xml(db_verify,
-     #elem{name = <<"db:verify">>,
-          xmlns = <<"jabber:server">>,
-          result = {db_verify, '$from', '$to', '$id', '$type', '$key', '$_els'},
-          cdata = #cdata{default = <<"">>, label = '$key'},
-          attrs = [#attr{name = <<"from">>, required = true,
-                         dec = {nameprep, []}, enc = {nameprep, []}},
-                   #attr{name = <<"to">>, required = true,
-                         dec = {nameprep, []}, enc = {nameprep, []}},
-                   #attr{name = <<"id">>, required = true},
-                   #attr{name = <<"type">>,
-                         dec = {dec_enum, [[valid, invalid, error]]},
-                         enc = {enc_enum, []}}]}).
-
--xml(handshake,
-     #elem{name = <<"handshake">>,
-          xmlns = <<"jabber:component:accept">>,
-          result = {handshake, '$data'},
-          cdata = #cdata{default = <<"">>, label = '$data'}}).
-
--xml(stream_start,
-     #elem{name = <<"stream:stream">>,
-          xmlns = [<<"jabber:client">>, <<"jabber:server">>,
-                   <<"jabber:component:accept">>],
-          result = {stream_start, '$from', '$to', '$id',
-                    '$version', '$xmlns', '$stream_xmlns',
-                    '$db_xmlns', '$lang'},
-          attrs = [#attr{name = <<"from">>,
-                         dec = {dec_jid, []},
-                         enc = {enc_jid, []}},
-                   #attr{name = <<"to">>,
-                         dec = {dec_jid, []},
-                         enc = {enc_jid, []}},
-                   #attr{name = <<"xmlns">>},
-                   #attr{name = <<"xmlns:stream">>,
-                         label = '$stream_xmlns',
-                         default = <<"">>},
-                   #attr{name = <<"xmlns:db">>,
-                         label = '$db_xmlns',
-                         default = <<"">>},
-                   #attr{name = <<"xml:lang">>, label = '$lang',
-                         default = <<"">>},
-                   #attr{name = <<"version">>,
-                         dec = {dec_version, []},
-                         enc = {enc_version, []}},
-                   #attr{name = <<"id">>, default = <<"">>}]}).
-
--xml(bob_data,
-     #elem{name = <<"data">>,
-          xmlns = <<"urn:xmpp:bob">>,
-          result = {bob_data, '$cid', '$max-age', '$type', '$data'},
-          attrs = [#attr{name = <<"cid">>, required = true},
-                   #attr{name = <<"max-age">>,
-                         dec = {dec_int, [0, infinity]},
-                         enc = {enc_int, []}},
-                   #attr{name = <<"type">>}],
-          cdata = #cdata{label = '$data', default = <<"">>,
-                         dec = {base64, decode, []},
-                         enc = {base64, encode, []}}}).
-
--xml(captcha,
-     #elem{name = <<"captcha">>,
-          xmlns = <<"urn:xmpp:captcha">>,
-          result = {xcaptcha, '$xdata'},
-          refs = [#ref{name = xdata, min = 1, max = 1}]}).
-
--xml(media_uri,
-     #elem{name = <<"uri">>,
-          xmlns = <<"urn:xmpp:media-element">>,
-          result = {media_uri, '$type', '$uri'},
-          attrs = [#attr{name = <<"type">>, required = true}],
-          cdata = #cdata{label = '$uri', default = <<"">>}}).
-
--xml(media,
-     #elem{name = <<"media">>,
-          xmlns = <<"urn:xmpp:media-element">>,
-          result = {media, '$height', '$width', '$uri'},
-          attrs = [#attr{name = <<"height">>,
-                         dec = {dec_int, [0, infinity]},
-                         enc = {enc_int, []}},
-                   #attr{name = <<"width">>,
-                         dec = {dec_int, [0, inifinity]},
-                         enc = {enc_int, []}}],
-          refs = [#ref{name = media_uri, label = '$uri'}]}).
-
--xml(oob_url,
-     #elem{name = <<"url">>,
-          xmlns = <<"jabber:x:oob">>,
-          result = '$cdata',
-          cdata = #cdata{required = true}}).
-
--xml(oob_desc,
-     #elem{name = <<"desc">>,
-          xmlns = <<"jabber:x:oob">>,
-          result = '$cdata',
-          cdata = #cdata{default = <<"">>}}).
-
--xml(oob_x,
-     #elem{name = <<"x">>,
-          xmlns = <<"jabber:x:oob">>,
-          result = {oob_x, '$url', '$desc', '$sid'},
-          attrs = [#attr{name = <<"sid">>, default = <<"">>}],
-          refs = [#ref{name = oob_url, min = 1, max = 1,
-                       label = '$url'},
-                  #ref{name = oob_desc, default = <<"">>,
-                       min = 0, max = 1, label = '$desc'}]}).
-
--xml(sic_ip,
-     #elem{name = <<"ip">>,
-          xmlns = [<<"urn:xmpp:sic:0">>, <<"urn:xmpp:sic:1">>],
-          result = '$cdata',
-          cdata = #cdata{required = true,
-                         dec = {dec_ip, []},
-                         enc = {enc_ip, []}}}).
-
--xml(sip_port,
-     #elem{name = <<"port">>,
-          xmlns = <<"urn:xmpp:sic:1">>,
-          result = '$cdata',
-          cdata = #cdata{required = true,
-                         dec = {dec_int, [0, 65535]},
-                         enc = {enc_int, []}}}).
-
--xml(sic,
-     #elem{name = <<"address">>,
-          xmlns = [<<"urn:xmpp:sic:0">>, <<"urn:xmpp:sic:1">>],
-          result = {sic, '$ip', '$port', '$xmlns'},
-          attrs = [#attr{name = <<"xmlns">>}],
-          refs = [#ref{name = sic_ip, min = 0, max = 1, label = '$ip'},
-                  #ref{name = sip_port, min = 0, max = 1, label = '$port'}]}).
-
--xml(upload_filename,
-     #elem{name = <<"filename">>,
-          xmlns = [<<"urn:xmpp:http:upload">>,
-                   <<"eu:siacs:conversations:http:upload">>],
-          result = '$cdata',
-          cdata = #cdata{required = true}}).
-
--xml(upload_size,
-     #elem{name = <<"size">>,
-          xmlns = [<<"urn:xmpp:http:upload">>,
-                   <<"eu:siacs:conversations:http:upload">>],
-          result = '$cdata',
-          cdata = #cdata{required = true,
-                         dec = {dec_int, [0, infinity]},
-                         enc = {enc_int, []}}}).
-
--xml(upload_content_type,
-     #elem{name = <<"content-type">>,
-          xmlns = [<<"urn:xmpp:http:upload">>,
-                   <<"eu:siacs:conversations:http:upload">>],
-          result = '$cdata',
-          cdata = #cdata{default = <<"">>}}).
-
--xml(upload_request,
-     #elem{name = <<"request">>,
-          xmlns = [<<"urn:xmpp:http:upload">>,
-                   <<"eu:siacs:conversations:http:upload">>],
-          result = {upload_request, '$filename', '$size',
-                    '$content-type', '$xmlns'},
-          attrs = [#attr{name = <<"xmlns">>}],
-          refs = [#ref{name = upload_filename, label = '$filename',
-                       min = 1, max = 1},
-                  #ref{name = upload_size, label = '$size', min = 1, max = 1},
-                  #ref{name = upload_content_type, label = '$content-type',
-                       min = 0, max = 1, default = <<"">>}]}).
-
--xml(upload_get,
-     #elem{name = <<"get">>,
-          xmlns = [<<"urn:xmpp:http:upload">>,
-                   <<"eu:siacs:conversations:http:upload">>],
-          result = '$cdata',
-          cdata = #cdata{required = true}}).
-
--xml(upload_put,
-     #elem{name = <<"put">>,
-          xmlns = [<<"urn:xmpp:http:upload">>,
-                   <<"eu:siacs:conversations:http:upload">>],
-          result = '$cdata',
-          cdata = #cdata{required = true}}).
-
--xml(upload_slot,
-     #elem{name = <<"slot">>,
-          xmlns = [<<"urn:xmpp:http:upload">>,
-                   <<"eu:siacs:conversations:http:upload">>],
-          result = {upload_slot, '$get', '$put', '$xmlns'},
-          attrs = [#attr{name = <<"xmlns">>}],
-          refs = [#ref{name = upload_get, min = 0, max = 1, label = '$get'},
-                  #ref{name = upload_put, min = 0, max = 1, label = '$put'}]}).
-
--xml(thumbnail,
-     #elem{name = <<"thumbnail">>,
-          xmlns = <<"urn:xmpp:thumbs:1">>,
-          result = {thumbnail, '$uri', '$media-type', '$width', '$height'},
-          attrs = [#attr{name = <<"uri">>, required = true},
-                   #attr{name = <<"media-type">>, default = <<"">>},
-                   #attr{name = <<"width">>,
-                         dec = {dec_int, [0, infinity]},
-                         enc = {enc_int, []}},
-                   #attr{name = <<"height">>,
-                         dec = {dec_int, [0, infinity]},
-                         enc = {enc_int, []}}]}).
-
--xml(privilege_perm,
-     #elem{name = <<"perm">>,
-          xmlns = <<"urn:xmpp:privilege:1">>,
-          result = {privilege_perm, '$access', '$type'},
-          attrs = [#attr{name = <<"access">>,
-                         required = true,
-                         dec = {dec_enum, [[roster, message, presence]]},
-                         enc = {enc_enum, []}},
-                   #attr{name = <<"type">>,
-                         required = true,
-                         dec = {dec_enum, [[none, get, set, both,
-                                            outgoing, roster,
-                                            managed_entity]]},
-                         enc = {enc_enum, []}}]}).
-
--xml(privilege,
-     #elem{name = <<"privilege">>,
-          xmlns = <<"urn:xmpp:privilege:1">>,
-          result = {privilege, '$perms', '$forwarded'},
-          refs = [#ref{name = privilege_perm, label = '$perms'},
-                  #ref{name = forwarded, min = 0,
-                        max = 1, label = '$forwarded'}]}).
-
--xml(delegated_attribute,
-     #elem{name = <<"attribute">>,
-          xmlns = <<"urn:xmpp:delegation:1">>,
-          result = '$name',
-          attrs = [#attr{name = <<"name">>,
-                         required = true}]}).
-
--xml(delegated,
-     #elem{name = <<"delegated">>,
-          xmlns = <<"urn:xmpp:delegation:1">>,
-          result = {delegated, '$ns', '$attrs'},
-          attrs = [#attr{name = <<"namespace">>,
-                         label = '$ns',
-                         required = true}],
-          refs = [#ref{name = delegated_attribute,
-                       label = '$attrs'}]}).
-
--xml(delegation,
-     #elem{name = <<"delegation">>,
-          xmlns = <<"urn:xmpp:delegation:1">>,
-          result = {delegation, '$delegated', '$forwarded'},
-          refs = [#ref{name = delegated, label = '$delegated'},
-                  #ref{name = forwarded, min = 0,
-                       max = 1, label = '$forwarded'}]}).
-
--xml(delegate,
-     #elem{name = <<"delegate">>,
-          xmlns = <<"urn:xmpp:delegation:1">>,
-          result = '$namespace',
-          attrs = [#attr{name = <<"namespace">>,
-                         required = true}]}).
-
--xml(delegation_query,
-     #elem{name = <<"query">>,
-          xmlns = <<"urn:xmpp:delegation:1">>,
-          result = {delegation_query, '$to', '$delegate'},
-          attrs = [#attr{name = <<"to">>,
-                         required = true,
-                         dec = {dec_jid, []},
-                         enc = {enc_jid, []}}],
-          refs = [#ref{name = delegate, label = '$delegate'}]}).
-
--spec dec_tzo(_) -> {integer(), integer()}.
-dec_tzo(Val) ->
-    [H1, M1] = str:tokens(Val, <<":">>),
-    H = binary_to_integer(H1),
-    M = binary_to_integer(M1),
-    if H >= -12, H =< 12, M >= 0, M < 60  ->
-            {H, M}
-    end.
-
-enc_tzo({H, M}) ->
-    Sign = if H >= 0 ->
-                   <<>>;
-              true ->
-                   <<"-">>
-           end,
-    list_to_binary([Sign, io_lib:format("~2..0w:~2..0w", [H, M])]).
-
--spec dec_utc(_) -> erlang:timestamp().
-dec_utc(Val) ->
-    xmpp_util:decode_timestamp(Val).
-
-enc_utc(Val) ->
-    xmpp_util:encode_timestamp(Val).
-
--spec dec_jid(_) -> jid:jid().
-dec_jid(Val) ->
-    case jid:from_string(Val) of
-        error ->
-            erlang:error(badarg);
-        J ->
-            J
-    end.
-
-enc_jid(J) ->            
-    jid:to_string(J).
-
--spec resourceprep(_) -> binary().
-resourceprep(R) ->
-    case jid:resourceprep(R) of
-        error ->
-            erlang:error(badarg);
-        R1 ->
-            R1
-    end.
-
--spec nameprep(_) -> binary().
-nameprep(S) ->
-    case jid:nameprep(S) of
-       error ->
-           erlang:error(badarg);
-       S1 ->
-           S1
-    end.
-
--spec dec_bool(_) -> boolean().
-dec_bool(<<"false">>) -> false;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"1">>) -> true.
-
-enc_bool(false) -> <<"false">>;
-enc_bool(true) -> <<"true">>.
-
-join([], _Sep) -> <<>>;
-join([H | T], Sep) ->
-    <<H/binary, (<< <<Sep, X/binary>> || X <- T >>)/binary>>.
-
--spec dec_ip(_) -> inet:ip_address().
-dec_ip(S) ->
-    {ok, Addr} = inet_parse:address(binary_to_list(S)),
-    Addr.
-
-enc_ip({0,0,0,0,0,16#ffff,A,B}) ->
-    enc_ip({(A bsr 8) band 16#ff, A band 16#ff,
-           (B bsr 8) band 16#ff, B band 16#ff});
-enc_ip(Addr) ->
-    list_to_binary(inet_parse:ntoa(Addr)).
-
--spec re:split(_, _) -> [binary()].
--spec base64:decode(_) -> binary().
--spec base64:mime_decode(_) -> binary().
-
--spec dec_host_port(_) -> binary() | inet:ip_address() |
-                         {binary() | inet:ip_address(), non_neg_integer()}.
-dec_host_port(<<$[, T/binary>>) ->
-    [IP, <<$:, Port/binary>>] = binary:split(T, <<$]>>),
-    {dec_ip(IP), dec_int(Port, 0, 65535)};
-dec_host_port(S) ->
-    case binary:split(S, <<$:>>) of
-       [S] ->
-           try dec_ip(S) catch _:_ -> S end;
-       [S, P] ->
-           {try dec_ip(S) catch _:_ -> S end, dec_int(P, 0, 65535)}
-    end.
-
-enc_host_port(Host) when is_binary(Host) ->
-    Host;
-enc_host_port({{_,_,_,_,_,_,_,_} = IPv6, Port}) ->
-    enc_host_port({<<$[, (enc_ip(IPv6))/binary, $]>>, Port});
-enc_host_port({{_,_,_,_} = IPv4, Port}) ->
-    enc_host_port({enc_ip(IPv4), Port});
-enc_host_port({Host, Port}) ->
-    <<Host/binary, $:, (integer_to_binary(Port))/binary>>;
-enc_host_port(Addr) ->
-    enc_ip(Addr).
-
--spec dec_version(_) -> {non_neg_integer(), non_neg_integer()}.
-dec_version(S) ->
-    [Major, Minor] = binary:split(S, <<$.>>),
-    {binary_to_integer(Major), binary_to_integer(Minor)}.
-
-enc_version({Maj, Min}) ->
-    <<(integer_to_binary(Maj))/binary, $., (integer_to_binary(Min))/binary>>.
-
--spec dec_ps_aff(_) -> member | none | outcast |
-                      owner | publisher | publish_only.
-dec_ps_aff(<<"member">>) -> member;
-dec_ps_aff(<<"none">>) -> none;
-dec_ps_aff(<<"outcast">>) -> outcast;
-dec_ps_aff(<<"owner">>) -> owner;
-dec_ps_aff(<<"publisher">>) -> publisher;
-dec_ps_aff(<<"publish-only">>) -> publish_only.
-
-enc_ps_aff(member) -> <<"member">>;
-enc_ps_aff(none) -> <<"none">>;
-enc_ps_aff(outcast) -> <<"outcast">>;
-enc_ps_aff(owner) -> <<"owner">>;
-enc_ps_aff(publisher) -> <<"publisher">>;
-enc_ps_aff(publish_only) -> <<"publish-only">>.
-
-%% Local Variables:
-%% mode: erlang
-%% End:
-%% vim: set filetype=erlang tabstop=8:
diff --git a/src/flex_offline.erl b/src/flex_offline.erl
deleted file mode 100644 (file)
index acc5734..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: flex_offline.xdata
-%% Form type: http://jabber.org/protocol/offline
-%% Document: XEP-0013
-
--module(flex_offline).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("flex_offline.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-dec_int(Val, Min, Max) ->
-    case list_to_integer(binary_to_list(Val)) of
-      Int when Int =< Max, Min == infinity -> Int;
-      Int when Int =< Max, Int >= Min -> Int
-    end.
-
-enc_int(Int) -> integer_to_binary(Int).
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, []);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/offline">>]} ->
-         decode(Fs, Acc, []);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/offline">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {number_of_messages, Val} ->
-               [encode_number_of_messages(Val, Translate)];
-           {number_of_messages, _, _} ->
-               erlang:error({badarg, Opt});
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/offline">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"number_of_messages">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_int(Value, 0, infinity) of
-      Result ->
-         decode(Fs, [{number_of_messages, Result} | Acc],
-                lists:delete(<<"number_of_messages">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"number_of_messages">>,
-                        <<"http://jabber.org/protocol/offline">>}})
-    end;
-decode([#xdata_field{var = <<"number_of_messages">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"number_of_messages">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"number_of_messages">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"number_of_messages">>,
-                  <<"http://jabber.org/protocol/offline">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/offline">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/offline">>}});
-decode([], Acc, []) -> Acc.
-
-encode_number_of_messages(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_int(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"number_of_messages">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Number of Offline Messages">>)}.
diff --git a/src/jid.erl b/src/jid.erl
deleted file mode 100644 (file)
index 287a064..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-%%%-------------------------------------------------------------------
-%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%% @doc
-%%%   JID processing library
-%%% @end
-%%% Created : 24 Nov 2015 by Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%%
-%%%
-%%% ejabberd, Copyright (C) 2002-2016   ProcessOne
-%%%
-%%% This program is free software; you can redistribute it and/or
-%%% modify it under the terms of the GNU General Public License as
-%%% published by the Free Software Foundation; either version 2 of the
-%%% License, or (at your option) any later version.
-%%%
-%%% This program is distributed in the hope that it will be useful,
-%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
-%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-%%% General Public License for more details.
-%%%
-%%% You should have received a copy of the GNU General Public License along
-%%% with this program; if not, write to the Free Software Foundation, Inc.,
-%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-%%%
-%%%-------------------------------------------------------------------
--module(jid).
-
-%% API
--export([start/0,
-        make/1,
-        make/2,
-        make/3,
-        split/1,
-        from_string/1,
-        to_string/1,
-        is_nodename/1,
-        nodeprep/1,
-        nameprep/1,
-        resourceprep/1,
-        tolower/1,
-        remove_resource/1,
-        replace_resource/2]).
-
--include("jid.hrl").
-
--export_type([jid/0]).
--export_type([ljid/0]).
-
-%%%===================================================================
-%%% API
-%%%===================================================================
--spec start() -> ok.
-
-start() ->
-    {ok, Owner} = ets_owner(),
-    SplitPattern = binary:compile_pattern([<<"@">>, <<"/">>]),
-    %% Table is public to allow ETS insert to fix / update the table even if table already exist
-    %% with another owner.
-    catch ets:new(jlib, [named_table, public, set, {keypos, 1}, {heir, Owner, undefined}]),
-    ets:insert(jlib, {string_to_jid_pattern, SplitPattern}),
-    ok.
-
-ets_owner() ->
-    case whereis(jlib_ets) of
-        undefined ->
-            Pid = spawn(fun() -> ets_keepalive() end),
-            case catch register(jlib_ets, Pid) of
-                true ->
-                    {ok, Pid};
-                Error -> Error
-            end;
-        Pid ->
-            {ok,Pid}
-    end.
-
-%% Process used to keep jlib ETS table alive in case the original owner dies.
-%% The table need to be public, otherwise subsequent inserts would fail.
-ets_keepalive() ->
-    receive
-        _ ->
-            ets_keepalive()
-    end.
-
--spec make(binary(), binary(), binary()) -> jid() | error.
-
-make(User, Server, Resource) ->
-    case nodeprep(User) of
-      error -> error;
-      LUser ->
-         case nameprep(Server) of
-           error -> error;
-           LServer ->
-               case resourceprep(Resource) of
-                 error -> error;
-                 LResource ->
-                     #jid{user = User, server = Server, resource = Resource,
-                          luser = LUser, lserver = LServer,
-                          lresource = LResource}
-               end
-         end
-    end.
-
--spec make(binary(), binary()) -> jid() | error.
-make(User, Server) ->
-    make(User, Server, <<"">>).
-
--spec make({binary(), binary(), binary()} | binary()) -> jid() | error.
-
-make({User, Server, Resource}) ->
-    make(User, Server, Resource);
-make(Server) ->
-    make(<<"">>, Server, <<"">>).
-
-%% This is the reverse of make_jid/1
--spec split(jid()) -> {binary(), binary(), binary()} | error.
-
-split(#jid{user = U, server = S, resource = R}) ->
-    {U, S, R};
-split(_) ->
-    error.
-
--spec from_string(binary() | string()) -> jid() | error.
-from_string(S) when is_list(S) ->
-    %% We do not accept list because we want to enforce good practice of
-    %% using binaries for string. However, we do not let it crash to avoid
-    %% losing associated ets table.
-    {error, need_jid_as_binary};
-from_string(<<>>) ->
-    error;
-from_string(S) when is_binary(S) ->
-    SplitPattern = ets:lookup_element(jlib, string_to_jid_pattern, 2),
-    Size = size(S),
-    End = Size-1,
-    case binary:match(S, SplitPattern) of
-        {0, _} ->
-            error;
-        {End, _} ->
-            error;
-        {Pos1, _} ->
-            case binary:at(S, Pos1) of
-                $/ ->
-                    make(<<>>,
-                        binary:part(S, 0, Pos1),
-                        binary:part(S, Pos1+1, Size-Pos1-1));
-                _ ->
-                    Pos1N = Pos1+1,
-                    case binary:match(S, SplitPattern, [{scope, {Pos1+1, Size-Pos1-1}}]) of
-                        {End, _} ->
-                            error;
-                        {Pos1N, _} ->
-                            error;
-                        {Pos2, _} ->
-                            case binary:at(S, Pos2) of
-                                $/ ->
-                                    make(binary:part(S, 0, Pos1),
-                                        binary:part(S, Pos1+1, Pos2-Pos1-1),
-                                        binary:part(S, Pos2+1, Size-Pos2-1));
-                                _ -> error
-                            end;
-                        _ ->
-                            make(binary:part(S, 0, Pos1),
-                                binary:part(S, Pos1+1, Size-Pos1-1),
-                                <<>>)
-                    end
-            end;
-        _ ->
-            make(<<>>, S, <<>>)
-    end.
-
--spec to_string(jid() | ljid()) -> binary().
-
-to_string(#jid{user = User, server = Server,
-              resource = Resource}) ->
-    to_string({User, Server, Resource});
-to_string({N, S, R}) ->
-    Node = iolist_to_binary(N),
-    Server = iolist_to_binary(S),
-    Resource = iolist_to_binary(R),
-    S1 = case Node of
-          <<"">> -> <<"">>;
-          _ -> <<Node/binary, "@">>
-        end,
-    S2 = <<S1/binary, Server/binary>>,
-    S3 = case Resource of
-          <<"">> -> S2;
-          _ -> <<S2/binary, "/", Resource/binary>>
-        end,
-    S3.
-
--spec is_nodename(binary()) -> boolean().
-
-is_nodename(Node) ->
-    N = nodeprep(Node),
-    (N /= error) and (N /= <<>>).
-
--define(LOWER(Char),
-       if Char >= $A, Char =< $Z -> Char + 32;
-          true -> Char
-       end).
-
--spec nodeprep(binary()) -> binary() | error.
-
-nodeprep("") -> <<>>;
-nodeprep(S) when byte_size(S) < 1024 ->
-    R = stringprep:nodeprep(S),
-    if byte_size(R) < 1024 -> R;
-       true -> error
-    end;
-nodeprep(_) -> error.
-
--spec nameprep(binary()) -> binary() | error.
-
-nameprep(S) when byte_size(S) < 1024 ->
-    R = stringprep:nameprep(S),
-    if byte_size(R) < 1024 -> R;
-       true -> error
-    end;
-nameprep(_) -> error.
-
--spec resourceprep(binary()) -> binary() | error.
-
-resourceprep(S) when byte_size(S) < 1024 ->
-    R = stringprep:resourceprep(S),
-    if byte_size(R) < 1024 -> R;
-       true -> error
-    end;
-resourceprep(_) -> error.
-
--spec tolower(jid() | ljid()) -> error | ljid().
-
-tolower(#jid{luser = U, lserver = S,
-            lresource = R}) ->
-    {U, S, R};
-tolower({U, S, R}) ->
-    case nodeprep(U) of
-      error -> error;
-      LUser ->
-         case nameprep(S) of
-           error -> error;
-           LServer ->
-               case resourceprep(R) of
-                 error -> error;
-                 LResource -> {LUser, LServer, LResource}
-               end
-         end
-    end.
-
--spec remove_resource(jid()) -> jid();
-                    (ljid()) -> ljid().
-
-remove_resource(#jid{} = JID) ->
-    JID#jid{resource = <<"">>, lresource = <<"">>};
-remove_resource({U, S, _R}) -> {U, S, <<"">>}.
-
--spec replace_resource(jid(), binary()) -> error | jid().
-
-replace_resource(JID, Resource) ->
-    case resourceprep(Resource) of
-      error -> error;
-      LResource ->
-         JID#jid{resource = Resource, lresource = LResource}
-    end.
-
-%%%===================================================================
-%%% Internal functions
-%%%===================================================================
diff --git a/src/mam_query.erl b/src/mam_query.erl
deleted file mode 100644 (file)
index cb5bfe1..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: mam_query.xdata
-%% Form type: urn:xmpp:mam:1
-%% Document: XEP-0313
-
--module(mam_query).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("mam_query.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-enc_jid(J) -> jid:to_string(J).
-
-dec_jid(Val) ->
-    case jid:from_string(Val) of
-      error -> erlang:error(badarg);
-      J -> J
-    end.
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, []);
-      #xdata_field{values = [<<"urn:xmpp:mam:1">>]} ->
-         decode(Fs, Acc, []);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch, <<"urn:xmpp:mam:1">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {with, Val} -> [encode_with(Val, Translate)];
-           {with, _, _} -> erlang:error({badarg, Opt});
-           {start, Val} -> [encode_start(Val, Translate)];
-           {start, _, _} -> erlang:error({badarg, Opt});
-           {'end', Val} -> [encode_end(Val, Translate)];
-           {'end', _, _} -> erlang:error({badarg, Opt});
-           {withtext, Val} -> [encode_withtext(Val, Translate)];
-           {withtext, _, _} -> erlang:error({badarg, Opt});
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden, values = [<<"urn:xmpp:mam:1">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"with">>, values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_jid(Value) of
-      Result ->
-         decode(Fs, [{with, Result} | Acc],
-                lists:delete(<<"with">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"with">>, <<"urn:xmpp:mam:1">>}})
-    end;
-decode([#xdata_field{var = <<"with">>, values = []} = F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"with">>, values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"with">>} | _], _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"with">>, <<"urn:xmpp:mam:1">>}});
-decode([#xdata_field{var = <<"start">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try xmpp_util:decode_timestamp(Value) of
-      Result ->
-         decode(Fs, [{start, Result} | Acc],
-                lists:delete(<<"start">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"start">>, <<"urn:xmpp:mam:1">>}})
-    end;
-decode([#xdata_field{var = <<"start">>, values = []} = F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"start">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"start">>} | _], _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"start">>, <<"urn:xmpp:mam:1">>}});
-decode([#xdata_field{var = <<"end">>, values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try xmpp_util:decode_timestamp(Value) of
-      Result ->
-         decode(Fs, [{'end', Result} | Acc],
-                lists:delete(<<"end">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"end">>, <<"urn:xmpp:mam:1">>}})
-    end;
-decode([#xdata_field{var = <<"end">>, values = []} = F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"end">>, values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"end">>} | _], _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"end">>, <<"urn:xmpp:mam:1">>}});
-decode([#xdata_field{var = <<"withtext">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{withtext, Result} | Acc],
-                lists:delete(<<"withtext">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"withtext">>, <<"urn:xmpp:mam:1">>}})
-    end;
-decode([#xdata_field{var = <<"withtext">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"withtext">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"withtext">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"withtext">>,
-                  <<"urn:xmpp:mam:1">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var, <<"urn:xmpp:mam:1">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var, <<"urn:xmpp:mam:1">>}});
-decode([], Acc, []) -> Acc.
-
-encode_with(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_jid(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"with">>, values = Values,
-                required = false, type = 'jid-single', options = Opts,
-                desc = <<>>, label = Translate(<<"User JID">>)}.
-
-encode_start(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"start">>, values = Values,
-                required = false, type = 'text-single', options = Opts,
-                desc = <<>>,
-                label = Translate(<<"Search from the date">>)}.
-
-encode_end(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"end">>, values = Values,
-                required = false, type = 'text-single', options = Opts,
-                desc = <<>>,
-                label = Translate(<<"Search until the date">>)}.
-
-encode_withtext(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"withtext">>, values = Values,
-                required = false, type = 'text-single', options = Opts,
-                desc = <<>>, label = Translate(<<"Search the text">>)}.
diff --git a/src/muc_register.erl b/src/muc_register.erl
deleted file mode 100644 (file)
index c2b951d..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: muc_register.xdata
-%% Form type: http://jabber.org/protocol/muc#register
-%% Document: XEP-0045
-
--module(muc_register).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("muc_register.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-dec_bool(<<"1">>) -> true;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"false">>) -> false.
-
-enc_bool(true) -> <<"1">>;
-enc_bool(false) -> <<"0">>.
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, [<<"muc#register_roomnick">>]);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/muc#register">>]} ->
-         decode(Fs, Acc, [<<"muc#register_roomnick">>]);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/muc#register">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {allow, Val} -> [encode_allow(Val, Translate)];
-           {allow, _, _} -> erlang:error({badarg, Opt});
-           {email, Val} -> [encode_email(Val, Translate)];
-           {email, _, _} -> erlang:error({badarg, Opt});
-           {faqentry, Val} -> [encode_faqentry(Val, Translate)];
-           {faqentry, _, _} -> erlang:error({badarg, Opt});
-           {first, Val} -> [encode_first(Val, Translate)];
-           {first, _, _} -> erlang:error({badarg, Opt});
-           {last, Val} -> [encode_last(Val, Translate)];
-           {last, _, _} -> erlang:error({badarg, Opt});
-           {roomnick, Val} -> [encode_roomnick(Val, Translate)];
-           {roomnick, _, _} -> erlang:error({badarg, Opt});
-           {url, Val} -> [encode_url(Val, Translate)];
-           {url, _, _} -> erlang:error({badarg, Opt});
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/muc#register">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"muc#register_allow">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{allow, Result} | Acc],
-                lists:delete(<<"muc#register_allow">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#register_allow">>,
-                        <<"http://jabber.org/protocol/muc#register">>}})
-    end;
-decode([#xdata_field{var = <<"muc#register_allow">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#register_allow">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#register_allow">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#register_allow">>,
-                  <<"http://jabber.org/protocol/muc#register">>}});
-decode([#xdata_field{var = <<"muc#register_email">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{email, Result} | Acc],
-                lists:delete(<<"muc#register_email">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#register_email">>,
-                        <<"http://jabber.org/protocol/muc#register">>}})
-    end;
-decode([#xdata_field{var = <<"muc#register_email">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#register_email">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#register_email">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#register_email">>,
-                  <<"http://jabber.org/protocol/muc#register">>}});
-decode([#xdata_field{var = <<"muc#register_faqentry">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [Value || Value <- Values] of
-      Result ->
-         decode(Fs, [{faqentry, Result} | Acc],
-                lists:delete(<<"muc#register_faqentry">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#register_faqentry">>,
-                        <<"http://jabber.org/protocol/muc#register">>}})
-    end;
-decode([#xdata_field{var = <<"muc#register_first">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{first, Result} | Acc],
-                lists:delete(<<"muc#register_first">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#register_first">>,
-                        <<"http://jabber.org/protocol/muc#register">>}})
-    end;
-decode([#xdata_field{var = <<"muc#register_first">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#register_first">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#register_first">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#register_first">>,
-                  <<"http://jabber.org/protocol/muc#register">>}});
-decode([#xdata_field{var = <<"muc#register_last">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{last, Result} | Acc],
-                lists:delete(<<"muc#register_last">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#register_last">>,
-                        <<"http://jabber.org/protocol/muc#register">>}})
-    end;
-decode([#xdata_field{var = <<"muc#register_last">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#register_last">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#register_last">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#register_last">>,
-                  <<"http://jabber.org/protocol/muc#register">>}});
-decode([#xdata_field{var = <<"muc#register_roomnick">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{roomnick, Result} | Acc],
-                lists:delete(<<"muc#register_roomnick">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#register_roomnick">>,
-                        <<"http://jabber.org/protocol/muc#register">>}})
-    end;
-decode([#xdata_field{var = <<"muc#register_roomnick">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#register_roomnick">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#register_roomnick">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#register_roomnick">>,
-                  <<"http://jabber.org/protocol/muc#register">>}});
-decode([#xdata_field{var = <<"muc#register_url">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{url, Result} | Acc],
-                lists:delete(<<"muc#register_url">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#register_url">>,
-                        <<"http://jabber.org/protocol/muc#register">>}})
-    end;
-decode([#xdata_field{var = <<"muc#register_url">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#register_url">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#register_url">>} | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#register_url">>,
-                  <<"http://jabber.org/protocol/muc#register">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/muc#register">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/muc#register">>}});
-decode([], Acc, []) -> Acc.
-
-encode_allow(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#register_allow">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Allow this person to register with the "
-                                "room?">>)}.
-
-encode_email(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#register_email">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Email Address">>)}.
-
-encode_faqentry(Value, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#register_faqentry">>,
-                values = Values, required = false, type = 'text-multi',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"FAQ Entry">>)}.
-
-encode_first(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#register_first">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Given Name">>)}.
-
-encode_last(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#register_last">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Family Name">>)}.
-
-encode_roomnick(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#register_roomnick">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Nickname">>)}.
-
-encode_url(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#register_url">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"A Web Page">>)}.
diff --git a/src/muc_request.erl b/src/muc_request.erl
deleted file mode 100644 (file)
index 2d79ba0..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: muc_request.xdata
-%% Form type: http://jabber.org/protocol/muc#request
-%% Document: XEP-0045
-
--module(muc_request).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("muc_request.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-dec_enum(Val, Enums) ->
-    AtomVal = erlang:binary_to_existing_atom(Val, utf8),
-    case lists:member(AtomVal, Enums) of
-      true -> AtomVal
-    end.
-
-enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
-
-dec_bool(<<"1">>) -> true;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"false">>) -> false.
-
-enc_bool(true) -> <<"1">>;
-enc_bool(false) -> <<"0">>.
-
-enc_jid(J) -> jid:to_string(J).
-
-dec_jid(Val) ->
-    case jid:from_string(Val) of
-      error -> erlang:error(badarg);
-      J -> J
-    end.
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, [<<"muc#role">>]);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/muc#request">>]} ->
-         decode(Fs, Acc, [<<"muc#role">>]);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/muc#request">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {role, Val} -> [encode_role(Val, default, Translate)];
-           {role, Val, Opts} ->
-               [encode_role(Val, Opts, Translate)];
-           {jid, Val} -> [encode_jid(Val, Translate)];
-           {jid, _, _} -> erlang:error({badarg, Opt});
-           {roomnick, Val} -> [encode_roomnick(Val, Translate)];
-           {roomnick, _, _} -> erlang:error({badarg, Opt});
-           {request_allow, Val} ->
-               [encode_request_allow(Val, Translate)];
-           {request_allow, _, _} -> erlang:error({badarg, Opt});
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/muc#request">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"muc#role">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, [participant]) of
-      Result ->
-         decode(Fs, [{role, Result} | Acc],
-                lists:delete(<<"muc#role">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#role">>,
-                        <<"http://jabber.org/protocol/muc#request">>}})
-    end;
-decode([#xdata_field{var = <<"muc#role">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#role">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#role">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#role">>,
-                  <<"http://jabber.org/protocol/muc#request">>}});
-decode([#xdata_field{var = <<"muc#jid">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_jid(Value) of
-      Result ->
-         decode(Fs, [{jid, Result} | Acc],
-                lists:delete(<<"muc#jid">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#jid">>,
-                        <<"http://jabber.org/protocol/muc#request">>}})
-    end;
-decode([#xdata_field{var = <<"muc#jid">>, values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#jid">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#jid">>} | _], _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#jid">>,
-                  <<"http://jabber.org/protocol/muc#request">>}});
-decode([#xdata_field{var = <<"muc#roomnick">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{roomnick, Result} | Acc],
-                lists:delete(<<"muc#roomnick">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomnick">>,
-                        <<"http://jabber.org/protocol/muc#request">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roomnick">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#roomnick">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roomnick">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomnick">>,
-                  <<"http://jabber.org/protocol/muc#request">>}});
-decode([#xdata_field{var = <<"muc#request_allow">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{request_allow, Result} | Acc],
-                lists:delete(<<"muc#request_allow">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#request_allow">>,
-                        <<"http://jabber.org/protocol/muc#request">>}})
-    end;
-decode([#xdata_field{var = <<"muc#request_allow">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#request_allow">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#request_allow">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#request_allow">>,
-                  <<"http://jabber.org/protocol/muc#request">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/muc#request">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/muc#request">>}});
-decode([], Acc, []) -> Acc.
-
-encode_role(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label = Translate(<<"Participant">>),
-                                value = <<"participant">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"muc#role">>, values = Values,
-                required = false, type = 'list-single', options = Opts,
-                desc = <<>>, label = Translate(<<"Requested role">>)}.
-
-encode_jid(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_jid(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#jid">>, values = Values,
-                required = false, type = 'jid-single', options = Opts,
-                desc = <<>>, label = Translate(<<"User JID">>)}.
-
-encode_roomnick(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomnick">>, values = Values,
-                required = false, type = 'text-single', options = Opts,
-                desc = <<>>, label = Translate(<<"Nickname">>)}.
-
-encode_request_allow(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#request_allow">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Grant voice to this person?">>)}.
diff --git a/src/muc_roomconfig.erl b/src/muc_roomconfig.erl
deleted file mode 100644 (file)
index 7d18bab..0000000
+++ /dev/null
@@ -1,1675 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: muc_roomconfig.xdata
-%% Form type: http://jabber.org/protocol/muc#roomconfig
-%% Document: XEP-0045
-
--module(muc_roomconfig).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("muc_roomconfig.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-dec_int(Val, Min, Max) ->
-    case list_to_integer(binary_to_list(Val)) of
-      Int when Int =< Max, Min == infinity -> Int;
-      Int when Int =< Max, Int >= Min -> Int
-    end.
-
-enc_int(Int) -> integer_to_binary(Int).
-
-dec_enum(Val, Enums) ->
-    AtomVal = erlang:binary_to_existing_atom(Val, utf8),
-    case lists:member(AtomVal, Enums) of
-      true -> AtomVal
-    end.
-
-enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
-
-dec_enum_int(Val, Enums, Min, Max) ->
-    try dec_int(Val, Min, Max) catch
-      _:_ -> dec_enum(Val, Enums)
-    end.
-
-enc_enum_int(Int) when is_integer(Int) -> enc_int(Int);
-enc_enum_int(Atom) -> enc_enum(Atom).
-
-dec_bool(<<"1">>) -> true;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"false">>) -> false.
-
-enc_bool(true) -> <<"1">>;
-enc_bool(false) -> <<"0">>.
-
-enc_jid(J) -> jid:to_string(J).
-
-dec_jid(Val) ->
-    case jid:from_string(Val) of
-      error -> erlang:error(badarg);
-      J -> J
-    end.
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, []);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/muc#roomconfig">>]} ->
-         decode(Fs, Acc, []);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {maxhistoryfetch, Val} ->
-               [encode_maxhistoryfetch(Val, Translate)];
-           {maxhistoryfetch, _, _} -> erlang:error({badarg, Opt});
-           {allowpm, Val} ->
-               [encode_allowpm(Val, default, Translate)];
-           {allowpm, Val, Opts} ->
-               [encode_allowpm(Val, Opts, Translate)];
-           {allow_private_messages, Val} ->
-               [encode_allow_private_messages(Val, Translate)];
-           {allow_private_messages, _, _} ->
-               erlang:error({badarg, Opt});
-           {allow_private_messages_from_visitors, Val} ->
-               [encode_allow_private_messages_from_visitors(Val,
-                                                            default,
-                                                            Translate)];
-           {allow_private_messages_from_visitors, Val, Opts} ->
-               [encode_allow_private_messages_from_visitors(Val, Opts,
-                                                            Translate)];
-           {allow_visitor_status, Val} ->
-               [encode_allow_visitor_status(Val, Translate)];
-           {allow_visitor_status, _, _} ->
-               erlang:error({badarg, Opt});
-           {allow_visitor_nickchange, Val} ->
-               [encode_allow_visitor_nickchange(Val, Translate)];
-           {allow_visitor_nickchange, _, _} ->
-               erlang:error({badarg, Opt});
-           {allow_voice_requests, Val} ->
-               [encode_allow_voice_requests(Val, Translate)];
-           {allow_voice_requests, _, _} ->
-               erlang:error({badarg, Opt});
-           {allow_subscription, Val} ->
-               [encode_allow_subscription(Val, Translate)];
-           {allow_subscription, _, _} ->
-               erlang:error({badarg, Opt});
-           {voice_request_min_interval, Val} ->
-               [encode_voice_request_min_interval(Val, Translate)];
-           {voice_request_min_interval, _, _} ->
-               erlang:error({badarg, Opt});
-           {captcha_protected, Val} ->
-               [encode_captcha_protected(Val, Translate)];
-           {captcha_protected, _, _} ->
-               erlang:error({badarg, Opt});
-           {captcha_whitelist, Val} ->
-               [encode_captcha_whitelist(Val, Translate)];
-           {captcha_whitelist, _, _} ->
-               erlang:error({badarg, Opt});
-           {allow_query_users, Val} ->
-               [encode_allow_query_users(Val, Translate)];
-           {allow_query_users, _, _} ->
-               erlang:error({badarg, Opt});
-           {allowinvites, Val} ->
-               [encode_allowinvites(Val, Translate)];
-           {allowinvites, _, _} -> erlang:error({badarg, Opt});
-           {changesubject, Val} ->
-               [encode_changesubject(Val, Translate)];
-           {changesubject, _, _} -> erlang:error({badarg, Opt});
-           {enablelogging, Val} ->
-               [encode_enablelogging(Val, Translate)];
-           {enablelogging, _, _} -> erlang:error({badarg, Opt});
-           {getmemberlist, Val} ->
-               [encode_getmemberlist(Val, default, Translate)];
-           {getmemberlist, Val, Opts} ->
-               [encode_getmemberlist(Val, Opts, Translate)];
-           {lang, Val} -> [encode_lang(Val, Translate)];
-           {lang, _, _} -> erlang:error({badarg, Opt});
-           {pubsub, Val} -> [encode_pubsub(Val, Translate)];
-           {pubsub, _, _} -> erlang:error({badarg, Opt});
-           {maxusers, Val} ->
-               [encode_maxusers(Val, default, Translate)];
-           {maxusers, Val, Opts} ->
-               [encode_maxusers(Val, Opts, Translate)];
-           {membersonly, Val} ->
-               [encode_membersonly(Val, Translate)];
-           {membersonly, _, _} -> erlang:error({badarg, Opt});
-           {moderatedroom, Val} ->
-               [encode_moderatedroom(Val, Translate)];
-           {moderatedroom, _, _} -> erlang:error({badarg, Opt});
-           {members_by_default, Val} ->
-               [encode_members_by_default(Val, Translate)];
-           {members_by_default, _, _} ->
-               erlang:error({badarg, Opt});
-           {passwordprotectedroom, Val} ->
-               [encode_passwordprotectedroom(Val, Translate)];
-           {passwordprotectedroom, _, _} ->
-               erlang:error({badarg, Opt});
-           {persistentroom, Val} ->
-               [encode_persistentroom(Val, Translate)];
-           {persistentroom, _, _} -> erlang:error({badarg, Opt});
-           {presencebroadcast, Val} ->
-               [encode_presencebroadcast(Val, default, Translate)];
-           {presencebroadcast, Val, Opts} ->
-               [encode_presencebroadcast(Val, Opts, Translate)];
-           {publicroom, Val} ->
-               [encode_publicroom(Val, Translate)];
-           {publicroom, _, _} -> erlang:error({badarg, Opt});
-           {public_list, Val} ->
-               [encode_public_list(Val, Translate)];
-           {public_list, _, _} -> erlang:error({badarg, Opt});
-           {roomadmins, Val} ->
-               [encode_roomadmins(Val, Translate)];
-           {roomadmins, _, _} -> erlang:error({badarg, Opt});
-           {roomdesc, Val} -> [encode_roomdesc(Val, Translate)];
-           {roomdesc, _, _} -> erlang:error({badarg, Opt});
-           {roomname, Val} -> [encode_roomname(Val, Translate)];
-           {roomname, _, _} -> erlang:error({badarg, Opt});
-           {roomowners, Val} ->
-               [encode_roomowners(Val, Translate)];
-           {roomowners, _, _} -> erlang:error({badarg, Opt});
-           {roomsecret, Val} ->
-               [encode_roomsecret(Val, Translate)];
-           {roomsecret, _, _} -> erlang:error({badarg, Opt});
-           {whois, Val} -> [encode_whois(Val, default, Translate)];
-           {whois, Val, Opts} ->
-               [encode_whois(Val, Opts, Translate)];
-           {mam, Val} -> [encode_mam(Val, Translate)];
-           {mam, _, _} -> erlang:error({badarg, Opt});
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/muc#roomconfig">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"muc#maxhistoryfetch">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{maxhistoryfetch, Result} | Acc],
-                lists:delete(<<"muc#maxhistoryfetch">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#maxhistoryfetch">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"muc#maxhistoryfetch">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#maxhistoryfetch">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#maxhistoryfetch">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#maxhistoryfetch">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"muc#roomconfig_allowpm">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{allowpm, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_allowpm">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_allowpm">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roomconfig_allowpm">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_allowpm">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roomconfig_allowpm">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_allowpm">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"allow_private_messages">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{allow_private_messages, Result} | Acc],
-                lists:delete(<<"allow_private_messages">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"allow_private_messages">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"allow_private_messages">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"allow_private_messages">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"allow_private_messages">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"allow_private_messages">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"allow_private_messages_from_visitors">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, [nobody, moderators, anyone]) of
-      Result ->
-         decode(Fs,
-                [{allow_private_messages_from_visitors, Result} | Acc],
-                lists:delete(<<"allow_private_messages_from_visitors">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value,
-                        <<"allow_private_messages_from_visitors">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"allow_private_messages_from_visitors">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"allow_private_messages_from_visitors">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"allow_private_messages_from_visitors">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values,
-                  <<"allow_private_messages_from_visitors">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"allow_visitor_status">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{allow_visitor_status, Result} | Acc],
-                lists:delete(<<"allow_visitor_status">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"allow_visitor_status">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"allow_visitor_status">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"allow_visitor_status">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"allow_visitor_status">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"allow_visitor_status">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"allow_visitor_nickchange">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{allow_visitor_nickchange, Result} | Acc],
-                lists:delete(<<"allow_visitor_nickchange">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"allow_visitor_nickchange">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"allow_visitor_nickchange">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"allow_visitor_nickchange">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"allow_visitor_nickchange">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"allow_visitor_nickchange">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"allow_voice_requests">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{allow_voice_requests, Result} | Acc],
-                lists:delete(<<"allow_voice_requests">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"allow_voice_requests">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"allow_voice_requests">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"allow_voice_requests">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"allow_voice_requests">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"allow_voice_requests">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"allow_subscription">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{allow_subscription, Result} | Acc],
-                lists:delete(<<"allow_subscription">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"allow_subscription">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"allow_subscription">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"allow_subscription">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"allow_subscription">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"allow_subscription">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"voice_request_min_interval">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_int(Value, 0, infinity) of
-      Result ->
-         decode(Fs, [{voice_request_min_interval, Result} | Acc],
-                lists:delete(<<"voice_request_min_interval">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"voice_request_min_interval">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"voice_request_min_interval">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"voice_request_min_interval">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"voice_request_min_interval">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"voice_request_min_interval">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"captcha_protected">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{captcha_protected, Result} | Acc],
-                lists:delete(<<"captcha_protected">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"captcha_protected">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"captcha_protected">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"captcha_protected">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"captcha_protected">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"captcha_protected">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"captcha_whitelist">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [dec_jid(Value) || Value <- Values] of
-      Result ->
-         decode(Fs, [{captcha_whitelist, Result} | Acc],
-                lists:delete(<<"captcha_whitelist">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"captcha_whitelist">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"allow_query_users">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{allow_query_users, Result} | Acc],
-                lists:delete(<<"allow_query_users">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"allow_query_users">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"allow_query_users">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"allow_query_users">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"allow_query_users">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"allow_query_users">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_allowinvites">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{allowinvites, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_allowinvites">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_allowinvites">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_allowinvites">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_allowinvites">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_allowinvites">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_allowinvites">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_changesubject">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{changesubject, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_changesubject">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_changesubject">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_changesubject">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_changesubject">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_changesubject">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_changesubject">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_enablelogging">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{enablelogging, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_enablelogging">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_enablelogging">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_enablelogging">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_enablelogging">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_enablelogging">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_enablelogging">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_getmemberlist">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [Value || Value <- Values] of
-      Result ->
-         decode(Fs, [{getmemberlist, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_getmemberlist">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_getmemberlist">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roomconfig_lang">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{lang, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_lang">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_lang">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roomconfig_lang">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#roomconfig_lang">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roomconfig_lang">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_lang">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"muc#roomconfig_pubsub">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{pubsub, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_pubsub">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_pubsub">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roomconfig_pubsub">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#roomconfig_pubsub">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roomconfig_pubsub">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_pubsub">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_maxusers">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum_int(Value, [none], 0, infinity) of
-      Result ->
-         decode(Fs, [{maxusers, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_maxusers">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_maxusers">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_maxusers">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_maxusers">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_maxusers">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_maxusers">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_membersonly">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{membersonly, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_membersonly">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_membersonly">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_membersonly">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_membersonly">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_membersonly">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_membersonly">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_moderatedroom">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{moderatedroom, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_moderatedroom">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_moderatedroom">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_moderatedroom">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_moderatedroom">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_moderatedroom">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_moderatedroom">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"members_by_default">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{members_by_default, Result} | Acc],
-                lists:delete(<<"members_by_default">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"members_by_default">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"members_by_default">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"members_by_default">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"members_by_default">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"members_by_default">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_passwordprotectedroom">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{passwordprotectedroom, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_passwordprotectedroom">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value,
-                        <<"muc#roomconfig_passwordprotectedroom">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_passwordprotectedroom">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_passwordprotectedroom">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_passwordprotectedroom">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values,
-                  <<"muc#roomconfig_passwordprotectedroom">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_persistentroom">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{persistentroom, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_persistentroom">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_persistentroom">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_persistentroom">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_persistentroom">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_persistentroom">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_persistentroom">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_presencebroadcast">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [dec_enum(Value, [moderator, participant, visitor])
-        || Value <- Values]
-    of
-      Result ->
-         decode(Fs, [{presencebroadcast, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_presencebroadcast">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_presencebroadcast">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_publicroom">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{publicroom, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_publicroom">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_publicroom">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_publicroom">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_publicroom">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_publicroom">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_publicroom">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"public_list">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{public_list, Result} | Acc],
-                lists:delete(<<"public_list">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"public_list">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"public_list">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"public_list">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"public_list">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"public_list">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomadmins">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [dec_jid(Value) || Value <- Values] of
-      Result ->
-         decode(Fs, [{roomadmins, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_roomadmins">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_roomadmins">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomdesc">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{roomdesc, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_roomdesc">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_roomdesc">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomdesc">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_roomdesc">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomdesc">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_roomdesc">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomname">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{roomname, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_roomname">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_roomname">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomname">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_roomname">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomname">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_roomname">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomowners">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [dec_jid(Value) || Value <- Values] of
-      Result ->
-         decode(Fs, [{roomowners, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_roomowners">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_roomowners">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomsecret">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{roomsecret, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_roomsecret">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_roomsecret">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomsecret">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roomconfig_roomsecret">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roomconfig_roomsecret">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_roomsecret">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"muc#roomconfig_whois">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, [moderators, anyone]) of
-      Result ->
-         decode(Fs, [{whois, Result} | Acc],
-                lists:delete(<<"muc#roomconfig_whois">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roomconfig_whois">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roomconfig_whois">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#roomconfig_whois">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roomconfig_whois">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roomconfig_whois">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = <<"mam">>, values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{mam, Result} | Acc],
-                lists:delete(<<"mam">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"mam">>,
-                        <<"http://jabber.org/protocol/muc#roomconfig">>}})
-    end;
-decode([#xdata_field{var = <<"mam">>, values = []} = F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"mam">>, values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"mam">>} | _], _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"mam">>,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/muc#roomconfig">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/muc#roomconfig">>}});
-decode([], Acc, []) -> Acc.
-
-encode_maxhistoryfetch(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#maxhistoryfetch">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Maximum Number of History Messages Returned "
-                                "by Room">>)}.
-
-encode_allowpm(Value, Options, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = if Options == default -> [];
-             true ->
-                 [#xdata_option{label = Translate(L), value = V}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"muc#roomconfig_allowpm">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Roles that May Send Private Messages">>)}.
-
-encode_allow_private_messages(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"allow_private_messages">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Allow users to send private messages">>)}.
-
-encode_allow_private_messages_from_visitors(Value,
-                                           Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label = Translate(<<"nobody">>),
-                                value = <<"nobody">>},
-                  #xdata_option{label = Translate(<<"moderators only">>),
-                                value = <<"moderators">>},
-                  #xdata_option{label = Translate(<<"anyone">>),
-                                value = <<"anyone">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var =
-                    <<"allow_private_messages_from_visitors">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Allow visitors to send private messages to">>)}.
-
-encode_allow_visitor_status(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"allow_visitor_status">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Allow visitors to send status text in "
-                                "presence updates">>)}.
-
-encode_allow_visitor_nickchange(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"allow_visitor_nickchange">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Allow visitors to change nickname">>)}.
-
-encode_allow_voice_requests(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"allow_voice_requests">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Allow visitors to send voice requests">>)}.
-
-encode_allow_subscription(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"allow_subscription">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Allow subscription">>)}.
-
-encode_voice_request_min_interval(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_int(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"voice_request_min_interval">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Minimum interval between voice requests "
-                                "(in seconds)">>)}.
-
-encode_captcha_protected(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"captcha_protected">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Make room CAPTCHA protected">>)}.
-
-encode_captcha_whitelist(Value, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [enc_jid(V) || V <- Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"captcha_whitelist">>,
-                values = Values, required = false, type = 'jid-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Exclude Jabber IDs from CAPTCHA challenge">>)}.
-
-encode_allow_query_users(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"allow_query_users">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Allow users to query other users">>)}.
-
-encode_allowinvites(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_allowinvites">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Allow users to send invites">>)}.
-
-encode_changesubject(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_changesubject">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Allow users to change the subject">>)}.
-
-encode_enablelogging(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_enablelogging">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Enable logging">>)}.
-
-encode_getmemberlist(Value, Options, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [Value]
-            end,
-    Opts = if Options == default -> [];
-             true ->
-                 [#xdata_option{label = Translate(L), value = V}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"muc#roomconfig_getmemberlist">>,
-                values = Values, required = false, type = 'list-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Roles and Affiliations that May Retrieve "
-                                "Member List">>)}.
-
-encode_lang(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_lang">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Natural Language for Room Discussions">>)}.
-
-encode_pubsub(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_pubsub">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"XMPP URI of Associated Publish-Subscribe "
-                                "Node">>)}.
-
-encode_maxusers(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum_int(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label = Translate(<<"No limit">>),
-                                value = <<"none">>},
-                  #xdata_option{value = <<"5">>},
-                  #xdata_option{value = <<"10">>},
-                  #xdata_option{value = <<"20">>},
-                  #xdata_option{value = <<"30">>},
-                  #xdata_option{value = <<"50">>},
-                  #xdata_option{value = <<"100">>},
-                  #xdata_option{value = <<"200">>},
-                  #xdata_option{value = <<"500">>},
-                  #xdata_option{value = <<"1000">>},
-                  #xdata_option{value = <<"2000">>},
-                  #xdata_option{value = <<"5000">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum_int(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"muc#roomconfig_maxusers">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Maximum Number of Occupants">>)}.
-
-encode_membersonly(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_membersonly">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Make room members-only">>)}.
-
-encode_moderatedroom(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_moderatedroom">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Make room moderated">>)}.
-
-encode_members_by_default(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"members_by_default">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Default users as participants">>)}.
-
-encode_passwordprotectedroom(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var =
-                    <<"muc#roomconfig_passwordprotectedroom">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Make room password protected">>)}.
-
-encode_persistentroom(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_persistentroom">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Make room persistent">>)}.
-
-encode_presencebroadcast(Value, Options, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [enc_enum(V) || V <- Value]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label = Translate(<<"Moderator">>),
-                                value = <<"moderator">>},
-                  #xdata_option{label = Translate(<<"Participant">>),
-                                value = <<"participant">>},
-                  #xdata_option{label = Translate(<<"Visitor">>),
-                                value = <<"visitor">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var =
-                    <<"muc#roomconfig_presencebroadcast">>,
-                values = Values, required = false, type = 'list-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Roles for which Presence is Broadcasted">>)}.
-
-encode_publicroom(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_publicroom">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Make room public searchable">>)}.
-
-encode_public_list(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"public_list">>, values = Values,
-                required = false, type = boolean, options = Opts,
-                desc = <<>>,
-                label = Translate(<<"Make participants list public">>)}.
-
-encode_roomadmins(Value, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [enc_jid(V) || V <- Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_roomadmins">>,
-                values = Values, required = false, type = 'jid-multi',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Full List of Room Admins">>)}.
-
-encode_roomdesc(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_roomdesc">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Room description">>)}.
-
-encode_roomname(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_roomname">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Room title">>)}.
-
-encode_roomowners(Value, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [enc_jid(V) || V <- Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_roomowners">>,
-                values = Values, required = false, type = 'jid-multi',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Full List of Room Owners">>)}.
-
-encode_roomsecret(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roomconfig_roomsecret">>,
-                values = Values, required = false,
-                type = 'text-private', options = Opts, desc = <<>>,
-                label = Translate(<<"Password">>)}.
-
-encode_whois(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label = Translate(<<"moderators only">>),
-                                value = <<"moderators">>},
-                  #xdata_option{label = Translate(<<"anyone">>),
-                                value = <<"anyone">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"muc#roomconfig_whois">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Present real Jabber IDs to">>)}.
-
-encode_mam(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"mam">>, values = Values,
-                required = false, type = boolean, options = Opts,
-                desc = <<>>,
-                label = Translate(<<"Enable message archiving">>)}.
diff --git a/src/muc_roominfo.erl b/src/muc_roominfo.erl
deleted file mode 100644 (file)
index bd5cb01..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: muc_roominfo.xdata
-%% Form type: http://jabber.org/protocol/muc#roominfo
-%% Document: XEP-0045
-
--module(muc_roominfo).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("muc_roominfo.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-dec_int(Val, Min, Max) ->
-    case list_to_integer(binary_to_list(Val)) of
-      Int when Int =< Max, Min == infinity -> Int;
-      Int when Int =< Max, Int >= Min -> Int
-    end.
-
-enc_int(Int) -> integer_to_binary(Int).
-
-dec_bool(<<"1">>) -> true;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"false">>) -> false.
-
-enc_bool(true) -> <<"1">>;
-enc_bool(false) -> <<"0">>.
-
-enc_jid(J) -> jid:to_string(J).
-
-dec_jid(Val) ->
-    case jid:from_string(Val) of
-      error -> erlang:error(badarg);
-      J -> J
-    end.
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, []);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/muc#roominfo">>]} ->
-         decode(Fs, Acc, []);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {maxhistoryfetch, Val} ->
-               [encode_maxhistoryfetch(Val, Translate)];
-           {maxhistoryfetch, _, _} -> erlang:error({badarg, Opt});
-           {contactjid, Val} ->
-               [encode_contactjid(Val, Translate)];
-           {contactjid, _, _} -> erlang:error({badarg, Opt});
-           {description, Val} ->
-               [encode_description(Val, Translate)];
-           {description, _, _} -> erlang:error({badarg, Opt});
-           {lang, Val} -> [encode_lang(Val, Translate)];
-           {lang, _, _} -> erlang:error({badarg, Opt});
-           {ldapgroup, Val} -> [encode_ldapgroup(Val, Translate)];
-           {ldapgroup, _, _} -> erlang:error({badarg, Opt});
-           {logs, Val} -> [encode_logs(Val, Translate)];
-           {logs, _, _} -> erlang:error({badarg, Opt});
-           {occupants, Val} -> [encode_occupants(Val, Translate)];
-           {occupants, _, _} -> erlang:error({badarg, Opt});
-           {subject, Val} -> [encode_subject(Val, Translate)];
-           {subject, _, _} -> erlang:error({badarg, Opt});
-           {subjectmod, Val} ->
-               [encode_subjectmod(Val, Translate)];
-           {subjectmod, _, _} -> erlang:error({badarg, Opt});
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/muc#roominfo">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"muc#maxhistoryfetch">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_int(Value, 0, infinity) of
-      Result ->
-         decode(Fs, [{maxhistoryfetch, Result} | Acc],
-                lists:delete(<<"muc#maxhistoryfetch">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#maxhistoryfetch">>,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end;
-decode([#xdata_field{var = <<"muc#maxhistoryfetch">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#maxhistoryfetch">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#maxhistoryfetch">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#maxhistoryfetch">>,
-                  <<"http://jabber.org/protocol/muc#roominfo">>}});
-decode([#xdata_field{var =
-                        <<"muc#roominfo_contactjid">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [dec_jid(Value) || Value <- Values] of
-      Result ->
-         decode(Fs, [{contactjid, Result} | Acc],
-                lists:delete(<<"muc#roominfo_contactjid">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roominfo_contactjid">>,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roominfo_description">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{description, Result} | Acc],
-                lists:delete(<<"muc#roominfo_description">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roominfo_description">>,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roominfo_description">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roominfo_description">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roominfo_description">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roominfo_description">>,
-                  <<"http://jabber.org/protocol/muc#roominfo">>}});
-decode([#xdata_field{var = <<"muc#roominfo_lang">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{lang, Result} | Acc],
-                lists:delete(<<"muc#roominfo_lang">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roominfo_lang">>,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roominfo_lang">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#roominfo_lang">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roominfo_lang">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roominfo_lang">>,
-                  <<"http://jabber.org/protocol/muc#roominfo">>}});
-decode([#xdata_field{var = <<"muc#roominfo_ldapgroup">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{ldapgroup, Result} | Acc],
-                lists:delete(<<"muc#roominfo_ldapgroup">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roominfo_ldapgroup">>,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roominfo_ldapgroup">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roominfo_ldapgroup">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roominfo_ldapgroup">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roominfo_ldapgroup">>,
-                  <<"http://jabber.org/protocol/muc#roominfo">>}});
-decode([#xdata_field{var = <<"muc#roominfo_logs">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{logs, Result} | Acc],
-                lists:delete(<<"muc#roominfo_logs">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roominfo_logs">>,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roominfo_logs">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#roominfo_logs">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roominfo_logs">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roominfo_logs">>,
-                  <<"http://jabber.org/protocol/muc#roominfo">>}});
-decode([#xdata_field{var = <<"muc#roominfo_occupants">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_int(Value, 0, infinity) of
-      Result ->
-         decode(Fs, [{occupants, Result} | Acc],
-                lists:delete(<<"muc#roominfo_occupants">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roominfo_occupants">>,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roominfo_occupants">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roominfo_occupants">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roominfo_occupants">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roominfo_occupants">>,
-                  <<"http://jabber.org/protocol/muc#roominfo">>}});
-decode([#xdata_field{var = <<"muc#roominfo_subject">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{subject, Result} | Acc],
-                lists:delete(<<"muc#roominfo_subject">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roominfo_subject">>,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end;
-decode([#xdata_field{var = <<"muc#roominfo_subject">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"muc#roominfo_subject">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"muc#roominfo_subject">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roominfo_subject">>,
-                  <<"http://jabber.org/protocol/muc#roominfo">>}});
-decode([#xdata_field{var =
-                        <<"muc#roominfo_subjectmod">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{subjectmod, Result} | Acc],
-                lists:delete(<<"muc#roominfo_subjectmod">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"muc#roominfo_subjectmod">>,
-                        <<"http://jabber.org/protocol/muc#roominfo">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"muc#roominfo_subjectmod">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"muc#roominfo_subjectmod">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"muc#roominfo_subjectmod">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"muc#roominfo_subjectmod">>,
-                  <<"http://jabber.org/protocol/muc#roominfo">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/muc#roominfo">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/muc#roominfo">>}});
-decode([], Acc, []) -> Acc.
-
-encode_maxhistoryfetch(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_int(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#maxhistoryfetch">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Maximum Number of History Messages Returned "
-                                "by Room">>)}.
-
-encode_contactjid(Value, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [enc_jid(V) || V <- Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roominfo_contactjid">>,
-                values = Values, required = false, type = 'jid-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Contact Addresses (normally, room owner "
-                                "or owners)">>)}.
-
-encode_description(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roominfo_description">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Room description">>)}.
-
-encode_lang(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roominfo_lang">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Natural Language for Room Discussions">>)}.
-
-encode_ldapgroup(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roominfo_ldapgroup">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"An associated LDAP group that defines "
-                                "room membership; this should be an LDAP "
-                                "Distinguished Name according to an implementa"
-                                "tion-specific or deployment-specific "
-                                "definition of a group.">>)}.
-
-encode_logs(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roominfo_logs">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"URL for Archived Discussion Logs">>)}.
-
-encode_occupants(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_int(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roominfo_occupants">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Number of occupants">>)}.
-
-encode_subject(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roominfo_subject">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Current Discussion Topic">>)}.
-
-encode_subjectmod(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"muc#roominfo_subjectmod">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The room subject can be modified by "
-                                "participants">>)}.
diff --git a/src/pubsub_get_pending.erl b/src/pubsub_get_pending.erl
deleted file mode 100644 (file)
index c1f2ba3..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_get_pending.xdata
-%% Form type: http://jabber.org/protocol/pubsub#subscribe_authorization
-%% Document: XEP-0060
-
--module(pubsub_get_pending).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("pubsub_get_pending.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, [<<"pubsub#node">>]);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/pubsub#subscribe_a"
-                         "uthorization">>]} ->
-         decode(Fs, Acc, [<<"pubsub#node">>]);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                          "uthorization">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {node, Val} -> [encode_node(Val, default, Translate)];
-           {node, Val, Opts} ->
-               [encode_node(Val, Opts, Translate)];
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/pubsub#subscribe_a"
-                                  "uthorization">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"pubsub#node">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{node, Result} | Acc],
-                lists:delete(<<"pubsub#node">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#node">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                          "uthorization">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#node">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#node">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#node">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#node">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                    "uthorization">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                           "uthorization">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                    "uthorization">>}});
-decode([], Acc, []) -> Acc.
-
-encode_node(Value, Options, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = if Options == default -> [];
-             true ->
-                 [#xdata_option{label = Translate(L), value = V}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#node">>, values = Values,
-                required = false, type = 'list-single', options = Opts,
-                desc = <<>>,
-                label =
-                    Translate(<<"The NodeID of the relevant node">>)}.
diff --git a/src/pubsub_node_config.erl b/src/pubsub_node_config.erl
deleted file mode 100644 (file)
index e831d6a..0000000
+++ /dev/null
@@ -1,1666 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_node_config.xdata
-%% Form type: http://jabber.org/protocol/pubsub#node_config
-%% Document: XEP-0060
-
--module(pubsub_node_config).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("pubsub_node_config.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-dec_int(Val, Min, Max) ->
-    case list_to_integer(binary_to_list(Val)) of
-      Int when Int =< Max, Min == infinity -> Int;
-      Int when Int =< Max, Int >= Min -> Int
-    end.
-
-enc_int(Int) -> integer_to_binary(Int).
-
-dec_enum(Val, Enums) ->
-    AtomVal = erlang:binary_to_existing_atom(Val, utf8),
-    case lists:member(AtomVal, Enums) of
-      true -> AtomVal
-    end.
-
-enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
-
-dec_bool(<<"1">>) -> true;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"false">>) -> false.
-
-enc_bool(true) -> <<"1">>;
-enc_bool(false) -> <<"0">>.
-
-enc_jid(J) -> jid:to_string(J).
-
-dec_jid(Val) ->
-    case jid:from_string(Val) of
-      error -> erlang:error(badarg);
-      J -> J
-    end.
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, []);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/pubsub#node_config">>]} ->
-         decode(Fs, Acc, []);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {access_model, Val} ->
-               [encode_access_model(Val, default, Translate)];
-           {access_model, Val, Opts} ->
-               [encode_access_model(Val, Opts, Translate)];
-           {body_xslt, Val} -> [encode_body_xslt(Val, Translate)];
-           {body_xslt, _, _} -> erlang:error({badarg, Opt});
-           {children_association_policy, Val} ->
-               [encode_children_association_policy(Val, default,
-                                                   Translate)];
-           {children_association_policy, Val, Opts} ->
-               [encode_children_association_policy(Val, Opts,
-                                                   Translate)];
-           {children_association_whitelist, Val} ->
-               [encode_children_association_whitelist(Val, Translate)];
-           {children_association_whitelist, _, _} ->
-               erlang:error({badarg, Opt});
-           {children, Val} -> [encode_children(Val, Translate)];
-           {children, _, _} -> erlang:error({badarg, Opt});
-           {children_max, Val} ->
-               [encode_children_max(Val, Translate)];
-           {children_max, _, _} -> erlang:error({badarg, Opt});
-           {collection, Val} ->
-               [encode_collection(Val, Translate)];
-           {collection, _, _} -> erlang:error({badarg, Opt});
-           {contact, Val} -> [encode_contact(Val, Translate)];
-           {contact, _, _} -> erlang:error({badarg, Opt});
-           {dataform_xslt, Val} ->
-               [encode_dataform_xslt(Val, Translate)];
-           {dataform_xslt, _, _} -> erlang:error({badarg, Opt});
-           {deliver_notifications, Val} ->
-               [encode_deliver_notifications(Val, Translate)];
-           {deliver_notifications, _, _} ->
-               erlang:error({badarg, Opt});
-           {deliver_payloads, Val} ->
-               [encode_deliver_payloads(Val, Translate)];
-           {deliver_payloads, _, _} -> erlang:error({badarg, Opt});
-           {description, Val} ->
-               [encode_description(Val, Translate)];
-           {description, _, _} -> erlang:error({badarg, Opt});
-           {item_expire, Val} ->
-               [encode_item_expire(Val, Translate)];
-           {item_expire, _, _} -> erlang:error({badarg, Opt});
-           {itemreply, Val} ->
-               [encode_itemreply(Val, default, Translate)];
-           {itemreply, Val, Opts} ->
-               [encode_itemreply(Val, Opts, Translate)];
-           {language, Val} ->
-               [encode_language(Val, default, Translate)];
-           {language, Val, Opts} ->
-               [encode_language(Val, Opts, Translate)];
-           {max_items, Val} -> [encode_max_items(Val, Translate)];
-           {max_items, _, _} -> erlang:error({badarg, Opt});
-           {max_payload_size, Val} ->
-               [encode_max_payload_size(Val, Translate)];
-           {max_payload_size, _, _} -> erlang:error({badarg, Opt});
-           {node_type, Val} ->
-               [encode_node_type(Val, default, Translate)];
-           {node_type, Val, Opts} ->
-               [encode_node_type(Val, Opts, Translate)];
-           {notification_type, Val} ->
-               [encode_notification_type(Val, default, Translate)];
-           {notification_type, Val, Opts} ->
-               [encode_notification_type(Val, Opts, Translate)];
-           {notify_config, Val} ->
-               [encode_notify_config(Val, Translate)];
-           {notify_config, _, _} -> erlang:error({badarg, Opt});
-           {notify_delete, Val} ->
-               [encode_notify_delete(Val, Translate)];
-           {notify_delete, _, _} -> erlang:error({badarg, Opt});
-           {notify_retract, Val} ->
-               [encode_notify_retract(Val, Translate)];
-           {notify_retract, _, _} -> erlang:error({badarg, Opt});
-           {notify_sub, Val} ->
-               [encode_notify_sub(Val, Translate)];
-           {notify_sub, _, _} -> erlang:error({badarg, Opt});
-           {persist_items, Val} ->
-               [encode_persist_items(Val, Translate)];
-           {persist_items, _, _} -> erlang:error({badarg, Opt});
-           {presence_based_delivery, Val} ->
-               [encode_presence_based_delivery(Val, Translate)];
-           {presence_based_delivery, _, _} ->
-               erlang:error({badarg, Opt});
-           {publish_model, Val} ->
-               [encode_publish_model(Val, default, Translate)];
-           {publish_model, Val, Opts} ->
-               [encode_publish_model(Val, Opts, Translate)];
-           {purge_offline, Val} ->
-               [encode_purge_offline(Val, Translate)];
-           {purge_offline, _, _} -> erlang:error({badarg, Opt});
-           {roster_groups_allowed, Val} ->
-               [encode_roster_groups_allowed(Val, default, Translate)];
-           {roster_groups_allowed, Val, Opts} ->
-               [encode_roster_groups_allowed(Val, Opts, Translate)];
-           {send_last_published_item, Val} ->
-               [encode_send_last_published_item(Val, default,
-                                                Translate)];
-           {send_last_published_item, Val, Opts} ->
-               [encode_send_last_published_item(Val, Opts, Translate)];
-           {tempsub, Val} -> [encode_tempsub(Val, Translate)];
-           {tempsub, _, _} -> erlang:error({badarg, Opt});
-           {subscribe, Val} -> [encode_subscribe(Val, Translate)];
-           {subscribe, _, _} -> erlang:error({badarg, Opt});
-           {title, Val} -> [encode_title(Val, Translate)];
-           {title, _, _} -> erlang:error({badarg, Opt});
-           {type, Val} -> [encode_type(Val, Translate)];
-           {type, _, _} -> erlang:error({badarg, Opt});
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/pubsub#node_config">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"pubsub#access_model">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value,
-                [authorize, open, presence, roster, whitelist])
-    of
-      Result ->
-         decode(Fs, [{access_model, Result} | Acc],
-                lists:delete(<<"pubsub#access_model">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#access_model">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#access_model">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#access_model">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#access_model">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#access_model">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#body_xslt">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{body_xslt, Result} | Acc],
-                lists:delete(<<"pubsub#body_xslt">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#body_xslt">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#body_xslt">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#body_xslt">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#body_xslt">>} | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#body_xslt">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#children_association_policy">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, [all, owners, whitelist]) of
-      Result ->
-         decode(Fs,
-                [{children_association_policy, Result} | Acc],
-                lists:delete(<<"pubsub#children_association_policy">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value,
-                        <<"pubsub#children_association_policy">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#children_association_policy">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#children_association_policy">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#children_association_policy">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values,
-                  <<"pubsub#children_association_policy">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#children_association_whitelist">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [dec_jid(Value) || Value <- Values] of
-      Result ->
-         decode(Fs,
-                [{children_association_whitelist, Result} | Acc],
-                lists:delete(<<"pubsub#children_association_whitelist">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value,
-                        <<"pubsub#children_association_whitelist">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#children">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [Value || Value <- Values] of
-      Result ->
-         decode(Fs, [{children, Result} | Acc],
-                lists:delete(<<"pubsub#children">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#children">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#children_max">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{children_max, Result} | Acc],
-                lists:delete(<<"pubsub#children_max">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#children_max">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#children_max">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#children_max">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#children_max">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#children_max">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#collection">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [Value || Value <- Values] of
-      Result ->
-         decode(Fs, [{collection, Result} | Acc],
-                lists:delete(<<"pubsub#collection">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#collection">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#contact">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [dec_jid(Value) || Value <- Values] of
-      Result ->
-         decode(Fs, [{contact, Result} | Acc],
-                lists:delete(<<"pubsub#contact">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#contact">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#dataform_xslt">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{dataform_xslt, Result} | Acc],
-                lists:delete(<<"pubsub#dataform_xslt">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#dataform_xslt">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#dataform_xslt">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#dataform_xslt">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#dataform_xslt">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#dataform_xslt">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#deliver_notifications">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{deliver_notifications, Result} | Acc],
-                lists:delete(<<"pubsub#deliver_notifications">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#deliver_notifications">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#deliver_notifications">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#deliver_notifications">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#deliver_notifications">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#deliver_notifications">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#deliver_payloads">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{deliver_payloads, Result} | Acc],
-                lists:delete(<<"pubsub#deliver_payloads">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#deliver_payloads">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#deliver_payloads">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#deliver_payloads">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#deliver_payloads">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#deliver_payloads">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#description">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{description, Result} | Acc],
-                lists:delete(<<"pubsub#description">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#description">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#description">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#description">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#description">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#description">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#item_expire">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{item_expire, Result} | Acc],
-                lists:delete(<<"pubsub#item_expire">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#item_expire">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#item_expire">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#item_expire">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#item_expire">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#item_expire">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#itemreply">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, [owner, publisher, none]) of
-      Result ->
-         decode(Fs, [{itemreply, Result} | Acc],
-                lists:delete(<<"pubsub#itemreply">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#itemreply">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#itemreply">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#itemreply">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#itemreply">>} | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#itemreply">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#language">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{language, Result} | Acc],
-                lists:delete(<<"pubsub#language">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#language">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#language">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#language">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#language">>} | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#language">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#max_items">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_int(Value, 0, infinity) of
-      Result ->
-         decode(Fs, [{max_items, Result} | Acc],
-                lists:delete(<<"pubsub#max_items">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#max_items">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#max_items">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#max_items">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#max_items">>} | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#max_items">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#max_payload_size">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_int(Value, 0, infinity) of
-      Result ->
-         decode(Fs, [{max_payload_size, Result} | Acc],
-                lists:delete(<<"pubsub#max_payload_size">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#max_payload_size">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#max_payload_size">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#max_payload_size">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#max_payload_size">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#max_payload_size">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#node_type">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, [leaf, collection]) of
-      Result ->
-         decode(Fs, [{node_type, Result} | Acc],
-                lists:delete(<<"pubsub#node_type">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#node_type">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#node_type">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#node_type">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#node_type">>} | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#node_type">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#notification_type">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, [normal, headline]) of
-      Result ->
-         decode(Fs, [{notification_type, Result} | Acc],
-                lists:delete(<<"pubsub#notification_type">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#notification_type">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#notification_type">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#notification_type">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#notification_type">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#notification_type">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#notify_config">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{notify_config, Result} | Acc],
-                lists:delete(<<"pubsub#notify_config">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#notify_config">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#notify_config">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#notify_config">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#notify_config">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#notify_config">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#notify_delete">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{notify_delete, Result} | Acc],
-                lists:delete(<<"pubsub#notify_delete">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#notify_delete">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#notify_delete">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#notify_delete">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#notify_delete">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#notify_delete">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#notify_retract">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{notify_retract, Result} | Acc],
-                lists:delete(<<"pubsub#notify_retract">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#notify_retract">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#notify_retract">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#notify_retract">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#notify_retract">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#notify_retract">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#notify_sub">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{notify_sub, Result} | Acc],
-                lists:delete(<<"pubsub#notify_sub">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#notify_sub">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#notify_sub">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#notify_sub">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#notify_sub">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#notify_sub">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#persist_items">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{persist_items, Result} | Acc],
-                lists:delete(<<"pubsub#persist_items">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#persist_items">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#persist_items">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#persist_items">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#persist_items">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#persist_items">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#presence_based_delivery">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{presence_based_delivery, Result} | Acc],
-                lists:delete(<<"pubsub#presence_based_delivery">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#presence_based_delivery">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#presence_based_delivery">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#presence_based_delivery">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#presence_based_delivery">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#presence_based_delivery">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#publish_model">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, [publishers, subscribers, open]) of
-      Result ->
-         decode(Fs, [{publish_model, Result} | Acc],
-                lists:delete(<<"pubsub#publish_model">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#publish_model">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#publish_model">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#publish_model">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#publish_model">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#publish_model">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#purge_offline">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{purge_offline, Result} | Acc],
-                lists:delete(<<"pubsub#purge_offline">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#purge_offline">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#purge_offline">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#purge_offline">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#purge_offline">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#purge_offline">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#roster_groups_allowed">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [Value || Value <- Values] of
-      Result ->
-         decode(Fs, [{roster_groups_allowed, Result} | Acc],
-                lists:delete(<<"pubsub#roster_groups_allowed">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#roster_groups_allowed">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#send_last_published_item">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value,
-                [never, on_sub, on_sub_and_presence])
-    of
-      Result ->
-         decode(Fs, [{send_last_published_item, Result} | Acc],
-                lists:delete(<<"pubsub#send_last_published_item">>,
-                             Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#send_last_published_item">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#send_last_published_item">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#send_last_published_item">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#send_last_published_item">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#send_last_published_item">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#tempsub">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{tempsub, Result} | Acc],
-                lists:delete(<<"pubsub#tempsub">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#tempsub">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#tempsub">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#tempsub">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#tempsub">>} | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#tempsub">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#subscribe">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{subscribe, Result} | Acc],
-                lists:delete(<<"pubsub#subscribe">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#subscribe">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#subscribe">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#subscribe">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#subscribe">>} | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#subscribe">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#title">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{title, Result} | Acc],
-                lists:delete(<<"pubsub#title">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#title">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#title">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#title">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#title">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#title">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = <<"pubsub#type">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{type, Result} | Acc],
-                lists:delete(<<"pubsub#type">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#type">>,
-                        <<"http://jabber.org/protocol/pubsub#node_config">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#type">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#type">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#type">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#type">>,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/pubsub#node_config">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/pubsub#node_config">>}});
-decode([], Acc, []) -> Acc.
-
-encode_access_model(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"Subscription requests must be approved "
-                                                "and only subscribers may retrieve items">>),
-                                value = <<"authorize">>},
-                  #xdata_option{label =
-                                    Translate(<<"Anyone may subscribe and retrieve items">>),
-                                value = <<"open">>},
-                  #xdata_option{label =
-                                    Translate(<<"Anyone with a presence subscription "
-                                                "of both or from may subscribe and retrieve "
-                                                "items">>),
-                                value = <<"presence">>},
-                  #xdata_option{label =
-                                    Translate(<<"Anyone in the specified roster group(s) "
-                                                "may subscribe and retrieve items">>),
-                                value = <<"roster">>},
-                  #xdata_option{label =
-                                    Translate(<<"Only those on a whitelist may subscribe "
-                                                "and retrieve items">>),
-                                value = <<"whitelist">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#access_model">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Specify the access model">>)}.
-
-encode_body_xslt(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#body_xslt">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The URL of an XSL transformation which "
-                                "can be applied to payloads in order "
-                                "to generate an appropriate message body "
-                                "element.">>)}.
-
-encode_children_association_policy(Value, Options,
-                                  Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"Anyone may associate leaf nodes with "
-                                                "the collection">>),
-                                value = <<"all">>},
-                  #xdata_option{label =
-                                    Translate(<<"Only collection node owners may associate "
-                                                "leaf nodes with the collection">>),
-                                value = <<"owners">>},
-                  #xdata_option{label =
-                                    Translate(<<"Only those on a whitelist may associate "
-                                                "leaf nodes with the collection">>),
-                                value = <<"whitelist">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var =
-                    <<"pubsub#children_association_policy">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Who may associate leaf nodes with a "
-                                "collection">>)}.
-
-encode_children_association_whitelist(Value,
-                                     Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [enc_jid(V) || V <- Value]
-            end,
-    Opts = [],
-    #xdata_field{var =
-                    <<"pubsub#children_association_whitelist">>,
-                values = Values, required = false, type = 'jid-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The list of JIDs that may associate "
-                                "leaf nodes with a collection">>)}.
-
-encode_children(Value, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#children">>,
-                values = Values, required = false, type = 'text-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The child nodes (leaf or collection) "
-                                "associated with a collection">>)}.
-
-encode_children_max(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#children_max">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The maximum number of child nodes that "
-                                "can be associated with a collection">>)}.
-
-encode_collection(Value, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#collection">>,
-                values = Values, required = false, type = 'text-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The collections with which a node is "
-                                "affiliated">>)}.
-
-encode_contact(Value, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [enc_jid(V) || V <- Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#contact">>,
-                values = Values, required = false, type = 'jid-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The JIDs of those to contact with questions">>)}.
-
-encode_dataform_xslt(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#dataform_xslt">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The URL of an XSL transformation which "
-                                "can be applied to the payload format "
-                                "in order to generate a valid Data Forms "
-                                "result that the client could display "
-                                "using a generic Data Forms rendering "
-                                "engine">>)}.
-
-encode_deliver_notifications(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#deliver_notifications">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Deliver event notifications">>)}.
-
-encode_deliver_payloads(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#deliver_payloads">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Deliver payloads with event notifications">>)}.
-
-encode_description(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#description">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"A description of the node">>)}.
-
-encode_item_expire(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#item_expire">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Number of seconds after which to automaticall"
-                                "y purge items">>)}.
-
-encode_itemreply(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"Statically specify a replyto of the "
-                                                "node owner(s)">>),
-                                value = <<"owner">>},
-                  #xdata_option{label =
-                                    Translate(<<"Dynamically specify a replyto of the "
-                                                "item publisher">>),
-                                value = <<"publisher">>},
-                  #xdata_option{value = <<"none">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#itemreply">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Whether owners or publisher should receive "
-                                "replies to items">>)}.
-
-encode_language(Value, Options, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = if Options == default -> [];
-             true ->
-                 [#xdata_option{label = Translate(L), value = V}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#language">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The default language of the node">>)}.
-
-encode_max_items(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_int(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#max_items">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Max # of items to persist">>)}.
-
-encode_max_payload_size(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_int(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#max_payload_size">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Max payload size in bytes">>)}.
-
-encode_node_type(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"The node is a leaf node (default)">>),
-                                value = <<"leaf">>},
-                  #xdata_option{label =
-                                    Translate(<<"The node is a collection node">>),
-                                value = <<"collection">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#node_type">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Whether the node is a leaf (default) "
-                                "or a collection">>)}.
-
-encode_notification_type(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"Messages of type normal">>),
-                                value = <<"normal">>},
-                  #xdata_option{label =
-                                    Translate(<<"Messages of type headline">>),
-                                value = <<"headline">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#notification_type">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Specify the event message type">>)}.
-
-encode_notify_config(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#notify_config">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Notify subscribers when the node configuratio"
-                                "n changes">>)}.
-
-encode_notify_delete(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#notify_delete">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Notify subscribers when the node is "
-                                "deleted">>)}.
-
-encode_notify_retract(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#notify_retract">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Notify subscribers when items are removed "
-                                "from the node">>)}.
-
-encode_notify_sub(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#notify_sub">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Whether to notify owners about new subscriber"
-                                "s and unsubscribes">>)}.
-
-encode_persist_items(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#persist_items">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Persist items to storage">>)}.
-
-encode_presence_based_delivery(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#presence_based_delivery">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Only deliver notifications to available "
-                                "users">>)}.
-
-encode_publish_model(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"Only publishers may publish">>),
-                                value = <<"publishers">>},
-                  #xdata_option{label =
-                                    Translate(<<"Subscribers may publish">>),
-                                value = <<"subscribers">>},
-                  #xdata_option{label =
-                                    Translate(<<"Anyone may publish">>),
-                                value = <<"open">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#publish_model">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Specify the publisher model">>)}.
-
-encode_purge_offline(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#purge_offline">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Purge all items when the relevant publisher "
-                                "goes offline">>)}.
-
-encode_roster_groups_allowed(Value, Options,
-                            Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [Value]
-            end,
-    Opts = if Options == default -> [];
-             true ->
-                 [#xdata_option{label = Translate(L), value = V}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#roster_groups_allowed">>,
-                values = Values, required = false, type = 'list-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Roster groups allowed to subscribe">>)}.
-
-encode_send_last_published_item(Value, Options,
-                               Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label = Translate(<<"Never">>),
-                                value = <<"never">>},
-                  #xdata_option{label =
-                                    Translate(<<"When a new subscription is processed">>),
-                                value = <<"on_sub">>},
-                  #xdata_option{label =
-                                    Translate(<<"When a new subscription is processed "
-                                                "and whenever a subscriber comes online">>),
-                                value = <<"on_sub_and_presence">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var =
-                    <<"pubsub#send_last_published_item">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"When to send the last published item">>)}.
-
-encode_tempsub(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#tempsub">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Whether to make all subscriptions temporary, "
-                                "based on subscriber presence">>)}.
-
-encode_subscribe(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#subscribe">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Whether to allow subscriptions">>)}.
-
-encode_title(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#title">>, values = Values,
-                required = false, type = 'text-single', options = Opts,
-                desc = <<>>,
-                label = Translate(<<"A friendly name for the node">>)}.
-
-encode_type(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#type">>, values = Values,
-                required = false, type = 'text-single', options = Opts,
-                desc = <<>>,
-                label =
-                    Translate(<<"The type of node data, usually specified "
-                                "by the namespace of the payload (if "
-                                "any)">>)}.
diff --git a/src/pubsub_publish_options.erl b/src/pubsub_publish_options.erl
deleted file mode 100644 (file)
index 6e96946..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_publish_options.xdata
-%% Form type: http://jabber.org/protocol/pubsub#publish-options
-%% Document: XEP-0060
-
--module(pubsub_publish_options).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("pubsub_publish_options.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-dec_enum(Val, Enums) ->
-    AtomVal = erlang:binary_to_existing_atom(Val, utf8),
-    case lists:member(AtomVal, Enums) of
-      true -> AtomVal
-    end.
-
-enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, []);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/pubsub#publish-opt"
-                         "ions">>]} ->
-         decode(Fs, Acc, []);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/pubsub#publish-opt"
-                          "ions">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {access_model, Val} ->
-               [encode_access_model(Val, default, Translate)];
-           {access_model, Val, Opts} ->
-               [encode_access_model(Val, Opts, Translate)];
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/pubsub#publish-opt"
-                                  "ions">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"pubsub#access_model">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value,
-                [authorize, open, presence, roster, whitelist])
-    of
-      Result ->
-         decode(Fs, [{access_model, Result} | Acc],
-                lists:delete(<<"pubsub#access_model">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#access_model">>,
-                        <<"http://jabber.org/protocol/pubsub#publish-opt"
-                          "ions">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#access_model">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#access_model">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#access_model">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#access_model">>,
-                  <<"http://jabber.org/protocol/pubsub#publish-opt"
-                    "ions">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/pubsub#publish-opt"
-                           "ions">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/pubsub#publish-opt"
-                    "ions">>}});
-decode([], Acc, []) -> Acc.
-
-encode_access_model(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"Access model of authorize">>),
-                                value = <<"authorize">>},
-                  #xdata_option{label =
-                                    Translate(<<"Access model of open">>),
-                                value = <<"open">>},
-                  #xdata_option{label =
-                                    Translate(<<"Access model of presence">>),
-                                value = <<"presence">>},
-                  #xdata_option{label =
-                                    Translate(<<"Access model of roster">>),
-                                value = <<"roster">>},
-                  #xdata_option{label =
-                                    Translate(<<"Access model of whitelist">>),
-                                value = <<"whitelist">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#access_model">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Specify the access model">>)}.
diff --git a/src/pubsub_subscribe_authorization.erl b/src/pubsub_subscribe_authorization.erl
deleted file mode 100644 (file)
index 46538da..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_subscribe_authorization.xdata
-%% Form type: http://jabber.org/protocol/pubsub#subscribe_authorization
-%% Document: XEP-0060
-
--module(pubsub_subscribe_authorization).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("pubsub_subscribe_authorization.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-dec_bool(<<"1">>) -> true;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"false">>) -> false.
-
-enc_bool(true) -> <<"1">>;
-enc_bool(false) -> <<"0">>.
-
-enc_jid(J) -> jid:to_string(J).
-
-dec_jid(Val) ->
-    case jid:from_string(Val) of
-      error -> erlang:error(badarg);
-      J -> J
-    end.
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false ->
-         decode(Fs, Acc,
-                [<<"pubsub#allow">>, <<"pubsub#node">>,
-                 <<"pubsub#subscriber_jid">>]);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/pubsub#subscribe_a"
-                         "uthorization">>]} ->
-         decode(Fs, Acc,
-                [<<"pubsub#allow">>, <<"pubsub#node">>,
-                 <<"pubsub#subscriber_jid">>]);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                          "uthorization">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {allow, Val} -> [encode_allow(Val, Translate)];
-           {allow, _, _} -> erlang:error({badarg, Opt});
-           {node, Val} -> [encode_node(Val, Translate)];
-           {node, _, _} -> erlang:error({badarg, Opt});
-           {subscriber_jid, Val} ->
-               [encode_subscriber_jid(Val, Translate)];
-           {subscriber_jid, _, _} -> erlang:error({badarg, Opt});
-           {subid, Val} -> [encode_subid(Val, Translate)];
-           {subid, _, _} -> erlang:error({badarg, Opt});
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/pubsub#subscribe_a"
-                                  "uthorization">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"pubsub#allow">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{allow, Result} | Acc],
-                lists:delete(<<"pubsub#allow">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#allow">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                          "uthorization">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#allow">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#allow">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#allow">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#allow">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                    "uthorization">>}});
-decode([#xdata_field{var = <<"pubsub#node">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{node, Result} | Acc],
-                lists:delete(<<"pubsub#node">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#node">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                          "uthorization">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#node">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#node">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#node">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#node">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                    "uthorization">>}});
-decode([#xdata_field{var = <<"pubsub#subscriber_jid">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_jid(Value) of
-      Result ->
-         decode(Fs, [{subscriber_jid, Result} | Acc],
-                lists:delete(<<"pubsub#subscriber_jid">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#subscriber_jid">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                          "uthorization">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#subscriber_jid">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#subscriber_jid">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#subscriber_jid">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#subscriber_jid">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                    "uthorization">>}});
-decode([#xdata_field{var = <<"pubsub#subid">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{subid, Result} | Acc],
-                lists:delete(<<"pubsub#subid">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#subid">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                          "uthorization">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#subid">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#subid">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#subid">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#subid">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                    "uthorization">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                           "uthorization">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_a"
-                    "uthorization">>}});
-decode([], Acc, []) -> Acc.
-
-encode_allow(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#allow">>, values = Values,
-                required = false, type = boolean, options = Opts,
-                desc = <<>>,
-                label =
-                    Translate(<<"Allow this Jabber ID to subscribe to "
-                                "this pubsub node?">>)}.
-
-encode_node(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#node">>, values = Values,
-                required = false, type = 'text-single', options = Opts,
-                desc = <<>>, label = Translate(<<"Node ID">>)}.
-
-encode_subscriber_jid(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_jid(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#subscriber_jid">>,
-                values = Values, required = false, type = 'jid-single',
-                options = Opts, desc = <<>>,
-                label = Translate(<<"Subscriber Address">>)}.
-
-encode_subid(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#subid">>, values = Values,
-                required = false, type = 'text-single', options = Opts,
-                desc = <<>>,
-                label =
-                    Translate(<<"The subscription identifier associated "
-                                "with the subscription request">>)}.
diff --git a/src/pubsub_subscribe_options.erl b/src/pubsub_subscribe_options.erl
deleted file mode 100644 (file)
index 02c0469..0000000
+++ /dev/null
@@ -1,508 +0,0 @@
-%% Created automatically by xdata generator (xdata_codec.erl)
-%% Source: pubsub_subscribe_options.xdata
-%% Form type: http://jabber.org/protocol/pubsub#subscribe_options
-%% Document: XEP-0060
-
--module(pubsub_subscribe_options).
-
--export([decode/1, decode/2, encode/1, encode/2,
-        format_error/1]).
-
--include("xmpp_codec.hrl").
-
--include("pubsub_subscribe_options.hrl").
-
--export_type([property/0, result/0, form/0]).
-
-dec_enum(Val, Enums) ->
-    AtomVal = erlang:binary_to_existing_atom(Val, utf8),
-    case lists:member(AtomVal, Enums) of
-      true -> AtomVal
-    end.
-
-enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
-
-dec_bool(<<"1">>) -> true;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"false">>) -> false.
-
-enc_bool(true) -> <<"1">>;
-enc_bool(false) -> <<"0">>.
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary,
-      "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '",
-      Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '",
-      Type/binary, "'">>.
-
-decode(Fs) -> decode(Fs, []).
-
-decode(Fs, Acc) ->
-    case lists:keyfind(<<"FORM_TYPE">>, #xdata_field.var,
-                      Fs)
-       of
-      false -> decode(Fs, Acc, []);
-      #xdata_field{values =
-                      [<<"http://jabber.org/protocol/pubsub#subscribe_o"
-                         "ptions">>]} ->
-         decode(Fs, Acc, []);
-      _ ->
-         erlang:error({?MODULE,
-                       {form_type_mismatch,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                          "ptions">>}})
-    end.
-
-encode(Cfg) -> encode(Cfg, fun (Text) -> Text end).
-
-encode(List, Translate) when is_list(List) ->
-    Fs = [case Opt of
-           {deliver, Val} -> [encode_deliver(Val, Translate)];
-           {deliver, _, _} -> erlang:error({badarg, Opt});
-           {digest, Val} -> [encode_digest(Val, Translate)];
-           {digest, _, _} -> erlang:error({badarg, Opt});
-           {digest_frequency, Val} ->
-               [encode_digest_frequency(Val, Translate)];
-           {digest_frequency, _, _} -> erlang:error({badarg, Opt});
-           {expire, Val} -> [encode_expire(Val, Translate)];
-           {expire, _, _} -> erlang:error({badarg, Opt});
-           {include_body, Val} ->
-               [encode_include_body(Val, Translate)];
-           {include_body, _, _} -> erlang:error({badarg, Opt});
-           {'show-values', Val} ->
-               ['encode_show-values'(Val, default, Translate)];
-           {'show-values', Val, Opts} ->
-               ['encode_show-values'(Val, Opts, Translate)];
-           {subscription_type, Val} ->
-               [encode_subscription_type(Val, default, Translate)];
-           {subscription_type, Val, Opts} ->
-               [encode_subscription_type(Val, Opts, Translate)];
-           {subscription_depth, Val} ->
-               [encode_subscription_depth(Val, default, Translate)];
-           {subscription_depth, Val, Opts} ->
-               [encode_subscription_depth(Val, Opts, Translate)];
-           #xdata_field{} -> [Opt];
-           _ -> []
-         end
-         || Opt <- List],
-    FormType = #xdata_field{var = <<"FORM_TYPE">>,
-                           type = hidden,
-                           values =
-                               [<<"http://jabber.org/protocol/pubsub#subscribe_o"
-                                  "ptions">>]},
-    [FormType | lists:flatten(Fs)].
-
-decode([#xdata_field{var = <<"pubsub#deliver">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{deliver, Result} | Acc],
-                lists:delete(<<"pubsub#deliver">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#deliver">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                          "ptions">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#deliver">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#deliver">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#deliver">>} | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#deliver">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                    "ptions">>}});
-decode([#xdata_field{var = <<"pubsub#digest">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{digest, Result} | Acc],
-                lists:delete(<<"pubsub#digest">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#digest">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                          "ptions">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#digest">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#digest">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#digest">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#digest">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                    "ptions">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#digest_frequency">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{digest_frequency, Result} | Acc],
-                lists:delete(<<"pubsub#digest_frequency">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#digest_frequency">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                          "ptions">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#digest_frequency">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#digest_frequency">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#digest_frequency">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#digest_frequency">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                    "ptions">>}});
-decode([#xdata_field{var = <<"pubsub#expire">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try Value of
-      Result ->
-         decode(Fs, [{expire, Result} | Acc],
-                lists:delete(<<"pubsub#expire">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#expire">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                          "ptions">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#expire">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#expire">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#expire">>} | _], _,
-       _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#expire">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                    "ptions">>}});
-decode([#xdata_field{var = <<"pubsub#include_body">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_bool(Value) of
-      Result ->
-         decode(Fs, [{include_body, Result} | Acc],
-                lists:delete(<<"pubsub#include_body">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#include_body">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                          "ptions">>}})
-    end;
-decode([#xdata_field{var = <<"pubsub#include_body">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var = <<"pubsub#include_body">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var = <<"pubsub#include_body">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#include_body">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                    "ptions">>}});
-decode([#xdata_field{var = <<"pubsub#show-values">>,
-                    values = Values}
-       | Fs],
-       Acc, Required) ->
-    try [dec_enum(Value, [away, chat, dnd, online, xa])
-        || Value <- Values]
-    of
-      Result ->
-         decode(Fs, [{'show-values', Result} | Acc],
-                lists:delete(<<"pubsub#show-values">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#show-values">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                          "ptions">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#subscription_type">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, [items, nodes]) of
-      Result ->
-         decode(Fs, [{subscription_type, Result} | Acc],
-                lists:delete(<<"pubsub#subscription_type">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#subscription_type">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                          "ptions">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#subscription_type">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#subscription_type">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#subscription_type">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#subscription_type">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                    "ptions">>}});
-decode([#xdata_field{var =
-                        <<"pubsub#subscription_depth">>,
-                    values = [Value]}
-       | Fs],
-       Acc, Required) ->
-    try dec_enum(Value, ['1', all]) of
-      Result ->
-         decode(Fs, [{subscription_depth, Result} | Acc],
-                lists:delete(<<"pubsub#subscription_depth">>, Required))
-    catch
-      _:_ ->
-         erlang:error({?MODULE,
-                       {bad_var_value, <<"pubsub#subscription_depth">>,
-                        <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                          "ptions">>}})
-    end;
-decode([#xdata_field{var =
-                        <<"pubsub#subscription_depth">>,
-                    values = []} =
-           F
-       | Fs],
-       Acc, Required) ->
-    decode([F#xdata_field{var =
-                             <<"pubsub#subscription_depth">>,
-                         values = [<<>>]}
-           | Fs],
-          Acc, Required);
-decode([#xdata_field{var =
-                        <<"pubsub#subscription_depth">>}
-       | _],
-       _, _) ->
-    erlang:error({?MODULE,
-                 {too_many_values, <<"pubsub#subscription_depth">>,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                    "ptions">>}});
-decode([#xdata_field{var = Var} | Fs], Acc, Required) ->
-    if Var /= <<"FORM_TYPE">> ->
-          erlang:error({?MODULE,
-                        {unknown_var, Var,
-                         <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                           "ptions">>}});
-       true -> decode(Fs, Acc, Required)
-    end;
-decode([], _, [Var | _]) ->
-    erlang:error({?MODULE,
-                 {missing_required_var, Var,
-                  <<"http://jabber.org/protocol/pubsub#subscribe_o"
-                    "ptions">>}});
-decode([], Acc, []) -> Acc.
-
-encode_deliver(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#deliver">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Whether an entity wants to receive or "
-                                "disable notifications">>)}.
-
-encode_digest(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#digest">>, values = Values,
-                required = false, type = boolean, options = Opts,
-                desc = <<>>,
-                label =
-                    Translate(<<"Whether an entity wants to receive digests "
-                                "(aggregations) of notifications or all "
-                                "notifications individually">>)}.
-
-encode_digest_frequency(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#digest_frequency">>,
-                values = Values, required = false, type = 'text-single',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The minimum number of milliseconds between "
-                                "sending any two notification digests">>)}.
-
-encode_expire(Value, Translate) ->
-    Values = case Value of
-              <<>> -> [];
-              Value -> [Value]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#expire">>, values = Values,
-                required = false, type = 'text-single', options = Opts,
-                desc = <<>>,
-                label =
-                    Translate(<<"The DateTime at which a leased subscription "
-                                "will end or has ended">>)}.
-
-encode_include_body(Value, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_bool(Value)]
-            end,
-    Opts = [],
-    #xdata_field{var = <<"pubsub#include_body">>,
-                values = Values, required = false, type = boolean,
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"Whether an entity wants to receive an "
-                                "XMPP message body in addition to the "
-                                "payload format">>)}.
-
-'encode_show-values'(Value, Options, Translate) ->
-    Values = case Value of
-              [] -> [];
-              Value -> [enc_enum(V) || V <- Value]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"XMPP Show Value of Away">>),
-                                value = <<"away">>},
-                  #xdata_option{label =
-                                    Translate(<<"XMPP Show Value of Chat">>),
-                                value = <<"chat">>},
-                  #xdata_option{label =
-                                    Translate(<<"XMPP Show Value of DND (Do Not Disturb)">>),
-                                value = <<"dnd">>},
-                  #xdata_option{label =
-                                    Translate(<<"Mere Availability in XMPP (No Show Value)">>),
-                                value = <<"online">>},
-                  #xdata_option{label =
-                                    Translate(<<"XMPP Show Value of XA (Extended Away)">>),
-                                value = <<"xa">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#show-values">>,
-                values = Values, required = false, type = 'list-multi',
-                options = Opts, desc = <<>>,
-                label =
-                    Translate(<<"The presence states for which an entity "
-                                "wants to receive notifications">>)}.
-
-encode_subscription_type(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"Receive notification of new items only">>),
-                                value = <<"items">>},
-                  #xdata_option{label =
-                                    Translate(<<"Receive notification of new nodes only">>),
-                                value = <<"nodes">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#subscription_type">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>, label = <<>>}.
-
-encode_subscription_depth(Value, Options, Translate) ->
-    Values = case Value of
-              undefined -> [];
-              Value -> [enc_enum(Value)]
-            end,
-    Opts = if Options == default ->
-                 [#xdata_option{label =
-                                    Translate(<<"Receive notification from direct child "
-                                                "nodes only">>),
-                                value = <<"1">>},
-                  #xdata_option{label =
-                                    Translate(<<"Receive notification from all descendent "
-                                                "nodes">>),
-                                value = <<"all">>}];
-             true ->
-                 [#xdata_option{label = Translate(L),
-                                value = enc_enum(V)}
-                  || {L, V} <- Options]
-          end,
-    #xdata_field{var = <<"pubsub#subscription_depth">>,
-                values = Values, required = false, type = 'list-single',
-                options = Opts, desc = <<>>, label = <<>>}.
diff --git a/src/xdata_codec.erl b/src/xdata_codec.erl
deleted file mode 100644 (file)
index 223f24a..0000000
+++ /dev/null
@@ -1,648 +0,0 @@
-%%%-------------------------------------------------------------------
-%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%% @copyright (C) 2016, Evgeny Khramtsov
-%%% @doc
-%%%
-%%% @end
-%%% Created : 27 Sep 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%%-------------------------------------------------------------------
--module(xdata_codec).
-
-%% API
--export([compile/1, compile/2]).
--export([dec_int/1, dec_int/3, dec_enum/2, dec_bool/1, not_empty/1,
-        dec_enum_int/2, dec_enum_int/4, enc_int/1, enc_enum/1,
-        enc_bool/1, enc_enum_int/1, format_error/1, enc_jid/1, dec_jid/1]).
--include("xmpp.hrl").
-
--record(state, {mod_name :: atom(),
-               file_name :: string(),
-               erl = "" :: string(),
-               hrl = "" :: string(),
-               dir = "" :: string(),
-               ns = <<>> :: binary(),
-               doc = <<>> :: binary(),
-               erl_dir = "" :: string(),
-               hrl_dir = "" :: string(),
-               prefix = [] :: [binary()],
-               dec_mfas = [] :: [{binary(), mfa()}],
-               enc_mfas = [] :: [{binary(), mfa()}],
-               specs = [] :: [{binary(), string()}],
-               required = [] :: [{binary(), boolean()} | binary()],
-               defaults = [] :: [{binary(), any()}]}).
-
--define(is_multi_type(T),
-       ((T == 'list-multi') or (T == 'jid-multi') or (T == 'text-multi'))).
-
--define(is_list_type(T),
-       ((T == 'list-single') or (T == 'list-multi'))).
-
-%%%===================================================================
-%%% API
-%%%===================================================================
-compile(Path) ->
-    compile(Path, []).
-
-compile(Path, Opts) ->
-    case filelib:is_dir(Path) of
-       true ->
-           filelib:fold_files(
-             Path, ".*.xdata", false,
-             fun(File, ok) ->
-                     compile_file(File, Opts);
-                (_, Err) ->
-                     Err
-             end, ok);
-       false ->
-           compile_file(Path, Opts)
-    end.
-
-compile_file(Path, Opts) ->
-    try
-       ok = application:ensure_started(fast_xml),
-       DirName = filename:dirname(Path),
-       FileName = filename:basename(Path),
-       RootName = filename:rootname(FileName),
-       ConfigPath = filename:join(DirName, RootName) ++ ".cfg",
-       ModName = list_to_atom(RootName),
-       {ok, Data} = file:read_file(Path),
-       Config = case file:consult(ConfigPath) of
-                    {ok, Terms} -> lists:flatten(Terms);
-                    {error, enoent} -> []
-                end,
-       State = #state{mod_name = ModName,
-                      file_name = FileName,
-                      erl = filename:rootname(FileName) ++ ".erl",
-                      hrl = filename:rootname(FileName) ++ ".hrl",
-                      dir = DirName,
-                      prefix = proplists:get_all_values(prefix, Config),
-                      erl_dir = proplists:get_value(erl_dir, Opts, DirName),
-                      hrl_dir = proplists:get_value(hrl_dir, Opts, DirName),
-                      dec_mfas = proplists:get_value(decode, Config, []),
-                      enc_mfas = proplists:get_value(encode, Config, []),
-                      specs = proplists:get_value(specs, Config, []),
-                      required = proplists:get_value(required, Config, []),
-                      defaults = proplists:get_value(defaults, Config, [])},
-       #xmlel{} = El = fxml_stream:parse_element(Data),
-       ok = compile_element(normalize(El), State),
-       io:format("Compiled ~s~n", [Path])
-    catch _:{badmatch, Err} ->
-           io:format(standard_error, "Failed to compile ~s: ~p~n",
-                     [Path, Err]),
-           Err
-    end.
-
-emit(Format) ->
-    emit(Format, []).
-
-emit(Format, Args) ->
-    put(outbuf, get(outbuf) ++ io_lib:format(Format, Args)).
-
-dec_int(Val) ->
-    dec_int(Val, infinity, infinity).
-
-dec_int(Val, Min, Max) ->
-    case list_to_integer(binary_to_list(Val)) of
-        Int when Int =< Max, Min == infinity ->
-            Int;
-        Int when Int =< Max, Int >= Min ->
-            Int
-    end.
-
-enc_int(Int) ->
-    integer_to_binary(Int).
-
-dec_enum(Val, Enums) ->
-    AtomVal = erlang:binary_to_existing_atom(Val, utf8),
-    case lists:member(AtomVal, Enums) of
-        true ->
-            AtomVal
-    end.
-
-enc_enum(Atom) ->
-    erlang:atom_to_binary(Atom, utf8).
-
-dec_enum_int(Val, Enums) ->
-    try dec_int(Val)
-    catch _:_ -> dec_enum(Val, Enums)
-    end.
-
-dec_enum_int(Val, Enums, Min, Max) ->
-    try dec_int(Val, Min, Max)
-    catch _:_ -> dec_enum(Val, Enums)
-    end.
-
-enc_enum_int(Int) when is_integer(Int) ->
-    enc_int(Int);
-enc_enum_int(Atom) ->
-    enc_enum(Atom).
-
-dec_bool(<<"1">>) -> true;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"false">>) -> false.
-
-enc_bool(true) -> <<"1">>;
-enc_bool(false) -> <<"0">>.
-
-enc_jid(J) -> jid:to_string(J).
-
-dec_jid(Val) ->
-    case jid:from_string(Val) of
-       error -> erlang:error(badarg);
-       J -> J
-    end.
-
-not_empty(<<_, _/binary>> = Val) ->
-    Val.
-
-format_error({form_type_mismatch, Type}) ->
-    <<"FORM_TYPE doesn't match '", Type/binary, "'">>;
-format_error({bad_var_value, Var, Type}) ->
-    <<"Bad value of field '", Var/binary, "' of type '", Type/binary, "'">>;
-format_error({missing_value, Var, Type}) ->
-    <<"Missing value of field '", Var/binary, "' of type '", Type/binary, "'">>;
-format_error({too_many_values, Var, Type}) ->
-    <<"Too many values for field '", Var/binary, "' of type '", Type/binary, "'">>;
-format_error({unknown_var, Var, Type}) ->
-    <<"Unknown field '", Var/binary, "' of type '", Type/binary, "'">>;
-format_error({missing_required_var, Var, Type}) ->
-    <<"Missing required field '", Var/binary, "' of type '", Type/binary, "'">>.
-
-%%%===================================================================
-%%% Internal functions
-%%%===================================================================
-compile_element(#xmlel{name = <<"form_type">>, children = Els} = Form,
-               #state{erl = OutErl, erl_dir = ErlDir,
-                      hrl = OutHrl, hrl_dir = HrlDir} = State0) ->
-    try
-       Name = fxml:get_subtag_cdata(Form, <<"name">>),
-       Doc = fxml:get_subtag_cdata(Form, <<"doc">>),
-       X = #xmlel{name = <<"x">>,
-                  attrs = [{<<"type">>, <<"form">>},
-                           {<<"xmlns">>, <<"jabber:x:data">>}],
-                  children = Els},
-       State = State0#state{ns = Name, doc = Doc},
-       #xdata{fields = Fs} = xmpp_codec:decode(X),
-       put(outbuf, []),
-       mk_header(State),
-       mk_aux_funs(),
-       mk_top_decoder(Fs, State),
-       mk_top_encoder(Fs, State),
-       mk_decoder(Fs, State),
-       mk_encoders(Fs, State),
-       ErlData = get(outbuf),
-       ok = file:write_file(filename:join(ErlDir, OutErl), ErlData),
-       ok = erl_tidy:file(filename:join(ErlDir, OutErl), [{backups, false}]),
-       put(outbuf, []),
-       mk_type_definitions(Fs, State),
-       HrlData = get(outbuf),
-       ok = file:write_file(filename:join(HrlDir, OutHrl), HrlData)
-    catch _:{badmatch, Err} ->
-           Err
-    end.
-
-mk_aux_funs() ->
-    case get_abstract_code_from_myself() of
-        {ok, AbsCode} ->
-            AST = lists:filter(
-                   fun(T) ->
-                           case catch erl_syntax_lib:analyze_function(T) of
-                               {format_error, 1} -> true;
-                               {dec_int, 3} -> true;
-                               {dec_int, 1} -> true;
-                               {dec_enum, 2} -> true;
-                               {dec_enum_int, 2} -> true;
-                               {dec_enum_int, 4} -> true;
-                               {enc_int, 1} -> true;
-                               {enc_enum, 1} -> true;
-                               {enc_enum_int, 1} -> true;
-                               {not_empty, 1} -> true;
-                               {dec_bool, 1} -> true;
-                               {enc_bool, 1} -> true;
-                               {enc_jid, 1} -> true;
-                               {dec_jid, 1} -> true;
-                               _ -> false
-                           end
-                   end, AbsCode),
-           emit(erl_prettypr:format(erl_syntax:form_list(AST)) ++ io_lib:nl());
-        error ->
-            erlang:error({no_abstract_code_found, ?MODULE})
-    end.
-
-get_abstract_code_from_myself() ->
-    {file, File} = code:is_loaded(?MODULE),
-    case beam_lib:chunks(File, [abstract_code]) of
-        {ok, {_, List}} ->
-            case lists:keyfind(abstract_code, 1, List) of
-                {abstract_code, {raw_abstract_v1, Abstr}} ->
-                    {ok, Abstr};
-                _ ->
-                    error
-            end;
-        _ ->
-            error
-    end.
-
-mk_comment_header(#state{file_name = Source, ns = NS, doc = Doc}) ->
-    emit("%% Created automatically by xdata generator (xdata_codec.erl)~n"
-        "%% Source: ~s~n"
-        "%% Form type: ~s~n", [Source, NS]),
-    if Doc /= <<>> -> emit("%% Document: ~s~n~n", [Doc]);
-       true -> emit("~n")
-    end.
-
-mk_header(#state{mod_name = Mod, hrl = Include} = State) ->
-    mk_comment_header(State),
-    emit("~n-module(~s).~n", [Mod]),
-    emit("-export([decode/1, decode/2, encode/1, encode/2, format_error/1]).~n"),
-    emit("-include(\"xmpp_codec.hrl\").~n"),
-    emit("-include(\"~s\").~n", [Include]),
-    emit("-export_type([property/0, result/0, form/0]).~n").
-
-mk_type_definitions(Fs, State) ->
-    mk_comment_header(State),
-    lists:foreach(
-      fun(#xdata_field{var = Var} = F) ->
-             Spec = get_typespec(F, State),
-             case is_complex_type(Spec) of
-                 true ->
-                     emit("-type '~s'() :: ~s.~n",
-                          [var_to_rec_field(Var, State), Spec]);
-                 false ->
-                     ok
-             end
-      end, Fs),
-    emit("~n-type property() :: "),
-    Fields = lists:map(
-              fun(#xdata_field{var = Var} = F) ->
-                      RecField = var_to_rec_field(Var, State),
-                      [io_lib:format("{'~s', ~s}",
-                                     [RecField, mk_typespec(F, State)])]
-              end, Fs),
-    emit(string:join(Fields, " |~n                    ") ++ ".~n"),
-    emit("-type result() :: [property()].~n~n"),
-    VarsWithSpec = lists:flatmap(
-                    fun(#xdata_field{type = T, var = Var} = F)
-                          when ?is_list_type(T) ->
-                            RecName = var_to_rec_field(Var, State),
-                            Spec0 = get_typespec(F, State),
-                            Spec = case is_complex_type(Spec0) of
-                                       true ->
-                                           io_lib:format("'~s'()", [RecName]);
-                                       false ->
-                                           Spec0
-                                   end,
-                            [{RecName, mk_typespec(F, State), Spec}];
-                       (_) ->
-                            []
-                    end, Fs),
-    case VarsWithSpec of
-       [] ->
-           emit("-type form() :: [property() | xdata_field()].~n");
-       _ ->
-           emit("-type options(T) :: [{binary(), T}].~n"),
-           emit("-type property_with_options() ::~n      "),
-           Options = [io_lib:format("{'~s', ~s, options(~s)}",
-                                    [Var, Spec1, Spec2])
-                      || {Var, Spec1, Spec2} <- VarsWithSpec],
-           emit(string:join(Options, " |~n      ") ++ ".~n"),
-           emit("-type form() :: [property() | property_with_options() | xdata_field()].~n")
-    end.
-
-mk_top_decoder(Fs, State) ->
-    Required = [Var || #xdata_field{var = Var} <- Fs, is_required(Var, State)],
-    emit("decode(Fs) -> decode(Fs, []).~n"),
-    emit("decode(Fs, Acc) ->"
-        "  case lists:keyfind(<<\"FORM_TYPE\">>, #xdata_field.var, Fs) of"
-        "    false ->"
-        "      decode(Fs, Acc, ~p);"
-        "    #xdata_field{values = [~p]} ->"
-        "      decode(Fs, Acc, ~p);"
-        "    _ ->"
-        "      erlang:error({?MODULE, {form_type_mismatch, ~p}})~n"
-        "  end.~n",
-        [Required, State#state.ns, Required, State#state.ns]).
-
-mk_top_encoder(Fs, State) ->
-    Clauses = string:join(
-               lists:map(
-                 fun(#xdata_field{var = Var, type = T}) when ?is_list_type(T) ->
-                         Field = var_to_rec_field(Var, State),
-                         io_lib:format(
-                           "{'~s', Val} -> ['encode_~s'(Val, default, Translate)];"
-                           "{'~s', Val, Opts} -> ['encode_~s'(Val, Opts, Translate)]",
-                           [Field, Field, Field, Field]);
-                    (#xdata_field{var = Var}) ->
-                         Field = var_to_rec_field(Var, State),
-                         io_lib:format(
-                           "{'~s', Val} -> ['encode_~s'(Val, Translate)];"
-                           "{'~s', _, _} -> erlang:error({badarg, Opt})",
-                           [Field, Field, Field])
-                 end, Fs) ++ ["#xdata_field{} -> [Opt]; _ -> []"],
-               ";"),
-    emit("encode(Cfg) -> encode(Cfg, fun(Text) -> Text end).~n"),
-    emit("encode(List, Translate) when is_list(List) ->"
-        "  Fs = [case Opt of ~s end || Opt <- List],"
-        "  FormType = #xdata_field{var = <<\"FORM_TYPE\">>, type = hidden,"
-        "                          values = [~p]},"
-        "  [FormType|lists:flatten(Fs)].~n",
-        [Clauses, State#state.ns]).
-
-mk_decoder([#xdata_field{var = Var, type = Type} = F|Fs], State) ->
-    ValVar = if ?is_multi_type(Type) -> "Values";
-               true -> "[Value]"
-            end,
-    DecFun = if ?is_multi_type(Type) ->
-                    ["[", mk_decoding_fun(F, State), " || Value <- Values]"];
-               true ->
-                    mk_decoding_fun(F, State)
-            end,
-    emit("decode([#xdata_field{var = ~p, values = ~s}|Fs], Acc, Required) ->"
-        "  try ~s of"
-        "    Result -> decode(Fs, [{'~s', Result}|Acc],"
-        "                     lists:delete(~p, Required))"
-        "  catch _:_ ->"
-        "    erlang:error({?MODULE, {bad_var_value, ~p, ~p}})"
-        "  end;",
-        [Var, ValVar, DecFun, var_to_rec_field(Var, State),
-         Var, Var, State#state.ns]),
-    if not ?is_multi_type(Type) ->
-           emit("decode([#xdata_field{var = ~p, values = []} = F|Fs],"
-                "       Acc, Required) ->"
-                "  decode([F#xdata_field{var = ~p, values = [<<>>]}|Fs],"
-                "         Acc, Required);",
-                [Var, Var]),
-           emit("decode([#xdata_field{var = ~p}|_], _, _) ->"
-                "  erlang:error({?MODULE, {too_many_values, ~p, ~p}});",
-                [Var, Var, State#state.ns]);
-       true ->
-           ok
-    end,
-    mk_decoder(Fs, State);
-mk_decoder([], State) ->
-    emit("decode([#xdata_field{var = Var}|Fs], Acc, Required) ->"
-        "  if Var /= <<\"FORM_TYPE\">> ->"
-        "    erlang:error({?MODULE, {unknown_var, Var, ~p}});"
-        "  true ->"
-        "    decode(Fs, Acc, Required)"
-        "  end;",
-        [State#state.ns]),
-    emit("decode([], _, [Var|_]) ->"
-        "  erlang:error({?MODULE, {missing_required_var, Var, ~p}});~n",
-        [State#state.ns]),
-    emit("decode([], Acc, []) -> Acc.~n").
-
-mk_encoders(Fs, State) ->
-    lists:foreach(
-      fun(#xdata_field{var = Var, required = IsRequired, desc = Desc,
-                      label = Label, type = Type} = F) ->
-             EncVals = mk_encoded_values(F, State),
-             EncOpts = mk_encoded_options(F, State),
-             FieldName = var_to_rec_field(Var, State),
-             DescStr = if Desc == <<>> -> "<<>>";
-                          true -> io_lib:format("Translate(~p)", [Desc])
-                       end,
-             LabelStr = if Label == <<>> -> "<<>>";
-                           true -> io_lib:format("Translate(~p)", [Label])
-                        end,
-             if ?is_list_type(Type) ->
-                     emit("'encode_~s'(Value, Options, Translate) ->", [FieldName]);
-                true ->
-                     emit("'encode_~s'(Value, Translate) ->", [FieldName])
-             end,
-             emit("  Values = ~s,"
-                  "  Opts = ~s,"
-                  "  #xdata_field{var = ~p,"
-                  "               values = Values,"
-                  "               required = ~p,"
-                  "               type = ~p,"
-                  "               options = Opts,"
-                  "               desc = ~s,"
-                  "               label = ~s}.~n",
-                  [EncVals, EncOpts, Var, IsRequired, Type, DescStr, LabelStr])
-      end, Fs).
-
-mk_encoded_values(#xdata_field{var = Var, type = Type,
-                              options = Options}, State) ->
-    EncFun =
-       case get_enc_fun(Var, Type, Options, State) of
-           {M, Fun, Args} ->
-               Mod = if M == undefined -> "";
-                        true -> io_lib:format("~s:", [M])
-                     end,
-               FArgs = [io_lib:format(", ~p", [A]) || A <- Args],
-               if ?is_multi_type(Type) ->
-                       "[" ++ io_lib:format("~s~s(V~s)", [Mod, Fun, FArgs]) ++
-                           " || V <- Value]";
-                  true ->
-                       "[" ++ io_lib:format("~s~s(Value~s)", [Mod, Fun, FArgs])
-                           ++ "]"
-               end;
-           undefined ->
-               "[Value]"
-       end,
-    Default = case get_dec_fun(Var, Type, Options, State) of
-                 _ when ?is_multi_type(Type) -> "[]";
-                 undefined -> "<<>>";
-                 _MFA -> "undefined"
-             end,
-    io_lib:format(
-      "case Value of"
-      "  ~s -> [];~n"
-      "  Value -> ~s~n"
-      "end",
-      [Default, EncFun]).
-
-mk_encoded_options(#xdata_field{var = Var, type = Type,
-                               options = Options}, State) ->
-    EncFun = case get_enc_fun(Var, Type, Options, State) of
-                {M, Fun, Args} ->
-                    Mod = if M == undefined -> "";
-                             true -> io_lib:format("~s:", [M])
-                          end,
-                    FArgs = [io_lib:format(", ~p", [A]) || A <- Args],
-                    io_lib:format("~s~s(V~s)", [Mod, Fun, FArgs]);
-                undefined ->
-                    "V"
-            end,
-    EncOpts = string:join(
-               [case L of
-                    <<>> ->
-                        io_lib:format("#xdata_option{value = ~p}", [V]);
-                    _ ->
-                        io_lib:format(
-                          "#xdata_option{label = Translate(~p), value = ~p}",
-                          [L, V])
-                end || #xdata_option{label = L, value = V} <- Options],
-               ","),
-    if ?is_list_type(Type) ->
-           io_lib:format(
-             "if Options == default ->"
-             "   [~s];"
-             "true ->"
-             "   [#xdata_option{label = Translate(L), value = ~s}"
-             "    || {L, V} <- Options]"
-             "end",
-             [EncOpts, EncFun]);
-       true ->
-           "[]"
-    end.
-
-mk_decoding_fun(#xdata_field{var = Var, type = Type,
-                            options = Options}, State) ->
-    case get_dec_fun(Var, Type, Options, State) of
-       {M, Fun, Args} ->
-           Mod = if M == undefined -> "";
-                    true -> io_lib:format("~s:", [M])
-                 end,
-           FArgs = [io_lib:format(", ~p", [A]) || A <- Args],
-           io_lib:format("~s~s(Value~s)", [Mod, Fun, FArgs]);
-       undefined ->
-           "Value"
-    end.
-
-var_to_rec_field(Var, #state{prefix = [Prefix|T]} = State) ->
-    Size = size(Prefix),
-    case Var of
-       <<(Prefix):Size/binary, Rest/binary>> ->
-           binary_to_atom(Rest, utf8);
-       _ ->
-           var_to_rec_field(Var, State#state{prefix = T})
-    end;
-var_to_rec_field(Var, #state{prefix = []}) ->
-    Var.
-
-get_dec_fun(Var, Type, Options, State) ->
-    case lists:keyfind(Var, 1, State#state.dec_mfas) of
-       false when Type == 'list-multi'; Type == 'list-single' ->
-           if Options /= [] ->
-                   Variants = [binary_to_atom(V, utf8)
-                               || #xdata_option{value = V} <- Options],
-                   {undefined, dec_enum, [Variants]};
-              true ->
-                   undefined
-           end;
-       false when Type == 'jid-multi'; Type == 'jid-single' ->
-           {undefined, dec_jid, []};
-       false when Type == boolean ->
-           {undefined, dec_bool, []};
-       false ->
-           undefined;
-       {Var, {M, F, A}} ->
-           {M, F, A};
-       {Var, {dec_bool, []}} ->
-           {undefined, dec_bool, []};
-       {Var, {not_empty, []}} ->
-           {undefined, not_empty, []};
-       {Var, {dec_enum, [Variants]}} ->
-           {undefined, dec_enum, [Variants]};
-       {Var, {dec_int, Args}} ->
-           {undefined, dec_int, Args};
-       {Var, {dec_enum_int, Args}} ->
-           {undefined, dec_enum_int, Args};
-       {Var, {dec_jid, []}} ->
-           {undefined, dec_jid, []}
-    end.
-
-get_enc_fun(Var, Type, Options, State) ->
-    case get_dec_fun(Var, Type, Options, State) of
-       {undefined, dec_enum, _} ->
-           {undefined, enc_enum, []};
-       {undefined, dec_bool, _} ->
-           {undefined, enc_bool, []};
-       {undefined, dec_int, _} ->
-           {undefined, enc_int, []};
-       {undefined, dec_enum_int, _} ->
-           {undefined, enc_enum_int, []};
-       {undefined, dec_jid, _} ->
-           {undefined, enc_jid, []};
-       _ ->
-           case lists:keyfind(Var, 1, State#state.enc_mfas) of
-               false ->
-                   undefined;
-               {Var, {M, F, A}} ->
-                   {M, F, A};
-               {Var, {enc_bool, []}} ->
-                   {undefined, enc_bool, []};
-               {Var, {dec_enum, _}} ->
-                   {undefined, enc_enum, []};
-               {Var, {enc_int, _}} ->
-                   {undefined, enc_int, []};
-               {Var, {dec_enum_int, _}} ->
-                   {undefined, enc_enum_int, []};
-               {Var, {enc_jid, _}} ->
-                   {undefined, enc_jid, []}
-           end
-    end.
-
-mk_typespec(#xdata_field{type = Type, var = Var} = Field, State) ->
-    Spec0 = get_typespec(Field, State),
-    Spec1 = case is_complex_type(Spec0) of
-               true ->
-                   io_lib:format("'~s'()", [var_to_rec_field(Var, State)]);
-               false ->
-                   Spec0
-           end,
-    if ?is_multi_type(Type) -> "[" ++ Spec1 ++ "]";
-       true -> Spec1
-    end.
-
-get_typespec(#xdata_field{var = Var, type = Type, options = Options}, State) ->
-    case lists:keyfind(Var, 1, State#state.specs) of
-       false ->
-           case get_dec_fun(Var, Type, Options, State) of
-               {undefined, dec_enum, Args} ->
-                   enum_spec(Args);
-               {undefined, dec_bool, _} ->
-                   "boolean()";
-               {undefined, dec_jid, _} ->
-                   "jid:jid()";
-               {undefined, dec_int, Args} ->
-                   int_spec(Args);
-               {undefined, dec_enum_int, [Variants|T]} ->
-                   enum_spec([Variants]) ++ " | " ++ int_spec(T);
-               _ ->
-                   "binary()"
-           end;
-       {Var, Spec} ->
-           Spec
-    end.
-
--spec is_complex_type(string()) -> boolean().
-is_complex_type(Spec) ->
-    string:chr(Spec, $|) /= 0.
-
-int_spec([]) ->
-    "integer()";
-int_spec([From, To]) ->
-    if From /= infinity, To /= infinity ->
-           io_lib:format("~p..~p", [From, To]);
-       From > 0 ->
-           "pos_integer()";
-       From == 0 ->
-           "non_neg_integer()";
-       true ->
-           "integer()"
-    end.
-
-enum_spec([Variants]) ->
-    string:join([atom_to_list(V) || V <- Variants], " | ").
-
-is_required(Var, State) ->
-    lists:member(Var, State#state.required) orelse
-       proplists:get_bool(Var, State#state.required).
-
-normalize(#xmlel{name = Name, attrs = Attrs, children = Els}) ->
-    #xmlel{name = Name,
-          attrs = [normalize(Attr) || Attr <- Attrs],
-          children = [normalize(El) || El <- Els]};
-normalize({Key, Data}) ->
-    {Key, normalize(Data)};
-normalize(Txt) when is_binary(Txt) ->
-    case re:split(Txt, "[\\s\\r\\n\\t]+", [trim, {return, list}]) of
-       [""|T] ->
-           list_to_binary(string:join(T, " "));
-       T ->
-           list_to_binary(string:join(T, " "))
-    end.
diff --git a/src/xmpp.erl b/src/xmpp.erl
deleted file mode 100644 (file)
index 2c08c2b..0000000
+++ /dev/null
@@ -1,827 +0,0 @@
-%%%-------------------------------------------------------------------
-%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%% @copyright (C) 2015, Evgeny Khramtsov
-%%% @doc
-%%%
-%%% @end
-%%% Created :  9 Dec 2015 by Evgeny Khramtsov <ekhramtsov@process-one.net>
-%%%-------------------------------------------------------------------
--module(xmpp).
-
-%% API
--export([make_iq_result/1, make_iq_result/2, make_error/2,
-        decode/1, decode/3, encode/1, encode/2,
-        get_type/1, get_to/1, get_from/1, get_id/1,
-        get_lang/1, get_error/1, get_els/1, get_ns/1,
-        set_type/2, set_to/2, set_from/2, set_id/2,
-        set_lang/2, set_error/2, set_els/2, set_from_to/3,
-        format_error/1, is_stanza/1, set_subtag/2, get_subtag/2,
-        remove_subtag/2, has_subtag/2, decode_els/1, decode_els/3,
-        pp/1, get_name/1, get_text/1, mk_text/1, mk_text/2,
-        is_known_tag/1, is_known_tag/2, append_subtags/2]).
-
-%% XMPP errors
--export([err_bad_request/0, err_bad_request/2,
-         err_conflict/0, err_conflict/2,
-         err_feature_not_implemented/0, err_feature_not_implemented/2,
-         err_forbidden/0, err_forbidden/2,
-         err_gone/0, err_gone/2,
-         err_internal_server_error/0, err_internal_server_error/2,
-         err_item_not_found/0, err_item_not_found/2,
-         err_jid_malformed/0, err_jid_malformed/2,
-         err_not_acceptable/0, err_not_acceptable/2,
-         err_not_allowed/0, err_not_allowed/2,
-         err_not_authorized/0, err_not_authorized/2,
-        err_payment_required/0, err_payment_required/2,
-         err_policy_violation/0, err_policy_violation/2,
-         err_recipient_unavailable/0, err_recipient_unavailable/2,
-         err_redirect/0, err_redirect/2,
-         err_registration_required/0, err_registration_required/2,
-         err_remote_server_not_found/0, err_remote_server_not_found/2,
-         err_remote_server_timeout/0, err_remote_server_timeout/2,
-         err_resource_constraint/0, err_resource_constraint/2,
-         err_service_unavailable/0, err_service_unavailable/2,
-         err_subscription_required/0, err_subscription_required/2,
-         err_undefined_condition/1, err_undefined_condition/3,
-         err_unexpected_request/0, err_unexpected_request/2]).
-
-%% XMPP stream errors
--export([serr_bad_format/0, serr_bad_format/2,
-         serr_bad_namespace_prefix/0, serr_bad_namespace_prefix/2,
-         serr_conflict/0, serr_conflict/2,
-         serr_connection_timeout/0, serr_connection_timeout/2,
-         serr_host_gone/0, serr_host_gone/2,
-         serr_host_unknown/0, serr_host_unknown/2,
-         serr_improper_addressing/0, serr_improper_addressing/2,
-         serr_internal_server_error/0, serr_internal_server_error/2,
-         serr_invalid_from/0, serr_invalid_from/2,
-         serr_invalid_id/0, serr_invalid_id/2,
-         serr_invalid_namespace/0, serr_invalid_namespace/2,
-         serr_invalid_xml/0, serr_invalid_xml/2,
-         serr_not_authorized/0, serr_not_authorized/2,
-         serr_not_well_formed/0, serr_not_well_formed/2,
-         serr_policy_violation/0, serr_policy_violation/2,
-         serr_remote_connection_failed/0, serr_remote_connection_failed/2,
-         serr_reset/0, serr_reset/2,
-         serr_resource_constraint/0, serr_resource_constraint/2,
-         serr_restricted_xml/0, serr_restricted_xml/2,
-         serr_see_other_host/0, serr_see_other_host/2,
-         serr_system_shutdown/0, serr_system_shutdown/2,
-         serr_undefined_condition/0, serr_undefined_condition/2,
-         serr_unsupported_encoding/0, serr_unsupported_encoding/2,
-         serr_unsupported_stanza_type/0, serr_unsupported_stanza_type/2,
-         serr_unsupported_version/0, serr_unsupported_version/2]).
-
--include("xmpp.hrl").
-
-%%%===================================================================
-%%% API
-%%%===================================================================
--spec make_iq_result(iq()) -> iq().
-make_iq_result(IQ) ->
-    make_iq_result(IQ, undefined).
-
--spec make_iq_result(iq(), xmpp_element() | xmlel() | undefined) -> iq().
-make_iq_result(#iq{type = Type, from = From, to = To} = IQ, El)
-  when Type == get; Type == set ->
-    SubEls = if El == undefined -> [];
-               true -> [El]
-            end,
-    IQ#iq{type = result, to = From, from = To, sub_els = SubEls}.
-
--spec make_error(message(), stanza_error() | xmlel()) -> message();
-               (presence(), stanza_error() | xmlel()) -> presence();
-               (iq(), stanza_error() | xmlel()) -> iq();
-               (xmlel(), stanza_error() | xmlel()) -> xmlel().
-make_error(#message{type = Type, from = From, to = To, sub_els = Els} = Msg,
-          Err) when Type /= error ->
-    Msg#message{type = error, from = To, to = From, sub_els = Els ++ [Err]};
-make_error(#presence{type = Type, from = From, to = To, sub_els = Els} = Pres,
-          Err) when Type /= error ->
-    Pres#presence{type = error, from = To, to = From, sub_els = Els ++ [Err]};
-make_error(#iq{type = Type, from = From, to = To, sub_els = Els} = IQ,
-          Err) when Type /= result, Type /= error ->
-    IQ#iq{type = error, from = To, to = From, sub_els = Els ++ [Err]};
-make_error(#xmlel{attrs = Attrs, children = Els} = El, Err) ->
-    To = fxml:get_attr(<<"to">>, Attrs),
-    From = fxml:get_attr(<<"from">>, Attrs),
-    Attrs1 = case To of
-                {value, T} ->
-                    lists:keystore(<<"from">>, 1, Attrs, {<<"from">>, T});
-                _ ->
-                    Attrs
-            end,
-    Attrs2 = case From of
-                {value, F} ->
-                    lists:keystore(<<"to">>, 1, Attrs1, {<<"to">>, F});
-                _ ->
-                    Attrs
-            end,
-    Attrs3 = lists:keystore(<<"type">>, 1, Attrs2, {<<"type">>, <<"error">>}),
-    El#xmlel{attrs = Attrs3, children = Els ++ [encode(Err, ?NS_CLIENT)]}.
-
--spec get_id(iq() | message() | presence() | xmlel()) -> binary().
-get_id(#iq{id = ID}) -> ID;
-get_id(#message{id = ID}) -> ID;
-get_id(#presence{id = ID}) -> ID;
-get_id(#xmlel{attrs = Attrs}) -> fxml:get_attr_s(<<"id">>, Attrs).
-
--spec get_type(iq()) -> iq_type();
-             (message()) -> message_type();
-             (presence()) -> presence_type();
-             (xmlel()) -> binary().
-get_type(#iq{type = T}) -> T;
-get_type(#message{type = T}) -> T;
-get_type(#presence{type = T}) -> T;
-get_type(#xmlel{attrs = Attrs}) -> fxml:get_attr_s(<<"type">>, Attrs).
-
--spec get_lang(iq() | message() | presence() | xmlel()) -> binary().
-get_lang(#iq{lang = L}) -> L;
-get_lang(#message{lang = L}) -> L;
-get_lang(#presence{lang = L}) -> L;
-get_lang(#xmlel{attrs = Attrs}) -> fxml:get_attr_s(<<"xml:lang">>, Attrs).
-
--spec get_from(iq() | message() | presence()) -> undefined | jid:jid().
-get_from(#iq{from = J}) -> J;
-get_from(#message{from = J}) -> J;
-get_from(#presence{from = J}) -> J.
-
--spec get_to(iq() | message() | presence()) -> undefined | jid:jid().
-get_to(#iq{to = J}) -> J;
-get_to(#message{to = J}) -> J;
-get_to(#presence{to = J}) -> J.
-
--spec get_error(iq() | message() | presence()) -> undefined | stanza_error().
-get_error(Stanza) ->
-    case get_subtag(Stanza, #stanza_error{}) of
-       false -> undefined;
-       Error -> Error
-    end.
-
--spec get_els(iq() | message() | presence()) -> [xmpp_element() | xmlel()];
-            (xmlel()) -> [xmlel()].
-get_els(#iq{sub_els = Els}) -> Els;
-get_els(#message{sub_els = Els}) -> Els;
-get_els(#presence{sub_els = Els}) -> Els;
-get_els(#xmlel{children = Els}) -> [El || El = #xmlel{} <- Els].
-
--spec set_id(iq(), binary()) -> iq();
-           (message(), binary()) -> message();
-           (presence(), binary()) -> presence().
-set_id(#iq{} = IQ, I) -> IQ#iq{id = I};
-set_id(#message{} = Msg, I) -> Msg#message{id = I};
-set_id(#presence{} = Pres, I) -> Pres#presence{id = I}.
-
--spec set_type(iq(), iq_type()) -> iq();
-             (message(), message_type()) -> message();
-             (presence(), presence_type()) -> presence().
-set_type(#iq{} = IQ, T) -> IQ#iq{type = T};
-set_type(#message{} = Msg, T) -> Msg#message{type = T};
-set_type(#presence{} = Pres, T) -> Pres#presence{type = T}.
-
--spec set_lang(iq(), binary()) -> iq();
-             (message(), binary()) -> message();
-             (presence(), binary()) -> presence().
-set_lang(#iq{} = IQ, L) -> IQ#iq{lang = L};
-set_lang(#message{} = Msg, L) -> Msg#message{lang = L};
-set_lang(#presence{} = Pres, L) -> Pres#presence{lang = L}.
-
--spec set_from(iq(), jid:jid()) -> iq();
-             (message(), jid:jid()) -> message();
-             (presence(), jid:jid()) -> presence().
-set_from(#iq{} = IQ, J) -> IQ#iq{from = J};
-set_from(#message{} = Msg, J) -> Msg#message{from = J};
-set_from(#presence{} = Pres, J) -> Pres#presence{from = J}.
-
--spec set_to(iq(), jid:jid()) -> iq();
-           (message(), jid:jid()) -> message();
-           (presence(), jid:jid()) -> presence().
-set_to(#iq{} = IQ, J) -> IQ#iq{to = J};
-set_to(#message{} = Msg, J) -> Msg#message{to = J};
-set_to(#presence{} = Pres, J) -> Pres#presence{to = J}.
-
--spec set_from_to(iq(), undefined | jid:jid(), undefined | jid:jid()) -> iq();
-                (message(), undefined | jid:jid(), undefined | jid:jid()) -> message();
-                (presence(), undefined | jid:jid(), undefined | jid:jid()) -> presence().
-set_from_to(#iq{} = IQ, F, T) -> IQ#iq{from = F, to = T};
-set_from_to(#message{} = Msg, F, T) -> Msg#message{from = F, to = T};
-set_from_to(#presence{} = Pres, F, T) -> Pres#presence{from = F, to = T}.
-
--spec set_error(iq(), stanza_error()) -> iq();
-              (message(), stanza_error()) -> message();
-              (presence(), stanza_error()) -> presence().
-set_error(Stanza, E) -> set_subtag(Stanza, E).
-
--spec set_els(iq(), [xmpp_element() | xmlel()]) -> iq();
-            (message(), [xmpp_element() | xmlel()]) -> message();
-            (presence(), [xmpp_element() | xmlel()]) -> presence().
-set_els(#iq{} = IQ, Els) -> IQ#iq{sub_els = Els};
-set_els(#message{} = Msg, Els) -> Msg#message{sub_els = Els};
-set_els(#presence{} = Pres, Els) -> Pres#presence{sub_els = Els}.
-
--spec get_ns(xmpp_element() | xmlel()) -> binary().
-get_ns(#xmlel{attrs = Attrs}) ->
-    fxml:get_attr_s(<<"xmlns">>, Attrs);
-get_ns(Pkt) ->
-    xmpp_codec:get_ns(Pkt).
-
--spec get_name(xmpp_element() | xmlel()) -> binary().
-get_name(#xmlel{name = Name}) ->
-    Name;
-get_name(Pkt) ->
-    xmpp_codec:get_name(Pkt).
-
--spec decode(xmlel() | xmpp_element()) -> {ok, xmpp_element()} | {error, any()}.
-decode(El) ->
-    decode(El, ?NS_CLIENT, []).
-
--spec decode(xmlel() | xmpp_element(), binary(), [proplists:property()]) ->
-                   {ok, xmpp_element()} | {error, any()}.
-decode(#xmlel{} = El, TopXMLNS, Opts) ->
-    xmpp_codec:decode(El, TopXMLNS, Opts);
-decode(Pkt, _, _) ->
-    Pkt.
-
--spec decode_els(iq()) -> iq();
-               (message()) -> message();
-               (presence()) -> presence().
-decode_els(Stanza) ->
-    decode_els(Stanza, ?NS_CLIENT, fun is_known_tag/1).
-
--type match_fun() :: fun((xmlel()) -> boolean()).
--spec decode_els(iq(), binary(), match_fun()) -> iq();
-               (message(), binary(), match_fun()) -> message();
-               (presence(), binary(), match_fun()) -> presence().
-decode_els(Stanza, TopXMLNS, MatchFun) ->
-    Els = lists:map(
-           fun(#xmlel{} = El) ->
-                   case MatchFun(El) of
-                       true -> decode(El, TopXMLNS, []);
-                       false -> El
-                   end;
-              (Pkt) ->
-                   Pkt
-           end, get_els(Stanza)),
-    set_els(Stanza, Els).
-
--spec encode(xmpp_element() | xmlel()) -> xmlel().
-encode(Pkt) ->
-    encode(Pkt, <<>>).
-
--spec encode(xmpp_element() | xmlel(), binary()) -> xmlel().
-encode(Pkt, TopXMLNS) ->
-    xmpp_codec:encode(Pkt, TopXMLNS).
-
--spec is_known_tag(xmlel()) -> boolean().
-is_known_tag(El) ->
-    is_known_tag(El, ?NS_CLIENT).
-
--spec is_known_tag(xmlel(), binary()) -> boolean().
-is_known_tag(El, TopXMLNS) ->
-    xmpp_codec:is_known_tag(El, TopXMLNS).
-
-format_error(Reason) ->
-    xmpp_codec:format_error(Reason).
-
--spec is_stanza(any()) -> boolean().
-is_stanza(#message{}) -> true;
-is_stanza(#iq{}) -> true;
-is_stanza(#presence{}) -> true;
-is_stanza(#xmlel{name = Name}) ->
-    (Name == <<"iq">>) or (Name == <<"message">>) or (Name == <<"presence">>);
-is_stanza(_) -> false.
-
--spec set_subtag(iq(), xmpp_element()) -> iq();
-               (message(), xmpp_element()) -> message();
-               (presence(), xmpp_element()) -> presence().
-set_subtag(Stanza, Tag) ->
-    TagName = xmpp_codec:get_name(Tag),
-    XMLNS = xmpp_codec:get_ns(Tag),
-    Els = get_els(Stanza),
-    NewEls = set_subtag(Els, Tag, TagName, XMLNS),
-    set_els(Stanza, NewEls).
-
-set_subtag([El|Els], Tag, TagName, XMLNS) ->
-    case match_tag(El, TagName, XMLNS) of
-       true ->
-           [Tag|Els];
-       false ->
-           [El|set_subtag(Els, Tag, TagName, XMLNS)]
-    end;
-set_subtag([], Tag, _, _) ->
-    [Tag].
-
--spec get_subtag(stanza(), xmpp_element()) -> xmpp_element() | false.
-get_subtag(Stanza, Tag) ->
-    Els = get_els(Stanza),
-    TagName = xmpp_codec:get_name(Tag),
-    XMLNS = xmpp_codec:get_ns(Tag),
-    get_subtag(Els, TagName, XMLNS).
-
-get_subtag([El|Els], TagName, XMLNS) ->
-    case match_tag(El, TagName, XMLNS) of
-       true ->
-           try
-               decode(El)
-           catch _:{xmpp_codec, _Why} ->
-                   get_subtag(Els, TagName, XMLNS)
-           end;
-       false ->
-           get_subtag(Els, TagName, XMLNS)
-    end;
-get_subtag([], _, _) ->
-    false.
-
--spec remove_subtag(iq(), xmpp_element()) -> iq();
-                  (message(), xmpp_element()) -> message();
-                  (presence(), xmpp_element()) -> presence().
-remove_subtag(Stanza, Tag) ->
-    Els = get_els(Stanza),
-    TagName = xmpp_codec:get_name(Tag),
-    XMLNS = xmpp_codec:get_ns(Tag),
-    NewEls = remove_subtag(Els, TagName, XMLNS),
-    set_els(Stanza, NewEls).
-
-remove_subtag([El|Els], TagName, XMLNS) ->
-    case match_tag(El, TagName, XMLNS) of
-       true ->
-           remove_subtag(Els, TagName, XMLNS);
-       false ->
-           [El|remove_subtag(Els, TagName, XMLNS)]
-    end;
-remove_subtag([], _, _) ->
-    [].
-
--spec has_subtag(stanza(), xmpp_element()) -> boolean().
-has_subtag(Stanza, Tag) ->
-    Els = get_els(Stanza),
-    TagName = xmpp_codec:get_name(Tag),
-    XMLNS = xmpp_codec:get_ns(Tag),
-    has_subtag(Els, TagName, XMLNS).
-
-has_subtag([El|Els], TagName, XMLNS) ->
-    case match_tag(El, TagName, XMLNS) of
-       true ->
-           true;
-       false ->
-           has_subtag(Els, TagName, XMLNS)
-    end;
-has_subtag([], _, _) ->
-    false.
-
--spec append_subtags(stanza(), [xmpp_element() | xmlel()]) -> stanza().
-append_subtags(Stanza, Tags) ->
-    Els = get_els(Stanza),
-    set_els(Stanza, Els ++ Tags).
-
--spec get_text([text()]) -> binary().
-get_text([]) -> <<"">>;
-get_text([#text{data = Data}|_]) -> Data.
-
--spec mk_text(binary()) -> [text()].
-mk_text(Text) ->
-    mk_text(Text, <<"">>).
-
--spec mk_text(binary(), binary()) -> [text()].
-mk_text(<<"">>, _) ->
-    [];
-mk_text(Text, Lang) ->
-    [#text{lang = Lang,
-          data = translate:translate(Lang, Text)}].
-
--spec pp(any()) -> iodata().
-pp(Term) ->
-    xmpp_codec:pp(Term).
-
-%%%===================================================================
-%%% Functions to construct general XMPP errors
-%%%===================================================================
--spec err_bad_request() -> stanza_error().
-err_bad_request() ->
-    err(modify, 'bad-request', 400).
-
--spec err_bad_request(binary(), binary()) -> stanza_error().
-err_bad_request(Text, Lang) ->
-    err(modify, 'bad-request', 400, Text, Lang).
-
--spec err_conflict() -> stanza_error().
-err_conflict() ->
-    err(cancel, 'conflict', 409).
-
--spec err_conflict(binary(), binary()) -> stanza_error().
-err_conflict(Text, Lang) ->
-    err(cancel, 'conflict', 409, Text, Lang).
-
--spec err_feature_not_implemented() -> stanza_error().
-err_feature_not_implemented() ->
-    err(cancel, 'feature-not-implemented', 501).
-
--spec err_feature_not_implemented(binary(), binary()) -> stanza_error().
-err_feature_not_implemented(Text, Lang) ->
-    err(cancel, 'feature-not-implemented', 501, Text, Lang).
-
--spec err_forbidden() -> stanza_error().
-err_forbidden() ->
-    err(auth, 'forbidden', 403).
-
--spec err_forbidden(binary(), binary()) -> stanza_error().
-err_forbidden(Text, Lang) ->
-    err(auth, 'forbidden', 403, Text, Lang).
-
-%% RFC 6120 says error type SHOULD be "cancel".
-%% RFC 3920 and XEP-0082 says it SHOULD be "modify".
--spec err_gone() -> stanza_error().
-err_gone() ->
-    err(modify, 'gone', 302).
-
--spec err_gone(binary(), binary()) -> stanza_error().
-err_gone(Text, Lang) ->
-    err(modify, 'gone', 302, Text, Lang).
-
-%% RFC 6120 sasy error type SHOULD be "cancel".
-%% RFC 3920 and XEP-0082 says it SHOULD be "wait".
--spec err_internal_server_error() -> stanza_error().
-err_internal_server_error() ->
-    err(wait, 'internal-server-error', 500).
-
--spec err_internal_server_error(binary(), binary()) -> stanza_error().
-err_internal_server_error(Text, Lang) ->
-    err(wait, 'internal-server-error', 500, Text, Lang).
-
--spec err_item_not_found() -> stanza_error().
-err_item_not_found() ->
-    err(cancel, 'item-not-found', 404).
-
--spec err_item_not_found(binary(), binary()) -> stanza_error().
-err_item_not_found(Text, Lang) ->
-    err(cancel, 'item-not-found', 404, Text, Lang).
-
--spec err_jid_malformed() -> stanza_error().
-err_jid_malformed() ->
-    err(modify, 'jid-malformed', 400).
-
--spec err_jid_malformed(binary(), binary()) -> stanza_error().
-err_jid_malformed(Text, Lang) ->
-    err(modify, 'jid-malformed', 400, Text, Lang).
-
--spec err_not_acceptable() -> stanza_error().
-err_not_acceptable() ->
-    err(modify, 'not-acceptable', 406).
-
--spec err_not_acceptable(binary(), binary()) -> stanza_error().
-err_not_acceptable(Text, Lang) ->
-    err(modify, 'not-acceptable', 406, Text, Lang).
-
--spec err_not_allowed() -> stanza_error().
-err_not_allowed() ->
-    err(cancel, 'not-allowed', 405).
-
--spec err_not_allowed(binary(), binary()) -> stanza_error().
-err_not_allowed(Text, Lang) ->
-    err(cancel, 'not-allowed', 405, Text, Lang).
-
--spec err_not_authorized() -> stanza_error().
-err_not_authorized() ->
-    err(auth, 'not-authorized', 401).
-
--spec err_not_authorized(binary(), binary()) -> stanza_error().
-err_not_authorized(Text, Lang) ->
-    err(auth, 'not-authorized', 401, Text, Lang).
-
--spec err_payment_required() -> stanza_error().
-err_payment_required() ->
-    err(auth, 'not-authorized', 402).
-
--spec err_payment_required(binary(), binary()) -> stanza_error().
-err_payment_required(Text, Lang) ->
-    err(auth, 'not-authorized', 402, Text, Lang).
-
-%% <policy-violation/> is defined in neither RFC 3920 nor XEP-0086.
-%% We choose '403' error code (as in <forbidden/>).
--spec err_policy_violation() -> stanza_error().
-err_policy_violation() ->
-    err(modify, 'policy-violation', 403).
-
--spec err_policy_violation(binary(), binary()) -> stanza_error().
-err_policy_violation(Text, Lang) ->
-    err(modify, 'policy-violation', 403, Text, Lang).
-
--spec err_recipient_unavailable() -> stanza_error().
-err_recipient_unavailable() ->
-    err(wait, 'recipient-unavailable', 404).
-
--spec err_recipient_unavailable(binary(), binary()) -> stanza_error().
-err_recipient_unavailable(Text, Lang) ->
-    err(wait, 'recipient-unavailable', 404, Text, Lang).
-
--spec err_redirect() -> stanza_error().
-err_redirect() ->
-    err(modify, 'redirect', 302).
-
--spec err_redirect(binary(), binary()) -> stanza_error().
-err_redirect(Text, Lang) ->
-    err(modify, 'redirect', 302, Text, Lang).
-
--spec err_registration_required() -> stanza_error().
-err_registration_required() ->
-    err(auth, 'registration-required', 407).
-
--spec err_registration_required(binary(), binary()) -> stanza_error().
-err_registration_required(Text, Lang) ->
-    err(auth, 'registration-required', 407, Text, Lang).
-
--spec err_remote_server_not_found() -> stanza_error().
-err_remote_server_not_found() ->
-    err(cancel, 'remote-server-not-found', 404).
-
--spec err_remote_server_not_found(binary(), binary()) -> stanza_error().
-err_remote_server_not_found(Text, Lang) ->
-    err(cancel, 'remote-server-not-found', 404, Text, Lang).
-
--spec err_remote_server_timeout() -> stanza_error().
-err_remote_server_timeout() ->
-    err(wait, 'remote-server-timeout', 504).
-
--spec err_remote_server_timeout(binary(), binary()) -> stanza_error().
-err_remote_server_timeout(Text, Lang) ->
-    err(wait, 'remote-server-timeout', 504, Text, Lang).
-
--spec err_resource_constraint() -> stanza_error().
-err_resource_constraint() ->
-    err(wait, 'resource-constraint', 500).
-
--spec err_resource_constraint(binary(), binary()) -> stanza_error().
-err_resource_constraint(Text, Lang) ->
-    err(wait, 'resource-constraint', 500, Text, Lang).
-
--spec err_service_unavailable() -> stanza_error().
-err_service_unavailable() ->
-    err(cancel, 'service-unavailable', 503).
-
--spec err_service_unavailable(binary(), binary()) -> stanza_error().
-err_service_unavailable(Text, Lang) ->
-    err(cancel, 'service-unavailable', 503, Text, Lang).
-
--spec err_subscription_required() -> stanza_error().
-err_subscription_required() ->
-    err(auth, 'subscription-required', 407).
-
--spec err_subscription_required(binary(), binary()) -> stanza_error().
-err_subscription_required(Text, Lang) ->
-    err(auth, 'subscription-required', 407, Text, Lang).
-
-%% No error type is defined for <undefined-confition/>.
-%% Let user provide the type.
--spec err_undefined_condition('auth' | 'cancel' | 'continue' |
-                             'modify' | 'wait') -> stanza_error().
-err_undefined_condition(Type) ->
-    err(Type, 'undefined-condition', 500).
-
--spec err_undefined_condition('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
-                             binary(), binary()) -> stanza_error().
-err_undefined_condition(Type, Text, Lang) ->
-    err(Type, 'undefined-condition', 500, Text, Lang).
-
-%% RFC 6120 says error type SHOULD be "wait" or "modify".
-%% RFC 3920 and XEP-0082 says it SHOULD be "wait".
--spec err_unexpected_request() -> stanza_error().
-err_unexpected_request() ->
-    err(wait, 'unexpected-request', 400).
-
--spec err_unexpected_request(binary(), binary()) -> stanza_error().
-err_unexpected_request(Text, Lang) ->
-    err(wait, 'unexpected-request', 400, Text, Lang).
-
-%%%===================================================================
-%%% Functions to construct stream errors
-%%%===================================================================
--spec serr_bad_format() -> stream_error().
-serr_bad_format() ->
-    serr('bad-format').
-
--spec serr_bad_format(binary(), binary()) -> stream_error().
-serr_bad_format(Text, Lang) ->
-    serr('bad-format', Text, Lang).
-
--spec serr_bad_namespace_prefix() -> stream_error().
-serr_bad_namespace_prefix() ->
-    serr('bad-namespace-prefix').
-
--spec serr_bad_namespace_prefix(binary(), binary()) -> stream_error().
-serr_bad_namespace_prefix(Text, Lang) ->
-    serr('bad-namespace-prefix', Text, Lang).
-
--spec serr_conflict() -> stream_error().
-serr_conflict() ->
-    serr('conflict').
-
--spec serr_conflict(binary(), binary()) -> stream_error().
-serr_conflict(Text, Lang) ->
-    serr('conflict', Text, Lang).
-
--spec serr_connection_timeout() -> stream_error().
-serr_connection_timeout() ->
-    serr('connection-timeout').
-
--spec serr_connection_timeout(binary(), binary()) -> stream_error().
-serr_connection_timeout(Text, Lang) ->
-    serr('connection-timeout', Text, Lang).
-
--spec serr_host_gone() -> stream_error().
-serr_host_gone() ->
-    serr('host-gone').
-
--spec serr_host_gone(binary(), binary()) -> stream_error().
-serr_host_gone(Text, Lang) ->
-    serr('host-gone', Text, Lang).
-
--spec serr_host_unknown() -> stream_error().
-serr_host_unknown() ->
-    serr('host-unknown').
-
--spec serr_host_unknown(binary(), binary()) -> stream_error().
-serr_host_unknown(Text, Lang) ->
-    serr('host-unknown', Text, Lang).
-
--spec serr_improper_addressing() -> stream_error().
-serr_improper_addressing() ->
-    serr('improper-addressing').
-
--spec serr_improper_addressing(binary(), binary()) -> stream_error().
-serr_improper_addressing(Text, Lang) ->
-    serr('improper-addressing', Text, Lang).
-
--spec serr_internal_server_error() -> stream_error().
-serr_internal_server_error() ->
-    serr('internal-server-error').
-
--spec serr_internal_server_error(binary(), binary()) -> stream_error().
-serr_internal_server_error(Text, Lang) ->
-    serr('internal-server-error', Text, Lang).
-
--spec serr_invalid_from() -> stream_error().
-serr_invalid_from() ->
-    serr('invalid-from').
-
--spec serr_invalid_from(binary(), binary()) -> stream_error().
-serr_invalid_from(Text, Lang) ->
-    serr('invalid-from', Text, Lang).
-
--spec serr_invalid_id() -> stream_error().
-serr_invalid_id() ->
-    serr('invalid-id').
-
--spec serr_invalid_id(binary(), binary()) -> stream_error().
-serr_invalid_id(Text, Lang) ->
-    serr('invalid-id', Text, Lang).
-
--spec serr_invalid_namespace() -> stream_error().
-serr_invalid_namespace() ->
-    serr('invalid-namespace').
-
--spec serr_invalid_namespace(binary(), binary()) -> stream_error().
-serr_invalid_namespace(Text, Lang) ->
-    serr('invalid-namespace', Text, Lang).
-
--spec serr_invalid_xml() -> stream_error().
-serr_invalid_xml() ->
-    serr('invalid-xml').
-
--spec serr_invalid_xml(binary(), binary()) -> stream_error().
-serr_invalid_xml(Text, Lang) ->
-    serr('invalid-xml', Text, Lang).
-
--spec serr_not_authorized() -> stream_error().
-serr_not_authorized() ->
-    serr('not-authorized').
-
--spec serr_not_authorized(binary(), binary()) -> stream_error().
-serr_not_authorized(Text, Lang) ->
-    serr('not-authorized', Text, Lang).
-
--spec serr_not_well_formed() -> stream_error().
-serr_not_well_formed() ->
-    serr('not-well-formed').
-
--spec serr_not_well_formed(binary(), binary()) -> stream_error().
-serr_not_well_formed(Text, Lang) ->
-    serr('not-well-formed', Text, Lang).
-
--spec serr_policy_violation() -> stream_error().
-serr_policy_violation() ->
-    serr('policy-violation').
-
--spec serr_policy_violation(binary(), binary()) -> stream_error().
-serr_policy_violation(Text, Lang) ->
-    serr('policy-violation', Text, Lang).
-
--spec serr_remote_connection_failed() -> stream_error().
-serr_remote_connection_failed() ->
-    serr('remote-connection-failed').
-
--spec serr_remote_connection_failed(binary(), binary()) -> stream_error().
-serr_remote_connection_failed(Text, Lang) ->
-    serr('remote-connection-failed', Text, Lang).
-
--spec serr_reset() -> stream_error().
-serr_reset() ->
-    serr('reset').
-
--spec serr_reset(binary(), binary()) -> stream_error().
-serr_reset(Text, Lang) ->
-    serr('reset', Text, Lang).
-
--spec serr_resource_constraint() -> stream_error().
-serr_resource_constraint() ->
-    serr('resource-constraint').
-
--spec serr_resource_constraint(binary(), binary()) -> stream_error().
-serr_resource_constraint(Text, Lang) ->
-    serr('resource-constraint', Text, Lang).
-
--spec serr_restricted_xml() -> stream_error().
-serr_restricted_xml() ->
-    serr('restricted-xml').
-
--spec serr_restricted_xml(binary(), binary()) -> stream_error().
-serr_restricted_xml(Text, Lang) ->
-    serr('restricted-xml', Text, Lang).
-
--spec serr_see_other_host() -> stream_error().
-serr_see_other_host() ->
-    serr('see-other-host').
-
--spec serr_see_other_host(binary(), binary()) -> stream_error().
-serr_see_other_host(Text, Lang) ->
-    serr('see-other-host', Text, Lang).
-
--spec serr_system_shutdown() -> stream_error().
-serr_system_shutdown() ->
-    serr('system-shutdown').
-
--spec serr_system_shutdown(binary(), binary()) -> stream_error().
-serr_system_shutdown(Text, Lang) ->
-    serr('system-shutdown', Text, Lang).
-
--spec serr_undefined_condition() -> stream_error().
-serr_undefined_condition() ->
-    serr('undefined-condition').
-
--spec serr_undefined_condition(binary(), binary()) -> stream_error().
-serr_undefined_condition(Text, Lang) ->
-    serr('undefined-condition', Text, Lang).
-
--spec serr_unsupported_encoding() -> stream_error().
-serr_unsupported_encoding() ->
-    serr('unsupported-encoding').
-
--spec serr_unsupported_encoding(binary(), binary()) -> stream_error().
-serr_unsupported_encoding(Text, Lang) ->
-    serr('unsupported-encoding', Text, Lang).
-
--spec serr_unsupported_stanza_type() -> stream_error().
-serr_unsupported_stanza_type() ->
-    serr('unsupported-stanza-type').
-
--spec serr_unsupported_stanza_type(binary(), binary()) -> stream_error().
-serr_unsupported_stanza_type(Text, Lang) ->
-    serr('unsupported-stanza-type', Text, Lang).
-
--spec serr_unsupported_version() -> stream_error().
-serr_unsupported_version() ->
-    serr('unsupported-version').
-
--spec serr_unsupported_version(binary(), binary()) -> stream_error().
-serr_unsupported_version(Text, Lang) ->
-    serr('unsupported-version', Text, Lang).
-
-%%%===================================================================
-%%% Internal functions
-%%%===================================================================
--spec err('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
-         atom() | gone() | redirect(), non_neg_integer()) -> stanza_error().
-err(Type, Reason, Code) ->
-    #stanza_error{type = Type, reason = Reason, code = Code}.
-
--spec err('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
-         atom() | gone() | redirect(), non_neg_integer(),
-         binary(), binary()) -> stanza_error().
-err(Type, Reason, Code, Text, Lang) ->
-    #stanza_error{type = Type, reason = Reason, code = Code,
-                 text = #text{lang = Lang,
-                              data = translate:translate(Lang, Text)}}.
-
--spec serr(atom() | 'see-other-host'()) -> stream_error().
-serr(Reason) ->
-    #stream_error{reason = Reason}.
-
--spec serr(atom() | 'see-other-host'(), binary(),
-          binary()) -> stream_error().
-serr(Reason, Text, Lang) ->
-    #stream_error{reason = Reason,
-                 text = #text{lang = Lang,
-                              data = translate:translate(Lang, Text)}}.
-
--spec match_tag(xmlel() | xmpp_element(), binary(), binary()) -> boolean().
-match_tag(El, TagName, XMLNS) ->
-    get_name(El) == TagName andalso get_ns(El) == XMLNS.
diff --git a/src/xmpp_codec.erl b/src/xmpp_codec.erl
deleted file mode 100644 (file)
index 6089f79..0000000
+++ /dev/null
@@ -1,34647 +0,0 @@
-%% Created automatically by XML generator (fxml_gen.erl)
-%% Source: xmpp_codec.spec
-
--module(xmpp_codec).
-
--compile({nowarn_unused_function,
-         [{dec_int, 3}, {dec_int, 1}, {dec_enum, 2},
-          {enc_int, 1}, {get_attr, 2}, {enc_enum, 1},
-          {choose_top_xmlns, 3}, {enc_xmlns_attrs, 2}]}).
-
--export([pp/1, format_error/1, decode/1, decode/2,
-        decode/3, is_known_tag/2, encode/1, encode/2,
-        get_name/1, get_ns/1]).
-
-decode(_el) -> decode(_el, <<>>, []).
-
-decode(_el, Opts) -> decode(_el, <<>>, Opts).
-
-decode({xmlel, _name, _attrs, _} = _el, TopXMLNS,
-       Opts) ->
-    IgnoreEls = proplists:get_bool(ignore_els, Opts),
-    case {_name, get_attr(<<"xmlns">>, _attrs), TopXMLNS} of
-      {<<"query">>, <<"urn:xmpp:delegation:1">>, _} ->
-         decode_delegation_query(<<"urn:xmpp:delegation:1">>,
-                                 IgnoreEls, _el);
-      {<<"query">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         decode_delegation_query(<<"urn:xmpp:delegation:1">>,
-                                 IgnoreEls, _el);
-      {<<"delegate">>, <<"urn:xmpp:delegation:1">>, _} ->
-         decode_delegate(<<"urn:xmpp:delegation:1">>, IgnoreEls,
-                         _el);
-      {<<"delegate">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         decode_delegate(<<"urn:xmpp:delegation:1">>, IgnoreEls,
-                         _el);
-      {<<"delegation">>, <<"urn:xmpp:delegation:1">>, _} ->
-         decode_delegation(<<"urn:xmpp:delegation:1">>,
-                           IgnoreEls, _el);
-      {<<"delegation">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         decode_delegation(<<"urn:xmpp:delegation:1">>,
-                           IgnoreEls, _el);
-      {<<"delegated">>, <<"urn:xmpp:delegation:1">>, _} ->
-         decode_delegated(<<"urn:xmpp:delegation:1">>, IgnoreEls,
-                          _el);
-      {<<"delegated">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         decode_delegated(<<"urn:xmpp:delegation:1">>, IgnoreEls,
-                          _el);
-      {<<"attribute">>, <<"urn:xmpp:delegation:1">>, _} ->
-         decode_delegated_attribute(<<"urn:xmpp:delegation:1">>,
-                                    IgnoreEls, _el);
-      {<<"attribute">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         decode_delegated_attribute(<<"urn:xmpp:delegation:1">>,
-                                    IgnoreEls, _el);
-      {<<"privilege">>, <<"urn:xmpp:privilege:1">>, _} ->
-         decode_privilege(<<"urn:xmpp:privilege:1">>, IgnoreEls,
-                          _el);
-      {<<"privilege">>, <<>>, <<"urn:xmpp:privilege:1">>} ->
-         decode_privilege(<<"urn:xmpp:privilege:1">>, IgnoreEls,
-                          _el);
-      {<<"perm">>, <<"urn:xmpp:privilege:1">>, _} ->
-         decode_privilege_perm(<<"urn:xmpp:privilege:1">>,
-                               IgnoreEls, _el);
-      {<<"perm">>, <<>>, <<"urn:xmpp:privilege:1">>} ->
-         decode_privilege_perm(<<"urn:xmpp:privilege:1">>,
-                               IgnoreEls, _el);
-      {<<"thumbnail">>, <<"urn:xmpp:thumbs:1">>, _} ->
-         decode_thumbnail(<<"urn:xmpp:thumbs:1">>, IgnoreEls,
-                          _el);
-      {<<"thumbnail">>, <<>>, <<"urn:xmpp:thumbs:1">>} ->
-         decode_thumbnail(<<"urn:xmpp:thumbs:1">>, IgnoreEls,
-                          _el);
-      {<<"slot">>, <<"urn:xmpp:http:upload">>, _} ->
-         decode_upload_slot(<<"urn:xmpp:http:upload">>,
-                            IgnoreEls, _el);
-      {<<"slot">>, <<>>, <<"urn:xmpp:http:upload">>} ->
-         decode_upload_slot(<<"urn:xmpp:http:upload">>,
-                            IgnoreEls, _el);
-      {<<"slot">>, <<"eu:siacs:conversations:http:upload">>,
-       _} ->
-         decode_upload_slot(<<"eu:siacs:conversations:http:upload">>,
-                            IgnoreEls, _el);
-      {<<"slot">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         decode_upload_slot(<<"eu:siacs:conversations:http:upload">>,
-                            IgnoreEls, _el);
-      {<<"put">>, <<"urn:xmpp:http:upload">>, _} ->
-         decode_upload_put(<<"urn:xmpp:http:upload">>, IgnoreEls,
-                           _el);
-      {<<"put">>, <<>>, <<"urn:xmpp:http:upload">>} ->
-         decode_upload_put(<<"urn:xmpp:http:upload">>, IgnoreEls,
-                           _el);
-      {<<"put">>, <<"eu:siacs:conversations:http:upload">>,
-       _} ->
-         decode_upload_put(<<"eu:siacs:conversations:http:upload">>,
-                           IgnoreEls, _el);
-      {<<"put">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         decode_upload_put(<<"eu:siacs:conversations:http:upload">>,
-                           IgnoreEls, _el);
-      {<<"get">>, <<"urn:xmpp:http:upload">>, _} ->
-         decode_upload_get(<<"urn:xmpp:http:upload">>, IgnoreEls,
-                           _el);
-      {<<"get">>, <<>>, <<"urn:xmpp:http:upload">>} ->
-         decode_upload_get(<<"urn:xmpp:http:upload">>, IgnoreEls,
-                           _el);
-      {<<"get">>, <<"eu:siacs:conversations:http:upload">>,
-       _} ->
-         decode_upload_get(<<"eu:siacs:conversations:http:upload">>,
-                           IgnoreEls, _el);
-      {<<"get">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         decode_upload_get(<<"eu:siacs:conversations:http:upload">>,
-                           IgnoreEls, _el);
-      {<<"request">>, <<"urn:xmpp:http:upload">>, _} ->
-         decode_upload_request(<<"urn:xmpp:http:upload">>,
-                               IgnoreEls, _el);
-      {<<"request">>, <<>>, <<"urn:xmpp:http:upload">>} ->
-         decode_upload_request(<<"urn:xmpp:http:upload">>,
-                               IgnoreEls, _el);
-      {<<"request">>,
-       <<"eu:siacs:conversations:http:upload">>, _} ->
-         decode_upload_request(<<"eu:siacs:conversations:http:upload">>,
-                               IgnoreEls, _el);
-      {<<"request">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         decode_upload_request(<<"eu:siacs:conversations:http:upload">>,
-                               IgnoreEls, _el);
-      {<<"content-type">>, <<"urn:xmpp:http:upload">>, _} ->
-         decode_upload_content_type(<<"urn:xmpp:http:upload">>,
-                                    IgnoreEls, _el);
-      {<<"content-type">>, <<>>,
-       <<"urn:xmpp:http:upload">>} ->
-         decode_upload_content_type(<<"urn:xmpp:http:upload">>,
-                                    IgnoreEls, _el);
-      {<<"content-type">>,
-       <<"eu:siacs:conversations:http:upload">>, _} ->
-         decode_upload_content_type(<<"eu:siacs:conversations:http:upload">>,
-                                    IgnoreEls, _el);
-      {<<"content-type">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         decode_upload_content_type(<<"eu:siacs:conversations:http:upload">>,
-                                    IgnoreEls, _el);
-      {<<"size">>, <<"urn:xmpp:http:upload">>, _} ->
-         decode_upload_size(<<"urn:xmpp:http:upload">>,
-                            IgnoreEls, _el);
-      {<<"size">>, <<>>, <<"urn:xmpp:http:upload">>} ->
-         decode_upload_size(<<"urn:xmpp:http:upload">>,
-                            IgnoreEls, _el);
-      {<<"size">>, <<"eu:siacs:conversations:http:upload">>,
-       _} ->
-         decode_upload_size(<<"eu:siacs:conversations:http:upload">>,
-                            IgnoreEls, _el);
-      {<<"size">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         decode_upload_size(<<"eu:siacs:conversations:http:upload">>,
-                            IgnoreEls, _el);
-      {<<"filename">>, <<"urn:xmpp:http:upload">>, _} ->
-         decode_upload_filename(<<"urn:xmpp:http:upload">>,
-                                IgnoreEls, _el);
-      {<<"filename">>, <<>>, <<"urn:xmpp:http:upload">>} ->
-         decode_upload_filename(<<"urn:xmpp:http:upload">>,
-                                IgnoreEls, _el);
-      {<<"filename">>,
-       <<"eu:siacs:conversations:http:upload">>, _} ->
-         decode_upload_filename(<<"eu:siacs:conversations:http:upload">>,
-                                IgnoreEls, _el);
-      {<<"filename">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         decode_upload_filename(<<"eu:siacs:conversations:http:upload">>,
-                                IgnoreEls, _el);
-      {<<"address">>, <<"urn:xmpp:sic:0">>, _} ->
-         decode_sic(<<"urn:xmpp:sic:0">>, IgnoreEls, _el);
-      {<<"address">>, <<>>, <<"urn:xmpp:sic:0">>} ->
-         decode_sic(<<"urn:xmpp:sic:0">>, IgnoreEls, _el);
-      {<<"address">>, <<"urn:xmpp:sic:1">>, _} ->
-         decode_sic(<<"urn:xmpp:sic:1">>, IgnoreEls, _el);
-      {<<"address">>, <<>>, <<"urn:xmpp:sic:1">>} ->
-         decode_sic(<<"urn:xmpp:sic:1">>, IgnoreEls, _el);
-      {<<"port">>, <<"urn:xmpp:sic:1">>, _} ->
-         decode_sip_port(<<"urn:xmpp:sic:1">>, IgnoreEls, _el);
-      {<<"port">>, <<>>, <<"urn:xmpp:sic:1">>} ->
-         decode_sip_port(<<"urn:xmpp:sic:1">>, IgnoreEls, _el);
-      {<<"ip">>, <<"urn:xmpp:sic:0">>, _} ->
-         decode_sic_ip(<<"urn:xmpp:sic:0">>, IgnoreEls, _el);
-      {<<"ip">>, <<>>, <<"urn:xmpp:sic:0">>} ->
-         decode_sic_ip(<<"urn:xmpp:sic:0">>, IgnoreEls, _el);
-      {<<"ip">>, <<"urn:xmpp:sic:1">>, _} ->
-         decode_sic_ip(<<"urn:xmpp:sic:1">>, IgnoreEls, _el);
-      {<<"ip">>, <<>>, <<"urn:xmpp:sic:1">>} ->
-         decode_sic_ip(<<"urn:xmpp:sic:1">>, IgnoreEls, _el);
-      {<<"x">>, <<"jabber:x:oob">>, _} ->
-         decode_oob_x(<<"jabber:x:oob">>, IgnoreEls, _el);
-      {<<"x">>, <<>>, <<"jabber:x:oob">>} ->
-         decode_oob_x(<<"jabber:x:oob">>, IgnoreEls, _el);
-      {<<"desc">>, <<"jabber:x:oob">>, _} ->
-         decode_oob_desc(<<"jabber:x:oob">>, IgnoreEls, _el);
-      {<<"desc">>, <<>>, <<"jabber:x:oob">>} ->
-         decode_oob_desc(<<"jabber:x:oob">>, IgnoreEls, _el);
-      {<<"url">>, <<"jabber:x:oob">>, _} ->
-         decode_oob_url(<<"jabber:x:oob">>, IgnoreEls, _el);
-      {<<"url">>, <<>>, <<"jabber:x:oob">>} ->
-         decode_oob_url(<<"jabber:x:oob">>, IgnoreEls, _el);
-      {<<"media">>, <<"urn:xmpp:media-element">>, _} ->
-         decode_media(<<"urn:xmpp:media-element">>, IgnoreEls,
-                      _el);
-      {<<"media">>, <<>>, <<"urn:xmpp:media-element">>} ->
-         decode_media(<<"urn:xmpp:media-element">>, IgnoreEls,
-                      _el);
-      {<<"uri">>, <<"urn:xmpp:media-element">>, _} ->
-         decode_media_uri(<<"urn:xmpp:media-element">>,
-                          IgnoreEls, _el);
-      {<<"uri">>, <<>>, <<"urn:xmpp:media-element">>} ->
-         decode_media_uri(<<"urn:xmpp:media-element">>,
-                          IgnoreEls, _el);
-      {<<"captcha">>, <<"urn:xmpp:captcha">>, _} ->
-         decode_captcha(<<"urn:xmpp:captcha">>, IgnoreEls, _el);
-      {<<"captcha">>, <<>>, <<"urn:xmpp:captcha">>} ->
-         decode_captcha(<<"urn:xmpp:captcha">>, IgnoreEls, _el);
-      {<<"data">>, <<"urn:xmpp:bob">>, _} ->
-         decode_bob_data(<<"urn:xmpp:bob">>, IgnoreEls, _el);
-      {<<"data">>, <<>>, <<"urn:xmpp:bob">>} ->
-         decode_bob_data(<<"urn:xmpp:bob">>, IgnoreEls, _el);
-      {<<"stream:stream">>, <<"jabber:client">>, _} ->
-         decode_stream_start(<<"jabber:client">>, IgnoreEls,
-                             _el);
-      {<<"stream:stream">>, <<>>, <<"jabber:client">>} ->
-         decode_stream_start(<<"jabber:client">>, IgnoreEls,
-                             _el);
-      {<<"stream:stream">>, <<"jabber:server">>, _} ->
-         decode_stream_start(<<"jabber:server">>, IgnoreEls,
-                             _el);
-      {<<"stream:stream">>, <<>>, <<"jabber:server">>} ->
-         decode_stream_start(<<"jabber:server">>, IgnoreEls,
-                             _el);
-      {<<"stream:stream">>, <<"jabber:component:accept">>,
-       _} ->
-         decode_stream_start(<<"jabber:component:accept">>,
-                             IgnoreEls, _el);
-      {<<"stream:stream">>, <<>>,
-       <<"jabber:component:accept">>} ->
-         decode_stream_start(<<"jabber:component:accept">>,
-                             IgnoreEls, _el);
-      {<<"handshake">>, <<"jabber:component:accept">>, _} ->
-         decode_handshake(<<"jabber:component:accept">>,
-                          IgnoreEls, _el);
-      {<<"handshake">>, <<>>,
-       <<"jabber:component:accept">>} ->
-         decode_handshake(<<"jabber:component:accept">>,
-                          IgnoreEls, _el);
-      {<<"db:verify">>, <<"jabber:server">>, _} ->
-         decode_db_verify(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"db:verify">>, <<>>, <<"jabber:server">>} ->
-         decode_db_verify(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"db:result">>, <<"jabber:server">>, _} ->
-         decode_db_result(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"db:result">>, <<>>, <<"jabber:server">>} ->
-         decode_db_result(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"command">>,
-       <<"http://jabber.org/protocol/commands">>, _} ->
-         decode_adhoc_command(<<"http://jabber.org/protocol/commands">>,
-                              IgnoreEls, _el);
-      {<<"command">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         decode_adhoc_command(<<"http://jabber.org/protocol/commands">>,
-                              IgnoreEls, _el);
-      {<<"note">>, <<"http://jabber.org/protocol/commands">>,
-       _} ->
-         decode_adhoc_command_notes(<<"http://jabber.org/protocol/commands">>,
-                                    IgnoreEls, _el);
-      {<<"note">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         decode_adhoc_command_notes(<<"http://jabber.org/protocol/commands">>,
-                                    IgnoreEls, _el);
-      {<<"actions">>,
-       <<"http://jabber.org/protocol/commands">>, _} ->
-         decode_adhoc_command_actions(<<"http://jabber.org/protocol/commands">>,
-                                      IgnoreEls, _el);
-      {<<"actions">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         decode_adhoc_command_actions(<<"http://jabber.org/protocol/commands">>,
-                                      IgnoreEls, _el);
-      {<<"complete">>,
-       <<"http://jabber.org/protocol/commands">>, _} ->
-         decode_adhoc_command_complete(<<"http://jabber.org/protocol/commands">>,
-                                       IgnoreEls, _el);
-      {<<"complete">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         decode_adhoc_command_complete(<<"http://jabber.org/protocol/commands">>,
-                                       IgnoreEls, _el);
-      {<<"next">>, <<"http://jabber.org/protocol/commands">>,
-       _} ->
-         decode_adhoc_command_next(<<"http://jabber.org/protocol/commands">>,
-                                   IgnoreEls, _el);
-      {<<"next">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         decode_adhoc_command_next(<<"http://jabber.org/protocol/commands">>,
-                                   IgnoreEls, _el);
-      {<<"prev">>, <<"http://jabber.org/protocol/commands">>,
-       _} ->
-         decode_adhoc_command_prev(<<"http://jabber.org/protocol/commands">>,
-                                   IgnoreEls, _el);
-      {<<"prev">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         decode_adhoc_command_prev(<<"http://jabber.org/protocol/commands">>,
-                                   IgnoreEls, _el);
-      {<<"client-id">>, <<"urn:xmpp:sid:0">>, _} ->
-         decode_client_id(<<"urn:xmpp:sid:0">>, IgnoreEls, _el);
-      {<<"client-id">>, <<>>, <<"urn:xmpp:sid:0">>} ->
-         decode_client_id(<<"urn:xmpp:sid:0">>, IgnoreEls, _el);
-      {<<"stanza-id">>, <<"urn:xmpp:sid:0">>, _} ->
-         decode_stanza_id(<<"urn:xmpp:sid:0">>, IgnoreEls, _el);
-      {<<"stanza-id">>, <<>>, <<"urn:xmpp:sid:0">>} ->
-         decode_stanza_id(<<"urn:xmpp:sid:0">>, IgnoreEls, _el);
-      {<<"addresses">>,
-       <<"http://jabber.org/protocol/address">>, _} ->
-         decode_addresses(<<"http://jabber.org/protocol/address">>,
-                          IgnoreEls, _el);
-      {<<"addresses">>, <<>>,
-       <<"http://jabber.org/protocol/address">>} ->
-         decode_addresses(<<"http://jabber.org/protocol/address">>,
-                          IgnoreEls, _el);
-      {<<"address">>,
-       <<"http://jabber.org/protocol/address">>, _} ->
-         decode_address(<<"http://jabber.org/protocol/address">>,
-                        IgnoreEls, _el);
-      {<<"address">>, <<>>,
-       <<"http://jabber.org/protocol/address">>} ->
-         decode_address(<<"http://jabber.org/protocol/address">>,
-                        IgnoreEls, _el);
-      {<<"nick">>, <<"http://jabber.org/protocol/nick">>,
-       _} ->
-         decode_nick(<<"http://jabber.org/protocol/nick">>,
-                     IgnoreEls, _el);
-      {<<"nick">>, <<>>,
-       <<"http://jabber.org/protocol/nick">>} ->
-         decode_nick(<<"http://jabber.org/protocol/nick">>,
-                     IgnoreEls, _el);
-      {<<"x">>, <<"jabber:x:expire">>, _} ->
-         decode_expire(<<"jabber:x:expire">>, IgnoreEls, _el);
-      {<<"x">>, <<>>, <<"jabber:x:expire">>} ->
-         decode_expire(<<"jabber:x:expire">>, IgnoreEls, _el);
-      {<<"x">>, <<"jabber:x:event">>, _} ->
-         decode_xevent(<<"jabber:x:event">>, IgnoreEls, _el);
-      {<<"x">>, <<>>, <<"jabber:x:event">>} ->
-         decode_xevent(<<"jabber:x:event">>, IgnoreEls, _el);
-      {<<"id">>, <<"jabber:x:event">>, _} ->
-         decode_xevent_id(<<"jabber:x:event">>, IgnoreEls, _el);
-      {<<"id">>, <<>>, <<"jabber:x:event">>} ->
-         decode_xevent_id(<<"jabber:x:event">>, IgnoreEls, _el);
-      {<<"composing">>, <<"jabber:x:event">>, _} ->
-         decode_xevent_composing(<<"jabber:x:event">>, IgnoreEls,
-                                 _el);
-      {<<"composing">>, <<>>, <<"jabber:x:event">>} ->
-         decode_xevent_composing(<<"jabber:x:event">>, IgnoreEls,
-                                 _el);
-      {<<"displayed">>, <<"jabber:x:event">>, _} ->
-         decode_xevent_displayed(<<"jabber:x:event">>, IgnoreEls,
-                                 _el);
-      {<<"displayed">>, <<>>, <<"jabber:x:event">>} ->
-         decode_xevent_displayed(<<"jabber:x:event">>, IgnoreEls,
-                                 _el);
-      {<<"delivered">>, <<"jabber:x:event">>, _} ->
-         decode_xevent_delivered(<<"jabber:x:event">>, IgnoreEls,
-                                 _el);
-      {<<"delivered">>, <<>>, <<"jabber:x:event">>} ->
-         decode_xevent_delivered(<<"jabber:x:event">>, IgnoreEls,
-                                 _el);
-      {<<"offline">>, <<"jabber:x:event">>, _} ->
-         decode_xevent_offline(<<"jabber:x:event">>, IgnoreEls,
-                               _el);
-      {<<"offline">>, <<>>, <<"jabber:x:event">>} ->
-         decode_xevent_offline(<<"jabber:x:event">>, IgnoreEls,
-                               _el);
-      {<<"query">>, <<"jabber:iq:search">>, _} ->
-         decode_search(<<"jabber:iq:search">>, IgnoreEls, _el);
-      {<<"query">>, <<>>, <<"jabber:iq:search">>} ->
-         decode_search(<<"jabber:iq:search">>, IgnoreEls, _el);
-      {<<"item">>, <<"jabber:iq:search">>, _} ->
-         decode_search_item(<<"jabber:iq:search">>, IgnoreEls,
-                            _el);
-      {<<"item">>, <<>>, <<"jabber:iq:search">>} ->
-         decode_search_item(<<"jabber:iq:search">>, IgnoreEls,
-                            _el);
-      {<<"email">>, <<"jabber:iq:search">>, _} ->
-         decode_search_email(<<"jabber:iq:search">>, IgnoreEls,
-                             _el);
-      {<<"email">>, <<>>, <<"jabber:iq:search">>} ->
-         decode_search_email(<<"jabber:iq:search">>, IgnoreEls,
-                             _el);
-      {<<"nick">>, <<"jabber:iq:search">>, _} ->
-         decode_search_nick(<<"jabber:iq:search">>, IgnoreEls,
-                            _el);
-      {<<"nick">>, <<>>, <<"jabber:iq:search">>} ->
-         decode_search_nick(<<"jabber:iq:search">>, IgnoreEls,
-                            _el);
-      {<<"last">>, <<"jabber:iq:search">>, _} ->
-         decode_search_last(<<"jabber:iq:search">>, IgnoreEls,
-                            _el);
-      {<<"last">>, <<>>, <<"jabber:iq:search">>} ->
-         decode_search_last(<<"jabber:iq:search">>, IgnoreEls,
-                            _el);
-      {<<"first">>, <<"jabber:iq:search">>, _} ->
-         decode_search_first(<<"jabber:iq:search">>, IgnoreEls,
-                             _el);
-      {<<"first">>, <<>>, <<"jabber:iq:search">>} ->
-         decode_search_first(<<"jabber:iq:search">>, IgnoreEls,
-                             _el);
-      {<<"instructions">>, <<"jabber:iq:search">>, _} ->
-         decode_search_instructions(<<"jabber:iq:search">>,
-                                    IgnoreEls, _el);
-      {<<"instructions">>, <<>>, <<"jabber:iq:search">>} ->
-         decode_search_instructions(<<"jabber:iq:search">>,
-                                    IgnoreEls, _el);
-      {<<"no-permanent-storage">>, <<"urn:xmpp:hints">>, _} ->
-         decode_hint_no_permanent_storage(<<"urn:xmpp:hints">>,
-                                          IgnoreEls, _el);
-      {<<"no-permanent-storage">>, <<>>,
-       <<"urn:xmpp:hints">>} ->
-         decode_hint_no_permanent_storage(<<"urn:xmpp:hints">>,
-                                          IgnoreEls, _el);
-      {<<"no-permanent-store">>, <<"urn:xmpp:hints">>, _} ->
-         decode_hint_no_permanent_store(<<"urn:xmpp:hints">>,
-                                        IgnoreEls, _el);
-      {<<"no-permanent-store">>, <<>>,
-       <<"urn:xmpp:hints">>} ->
-         decode_hint_no_permanent_store(<<"urn:xmpp:hints">>,
-                                        IgnoreEls, _el);
-      {<<"store">>, <<"urn:xmpp:hints">>, _} ->
-         decode_hint_store(<<"urn:xmpp:hints">>, IgnoreEls, _el);
-      {<<"store">>, <<>>, <<"urn:xmpp:hints">>} ->
-         decode_hint_store(<<"urn:xmpp:hints">>, IgnoreEls, _el);
-      {<<"no-storage">>, <<"urn:xmpp:hints">>, _} ->
-         decode_hint_no_storage(<<"urn:xmpp:hints">>, IgnoreEls,
-                                _el);
-      {<<"no-storage">>, <<>>, <<"urn:xmpp:hints">>} ->
-         decode_hint_no_storage(<<"urn:xmpp:hints">>, IgnoreEls,
-                                _el);
-      {<<"no-store">>, <<"urn:xmpp:hints">>, _} ->
-         decode_hint_no_store(<<"urn:xmpp:hints">>, IgnoreEls,
-                              _el);
-      {<<"no-store">>, <<>>, <<"urn:xmpp:hints">>} ->
-         decode_hint_no_store(<<"urn:xmpp:hints">>, IgnoreEls,
-                              _el);
-      {<<"no-copy">>, <<"urn:xmpp:hints">>, _} ->
-         decode_hint_no_copy(<<"urn:xmpp:hints">>, IgnoreEls,
-                             _el);
-      {<<"no-copy">>, <<>>, <<"urn:xmpp:hints">>} ->
-         decode_hint_no_copy(<<"urn:xmpp:hints">>, IgnoreEls,
-                             _el);
-      {<<"participant">>, <<"urn:xmpp:mix:0">>, _} ->
-         decode_mix_participant(<<"urn:xmpp:mix:0">>, IgnoreEls,
-                                _el);
-      {<<"participant">>, <<>>, <<"urn:xmpp:mix:0">>} ->
-         decode_mix_participant(<<"urn:xmpp:mix:0">>, IgnoreEls,
-                                _el);
-      {<<"leave">>, <<"urn:xmpp:mix:0">>, _} ->
-         decode_mix_leave(<<"urn:xmpp:mix:0">>, IgnoreEls, _el);
-      {<<"leave">>, <<>>, <<"urn:xmpp:mix:0">>} ->
-         decode_mix_leave(<<"urn:xmpp:mix:0">>, IgnoreEls, _el);
-      {<<"join">>, <<"urn:xmpp:mix:0">>, _} ->
-         decode_mix_join(<<"urn:xmpp:mix:0">>, IgnoreEls, _el);
-      {<<"join">>, <<>>, <<"urn:xmpp:mix:0">>} ->
-         decode_mix_join(<<"urn:xmpp:mix:0">>, IgnoreEls, _el);
-      {<<"subscribe">>, <<"urn:xmpp:mix:0">>, _} ->
-         decode_mix_subscribe(<<"urn:xmpp:mix:0">>, IgnoreEls,
-                              _el);
-      {<<"subscribe">>, <<>>, <<"urn:xmpp:mix:0">>} ->
-         decode_mix_subscribe(<<"urn:xmpp:mix:0">>, IgnoreEls,
-                              _el);
-      {<<"offline">>,
-       <<"http://jabber.org/protocol/offline">>, _} ->
-         decode_offline(<<"http://jabber.org/protocol/offline">>,
-                        IgnoreEls, _el);
-      {<<"offline">>, <<>>,
-       <<"http://jabber.org/protocol/offline">>} ->
-         decode_offline(<<"http://jabber.org/protocol/offline">>,
-                        IgnoreEls, _el);
-      {<<"item">>, <<"http://jabber.org/protocol/offline">>,
-       _} ->
-         decode_offline_item(<<"http://jabber.org/protocol/offline">>,
-                             IgnoreEls, _el);
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/offline">>} ->
-         decode_offline_item(<<"http://jabber.org/protocol/offline">>,
-                             IgnoreEls, _el);
-      {<<"fetch">>, <<"http://jabber.org/protocol/offline">>,
-       _} ->
-         decode_offline_fetch(<<"http://jabber.org/protocol/offline">>,
-                              IgnoreEls, _el);
-      {<<"fetch">>, <<>>,
-       <<"http://jabber.org/protocol/offline">>} ->
-         decode_offline_fetch(<<"http://jabber.org/protocol/offline">>,
-                              IgnoreEls, _el);
-      {<<"purge">>, <<"http://jabber.org/protocol/offline">>,
-       _} ->
-         decode_offline_purge(<<"http://jabber.org/protocol/offline">>,
-                              IgnoreEls, _el);
-      {<<"purge">>, <<>>,
-       <<"http://jabber.org/protocol/offline">>} ->
-         decode_offline_purge(<<"http://jabber.org/protocol/offline">>,
-                              IgnoreEls, _el);
-      {<<"failed">>, <<"urn:xmpp:sm:2">>, _} ->
-         decode_sm_failed(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"failed">>, <<>>, <<"urn:xmpp:sm:2">>} ->
-         decode_sm_failed(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"failed">>, <<"urn:xmpp:sm:3">>, _} ->
-         decode_sm_failed(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"failed">>, <<>>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_failed(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"a">>, <<"urn:xmpp:sm:2">>, _} ->
-         decode_sm_a(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"a">>, <<>>, <<"urn:xmpp:sm:2">>} ->
-         decode_sm_a(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"a">>, <<"urn:xmpp:sm:3">>, _} ->
-         decode_sm_a(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"a">>, <<>>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_a(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"r">>, <<"urn:xmpp:sm:2">>, _} ->
-         decode_sm_r(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"r">>, <<>>, <<"urn:xmpp:sm:2">>} ->
-         decode_sm_r(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"r">>, <<"urn:xmpp:sm:3">>, _} ->
-         decode_sm_r(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"r">>, <<>>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_r(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"resumed">>, <<"urn:xmpp:sm:2">>, _} ->
-         decode_sm_resumed(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"resumed">>, <<>>, <<"urn:xmpp:sm:2">>} ->
-         decode_sm_resumed(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"resumed">>, <<"urn:xmpp:sm:3">>, _} ->
-         decode_sm_resumed(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"resumed">>, <<>>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_resumed(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"resume">>, <<"urn:xmpp:sm:2">>, _} ->
-         decode_sm_resume(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"resume">>, <<>>, <<"urn:xmpp:sm:2">>} ->
-         decode_sm_resume(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"resume">>, <<"urn:xmpp:sm:3">>, _} ->
-         decode_sm_resume(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"resume">>, <<>>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_resume(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"enabled">>, <<"urn:xmpp:sm:2">>, _} ->
-         decode_sm_enabled(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"enabled">>, <<>>, <<"urn:xmpp:sm:2">>} ->
-         decode_sm_enabled(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"enabled">>, <<"urn:xmpp:sm:3">>, _} ->
-         decode_sm_enabled(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"enabled">>, <<>>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_enabled(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"enable">>, <<"urn:xmpp:sm:2">>, _} ->
-         decode_sm_enable(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"enable">>, <<>>, <<"urn:xmpp:sm:2">>} ->
-         decode_sm_enable(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"enable">>, <<"urn:xmpp:sm:3">>, _} ->
-         decode_sm_enable(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"enable">>, <<>>, <<"urn:xmpp:sm:3">>} ->
-         decode_sm_enable(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"sm">>, <<"urn:xmpp:sm:2">>, _} ->
-         decode_feature_sm(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"sm">>, <<>>, <<"urn:xmpp:sm:2">>} ->
-         decode_feature_sm(<<"urn:xmpp:sm:2">>, IgnoreEls, _el);
-      {<<"sm">>, <<"urn:xmpp:sm:3">>, _} ->
-         decode_feature_sm(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"sm">>, <<>>, <<"urn:xmpp:sm:3">>} ->
-         decode_feature_sm(<<"urn:xmpp:sm:3">>, IgnoreEls, _el);
-      {<<"inactive">>, <<"urn:xmpp:csi:0">>, _} ->
-         decode_csi_inactive(<<"urn:xmpp:csi:0">>, IgnoreEls,
-                             _el);
-      {<<"inactive">>, <<>>, <<"urn:xmpp:csi:0">>} ->
-         decode_csi_inactive(<<"urn:xmpp:csi:0">>, IgnoreEls,
-                             _el);
-      {<<"active">>, <<"urn:xmpp:csi:0">>, _} ->
-         decode_csi_active(<<"urn:xmpp:csi:0">>, IgnoreEls, _el);
-      {<<"active">>, <<>>, <<"urn:xmpp:csi:0">>} ->
-         decode_csi_active(<<"urn:xmpp:csi:0">>, IgnoreEls, _el);
-      {<<"csi">>, <<"urn:xmpp:csi:0">>, _} ->
-         decode_feature_csi(<<"urn:xmpp:csi:0">>, IgnoreEls,
-                            _el);
-      {<<"csi">>, <<>>, <<"urn:xmpp:csi:0">>} ->
-         decode_feature_csi(<<"urn:xmpp:csi:0">>, IgnoreEls,
-                            _el);
-      {<<"sent">>, <<"urn:xmpp:carbons:2">>, _} ->
-         decode_carbons_sent(<<"urn:xmpp:carbons:2">>, IgnoreEls,
-                             _el);
-      {<<"sent">>, <<>>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_sent(<<"urn:xmpp:carbons:2">>, IgnoreEls,
-                             _el);
-      {<<"received">>, <<"urn:xmpp:carbons:2">>, _} ->
-         decode_carbons_received(<<"urn:xmpp:carbons:2">>,
-                                 IgnoreEls, _el);
-      {<<"received">>, <<>>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_received(<<"urn:xmpp:carbons:2">>,
-                                 IgnoreEls, _el);
-      {<<"private">>, <<"urn:xmpp:carbons:2">>, _} ->
-         decode_carbons_private(<<"urn:xmpp:carbons:2">>,
-                                IgnoreEls, _el);
-      {<<"private">>, <<>>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_private(<<"urn:xmpp:carbons:2">>,
-                                IgnoreEls, _el);
-      {<<"enable">>, <<"urn:xmpp:carbons:2">>, _} ->
-         decode_carbons_enable(<<"urn:xmpp:carbons:2">>,
-                               IgnoreEls, _el);
-      {<<"enable">>, <<>>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_enable(<<"urn:xmpp:carbons:2">>,
-                               IgnoreEls, _el);
-      {<<"disable">>, <<"urn:xmpp:carbons:2">>, _} ->
-         decode_carbons_disable(<<"urn:xmpp:carbons:2">>,
-                                IgnoreEls, _el);
-      {<<"disable">>, <<>>, <<"urn:xmpp:carbons:2">>} ->
-         decode_carbons_disable(<<"urn:xmpp:carbons:2">>,
-                                IgnoreEls, _el);
-      {<<"forwarded">>, <<"urn:xmpp:forward:0">>, _} ->
-         decode_forwarded(<<"urn:xmpp:forward:0">>, IgnoreEls,
-                          _el);
-      {<<"forwarded">>, <<>>, <<"urn:xmpp:forward:0">>} ->
-         decode_forwarded(<<"urn:xmpp:forward:0">>, IgnoreEls,
-                          _el);
-      {<<"fin">>, <<"urn:xmpp:mam:0">>, _} ->
-         decode_mam_fin(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"fin">>, <<>>, <<"urn:xmpp:mam:0">>} ->
-         decode_mam_fin(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"fin">>, <<"urn:xmpp:mam:1">>, _} ->
-         decode_mam_fin(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"fin">>, <<>>, <<"urn:xmpp:mam:1">>} ->
-         decode_mam_fin(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"prefs">>, <<"urn:xmpp:mam:0">>, _} ->
-         decode_mam_prefs(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"prefs">>, <<>>, <<"urn:xmpp:mam:0">>} ->
-         decode_mam_prefs(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"prefs">>, <<"urn:xmpp:mam:1">>, _} ->
-         decode_mam_prefs(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"prefs">>, <<>>, <<"urn:xmpp:mam:1">>} ->
-         decode_mam_prefs(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"prefs">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_prefs(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                          _el);
-      {<<"prefs">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_prefs(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                          _el);
-      {<<"always">>, <<"urn:xmpp:mam:0">>, _} ->
-         decode_mam_always(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"always">>, <<>>, <<"urn:xmpp:mam:0">>} ->
-         decode_mam_always(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"always">>, <<"urn:xmpp:mam:1">>, _} ->
-         decode_mam_always(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"always">>, <<>>, <<"urn:xmpp:mam:1">>} ->
-         decode_mam_always(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"always">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_always(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                           _el);
-      {<<"always">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_always(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                           _el);
-      {<<"never">>, <<"urn:xmpp:mam:0">>, _} ->
-         decode_mam_never(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"never">>, <<>>, <<"urn:xmpp:mam:0">>} ->
-         decode_mam_never(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"never">>, <<"urn:xmpp:mam:1">>, _} ->
-         decode_mam_never(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"never">>, <<>>, <<"urn:xmpp:mam:1">>} ->
-         decode_mam_never(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"never">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_never(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                          _el);
-      {<<"never">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_never(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                          _el);
-      {<<"jid">>, <<"urn:xmpp:mam:0">>, _} ->
-         decode_mam_jid(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"jid">>, <<>>, <<"urn:xmpp:mam:0">>} ->
-         decode_mam_jid(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"jid">>, <<"urn:xmpp:mam:1">>, _} ->
-         decode_mam_jid(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"jid">>, <<>>, <<"urn:xmpp:mam:1">>} ->
-         decode_mam_jid(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"jid">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_jid(<<"urn:xmpp:mam:tmp">>, IgnoreEls, _el);
-      {<<"jid">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_jid(<<"urn:xmpp:mam:tmp">>, IgnoreEls, _el);
-      {<<"result">>, <<"urn:xmpp:mam:0">>, _} ->
-         decode_mam_result(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"result">>, <<>>, <<"urn:xmpp:mam:0">>} ->
-         decode_mam_result(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"result">>, <<"urn:xmpp:mam:1">>, _} ->
-         decode_mam_result(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"result">>, <<>>, <<"urn:xmpp:mam:1">>} ->
-         decode_mam_result(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"result">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_result(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                           _el);
-      {<<"result">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_result(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                           _el);
-      {<<"archived">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_archived(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                             _el);
-      {<<"archived">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_archived(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                             _el);
-      {<<"query">>, <<"urn:xmpp:mam:0">>, _} ->
-         decode_mam_query(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"query">>, <<>>, <<"urn:xmpp:mam:0">>} ->
-         decode_mam_query(<<"urn:xmpp:mam:0">>, IgnoreEls, _el);
-      {<<"query">>, <<"urn:xmpp:mam:1">>, _} ->
-         decode_mam_query(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"query">>, <<>>, <<"urn:xmpp:mam:1">>} ->
-         decode_mam_query(<<"urn:xmpp:mam:1">>, IgnoreEls, _el);
-      {<<"query">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_query(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                          _el);
-      {<<"query">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_query(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                          _el);
-      {<<"withtext">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_withtext(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                             _el);
-      {<<"withtext">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_withtext(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                             _el);
-      {<<"with">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_with(<<"urn:xmpp:mam:tmp">>, IgnoreEls, _el);
-      {<<"with">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_with(<<"urn:xmpp:mam:tmp">>, IgnoreEls, _el);
-      {<<"end">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_end(<<"urn:xmpp:mam:tmp">>, IgnoreEls, _el);
-      {<<"end">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_end(<<"urn:xmpp:mam:tmp">>, IgnoreEls, _el);
-      {<<"start">>, <<"urn:xmpp:mam:tmp">>, _} ->
-         decode_mam_start(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                          _el);
-      {<<"start">>, <<>>, <<"urn:xmpp:mam:tmp">>} ->
-         decode_mam_start(<<"urn:xmpp:mam:tmp">>, IgnoreEls,
-                          _el);
-      {<<"set">>, <<"http://jabber.org/protocol/rsm">>, _} ->
-         decode_rsm_set(<<"http://jabber.org/protocol/rsm">>,
-                        IgnoreEls, _el);
-      {<<"set">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         decode_rsm_set(<<"http://jabber.org/protocol/rsm">>,
-                        IgnoreEls, _el);
-      {<<"first">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         decode_rsm_first(<<"http://jabber.org/protocol/rsm">>,
-                          IgnoreEls, _el);
-      {<<"first">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         decode_rsm_first(<<"http://jabber.org/protocol/rsm">>,
-                          IgnoreEls, _el);
-      {<<"max">>, <<"http://jabber.org/protocol/rsm">>, _} ->
-         decode_rsm_max(<<"http://jabber.org/protocol/rsm">>,
-                        IgnoreEls, _el);
-      {<<"max">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         decode_rsm_max(<<"http://jabber.org/protocol/rsm">>,
-                        IgnoreEls, _el);
-      {<<"index">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         decode_rsm_index(<<"http://jabber.org/protocol/rsm">>,
-                          IgnoreEls, _el);
-      {<<"index">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         decode_rsm_index(<<"http://jabber.org/protocol/rsm">>,
-                          IgnoreEls, _el);
-      {<<"count">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         decode_rsm_count(<<"http://jabber.org/protocol/rsm">>,
-                          IgnoreEls, _el);
-      {<<"count">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         decode_rsm_count(<<"http://jabber.org/protocol/rsm">>,
-                          IgnoreEls, _el);
-      {<<"last">>, <<"http://jabber.org/protocol/rsm">>, _} ->
-         decode_rsm_last(<<"http://jabber.org/protocol/rsm">>,
-                         IgnoreEls, _el);
-      {<<"last">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         decode_rsm_last(<<"http://jabber.org/protocol/rsm">>,
-                         IgnoreEls, _el);
-      {<<"before">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         decode_rsm_before(<<"http://jabber.org/protocol/rsm">>,
-                           IgnoreEls, _el);
-      {<<"before">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         decode_rsm_before(<<"http://jabber.org/protocol/rsm">>,
-                           IgnoreEls, _el);
-      {<<"after">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         decode_rsm_after(<<"http://jabber.org/protocol/rsm">>,
-                          IgnoreEls, _el);
-      {<<"after">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         decode_rsm_after(<<"http://jabber.org/protocol/rsm">>,
-                          IgnoreEls, _el);
-      {<<"unsubscribe">>, <<"urn:xmpp:mucsub:0">>, _} ->
-         decode_muc_unsubscribe(<<"urn:xmpp:mucsub:0">>,
-                                IgnoreEls, _el);
-      {<<"unsubscribe">>, <<>>, <<"urn:xmpp:mucsub:0">>} ->
-         decode_muc_unsubscribe(<<"urn:xmpp:mucsub:0">>,
-                                IgnoreEls, _el);
-      {<<"subscribe">>, <<"urn:xmpp:mucsub:0">>, _} ->
-         decode_muc_subscribe(<<"urn:xmpp:mucsub:0">>, IgnoreEls,
-                              _el);
-      {<<"subscribe">>, <<>>, <<"urn:xmpp:mucsub:0">>} ->
-         decode_muc_subscribe(<<"urn:xmpp:mucsub:0">>, IgnoreEls,
-                              _el);
-      {<<"event">>, <<"urn:xmpp:mucsub:0">>, _} ->
-         decode_muc_subscribe_event(<<"urn:xmpp:mucsub:0">>,
-                                    IgnoreEls, _el);
-      {<<"event">>, <<>>, <<"urn:xmpp:mucsub:0">>} ->
-         decode_muc_subscribe_event(<<"urn:xmpp:mucsub:0">>,
-                                    IgnoreEls, _el);
-      {<<"subscriptions">>, <<"urn:xmpp:mucsub:0">>, _} ->
-         decode_muc_subscriptions(<<"urn:xmpp:mucsub:0">>,
-                                  IgnoreEls, _el);
-      {<<"subscriptions">>, <<>>, <<"urn:xmpp:mucsub:0">>} ->
-         decode_muc_subscriptions(<<"urn:xmpp:mucsub:0">>,
-                                  IgnoreEls, _el);
-      {<<"subscription">>, <<"urn:xmpp:mucsub:0">>, _} ->
-         decode_muc_subscription(<<"urn:xmpp:mucsub:0">>,
-                                 IgnoreEls, _el);
-      {<<"subscription">>, <<>>, <<"urn:xmpp:mucsub:0">>} ->
-         decode_muc_subscription(<<"urn:xmpp:mucsub:0">>,
-                                 IgnoreEls, _el);
-      {<<"x">>, <<"jabber:x:conference">>, _} ->
-         decode_x_conference(<<"jabber:x:conference">>,
-                             IgnoreEls, _el);
-      {<<"x">>, <<>>, <<"jabber:x:conference">>} ->
-         decode_x_conference(<<"jabber:x:conference">>,
-                             IgnoreEls, _el);
-      {<<"unique">>,
-       <<"http://jabber.org/protocol/muc#unique">>, _} ->
-         decode_muc_unique(<<"http://jabber.org/protocol/muc#unique">>,
-                           IgnoreEls, _el);
-      {<<"unique">>, <<>>,
-       <<"http://jabber.org/protocol/muc#unique">>} ->
-         decode_muc_unique(<<"http://jabber.org/protocol/muc#unique">>,
-                           IgnoreEls, _el);
-      {<<"x">>, <<"http://jabber.org/protocol/muc">>, _} ->
-         decode_muc(<<"http://jabber.org/protocol/muc">>,
-                    IgnoreEls, _el);
-      {<<"x">>, <<>>, <<"http://jabber.org/protocol/muc">>} ->
-         decode_muc(<<"http://jabber.org/protocol/muc">>,
-                    IgnoreEls, _el);
-      {<<"query">>,
-       <<"http://jabber.org/protocol/muc#admin">>, _} ->
-         decode_muc_admin(<<"http://jabber.org/protocol/muc#admin">>,
-                          IgnoreEls, _el);
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_admin(<<"http://jabber.org/protocol/muc#admin">>,
-                          IgnoreEls, _el);
-      {<<"continue">>,
-       <<"http://jabber.org/protocol/muc#admin">>, _} ->
-         decode_muc_admin_continue(<<"http://jabber.org/protocol/muc#admin">>,
-                                   IgnoreEls, _el);
-      {<<"continue">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_admin_continue(<<"http://jabber.org/protocol/muc#admin">>,
-                                   IgnoreEls, _el);
-      {<<"actor">>,
-       <<"http://jabber.org/protocol/muc#admin">>, _} ->
-         decode_muc_admin_actor(<<"http://jabber.org/protocol/muc#admin">>,
-                                IgnoreEls, _el);
-      {<<"actor">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_admin_actor(<<"http://jabber.org/protocol/muc#admin">>,
-                                IgnoreEls, _el);
-      {<<"item">>, <<"http://jabber.org/protocol/muc#admin">>,
-       _} ->
-         decode_muc_admin_item(<<"http://jabber.org/protocol/muc#admin">>,
-                               IgnoreEls, _el);
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_admin_item(<<"http://jabber.org/protocol/muc#admin">>,
-                               IgnoreEls, _el);
-      {<<"item">>, <<"http://jabber.org/protocol/muc#owner">>,
-       _} ->
-         decode_muc_owner_item(<<"http://jabber.org/protocol/muc#owner">>,
-                               IgnoreEls, _el);
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         decode_muc_owner_item(<<"http://jabber.org/protocol/muc#owner">>,
-                               IgnoreEls, _el);
-      {<<"query">>,
-       <<"http://jabber.org/protocol/muc#owner">>, _} ->
-         decode_muc_owner(<<"http://jabber.org/protocol/muc#owner">>,
-                          IgnoreEls, _el);
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         decode_muc_owner(<<"http://jabber.org/protocol/muc#owner">>,
-                          IgnoreEls, _el);
-      {<<"password">>,
-       <<"http://jabber.org/protocol/muc#owner">>, _} ->
-         decode_muc_password(<<"http://jabber.org/protocol/muc#owner">>,
-                             IgnoreEls, _el);
-      {<<"password">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         decode_muc_password(<<"http://jabber.org/protocol/muc#owner">>,
-                             IgnoreEls, _el);
-      {<<"password">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         decode_muc_password(<<"http://jabber.org/protocol/muc#user">>,
-                             IgnoreEls, _el);
-      {<<"password">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_password(<<"http://jabber.org/protocol/muc#user">>,
-                             IgnoreEls, _el);
-      {<<"password">>, <<"http://jabber.org/protocol/muc">>,
-       _} ->
-         decode_muc_password(<<"http://jabber.org/protocol/muc">>,
-                             IgnoreEls, _el);
-      {<<"password">>, <<>>,
-       <<"http://jabber.org/protocol/muc">>} ->
-         decode_muc_password(<<"http://jabber.org/protocol/muc">>,
-                             IgnoreEls, _el);
-      {<<"x">>, <<"http://jabber.org/protocol/muc#user">>,
-       _} ->
-         decode_muc_user(<<"http://jabber.org/protocol/muc#user">>,
-                         IgnoreEls, _el);
-      {<<"x">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user(<<"http://jabber.org/protocol/muc#user">>,
-                         IgnoreEls, _el);
-      {<<"item">>, <<"http://jabber.org/protocol/muc#user">>,
-       _} ->
-         decode_muc_user_item(<<"http://jabber.org/protocol/muc#user">>,
-                              IgnoreEls, _el);
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_item(<<"http://jabber.org/protocol/muc#user">>,
-                              IgnoreEls, _el);
-      {<<"status">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         decode_muc_user_status(<<"http://jabber.org/protocol/muc#user">>,
-                                IgnoreEls, _el);
-      {<<"status">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_status(<<"http://jabber.org/protocol/muc#user">>,
-                                IgnoreEls, _el);
-      {<<"continue">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         decode_muc_user_continue(<<"http://jabber.org/protocol/muc#user">>,
-                                  IgnoreEls, _el);
-      {<<"continue">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_continue(<<"http://jabber.org/protocol/muc#user">>,
-                                  IgnoreEls, _el);
-      {<<"actor">>, <<"http://jabber.org/protocol/muc#user">>,
-       _} ->
-         decode_muc_user_actor(<<"http://jabber.org/protocol/muc#user">>,
-                               IgnoreEls, _el);
-      {<<"actor">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_actor(<<"http://jabber.org/protocol/muc#user">>,
-                               IgnoreEls, _el);
-      {<<"invite">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         decode_muc_user_invite(<<"http://jabber.org/protocol/muc#user">>,
-                                IgnoreEls, _el);
-      {<<"invite">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_invite(<<"http://jabber.org/protocol/muc#user">>,
-                                IgnoreEls, _el);
-      {<<"destroy">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         decode_muc_destroy(<<"http://jabber.org/protocol/muc#user">>,
-                            IgnoreEls, _el);
-      {<<"destroy">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_destroy(<<"http://jabber.org/protocol/muc#user">>,
-                            IgnoreEls, _el);
-      {<<"destroy">>,
-       <<"http://jabber.org/protocol/muc#owner">>, _} ->
-         decode_muc_destroy(<<"http://jabber.org/protocol/muc#owner">>,
-                            IgnoreEls, _el);
-      {<<"destroy">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         decode_muc_destroy(<<"http://jabber.org/protocol/muc#owner">>,
-                            IgnoreEls, _el);
-      {<<"decline">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         decode_muc_user_decline(<<"http://jabber.org/protocol/muc#user">>,
-                                 IgnoreEls, _el);
-      {<<"decline">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_user_decline(<<"http://jabber.org/protocol/muc#user">>,
-                                 IgnoreEls, _el);
-      {<<"reason">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         decode_muc_reason(<<"http://jabber.org/protocol/muc#user">>,
-                           IgnoreEls, _el);
-      {<<"reason">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         decode_muc_reason(<<"http://jabber.org/protocol/muc#user">>,
-                           IgnoreEls, _el);
-      {<<"reason">>,
-       <<"http://jabber.org/protocol/muc#admin">>, _} ->
-         decode_muc_reason(<<"http://jabber.org/protocol/muc#admin">>,
-                           IgnoreEls, _el);
-      {<<"reason">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         decode_muc_reason(<<"http://jabber.org/protocol/muc#admin">>,
-                           IgnoreEls, _el);
-      {<<"reason">>,
-       <<"http://jabber.org/protocol/muc#owner">>, _} ->
-         decode_muc_reason(<<"http://jabber.org/protocol/muc#owner">>,
-                           IgnoreEls, _el);
-      {<<"reason">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         decode_muc_reason(<<"http://jabber.org/protocol/muc#owner">>,
-                           IgnoreEls, _el);
-      {<<"history">>, <<"http://jabber.org/protocol/muc">>,
-       _} ->
-         decode_muc_history(<<"http://jabber.org/protocol/muc">>,
-                            IgnoreEls, _el);
-      {<<"history">>, <<>>,
-       <<"http://jabber.org/protocol/muc">>} ->
-         decode_muc_history(<<"http://jabber.org/protocol/muc">>,
-                            IgnoreEls, _el);
-      {<<"query">>,
-       <<"http://jabber.org/protocol/bytestreams">>, _} ->
-         decode_bytestreams(<<"http://jabber.org/protocol/bytestreams">>,
-                            IgnoreEls, _el);
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/bytestreams">>} ->
-         decode_bytestreams(<<"http://jabber.org/protocol/bytestreams">>,
-                            IgnoreEls, _el);
-      {<<"activate">>,
-       <<"http://jabber.org/protocol/bytestreams">>, _} ->
-         decode_bytestreams_activate(<<"http://jabber.org/protocol/bytestreams">>,
-                                     IgnoreEls, _el);
-      {<<"activate">>, <<>>,
-       <<"http://jabber.org/protocol/bytestreams">>} ->
-         decode_bytestreams_activate(<<"http://jabber.org/protocol/bytestreams">>,
-                                     IgnoreEls, _el);
-      {<<"streamhost-used">>,
-       <<"http://jabber.org/protocol/bytestreams">>, _} ->
-         decode_bytestreams_streamhost_used(<<"http://jabber.org/protocol/bytestreams">>,
-                                            IgnoreEls, _el);
-      {<<"streamhost-used">>, <<>>,
-       <<"http://jabber.org/protocol/bytestreams">>} ->
-         decode_bytestreams_streamhost_used(<<"http://jabber.org/protocol/bytestreams">>,
-                                            IgnoreEls, _el);
-      {<<"streamhost">>,
-       <<"http://jabber.org/protocol/bytestreams">>, _} ->
-         decode_bytestreams_streamhost(<<"http://jabber.org/protocol/bytestreams">>,
-                                       IgnoreEls, _el);
-      {<<"streamhost">>, <<>>,
-       <<"http://jabber.org/protocol/bytestreams">>} ->
-         decode_bytestreams_streamhost(<<"http://jabber.org/protocol/bytestreams">>,
-                                       IgnoreEls, _el);
-      {<<"delay">>, <<"urn:xmpp:delay">>, _} ->
-         decode_delay(<<"urn:xmpp:delay">>, IgnoreEls, _el);
-      {<<"delay">>, <<>>, <<"urn:xmpp:delay">>} ->
-         decode_delay(<<"urn:xmpp:delay">>, IgnoreEls, _el);
-      {<<"paused">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         decode_chatstate_paused(<<"http://jabber.org/protocol/chatstates">>,
-                                 IgnoreEls, _el);
-      {<<"paused">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         decode_chatstate_paused(<<"http://jabber.org/protocol/chatstates">>,
-                                 IgnoreEls, _el);
-      {<<"inactive">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         decode_chatstate_inactive(<<"http://jabber.org/protocol/chatstates">>,
-                                   IgnoreEls, _el);
-      {<<"inactive">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         decode_chatstate_inactive(<<"http://jabber.org/protocol/chatstates">>,
-                                   IgnoreEls, _el);
-      {<<"gone">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         decode_chatstate_gone(<<"http://jabber.org/protocol/chatstates">>,
-                               IgnoreEls, _el);
-      {<<"gone">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         decode_chatstate_gone(<<"http://jabber.org/protocol/chatstates">>,
-                               IgnoreEls, _el);
-      {<<"composing">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         decode_chatstate_composing(<<"http://jabber.org/protocol/chatstates">>,
-                                    IgnoreEls, _el);
-      {<<"composing">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         decode_chatstate_composing(<<"http://jabber.org/protocol/chatstates">>,
-                                    IgnoreEls, _el);
-      {<<"active">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         decode_chatstate_active(<<"http://jabber.org/protocol/chatstates">>,
-                                 IgnoreEls, _el);
-      {<<"active">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         decode_chatstate_active(<<"http://jabber.org/protocol/chatstates">>,
-                                 IgnoreEls, _el);
-      {<<"headers">>, <<"http://jabber.org/protocol/shim">>,
-       _} ->
-         decode_shim_headers(<<"http://jabber.org/protocol/shim">>,
-                             IgnoreEls, _el);
-      {<<"headers">>, <<>>,
-       <<"http://jabber.org/protocol/shim">>} ->
-         decode_shim_headers(<<"http://jabber.org/protocol/shim">>,
-                             IgnoreEls, _el);
-      {<<"header">>, <<"http://jabber.org/protocol/shim">>,
-       _} ->
-         decode_shim_header(<<"http://jabber.org/protocol/shim">>,
-                            IgnoreEls, _el);
-      {<<"header">>, <<>>,
-       <<"http://jabber.org/protocol/shim">>} ->
-         decode_shim_header(<<"http://jabber.org/protocol/shim">>,
-                            IgnoreEls, _el);
-      {<<"unsupported-access-model">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_unsupported_access_model(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                      IgnoreEls, _el);
-      {<<"unsupported-access-model">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_unsupported_access_model(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                      IgnoreEls, _el);
-      {<<"unsupported">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_unsupported(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                         IgnoreEls, _el);
-      {<<"unsupported">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_unsupported(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                         IgnoreEls, _el);
-      {<<"too-many-subscriptions">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_too_many_subscriptions(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                    IgnoreEls, _el);
-      {<<"too-many-subscriptions">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_too_many_subscriptions(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                    IgnoreEls, _el);
-      {<<"subid-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_subid_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                            IgnoreEls, _el);
-      {<<"subid-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_subid_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                            IgnoreEls, _el);
-      {<<"presence-subscription-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_presence_subscription_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                            IgnoreEls, _el);
-      {<<"presence-subscription-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_presence_subscription_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                            IgnoreEls, _el);
-      {<<"pending-subscription">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_pending_subscription(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                  IgnoreEls, _el);
-      {<<"pending-subscription">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_pending_subscription(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                  IgnoreEls, _el);
-      {<<"payload-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_payload_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                              IgnoreEls, _el);
-      {<<"payload-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_payload_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                              IgnoreEls, _el);
-      {<<"payload-too-big">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_payload_too_big(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                             IgnoreEls, _el);
-      {<<"payload-too-big">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_payload_too_big(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                             IgnoreEls, _el);
-      {<<"not-subscribed">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_not_subscribed(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                            IgnoreEls, _el);
-      {<<"not-subscribed">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_not_subscribed(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                            IgnoreEls, _el);
-      {<<"not-in-roster-group">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_not_in_roster_group(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                 IgnoreEls, _el);
-      {<<"not-in-roster-group">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_not_in_roster_group(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                 IgnoreEls, _el);
-      {<<"nodeid-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_nodeid_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                             IgnoreEls, _el);
-      {<<"nodeid-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_nodeid_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                             IgnoreEls, _el);
-      {<<"max-nodes-exceeded">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_max_nodes_exceeded(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                IgnoreEls, _el);
-      {<<"max-nodes-exceeded">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_max_nodes_exceeded(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                IgnoreEls, _el);
-      {<<"max-items-exceeded">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_max_items_exceeded(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                IgnoreEls, _el);
-      {<<"max-items-exceeded">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_max_items_exceeded(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                IgnoreEls, _el);
-      {<<"jid-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_jid_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                          IgnoreEls, _el);
-      {<<"jid-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_jid_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                          IgnoreEls, _el);
-      {<<"item-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_item_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                           IgnoreEls, _el);
-      {<<"item-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_item_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                           IgnoreEls, _el);
-      {<<"item-forbidden">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_item_forbidden(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                            IgnoreEls, _el);
-      {<<"item-forbidden">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_item_forbidden(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                            IgnoreEls, _el);
-      {<<"invalid-subid">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_invalid_subid(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                           IgnoreEls, _el);
-      {<<"invalid-subid">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_invalid_subid(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                           IgnoreEls, _el);
-      {<<"invalid-payload">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_invalid_payload(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                             IgnoreEls, _el);
-      {<<"invalid-payload">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_invalid_payload(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                             IgnoreEls, _el);
-      {<<"invalid-options">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_invalid_options(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                             IgnoreEls, _el);
-      {<<"invalid-options">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_invalid_options(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                             IgnoreEls, _el);
-      {<<"invalid-jid">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_invalid_jid(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                         IgnoreEls, _el);
-      {<<"invalid-jid">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_invalid_jid(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                         IgnoreEls, _el);
-      {<<"configuration-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_configuration_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                    IgnoreEls, _el);
-      {<<"configuration-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_configuration_required(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                                    IgnoreEls, _el);
-      {<<"closed-node">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         decode_pubsub_error_closed_node(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                         IgnoreEls, _el);
-      {<<"closed-node">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         decode_pubsub_error_closed_node(<<"http://jabber.org/protocol/pubsub#errors">>,
-                                         IgnoreEls, _el);
-      {<<"pubsub">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_owner(<<"http://jabber.org/protocol/pubsub#owner">>,
-                             IgnoreEls, _el);
-      {<<"pubsub">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_owner(<<"http://jabber.org/protocol/pubsub#owner">>,
-                             IgnoreEls, _el);
-      {<<"pubsub">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub(<<"http://jabber.org/protocol/pubsub">>,
-                       IgnoreEls, _el);
-      {<<"pubsub">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub(<<"http://jabber.org/protocol/pubsub">>,
-                       IgnoreEls, _el);
-      {<<"purge">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub">>,
-                             IgnoreEls, _el);
-      {<<"purge">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub">>,
-                             IgnoreEls, _el);
-      {<<"purge">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#owner">>,
-                             IgnoreEls, _el);
-      {<<"purge">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#owner">>,
-                             IgnoreEls, _el);
-      {<<"purge">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#event">>,
-                             IgnoreEls, _el);
-      {<<"purge">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#event">>,
-                             IgnoreEls, _el);
-      {<<"delete">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub">>,
-                              IgnoreEls, _el);
-      {<<"delete">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub">>,
-                              IgnoreEls, _el);
-      {<<"delete">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#owner">>,
-                              IgnoreEls, _el);
-      {<<"delete">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#owner">>,
-                              IgnoreEls, _el);
-      {<<"delete">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#event">>,
-                              IgnoreEls, _el);
-      {<<"delete">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#event">>,
-                              IgnoreEls, _el);
-      {<<"redirect">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         decode_pubsub_redirect(<<"http://jabber.org/protocol/pubsub">>,
-                                IgnoreEls, _el);
-      {<<"redirect">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_redirect(<<"http://jabber.org/protocol/pubsub">>,
-                                IgnoreEls, _el);
-      {<<"redirect">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_redirect(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                IgnoreEls, _el);
-      {<<"redirect">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_redirect(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                IgnoreEls, _el);
-      {<<"redirect">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_redirect(<<"http://jabber.org/protocol/pubsub#event">>,
-                                IgnoreEls, _el);
-      {<<"redirect">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_redirect(<<"http://jabber.org/protocol/pubsub#event">>,
-                                IgnoreEls, _el);
-      {<<"default">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub_default(<<"http://jabber.org/protocol/pubsub">>,
-                               IgnoreEls, _el);
-      {<<"default">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_default(<<"http://jabber.org/protocol/pubsub">>,
-                               IgnoreEls, _el);
-      {<<"default">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_default(<<"http://jabber.org/protocol/pubsub#owner">>,
-                               IgnoreEls, _el);
-      {<<"default">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_default(<<"http://jabber.org/protocol/pubsub#owner">>,
-                               IgnoreEls, _el);
-      {<<"publish-options">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         decode_pubsub_publish_options(<<"http://jabber.org/protocol/pubsub">>,
-                                       IgnoreEls, _el);
-      {<<"publish-options">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_publish_options(<<"http://jabber.org/protocol/pubsub">>,
-                                       IgnoreEls, _el);
-      {<<"configure">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         decode_pubsub_configure(<<"http://jabber.org/protocol/pubsub">>,
-                                 IgnoreEls, _el);
-      {<<"configure">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_configure(<<"http://jabber.org/protocol/pubsub">>,
-                                 IgnoreEls, _el);
-      {<<"configure">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_configure(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                 IgnoreEls, _el);
-      {<<"configure">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_configure(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                 IgnoreEls, _el);
-      {<<"create">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub_create(<<"http://jabber.org/protocol/pubsub">>,
-                              IgnoreEls, _el);
-      {<<"create">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_create(<<"http://jabber.org/protocol/pubsub">>,
-                              IgnoreEls, _el);
-      {<<"create">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_create(<<"http://jabber.org/protocol/pubsub#event">>,
-                              IgnoreEls, _el);
-      {<<"create">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_create(<<"http://jabber.org/protocol/pubsub#event">>,
-                              IgnoreEls, _el);
-      {<<"retract">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub_retract(<<"http://jabber.org/protocol/pubsub">>,
-                               IgnoreEls, _el);
-      {<<"retract">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_retract(<<"http://jabber.org/protocol/pubsub">>,
-                               IgnoreEls, _el);
-      {<<"options">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub_options(<<"http://jabber.org/protocol/pubsub">>,
-                               IgnoreEls, _el);
-      {<<"options">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_options(<<"http://jabber.org/protocol/pubsub">>,
-                               IgnoreEls, _el);
-      {<<"publish">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub_publish(<<"http://jabber.org/protocol/pubsub">>,
-                               IgnoreEls, _el);
-      {<<"publish">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_publish(<<"http://jabber.org/protocol/pubsub">>,
-                               IgnoreEls, _el);
-      {<<"unsubscribe">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         decode_pubsub_unsubscribe(<<"http://jabber.org/protocol/pubsub">>,
-                                   IgnoreEls, _el);
-      {<<"unsubscribe">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_unsubscribe(<<"http://jabber.org/protocol/pubsub">>,
-                                   IgnoreEls, _el);
-      {<<"subscribe">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         decode_pubsub_subscribe(<<"http://jabber.org/protocol/pubsub">>,
-                                 IgnoreEls, _el);
-      {<<"subscribe">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_subscribe(<<"http://jabber.org/protocol/pubsub">>,
-                                 IgnoreEls, _el);
-      {<<"affiliations">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_owner_affiliations(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                          IgnoreEls, _el);
-      {<<"affiliations">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_owner_affiliations(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                          IgnoreEls, _el);
-      {<<"affiliations">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         decode_pubsub_affiliations(<<"http://jabber.org/protocol/pubsub">>,
-                                    IgnoreEls, _el);
-      {<<"affiliations">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_affiliations(<<"http://jabber.org/protocol/pubsub">>,
-                                    IgnoreEls, _el);
-      {<<"subscriptions">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         decode_pubsub_subscriptions(<<"http://jabber.org/protocol/pubsub">>,
-                                     IgnoreEls, _el);
-      {<<"subscriptions">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_subscriptions(<<"http://jabber.org/protocol/pubsub">>,
-                                     IgnoreEls, _el);
-      {<<"subscriptions">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_subscriptions(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                     IgnoreEls, _el);
-      {<<"subscriptions">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_subscriptions(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                     IgnoreEls, _el);
-      {<<"event">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_event(<<"http://jabber.org/protocol/pubsub#event">>,
-                             IgnoreEls, _el);
-      {<<"event">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_event(<<"http://jabber.org/protocol/pubsub#event">>,
-                             IgnoreEls, _el);
-      {<<"items">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub_items(<<"http://jabber.org/protocol/pubsub">>,
-                             IgnoreEls, _el);
-      {<<"items">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_items(<<"http://jabber.org/protocol/pubsub">>,
-                             IgnoreEls, _el);
-      {<<"items">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_items(<<"http://jabber.org/protocol/pubsub#event">>,
-                             IgnoreEls, _el);
-      {<<"items">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_items(<<"http://jabber.org/protocol/pubsub#event">>,
-                             IgnoreEls, _el);
-      {<<"item">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         decode_pubsub_item(<<"http://jabber.org/protocol/pubsub">>,
-                            IgnoreEls, _el);
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_item(<<"http://jabber.org/protocol/pubsub">>,
-                            IgnoreEls, _el);
-      {<<"item">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_item(<<"http://jabber.org/protocol/pubsub#event">>,
-                            IgnoreEls, _el);
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_item(<<"http://jabber.org/protocol/pubsub#event">>,
-                            IgnoreEls, _el);
-      {<<"retract">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_event_retract(<<"http://jabber.org/protocol/pubsub#event">>,
-                                     IgnoreEls, _el);
-      {<<"retract">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_event_retract(<<"http://jabber.org/protocol/pubsub#event">>,
-                                     IgnoreEls, _el);
-      {<<"configuration">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_event_configuration(<<"http://jabber.org/protocol/pubsub#event">>,
-                                           IgnoreEls, _el);
-      {<<"configuration">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_event_configuration(<<"http://jabber.org/protocol/pubsub#event">>,
-                                           IgnoreEls, _el);
-      {<<"affiliation">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_owner_affiliation(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                         IgnoreEls, _el);
-      {<<"affiliation">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_owner_affiliation(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                         IgnoreEls, _el);
-      {<<"affiliation">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         decode_pubsub_affiliation(<<"http://jabber.org/protocol/pubsub">>,
-                                   IgnoreEls, _el);
-      {<<"affiliation">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_affiliation(<<"http://jabber.org/protocol/pubsub">>,
-                                   IgnoreEls, _el);
-      {<<"subscription">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub">>,
-                                    IgnoreEls, _el);
-      {<<"subscription">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub">>,
-                                    IgnoreEls, _el);
-      {<<"subscription">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                    IgnoreEls, _el);
-      {<<"subscription">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                    IgnoreEls, _el);
-      {<<"subscription">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#event">>,
-                                    IgnoreEls, _el);
-      {<<"subscription">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#event">>,
-                                    IgnoreEls, _el);
-      {<<"x">>, <<"jabber:x:data">>, _} ->
-         decode_xdata(<<"jabber:x:data">>, IgnoreEls, _el);
-      {<<"x">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata(<<"jabber:x:data">>, IgnoreEls, _el);
-      {<<"item">>, <<"jabber:x:data">>, _} ->
-         decode_xdata_item(<<"jabber:x:data">>, IgnoreEls, _el);
-      {<<"item">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata_item(<<"jabber:x:data">>, IgnoreEls, _el);
-      {<<"reported">>, <<"jabber:x:data">>, _} ->
-         decode_xdata_reported(<<"jabber:x:data">>, IgnoreEls,
-                               _el);
-      {<<"reported">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata_reported(<<"jabber:x:data">>, IgnoreEls,
-                               _el);
-      {<<"title">>, <<"jabber:x:data">>, _} ->
-         decode_xdata_title(<<"jabber:x:data">>, IgnoreEls, _el);
-      {<<"title">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata_title(<<"jabber:x:data">>, IgnoreEls, _el);
-      {<<"instructions">>, <<"jabber:x:data">>, _} ->
-         decode_xdata_instructions(<<"jabber:x:data">>,
-                                   IgnoreEls, _el);
-      {<<"instructions">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata_instructions(<<"jabber:x:data">>,
-                                   IgnoreEls, _el);
-      {<<"field">>, <<"jabber:x:data">>, _} ->
-         decode_xdata_field(<<"jabber:x:data">>, IgnoreEls, _el);
-      {<<"field">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata_field(<<"jabber:x:data">>, IgnoreEls, _el);
-      {<<"option">>, <<"jabber:x:data">>, _} ->
-         decode_xdata_field_option(<<"jabber:x:data">>,
-                                   IgnoreEls, _el);
-      {<<"option">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata_field_option(<<"jabber:x:data">>,
-                                   IgnoreEls, _el);
-      {<<"value">>, <<"jabber:x:data">>, _} ->
-         decode_xdata_field_value(<<"jabber:x:data">>, IgnoreEls,
-                                  _el);
-      {<<"value">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata_field_value(<<"jabber:x:data">>, IgnoreEls,
-                                  _el);
-      {<<"desc">>, <<"jabber:x:data">>, _} ->
-         decode_xdata_field_desc(<<"jabber:x:data">>, IgnoreEls,
-                                 _el);
-      {<<"desc">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata_field_desc(<<"jabber:x:data">>, IgnoreEls,
-                                 _el);
-      {<<"required">>, <<"jabber:x:data">>, _} ->
-         decode_xdata_field_required(<<"jabber:x:data">>,
-                                     IgnoreEls, _el);
-      {<<"required">>, <<>>, <<"jabber:x:data">>} ->
-         decode_xdata_field_required(<<"jabber:x:data">>,
-                                     IgnoreEls, _el);
-      {<<"x">>, <<"vcard-temp:x:update">>, _} ->
-         decode_vcard_xupdate(<<"vcard-temp:x:update">>,
-                              IgnoreEls, _el);
-      {<<"x">>, <<>>, <<"vcard-temp:x:update">>} ->
-         decode_vcard_xupdate(<<"vcard-temp:x:update">>,
-                              IgnoreEls, _el);
-      {<<"photo">>, <<"vcard-temp:x:update">>, _} ->
-         decode_vcard_xupdate_photo(<<"vcard-temp:x:update">>,
-                                    IgnoreEls, _el);
-      {<<"photo">>, <<>>, <<"vcard-temp:x:update">>} ->
-         decode_vcard_xupdate_photo(<<"vcard-temp:x:update">>,
-                                    IgnoreEls, _el);
-      {<<"vCard">>, <<"vcard-temp">>, _} ->
-         decode_vcard_temp(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"vCard">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_temp(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CLASS">>, <<"vcard-temp">>, _} ->
-         decode_vcard_CLASS(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CLASS">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_CLASS(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CATEGORIES">>, <<"vcard-temp">>, _} ->
-         decode_vcard_CATEGORIES(<<"vcard-temp">>, IgnoreEls,
-                                 _el);
-      {<<"CATEGORIES">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_CATEGORIES(<<"vcard-temp">>, IgnoreEls,
-                                 _el);
-      {<<"KEY">>, <<"vcard-temp">>, _} ->
-         decode_vcard_KEY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"KEY">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_KEY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"SOUND">>, <<"vcard-temp">>, _} ->
-         decode_vcard_SOUND(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"SOUND">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_SOUND(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ORG">>, <<"vcard-temp">>, _} ->
-         decode_vcard_ORG(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ORG">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_ORG(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PHOTO">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PHOTO(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PHOTO">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PHOTO(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LOGO">>, <<"vcard-temp">>, _} ->
-         decode_vcard_LOGO(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LOGO">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_LOGO(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"BINVAL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_BINVAL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"BINVAL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_BINVAL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"GEO">>, <<"vcard-temp">>, _} ->
-         decode_vcard_GEO(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"GEO">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_GEO(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"EMAIL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_EMAIL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"EMAIL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_EMAIL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"TEL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_TEL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"TEL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_TEL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LABEL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_LABEL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LABEL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_LABEL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ADR">>, <<"vcard-temp">>, _} ->
-         decode_vcard_ADR(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ADR">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_ADR(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"N">>, <<"vcard-temp">>, _} ->
-         decode_vcard_N(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"N">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_N(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CONFIDENTIAL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_CONFIDENTIAL(<<"vcard-temp">>, IgnoreEls,
-                                   _el);
-      {<<"CONFIDENTIAL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_CONFIDENTIAL(<<"vcard-temp">>, IgnoreEls,
-                                   _el);
-      {<<"PRIVATE">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PRIVATE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PRIVATE">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PRIVATE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PUBLIC">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PUBLIC(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PUBLIC">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PUBLIC(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"EXTVAL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_EXTVAL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"EXTVAL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_EXTVAL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"TYPE">>, <<"vcard-temp">>, _} ->
-         decode_vcard_TYPE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"TYPE">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_TYPE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"DESC">>, <<"vcard-temp">>, _} ->
-         decode_vcard_DESC(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"DESC">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_DESC(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"URL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_URL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"URL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_URL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"UID">>, <<"vcard-temp">>, _} ->
-         decode_vcard_UID(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"UID">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_UID(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"SORT-STRING">>, <<"vcard-temp">>, _} ->
-         decode_vcard_SORT_STRING(<<"vcard-temp">>, IgnoreEls,
-                                  _el);
-      {<<"SORT-STRING">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_SORT_STRING(<<"vcard-temp">>, IgnoreEls,
-                                  _el);
-      {<<"REV">>, <<"vcard-temp">>, _} ->
-         decode_vcard_REV(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"REV">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_REV(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PRODID">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PRODID(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PRODID">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PRODID(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"NOTE">>, <<"vcard-temp">>, _} ->
-         decode_vcard_NOTE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"NOTE">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_NOTE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"KEYWORD">>, <<"vcard-temp">>, _} ->
-         decode_vcard_KEYWORD(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"KEYWORD">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_KEYWORD(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ROLE">>, <<"vcard-temp">>, _} ->
-         decode_vcard_ROLE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ROLE">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_ROLE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"TITLE">>, <<"vcard-temp">>, _} ->
-         decode_vcard_TITLE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"TITLE">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_TITLE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"TZ">>, <<"vcard-temp">>, _} ->
-         decode_vcard_TZ(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"TZ">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_TZ(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"MAILER">>, <<"vcard-temp">>, _} ->
-         decode_vcard_MAILER(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"MAILER">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_MAILER(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"JABBERID">>, <<"vcard-temp">>, _} ->
-         decode_vcard_JABBERID(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"JABBERID">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_JABBERID(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"BDAY">>, <<"vcard-temp">>, _} ->
-         decode_vcard_BDAY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"BDAY">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_BDAY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"NICKNAME">>, <<"vcard-temp">>, _} ->
-         decode_vcard_NICKNAME(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"NICKNAME">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_NICKNAME(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"FN">>, <<"vcard-temp">>, _} ->
-         decode_vcard_FN(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"FN">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_FN(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"VERSION">>, <<"vcard-temp">>, _} ->
-         decode_vcard_VERSION(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"VERSION">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_VERSION(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CRED">>, <<"vcard-temp">>, _} ->
-         decode_vcard_CRED(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CRED">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_CRED(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PHONETIC">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PHONETIC(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PHONETIC">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PHONETIC(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ORGUNIT">>, <<"vcard-temp">>, _} ->
-         decode_vcard_ORGUNIT(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ORGUNIT">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_ORGUNIT(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ORGNAME">>, <<"vcard-temp">>, _} ->
-         decode_vcard_ORGNAME(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ORGNAME">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_ORGNAME(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LON">>, <<"vcard-temp">>, _} ->
-         decode_vcard_LON(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LON">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_LON(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LAT">>, <<"vcard-temp">>, _} ->
-         decode_vcard_LAT(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LAT">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_LAT(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"USERID">>, <<"vcard-temp">>, _} ->
-         decode_vcard_USERID(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"USERID">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_USERID(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"NUMBER">>, <<"vcard-temp">>, _} ->
-         decode_vcard_NUMBER(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"NUMBER">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_NUMBER(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LINE">>, <<"vcard-temp">>, _} ->
-         decode_vcard_LINE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LINE">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_LINE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CTRY">>, <<"vcard-temp">>, _} ->
-         decode_vcard_CTRY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CTRY">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_CTRY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PCODE">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PCODE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PCODE">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PCODE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"REGION">>, <<"vcard-temp">>, _} ->
-         decode_vcard_REGION(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"REGION">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_REGION(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LOCALITY">>, <<"vcard-temp">>, _} ->
-         decode_vcard_LOCALITY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"LOCALITY">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_LOCALITY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"STREET">>, <<"vcard-temp">>, _} ->
-         decode_vcard_STREET(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"STREET">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_STREET(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"EXTADD">>, <<"vcard-temp">>, _} ->
-         decode_vcard_EXTADD(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"EXTADD">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_EXTADD(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"POBOX">>, <<"vcard-temp">>, _} ->
-         decode_vcard_POBOX(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"POBOX">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_POBOX(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"SUFFIX">>, <<"vcard-temp">>, _} ->
-         decode_vcard_SUFFIX(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"SUFFIX">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_SUFFIX(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PREFIX">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PREFIX(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PREFIX">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PREFIX(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"MIDDLE">>, <<"vcard-temp">>, _} ->
-         decode_vcard_MIDDLE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"MIDDLE">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_MIDDLE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"GIVEN">>, <<"vcard-temp">>, _} ->
-         decode_vcard_GIVEN(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"GIVEN">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_GIVEN(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"FAMILY">>, <<"vcard-temp">>, _} ->
-         decode_vcard_FAMILY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"FAMILY">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_FAMILY(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"X400">>, <<"vcard-temp">>, _} ->
-         decode_vcard_X400(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"X400">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_X400(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"INTERNET">>, <<"vcard-temp">>, _} ->
-         decode_vcard_INTERNET(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"INTERNET">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_INTERNET(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PREF">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PREF(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PREF">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PREF(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"INTL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_INTL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"INTL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_INTL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"DOM">>, <<"vcard-temp">>, _} ->
-         decode_vcard_DOM(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"DOM">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_DOM(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PARCEL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PARCEL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PARCEL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PARCEL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"POSTAL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_POSTAL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"POSTAL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_POSTAL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PCS">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PCS(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PCS">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PCS(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ISDN">>, <<"vcard-temp">>, _} ->
-         decode_vcard_ISDN(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"ISDN">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_ISDN(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"MODEM">>, <<"vcard-temp">>, _} ->
-         decode_vcard_MODEM(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"MODEM">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_MODEM(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"BBS">>, <<"vcard-temp">>, _} ->
-         decode_vcard_BBS(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"BBS">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_BBS(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"VIDEO">>, <<"vcard-temp">>, _} ->
-         decode_vcard_VIDEO(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"VIDEO">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_VIDEO(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CELL">>, <<"vcard-temp">>, _} ->
-         decode_vcard_CELL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"CELL">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_CELL(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"MSG">>, <<"vcard-temp">>, _} ->
-         decode_vcard_MSG(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"MSG">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_MSG(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PAGER">>, <<"vcard-temp">>, _} ->
-         decode_vcard_PAGER(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"PAGER">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_PAGER(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"FAX">>, <<"vcard-temp">>, _} ->
-         decode_vcard_FAX(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"FAX">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_FAX(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"VOICE">>, <<"vcard-temp">>, _} ->
-         decode_vcard_VOICE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"VOICE">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_VOICE(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"WORK">>, <<"vcard-temp">>, _} ->
-         decode_vcard_WORK(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"WORK">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_WORK(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"HOME">>, <<"vcard-temp">>, _} ->
-         decode_vcard_HOME(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"HOME">>, <<>>, <<"vcard-temp">>} ->
-         decode_vcard_HOME(<<"vcard-temp">>, IgnoreEls, _el);
-      {<<"stream:error">>, <<"jabber:client">>, _} ->
-         decode_stream_error(<<"jabber:client">>, IgnoreEls,
-                             _el);
-      {<<"stream:error">>, <<>>, <<"jabber:client">>} ->
-         decode_stream_error(<<"jabber:client">>, IgnoreEls,
-                             _el);
-      {<<"stream:error">>, <<"jabber:server">>, _} ->
-         decode_stream_error(<<"jabber:server">>, IgnoreEls,
-                             _el);
-      {<<"stream:error">>, <<>>, <<"jabber:server">>} ->
-         decode_stream_error(<<"jabber:server">>, IgnoreEls,
-                             _el);
-      {<<"stream:error">>, <<"jabber:component:accept">>,
-       _} ->
-         decode_stream_error(<<"jabber:component:accept">>,
-                             IgnoreEls, _el);
-      {<<"stream:error">>, <<>>,
-       <<"jabber:component:accept">>} ->
-         decode_stream_error(<<"jabber:component:accept">>,
-                             IgnoreEls, _el);
-      {<<"unsupported-version">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_unsupported_version(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                 IgnoreEls, _el);
-      {<<"unsupported-version">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_unsupported_version(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                 IgnoreEls, _el);
-      {<<"unsupported-stanza-type">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_unsupported_stanza_type(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                     IgnoreEls, _el);
-      {<<"unsupported-stanza-type">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_unsupported_stanza_type(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                     IgnoreEls, _el);
-      {<<"unsupported-encoding">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_unsupported_encoding(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                  IgnoreEls, _el);
-      {<<"unsupported-encoding">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_unsupported_encoding(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                  IgnoreEls, _el);
-      {<<"undefined-condition">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_undefined_condition(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                 IgnoreEls, _el);
-      {<<"undefined-condition">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_undefined_condition(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                 IgnoreEls, _el);
-      {<<"system-shutdown">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_system_shutdown(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                             IgnoreEls, _el);
-      {<<"system-shutdown">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_system_shutdown(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                             IgnoreEls, _el);
-      {<<"see-other-host">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_see_other_host(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                            IgnoreEls, _el);
-      {<<"see-other-host">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_see_other_host(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                            IgnoreEls, _el);
-      {<<"restricted-xml">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_restricted_xml(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                            IgnoreEls, _el);
-      {<<"restricted-xml">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_restricted_xml(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                            IgnoreEls, _el);
-      {<<"resource-constraint">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_resource_constraint(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                 IgnoreEls, _el);
-      {<<"resource-constraint">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_resource_constraint(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                 IgnoreEls, _el);
-      {<<"reset">>, <<"urn:ietf:params:xml:ns:xmpp-streams">>,
-       _} ->
-         decode_stream_error_reset(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                   IgnoreEls, _el);
-      {<<"reset">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_reset(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                   IgnoreEls, _el);
-      {<<"remote-connection-failed">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_remote_connection_failed(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                      IgnoreEls, _el);
-      {<<"remote-connection-failed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_remote_connection_failed(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                      IgnoreEls, _el);
-      {<<"policy-violation">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_policy_violation(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                              IgnoreEls, _el);
-      {<<"policy-violation">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_policy_violation(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                              IgnoreEls, _el);
-      {<<"not-well-formed">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_not_well_formed(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                             IgnoreEls, _el);
-      {<<"not-well-formed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_not_well_formed(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                             IgnoreEls, _el);
-      {<<"not-authorized">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                            IgnoreEls, _el);
-      {<<"not-authorized">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                            IgnoreEls, _el);
-      {<<"invalid-xml">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_invalid_xml(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                         IgnoreEls, _el);
-      {<<"invalid-xml">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_invalid_xml(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                         IgnoreEls, _el);
-      {<<"invalid-namespace">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_invalid_namespace(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                               IgnoreEls, _el);
-      {<<"invalid-namespace">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_invalid_namespace(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                               IgnoreEls, _el);
-      {<<"invalid-id">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_invalid_id(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                        IgnoreEls, _el);
-      {<<"invalid-id">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_invalid_id(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                        IgnoreEls, _el);
-      {<<"invalid-from">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_invalid_from(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                          IgnoreEls, _el);
-      {<<"invalid-from">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_invalid_from(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                          IgnoreEls, _el);
-      {<<"internal-server-error">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_internal_server_error(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                   IgnoreEls, _el);
-      {<<"internal-server-error">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_internal_server_error(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                   IgnoreEls, _el);
-      {<<"improper-addressing">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_improper_addressing(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                 IgnoreEls, _el);
-      {<<"improper-addressing">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_improper_addressing(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                 IgnoreEls, _el);
-      {<<"host-unknown">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_host_unknown(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                          IgnoreEls, _el);
-      {<<"host-unknown">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_host_unknown(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                          IgnoreEls, _el);
-      {<<"host-gone">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_host_gone(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                       IgnoreEls, _el);
-      {<<"host-gone">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_host_gone(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                       IgnoreEls, _el);
-      {<<"connection-timeout">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_connection_timeout(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                IgnoreEls, _el);
-      {<<"connection-timeout">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_connection_timeout(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                IgnoreEls, _el);
-      {<<"conflict">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_conflict(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                      IgnoreEls, _el);
-      {<<"conflict">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_conflict(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                      IgnoreEls, _el);
-      {<<"bad-namespace-prefix">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_bad_namespace_prefix(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                  IgnoreEls, _el);
-      {<<"bad-namespace-prefix">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_bad_namespace_prefix(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                  IgnoreEls, _el);
-      {<<"bad-format">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         decode_stream_error_bad_format(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                        IgnoreEls, _el);
-      {<<"bad-format">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_bad_format(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                        IgnoreEls, _el);
-      {<<"text">>, <<"urn:ietf:params:xml:ns:xmpp-streams">>,
-       _} ->
-         decode_stream_error_text(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                  IgnoreEls, _el);
-      {<<"text">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         decode_stream_error_text(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                  IgnoreEls, _el);
-      {<<"time">>, <<"urn:xmpp:time">>, _} ->
-         decode_time(<<"urn:xmpp:time">>, IgnoreEls, _el);
-      {<<"time">>, <<>>, <<"urn:xmpp:time">>} ->
-         decode_time(<<"urn:xmpp:time">>, IgnoreEls, _el);
-      {<<"tzo">>, <<"urn:xmpp:time">>, _} ->
-         decode_time_tzo(<<"urn:xmpp:time">>, IgnoreEls, _el);
-      {<<"tzo">>, <<>>, <<"urn:xmpp:time">>} ->
-         decode_time_tzo(<<"urn:xmpp:time">>, IgnoreEls, _el);
-      {<<"utc">>, <<"urn:xmpp:time">>, _} ->
-         decode_time_utc(<<"urn:xmpp:time">>, IgnoreEls, _el);
-      {<<"utc">>, <<>>, <<"urn:xmpp:time">>} ->
-         decode_time_utc(<<"urn:xmpp:time">>, IgnoreEls, _el);
-      {<<"ping">>, <<"urn:xmpp:ping">>, _} ->
-         decode_ping(<<"urn:xmpp:ping">>, IgnoreEls, _el);
-      {<<"ping">>, <<>>, <<"urn:xmpp:ping">>} ->
-         decode_ping(<<"urn:xmpp:ping">>, IgnoreEls, _el);
-      {<<"session">>,
-       <<"urn:ietf:params:xml:ns:xmpp-session">>, _} ->
-         decode_session(<<"urn:ietf:params:xml:ns:xmpp-session">>,
-                        IgnoreEls, _el);
-      {<<"session">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-session">>} ->
-         decode_session(<<"urn:ietf:params:xml:ns:xmpp-session">>,
-                        IgnoreEls, _el);
-      {<<"optional">>,
-       <<"urn:ietf:params:xml:ns:xmpp-session">>, _} ->
-         decode_session_optional(<<"urn:ietf:params:xml:ns:xmpp-session">>,
-                                 IgnoreEls, _el);
-      {<<"optional">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-session">>} ->
-         decode_session_optional(<<"urn:ietf:params:xml:ns:xmpp-session">>,
-                                 IgnoreEls, _el);
-      {<<"query">>, <<"jabber:iq:register">>, _} ->
-         decode_register(<<"jabber:iq:register">>, IgnoreEls,
-                         _el);
-      {<<"query">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register(<<"jabber:iq:register">>, IgnoreEls,
-                         _el);
-      {<<"key">>, <<"jabber:iq:register">>, _} ->
-         decode_register_key(<<"jabber:iq:register">>, IgnoreEls,
-                             _el);
-      {<<"key">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_key(<<"jabber:iq:register">>, IgnoreEls,
-                             _el);
-      {<<"text">>, <<"jabber:iq:register">>, _} ->
-         decode_register_text(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"text">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_text(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"misc">>, <<"jabber:iq:register">>, _} ->
-         decode_register_misc(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"misc">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_misc(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"date">>, <<"jabber:iq:register">>, _} ->
-         decode_register_date(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"date">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_date(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"url">>, <<"jabber:iq:register">>, _} ->
-         decode_register_url(<<"jabber:iq:register">>, IgnoreEls,
-                             _el);
-      {<<"url">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_url(<<"jabber:iq:register">>, IgnoreEls,
-                             _el);
-      {<<"phone">>, <<"jabber:iq:register">>, _} ->
-         decode_register_phone(<<"jabber:iq:register">>,
-                               IgnoreEls, _el);
-      {<<"phone">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_phone(<<"jabber:iq:register">>,
-                               IgnoreEls, _el);
-      {<<"zip">>, <<"jabber:iq:register">>, _} ->
-         decode_register_zip(<<"jabber:iq:register">>, IgnoreEls,
-                             _el);
-      {<<"zip">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_zip(<<"jabber:iq:register">>, IgnoreEls,
-                             _el);
-      {<<"state">>, <<"jabber:iq:register">>, _} ->
-         decode_register_state(<<"jabber:iq:register">>,
-                               IgnoreEls, _el);
-      {<<"state">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_state(<<"jabber:iq:register">>,
-                               IgnoreEls, _el);
-      {<<"city">>, <<"jabber:iq:register">>, _} ->
-         decode_register_city(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"city">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_city(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"address">>, <<"jabber:iq:register">>, _} ->
-         decode_register_address(<<"jabber:iq:register">>,
-                                 IgnoreEls, _el);
-      {<<"address">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_address(<<"jabber:iq:register">>,
-                                 IgnoreEls, _el);
-      {<<"email">>, <<"jabber:iq:register">>, _} ->
-         decode_register_email(<<"jabber:iq:register">>,
-                               IgnoreEls, _el);
-      {<<"email">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_email(<<"jabber:iq:register">>,
-                               IgnoreEls, _el);
-      {<<"last">>, <<"jabber:iq:register">>, _} ->
-         decode_register_last(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"last">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_last(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"first">>, <<"jabber:iq:register">>, _} ->
-         decode_register_first(<<"jabber:iq:register">>,
-                               IgnoreEls, _el);
-      {<<"first">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_first(<<"jabber:iq:register">>,
-                               IgnoreEls, _el);
-      {<<"name">>, <<"jabber:iq:register">>, _} ->
-         decode_register_name(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"name">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_name(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"password">>, <<"jabber:iq:register">>, _} ->
-         decode_register_password(<<"jabber:iq:register">>,
-                                  IgnoreEls, _el);
-      {<<"password">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_password(<<"jabber:iq:register">>,
-                                  IgnoreEls, _el);
-      {<<"nick">>, <<"jabber:iq:register">>, _} ->
-         decode_register_nick(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"nick">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_nick(<<"jabber:iq:register">>,
-                              IgnoreEls, _el);
-      {<<"username">>, <<"jabber:iq:register">>, _} ->
-         decode_register_username(<<"jabber:iq:register">>,
-                                  IgnoreEls, _el);
-      {<<"username">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_username(<<"jabber:iq:register">>,
-                                  IgnoreEls, _el);
-      {<<"instructions">>, <<"jabber:iq:register">>, _} ->
-         decode_register_instructions(<<"jabber:iq:register">>,
-                                      IgnoreEls, _el);
-      {<<"instructions">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_instructions(<<"jabber:iq:register">>,
-                                      IgnoreEls, _el);
-      {<<"remove">>, <<"jabber:iq:register">>, _} ->
-         decode_register_remove(<<"jabber:iq:register">>,
-                                IgnoreEls, _el);
-      {<<"remove">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_remove(<<"jabber:iq:register">>,
-                                IgnoreEls, _el);
-      {<<"registered">>, <<"jabber:iq:register">>, _} ->
-         decode_register_registered(<<"jabber:iq:register">>,
-                                    IgnoreEls, _el);
-      {<<"registered">>, <<>>, <<"jabber:iq:register">>} ->
-         decode_register_registered(<<"jabber:iq:register">>,
-                                    IgnoreEls, _el);
-      {<<"register">>,
-       <<"http://jabber.org/features/iq-register">>, _} ->
-         decode_feature_register(<<"http://jabber.org/features/iq-register">>,
-                                 IgnoreEls, _el);
-      {<<"register">>, <<>>,
-       <<"http://jabber.org/features/iq-register">>} ->
-         decode_feature_register(<<"http://jabber.org/features/iq-register">>,
-                                 IgnoreEls, _el);
-      {<<"c">>, <<"http://jabber.org/protocol/caps">>, _} ->
-         decode_caps(<<"http://jabber.org/protocol/caps">>,
-                     IgnoreEls, _el);
-      {<<"c">>, <<>>,
-       <<"http://jabber.org/protocol/caps">>} ->
-         decode_caps(<<"http://jabber.org/protocol/caps">>,
-                     IgnoreEls, _el);
-      {<<"ack">>, <<"p1:ack">>, _} ->
-         decode_p1_ack(<<"p1:ack">>, IgnoreEls, _el);
-      {<<"ack">>, <<>>, <<"p1:ack">>} ->
-         decode_p1_ack(<<"p1:ack">>, IgnoreEls, _el);
-      {<<"rebind">>, <<"p1:rebind">>, _} ->
-         decode_p1_rebind(<<"p1:rebind">>, IgnoreEls, _el);
-      {<<"rebind">>, <<>>, <<"p1:rebind">>} ->
-         decode_p1_rebind(<<"p1:rebind">>, IgnoreEls, _el);
-      {<<"push">>, <<"p1:push">>, _} ->
-         decode_p1_push(<<"p1:push">>, IgnoreEls, _el);
-      {<<"push">>, <<>>, <<"p1:push">>} ->
-         decode_p1_push(<<"p1:push">>, IgnoreEls, _el);
-      {<<"stream:features">>, <<"jabber:client">>, _} ->
-         decode_stream_features(<<"jabber:client">>, IgnoreEls,
-                                _el);
-      {<<"stream:features">>, <<>>, <<"jabber:client">>} ->
-         decode_stream_features(<<"jabber:client">>, IgnoreEls,
-                                _el);
-      {<<"stream:features">>, <<"jabber:server">>, _} ->
-         decode_stream_features(<<"jabber:server">>, IgnoreEls,
-                                _el);
-      {<<"stream:features">>, <<>>, <<"jabber:server">>} ->
-         decode_stream_features(<<"jabber:server">>, IgnoreEls,
-                                _el);
-      {<<"compression">>,
-       <<"http://jabber.org/features/compress">>, _} ->
-         decode_compression(<<"http://jabber.org/features/compress">>,
-                            IgnoreEls, _el);
-      {<<"compression">>, <<>>,
-       <<"http://jabber.org/features/compress">>} ->
-         decode_compression(<<"http://jabber.org/features/compress">>,
-                            IgnoreEls, _el);
-      {<<"method">>,
-       <<"http://jabber.org/features/compress">>, _} ->
-         decode_compression_method(<<"http://jabber.org/features/compress">>,
-                                   IgnoreEls, _el);
-      {<<"method">>, <<>>,
-       <<"http://jabber.org/features/compress">>} ->
-         decode_compression_method(<<"http://jabber.org/features/compress">>,
-                                   IgnoreEls, _el);
-      {<<"compressed">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         decode_compressed(<<"http://jabber.org/protocol/compress">>,
-                           IgnoreEls, _el);
-      {<<"compressed">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         decode_compressed(<<"http://jabber.org/protocol/compress">>,
-                           IgnoreEls, _el);
-      {<<"compress">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         decode_compress(<<"http://jabber.org/protocol/compress">>,
-                         IgnoreEls, _el);
-      {<<"compress">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress(<<"http://jabber.org/protocol/compress">>,
-                         IgnoreEls, _el);
-      {<<"method">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         decode_compress_method(<<"http://jabber.org/protocol/compress">>,
-                                IgnoreEls, _el);
-      {<<"method">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_method(<<"http://jabber.org/protocol/compress">>,
-                                IgnoreEls, _el);
-      {<<"failure">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         decode_compress_failure(<<"http://jabber.org/protocol/compress">>,
-                                 IgnoreEls, _el);
-      {<<"failure">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_failure(<<"http://jabber.org/protocol/compress">>,
-                                 IgnoreEls, _el);
-      {<<"unsupported-method">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         decode_compress_failure_unsupported_method(<<"http://jabber.org/protocol/compress">>,
-                                                    IgnoreEls, _el);
-      {<<"unsupported-method">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_failure_unsupported_method(<<"http://jabber.org/protocol/compress">>,
-                                                    IgnoreEls, _el);
-      {<<"processing-failed">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         decode_compress_failure_processing_failed(<<"http://jabber.org/protocol/compress">>,
-                                                   IgnoreEls, _el);
-      {<<"processing-failed">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_failure_processing_failed(<<"http://jabber.org/protocol/compress">>,
-                                                   IgnoreEls, _el);
-      {<<"setup-failed">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         decode_compress_failure_setup_failed(<<"http://jabber.org/protocol/compress">>,
-                                              IgnoreEls, _el);
-      {<<"setup-failed">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         decode_compress_failure_setup_failed(<<"http://jabber.org/protocol/compress">>,
-                                              IgnoreEls, _el);
-      {<<"failure">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-       _} ->
-         decode_starttls_failure(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                                 IgnoreEls, _el);
-      {<<"failure">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         decode_starttls_failure(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                                 IgnoreEls, _el);
-      {<<"proceed">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-       _} ->
-         decode_starttls_proceed(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                                 IgnoreEls, _el);
-      {<<"proceed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         decode_starttls_proceed(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                                 IgnoreEls, _el);
-      {<<"starttls">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-       _} ->
-         decode_starttls(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                         IgnoreEls, _el);
-      {<<"starttls">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         decode_starttls(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                         IgnoreEls, _el);
-      {<<"required">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-       _} ->
-         decode_starttls_required(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                                  IgnoreEls, _el);
-      {<<"required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         decode_starttls_required(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                                  IgnoreEls, _el);
-      {<<"mechanisms">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_mechanisms(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                IgnoreEls, _el);
-      {<<"mechanisms">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_mechanisms(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                IgnoreEls, _el);
-      {<<"mechanism">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                               IgnoreEls, _el);
-      {<<"mechanism">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                               IgnoreEls, _el);
-      {<<"failure">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         decode_sasl_failure(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                             IgnoreEls, _el);
-      {<<"failure">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                             IgnoreEls, _el);
-      {<<"temporary-auth-failure">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_temporary_auth_failure(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                    IgnoreEls, _el);
-      {<<"temporary-auth-failure">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_temporary_auth_failure(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                    IgnoreEls, _el);
-      {<<"bad-protocol">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_bad_protocol(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                          IgnoreEls, _el);
-      {<<"bad-protocol">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_bad_protocol(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                          IgnoreEls, _el);
-      {<<"not-authorized">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                            IgnoreEls, _el);
-      {<<"not-authorized">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                            IgnoreEls, _el);
-      {<<"mechanism-too-weak">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_mechanism_too_weak(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                IgnoreEls, _el);
-      {<<"mechanism-too-weak">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_mechanism_too_weak(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                IgnoreEls, _el);
-      {<<"malformed-request">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_malformed_request(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                               IgnoreEls, _el);
-      {<<"malformed-request">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_malformed_request(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                               IgnoreEls, _el);
-      {<<"invalid-mechanism">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_invalid_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                               IgnoreEls, _el);
-      {<<"invalid-mechanism">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_invalid_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                               IgnoreEls, _el);
-      {<<"invalid-authzid">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_invalid_authzid(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                             IgnoreEls, _el);
-      {<<"invalid-authzid">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_invalid_authzid(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                             IgnoreEls, _el);
-      {<<"incorrect-encoding">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_incorrect_encoding(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                IgnoreEls, _el);
-      {<<"incorrect-encoding">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_incorrect_encoding(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                IgnoreEls, _el);
-      {<<"encryption-required">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_encryption_required(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                 IgnoreEls, _el);
-      {<<"encryption-required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_encryption_required(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                 IgnoreEls, _el);
-      {<<"credentials-expired">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_credentials_expired(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                 IgnoreEls, _el);
-      {<<"credentials-expired">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_credentials_expired(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                 IgnoreEls, _el);
-      {<<"account-disabled">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_failure_account_disabled(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                              IgnoreEls, _el);
-      {<<"account-disabled">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_account_disabled(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                              IgnoreEls, _el);
-      {<<"aborted">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         decode_sasl_failure_aborted(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                     IgnoreEls, _el);
-      {<<"aborted">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_aborted(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                     IgnoreEls, _el);
-      {<<"text">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         decode_sasl_failure_text(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                  IgnoreEls, _el);
-      {<<"text">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_failure_text(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                  IgnoreEls, _el);
-      {<<"success">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         decode_sasl_success(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                             IgnoreEls, _el);
-      {<<"success">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_success(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                             IgnoreEls, _el);
-      {<<"response">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         decode_sasl_response(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                              IgnoreEls, _el);
-      {<<"response">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_response(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                              IgnoreEls, _el);
-      {<<"challenge">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         decode_sasl_challenge(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                               IgnoreEls, _el);
-      {<<"challenge">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_challenge(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                               IgnoreEls, _el);
-      {<<"abort">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         decode_sasl_abort(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                           IgnoreEls, _el);
-      {<<"abort">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_abort(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                           IgnoreEls, _el);
-      {<<"auth">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         decode_sasl_auth(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                          IgnoreEls, _el);
-      {<<"auth">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         decode_sasl_auth(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                          IgnoreEls, _el);
-      {<<"query">>, <<"jabber:iq:auth">>, _} ->
-         decode_legacy_auth(<<"jabber:iq:auth">>, IgnoreEls,
-                            _el);
-      {<<"query">>, <<>>, <<"jabber:iq:auth">>} ->
-         decode_legacy_auth(<<"jabber:iq:auth">>, IgnoreEls,
-                            _el);
-      {<<"resource">>, <<"jabber:iq:auth">>, _} ->
-         decode_legacy_auth_resource(<<"jabber:iq:auth">>,
-                                     IgnoreEls, _el);
-      {<<"resource">>, <<>>, <<"jabber:iq:auth">>} ->
-         decode_legacy_auth_resource(<<"jabber:iq:auth">>,
-                                     IgnoreEls, _el);
-      {<<"digest">>, <<"jabber:iq:auth">>, _} ->
-         decode_legacy_auth_digest(<<"jabber:iq:auth">>,
-                                   IgnoreEls, _el);
-      {<<"digest">>, <<>>, <<"jabber:iq:auth">>} ->
-         decode_legacy_auth_digest(<<"jabber:iq:auth">>,
-                                   IgnoreEls, _el);
-      {<<"password">>, <<"jabber:iq:auth">>, _} ->
-         decode_legacy_auth_password(<<"jabber:iq:auth">>,
-                                     IgnoreEls, _el);
-      {<<"password">>, <<>>, <<"jabber:iq:auth">>} ->
-         decode_legacy_auth_password(<<"jabber:iq:auth">>,
-                                     IgnoreEls, _el);
-      {<<"username">>, <<"jabber:iq:auth">>, _} ->
-         decode_legacy_auth_username(<<"jabber:iq:auth">>,
-                                     IgnoreEls, _el);
-      {<<"username">>, <<>>, <<"jabber:iq:auth">>} ->
-         decode_legacy_auth_username(<<"jabber:iq:auth">>,
-                                     IgnoreEls, _el);
-      {<<"bind">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>,
-       _} ->
-         decode_bind(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                     IgnoreEls, _el);
-      {<<"bind">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
-         decode_bind(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                     IgnoreEls, _el);
-      {<<"resource">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>,
-       _} ->
-         decode_bind_resource(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                              IgnoreEls, _el);
-      {<<"resource">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
-         decode_bind_resource(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                              IgnoreEls, _el);
-      {<<"jid">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>,
-       _} ->
-         decode_bind_jid(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                         IgnoreEls, _el);
-      {<<"jid">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
-         decode_bind_jid(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                         IgnoreEls, _el);
-      {<<"error">>, <<"jabber:client">>, _} ->
-         decode_error(<<"jabber:client">>, IgnoreEls, _el);
-      {<<"error">>, <<>>, <<"jabber:client">>} ->
-         decode_error(<<"jabber:client">>, IgnoreEls, _el);
-      {<<"error">>, <<"jabber:server">>, _} ->
-         decode_error(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"error">>, <<>>, <<"jabber:server">>} ->
-         decode_error(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"error">>, <<"jabber:component:accept">>, _} ->
-         decode_error(<<"jabber:component:accept">>, IgnoreEls,
-                      _el);
-      {<<"error">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_error(<<"jabber:component:accept">>, IgnoreEls,
-                      _el);
-      {<<"text">>, <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-       _} ->
-         decode_error_text(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                           IgnoreEls, _el);
-      {<<"text">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_text(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                           IgnoreEls, _el);
-      {<<"unexpected-request">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_unexpected_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                         IgnoreEls, _el);
-      {<<"unexpected-request">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_unexpected_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                         IgnoreEls, _el);
-      {<<"undefined-condition">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_undefined_condition(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                          IgnoreEls, _el);
-      {<<"undefined-condition">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_undefined_condition(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                          IgnoreEls, _el);
-      {<<"subscription-required">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_subscription_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"subscription-required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_subscription_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"service-unavailable">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_service_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                          IgnoreEls, _el);
-      {<<"service-unavailable">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_service_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                          IgnoreEls, _el);
-      {<<"resource-constraint">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_resource_constraint(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                          IgnoreEls, _el);
-      {<<"resource-constraint">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_resource_constraint(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                          IgnoreEls, _el);
-      {<<"remote-server-timeout">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_remote_server_timeout(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"remote-server-timeout">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_remote_server_timeout(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"remote-server-not-found">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_remote_server_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                              IgnoreEls, _el);
-      {<<"remote-server-not-found">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_remote_server_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                              IgnoreEls, _el);
-      {<<"registration-required">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_registration_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"registration-required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_registration_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"redirect">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_redirect(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                               IgnoreEls, _el);
-      {<<"redirect">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_redirect(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                               IgnoreEls, _el);
-      {<<"recipient-unavailable">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_recipient_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"recipient-unavailable">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_recipient_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"policy-violation">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_policy_violation(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                       IgnoreEls, _el);
-      {<<"policy-violation">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_policy_violation(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                       IgnoreEls, _el);
-      {<<"payment-required">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_payment_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                       IgnoreEls, _el);
-      {<<"payment-required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_payment_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                       IgnoreEls, _el);
-      {<<"not-authorized">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                     IgnoreEls, _el);
-      {<<"not-authorized">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                     IgnoreEls, _el);
-      {<<"not-allowed">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_not_allowed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                  IgnoreEls, _el);
-      {<<"not-allowed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_not_allowed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                  IgnoreEls, _el);
-      {<<"not-acceptable">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_not_acceptable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                     IgnoreEls, _el);
-      {<<"not-acceptable">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_not_acceptable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                     IgnoreEls, _el);
-      {<<"jid-malformed">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_jid_malformed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                    IgnoreEls, _el);
-      {<<"jid-malformed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_jid_malformed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                    IgnoreEls, _el);
-      {<<"item-not-found">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_item_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                     IgnoreEls, _el);
-      {<<"item-not-found">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_item_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                     IgnoreEls, _el);
-      {<<"internal-server-error">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_internal_server_error(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"internal-server-error">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_internal_server_error(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            IgnoreEls, _el);
-      {<<"gone">>, <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-       _} ->
-         decode_error_gone(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                           IgnoreEls, _el);
-      {<<"gone">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_gone(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                           IgnoreEls, _el);
-      {<<"forbidden">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_forbidden(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                IgnoreEls, _el);
-      {<<"forbidden">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_forbidden(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                IgnoreEls, _el);
-      {<<"feature-not-implemented">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_feature_not_implemented(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                              IgnoreEls, _el);
-      {<<"feature-not-implemented">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_feature_not_implemented(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                              IgnoreEls, _el);
-      {<<"conflict">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_conflict(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                               IgnoreEls, _el);
-      {<<"conflict">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_conflict(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                               IgnoreEls, _el);
-      {<<"bad-request">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         decode_error_bad_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                  IgnoreEls, _el);
-      {<<"bad-request">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         decode_error_bad_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                  IgnoreEls, _el);
-      {<<"presence">>, <<"jabber:client">>, _} ->
-         decode_presence(<<"jabber:client">>, IgnoreEls, _el);
-      {<<"presence">>, <<>>, <<"jabber:client">>} ->
-         decode_presence(<<"jabber:client">>, IgnoreEls, _el);
-      {<<"presence">>, <<"jabber:server">>, _} ->
-         decode_presence(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"presence">>, <<>>, <<"jabber:server">>} ->
-         decode_presence(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"presence">>, <<"jabber:component:accept">>, _} ->
-         decode_presence(<<"jabber:component:accept">>,
-                         IgnoreEls, _el);
-      {<<"presence">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_presence(<<"jabber:component:accept">>,
-                         IgnoreEls, _el);
-      {<<"priority">>, <<"jabber:client">>, _} ->
-         decode_presence_priority(<<"jabber:client">>, IgnoreEls,
-                                  _el);
-      {<<"priority">>, <<>>, <<"jabber:client">>} ->
-         decode_presence_priority(<<"jabber:client">>, IgnoreEls,
-                                  _el);
-      {<<"priority">>, <<"jabber:server">>, _} ->
-         decode_presence_priority(<<"jabber:server">>, IgnoreEls,
-                                  _el);
-      {<<"priority">>, <<>>, <<"jabber:server">>} ->
-         decode_presence_priority(<<"jabber:server">>, IgnoreEls,
-                                  _el);
-      {<<"priority">>, <<"jabber:component:accept">>, _} ->
-         decode_presence_priority(<<"jabber:component:accept">>,
-                                  IgnoreEls, _el);
-      {<<"priority">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_presence_priority(<<"jabber:component:accept">>,
-                                  IgnoreEls, _el);
-      {<<"status">>, <<"jabber:client">>, _} ->
-         decode_presence_status(<<"jabber:client">>, IgnoreEls,
-                                _el);
-      {<<"status">>, <<>>, <<"jabber:client">>} ->
-         decode_presence_status(<<"jabber:client">>, IgnoreEls,
-                                _el);
-      {<<"status">>, <<"jabber:server">>, _} ->
-         decode_presence_status(<<"jabber:server">>, IgnoreEls,
-                                _el);
-      {<<"status">>, <<>>, <<"jabber:server">>} ->
-         decode_presence_status(<<"jabber:server">>, IgnoreEls,
-                                _el);
-      {<<"status">>, <<"jabber:component:accept">>, _} ->
-         decode_presence_status(<<"jabber:component:accept">>,
-                                IgnoreEls, _el);
-      {<<"status">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_presence_status(<<"jabber:component:accept">>,
-                                IgnoreEls, _el);
-      {<<"show">>, <<"jabber:client">>, _} ->
-         decode_presence_show(<<"jabber:client">>, IgnoreEls,
-                              _el);
-      {<<"show">>, <<>>, <<"jabber:client">>} ->
-         decode_presence_show(<<"jabber:client">>, IgnoreEls,
-                              _el);
-      {<<"show">>, <<"jabber:server">>, _} ->
-         decode_presence_show(<<"jabber:server">>, IgnoreEls,
-                              _el);
-      {<<"show">>, <<>>, <<"jabber:server">>} ->
-         decode_presence_show(<<"jabber:server">>, IgnoreEls,
-                              _el);
-      {<<"show">>, <<"jabber:component:accept">>, _} ->
-         decode_presence_show(<<"jabber:component:accept">>,
-                              IgnoreEls, _el);
-      {<<"show">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_presence_show(<<"jabber:component:accept">>,
-                              IgnoreEls, _el);
-      {<<"message">>, <<"jabber:client">>, _} ->
-         decode_message(<<"jabber:client">>, IgnoreEls, _el);
-      {<<"message">>, <<>>, <<"jabber:client">>} ->
-         decode_message(<<"jabber:client">>, IgnoreEls, _el);
-      {<<"message">>, <<"jabber:server">>, _} ->
-         decode_message(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"message">>, <<>>, <<"jabber:server">>} ->
-         decode_message(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"message">>, <<"jabber:component:accept">>, _} ->
-         decode_message(<<"jabber:component:accept">>, IgnoreEls,
-                        _el);
-      {<<"message">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_message(<<"jabber:component:accept">>, IgnoreEls,
-                        _el);
-      {<<"thread">>, <<"jabber:client">>, _} ->
-         decode_message_thread(<<"jabber:client">>, IgnoreEls,
-                               _el);
-      {<<"thread">>, <<>>, <<"jabber:client">>} ->
-         decode_message_thread(<<"jabber:client">>, IgnoreEls,
-                               _el);
-      {<<"thread">>, <<"jabber:server">>, _} ->
-         decode_message_thread(<<"jabber:server">>, IgnoreEls,
-                               _el);
-      {<<"thread">>, <<>>, <<"jabber:server">>} ->
-         decode_message_thread(<<"jabber:server">>, IgnoreEls,
-                               _el);
-      {<<"thread">>, <<"jabber:component:accept">>, _} ->
-         decode_message_thread(<<"jabber:component:accept">>,
-                               IgnoreEls, _el);
-      {<<"thread">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_message_thread(<<"jabber:component:accept">>,
-                               IgnoreEls, _el);
-      {<<"body">>, <<"jabber:client">>, _} ->
-         decode_message_body(<<"jabber:client">>, IgnoreEls,
-                             _el);
-      {<<"body">>, <<>>, <<"jabber:client">>} ->
-         decode_message_body(<<"jabber:client">>, IgnoreEls,
-                             _el);
-      {<<"body">>, <<"jabber:server">>, _} ->
-         decode_message_body(<<"jabber:server">>, IgnoreEls,
-                             _el);
-      {<<"body">>, <<>>, <<"jabber:server">>} ->
-         decode_message_body(<<"jabber:server">>, IgnoreEls,
-                             _el);
-      {<<"body">>, <<"jabber:component:accept">>, _} ->
-         decode_message_body(<<"jabber:component:accept">>,
-                             IgnoreEls, _el);
-      {<<"body">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_message_body(<<"jabber:component:accept">>,
-                             IgnoreEls, _el);
-      {<<"subject">>, <<"jabber:client">>, _} ->
-         decode_message_subject(<<"jabber:client">>, IgnoreEls,
-                                _el);
-      {<<"subject">>, <<>>, <<"jabber:client">>} ->
-         decode_message_subject(<<"jabber:client">>, IgnoreEls,
-                                _el);
-      {<<"subject">>, <<"jabber:server">>, _} ->
-         decode_message_subject(<<"jabber:server">>, IgnoreEls,
-                                _el);
-      {<<"subject">>, <<>>, <<"jabber:server">>} ->
-         decode_message_subject(<<"jabber:server">>, IgnoreEls,
-                                _el);
-      {<<"subject">>, <<"jabber:component:accept">>, _} ->
-         decode_message_subject(<<"jabber:component:accept">>,
-                                IgnoreEls, _el);
-      {<<"subject">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_message_subject(<<"jabber:component:accept">>,
-                                IgnoreEls, _el);
-      {<<"iq">>, <<"jabber:client">>, _} ->
-         decode_iq(<<"jabber:client">>, IgnoreEls, _el);
-      {<<"iq">>, <<>>, <<"jabber:client">>} ->
-         decode_iq(<<"jabber:client">>, IgnoreEls, _el);
-      {<<"iq">>, <<"jabber:server">>, _} ->
-         decode_iq(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"iq">>, <<>>, <<"jabber:server">>} ->
-         decode_iq(<<"jabber:server">>, IgnoreEls, _el);
-      {<<"iq">>, <<"jabber:component:accept">>, _} ->
-         decode_iq(<<"jabber:component:accept">>, IgnoreEls,
-                   _el);
-      {<<"iq">>, <<>>, <<"jabber:component:accept">>} ->
-         decode_iq(<<"jabber:component:accept">>, IgnoreEls,
-                   _el);
-      {<<"query">>, <<"http://jabber.org/protocol/stats">>,
-       _} ->
-         decode_stats(<<"http://jabber.org/protocol/stats">>,
-                      IgnoreEls, _el);
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/stats">>} ->
-         decode_stats(<<"http://jabber.org/protocol/stats">>,
-                      IgnoreEls, _el);
-      {<<"stat">>, <<"http://jabber.org/protocol/stats">>,
-       _} ->
-         decode_stat(<<"http://jabber.org/protocol/stats">>,
-                     IgnoreEls, _el);
-      {<<"stat">>, <<>>,
-       <<"http://jabber.org/protocol/stats">>} ->
-         decode_stat(<<"http://jabber.org/protocol/stats">>,
-                     IgnoreEls, _el);
-      {<<"error">>, <<"http://jabber.org/protocol/stats">>,
-       _} ->
-         decode_stat_error(<<"http://jabber.org/protocol/stats">>,
-                           IgnoreEls, _el);
-      {<<"error">>, <<>>,
-       <<"http://jabber.org/protocol/stats">>} ->
-         decode_stat_error(<<"http://jabber.org/protocol/stats">>,
-                           IgnoreEls, _el);
-      {<<"storage">>, <<"storage:bookmarks">>, _} ->
-         decode_bookmarks_storage(<<"storage:bookmarks">>,
-                                  IgnoreEls, _el);
-      {<<"storage">>, <<>>, <<"storage:bookmarks">>} ->
-         decode_bookmarks_storage(<<"storage:bookmarks">>,
-                                  IgnoreEls, _el);
-      {<<"url">>, <<"storage:bookmarks">>, _} ->
-         decode_bookmark_url(<<"storage:bookmarks">>, IgnoreEls,
-                             _el);
-      {<<"url">>, <<>>, <<"storage:bookmarks">>} ->
-         decode_bookmark_url(<<"storage:bookmarks">>, IgnoreEls,
-                             _el);
-      {<<"conference">>, <<"storage:bookmarks">>, _} ->
-         decode_bookmark_conference(<<"storage:bookmarks">>,
-                                    IgnoreEls, _el);
-      {<<"conference">>, <<>>, <<"storage:bookmarks">>} ->
-         decode_bookmark_conference(<<"storage:bookmarks">>,
-                                    IgnoreEls, _el);
-      {<<"password">>, <<"storage:bookmarks">>, _} ->
-         decode_conference_password(<<"storage:bookmarks">>,
-                                    IgnoreEls, _el);
-      {<<"password">>, <<>>, <<"storage:bookmarks">>} ->
-         decode_conference_password(<<"storage:bookmarks">>,
-                                    IgnoreEls, _el);
-      {<<"nick">>, <<"storage:bookmarks">>, _} ->
-         decode_conference_nick(<<"storage:bookmarks">>,
-                                IgnoreEls, _el);
-      {<<"nick">>, <<>>, <<"storage:bookmarks">>} ->
-         decode_conference_nick(<<"storage:bookmarks">>,
-                                IgnoreEls, _el);
-      {<<"query">>, <<"jabber:iq:private">>, _} ->
-         decode_private(<<"jabber:iq:private">>, IgnoreEls, _el);
-      {<<"query">>, <<>>, <<"jabber:iq:private">>} ->
-         decode_private(<<"jabber:iq:private">>, IgnoreEls, _el);
-      {<<"query">>,
-       <<"http://jabber.org/protocol/disco#items">>, _} ->
-         decode_disco_items(<<"http://jabber.org/protocol/disco#items">>,
-                            IgnoreEls, _el);
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/disco#items">>} ->
-         decode_disco_items(<<"http://jabber.org/protocol/disco#items">>,
-                            IgnoreEls, _el);
-      {<<"item">>,
-       <<"http://jabber.org/protocol/disco#items">>, _} ->
-         decode_disco_item(<<"http://jabber.org/protocol/disco#items">>,
-                           IgnoreEls, _el);
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/disco#items">>} ->
-         decode_disco_item(<<"http://jabber.org/protocol/disco#items">>,
-                           IgnoreEls, _el);
-      {<<"query">>,
-       <<"http://jabber.org/protocol/disco#info">>, _} ->
-         decode_disco_info(<<"http://jabber.org/protocol/disco#info">>,
-                           IgnoreEls, _el);
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/disco#info">>} ->
-         decode_disco_info(<<"http://jabber.org/protocol/disco#info">>,
-                           IgnoreEls, _el);
-      {<<"feature">>,
-       <<"http://jabber.org/protocol/disco#info">>, _} ->
-         decode_disco_feature(<<"http://jabber.org/protocol/disco#info">>,
-                              IgnoreEls, _el);
-      {<<"feature">>, <<>>,
-       <<"http://jabber.org/protocol/disco#info">>} ->
-         decode_disco_feature(<<"http://jabber.org/protocol/disco#info">>,
-                              IgnoreEls, _el);
-      {<<"identity">>,
-       <<"http://jabber.org/protocol/disco#info">>, _} ->
-         decode_disco_identity(<<"http://jabber.org/protocol/disco#info">>,
-                               IgnoreEls, _el);
-      {<<"identity">>, <<>>,
-       <<"http://jabber.org/protocol/disco#info">>} ->
-         decode_disco_identity(<<"http://jabber.org/protocol/disco#info">>,
-                               IgnoreEls, _el);
-      {<<"blocklist">>, <<"urn:xmpp:blocking">>, _} ->
-         decode_block_list(<<"urn:xmpp:blocking">>, IgnoreEls,
-                           _el);
-      {<<"blocklist">>, <<>>, <<"urn:xmpp:blocking">>} ->
-         decode_block_list(<<"urn:xmpp:blocking">>, IgnoreEls,
-                           _el);
-      {<<"unblock">>, <<"urn:xmpp:blocking">>, _} ->
-         decode_unblock(<<"urn:xmpp:blocking">>, IgnoreEls, _el);
-      {<<"unblock">>, <<>>, <<"urn:xmpp:blocking">>} ->
-         decode_unblock(<<"urn:xmpp:blocking">>, IgnoreEls, _el);
-      {<<"block">>, <<"urn:xmpp:blocking">>, _} ->
-         decode_block(<<"urn:xmpp:blocking">>, IgnoreEls, _el);
-      {<<"block">>, <<>>, <<"urn:xmpp:blocking">>} ->
-         decode_block(<<"urn:xmpp:blocking">>, IgnoreEls, _el);
-      {<<"item">>, <<"urn:xmpp:blocking">>, _} ->
-         decode_block_item(<<"urn:xmpp:blocking">>, IgnoreEls,
-                           _el);
-      {<<"item">>, <<>>, <<"urn:xmpp:blocking">>} ->
-         decode_block_item(<<"urn:xmpp:blocking">>, IgnoreEls,
-                           _el);
-      {<<"query">>, <<"jabber:iq:privacy">>, _} ->
-         decode_privacy(<<"jabber:iq:privacy">>, IgnoreEls, _el);
-      {<<"query">>, <<>>, <<"jabber:iq:privacy">>} ->
-         decode_privacy(<<"jabber:iq:privacy">>, IgnoreEls, _el);
-      {<<"active">>, <<"jabber:iq:privacy">>, _} ->
-         decode_privacy_active_list(<<"jabber:iq:privacy">>,
-                                    IgnoreEls, _el);
-      {<<"active">>, <<>>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_active_list(<<"jabber:iq:privacy">>,
-                                    IgnoreEls, _el);
-      {<<"default">>, <<"jabber:iq:privacy">>, _} ->
-         decode_privacy_default_list(<<"jabber:iq:privacy">>,
-                                     IgnoreEls, _el);
-      {<<"default">>, <<>>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_default_list(<<"jabber:iq:privacy">>,
-                                     IgnoreEls, _el);
-      {<<"list">>, <<"jabber:iq:privacy">>, _} ->
-         decode_privacy_list(<<"jabber:iq:privacy">>, IgnoreEls,
-                             _el);
-      {<<"list">>, <<>>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_list(<<"jabber:iq:privacy">>, IgnoreEls,
-                             _el);
-      {<<"item">>, <<"jabber:iq:privacy">>, _} ->
-         decode_privacy_item(<<"jabber:iq:privacy">>, IgnoreEls,
-                             _el);
-      {<<"item">>, <<>>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_item(<<"jabber:iq:privacy">>, IgnoreEls,
-                             _el);
-      {<<"presence-out">>, <<"jabber:iq:privacy">>, _} ->
-         decode_privacy_presence_out(<<"jabber:iq:privacy">>,
-                                     IgnoreEls, _el);
-      {<<"presence-out">>, <<>>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_presence_out(<<"jabber:iq:privacy">>,
-                                     IgnoreEls, _el);
-      {<<"presence-in">>, <<"jabber:iq:privacy">>, _} ->
-         decode_privacy_presence_in(<<"jabber:iq:privacy">>,
-                                    IgnoreEls, _el);
-      {<<"presence-in">>, <<>>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_presence_in(<<"jabber:iq:privacy">>,
-                                    IgnoreEls, _el);
-      {<<"iq">>, <<"jabber:iq:privacy">>, _} ->
-         decode_privacy_iq(<<"jabber:iq:privacy">>, IgnoreEls,
-                           _el);
-      {<<"iq">>, <<>>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_iq(<<"jabber:iq:privacy">>, IgnoreEls,
-                           _el);
-      {<<"message">>, <<"jabber:iq:privacy">>, _} ->
-         decode_privacy_message(<<"jabber:iq:privacy">>,
-                                IgnoreEls, _el);
-      {<<"message">>, <<>>, <<"jabber:iq:privacy">>} ->
-         decode_privacy_message(<<"jabber:iq:privacy">>,
-                                IgnoreEls, _el);
-      {<<"ver">>, <<"urn:xmpp:features:rosterver">>, _} ->
-         decode_rosterver_feature(<<"urn:xmpp:features:rosterver">>,
-                                  IgnoreEls, _el);
-      {<<"ver">>, <<>>, <<"urn:xmpp:features:rosterver">>} ->
-         decode_rosterver_feature(<<"urn:xmpp:features:rosterver">>,
-                                  IgnoreEls, _el);
-      {<<"query">>, <<"jabber:iq:roster">>, _} ->
-         decode_roster_query(<<"jabber:iq:roster">>, IgnoreEls,
-                             _el);
-      {<<"query">>, <<>>, <<"jabber:iq:roster">>} ->
-         decode_roster_query(<<"jabber:iq:roster">>, IgnoreEls,
-                             _el);
-      {<<"item">>, <<"jabber:iq:roster">>, _} ->
-         decode_roster_item(<<"jabber:iq:roster">>, IgnoreEls,
-                            _el);
-      {<<"item">>, <<>>, <<"jabber:iq:roster">>} ->
-         decode_roster_item(<<"jabber:iq:roster">>, IgnoreEls,
-                            _el);
-      {<<"group">>, <<"jabber:iq:roster">>, _} ->
-         decode_roster_group(<<"jabber:iq:roster">>, IgnoreEls,
-                             _el);
-      {<<"group">>, <<>>, <<"jabber:iq:roster">>} ->
-         decode_roster_group(<<"jabber:iq:roster">>, IgnoreEls,
-                             _el);
-      {<<"query">>, <<"jabber:iq:version">>, _} ->
-         decode_version(<<"jabber:iq:version">>, IgnoreEls, _el);
-      {<<"query">>, <<>>, <<"jabber:iq:version">>} ->
-         decode_version(<<"jabber:iq:version">>, IgnoreEls, _el);
-      {<<"os">>, <<"jabber:iq:version">>, _} ->
-         decode_version_os(<<"jabber:iq:version">>, IgnoreEls,
-                           _el);
-      {<<"os">>, <<>>, <<"jabber:iq:version">>} ->
-         decode_version_os(<<"jabber:iq:version">>, IgnoreEls,
-                           _el);
-      {<<"version">>, <<"jabber:iq:version">>, _} ->
-         decode_version_ver(<<"jabber:iq:version">>, IgnoreEls,
-                            _el);
-      {<<"version">>, <<>>, <<"jabber:iq:version">>} ->
-         decode_version_ver(<<"jabber:iq:version">>, IgnoreEls,
-                            _el);
-      {<<"name">>, <<"jabber:iq:version">>, _} ->
-         decode_version_name(<<"jabber:iq:version">>, IgnoreEls,
-                             _el);
-      {<<"name">>, <<>>, <<"jabber:iq:version">>} ->
-         decode_version_name(<<"jabber:iq:version">>, IgnoreEls,
-                             _el);
-      {<<"query">>, <<"jabber:iq:last">>, _} ->
-         decode_last(<<"jabber:iq:last">>, IgnoreEls, _el);
-      {<<"query">>, <<>>, <<"jabber:iq:last">>} ->
-         decode_last(<<"jabber:iq:last">>, IgnoreEls, _el);
-      {_name, <<>>, <<>>} ->
-         erlang:error({xmpp_codec, {missing_tag_xmlns, _name}});
-      {_name, <<>>, _} ->
-         erlang:error({xmpp_codec,
-                       {unknown_tag, _name, TopXMLNS}});
-      {_name, _xmlns, _} ->
-         erlang:error({xmpp_codec, {unknown_tag, _name, _xmlns}})
-    end.
-
-is_known_tag({xmlel, _name, _attrs, _} = _el,
-            TopXMLNS) ->
-    case {_name, get_attr(<<"xmlns">>, _attrs), TopXMLNS} of
-      {<<"query">>, <<"urn:xmpp:delegation:1">>, _} -> true;
-      {<<"query">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         true;
-      {<<"delegate">>, <<"urn:xmpp:delegation:1">>, _} ->
-         true;
-      {<<"delegate">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         true;
-      {<<"delegation">>, <<"urn:xmpp:delegation:1">>, _} ->
-         true;
-      {<<"delegation">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         true;
-      {<<"delegated">>, <<"urn:xmpp:delegation:1">>, _} ->
-         true;
-      {<<"delegated">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         true;
-      {<<"attribute">>, <<"urn:xmpp:delegation:1">>, _} ->
-         true;
-      {<<"attribute">>, <<>>, <<"urn:xmpp:delegation:1">>} ->
-         true;
-      {<<"privilege">>, <<"urn:xmpp:privilege:1">>, _} ->
-         true;
-      {<<"privilege">>, <<>>, <<"urn:xmpp:privilege:1">>} ->
-         true;
-      {<<"perm">>, <<"urn:xmpp:privilege:1">>, _} -> true;
-      {<<"perm">>, <<>>, <<"urn:xmpp:privilege:1">>} -> true;
-      {<<"thumbnail">>, <<"urn:xmpp:thumbs:1">>, _} -> true;
-      {<<"thumbnail">>, <<>>, <<"urn:xmpp:thumbs:1">>} ->
-         true;
-      {<<"slot">>, <<"urn:xmpp:http:upload">>, _} -> true;
-      {<<"slot">>, <<>>, <<"urn:xmpp:http:upload">>} -> true;
-      {<<"slot">>, <<"eu:siacs:conversations:http:upload">>,
-       _} ->
-         true;
-      {<<"slot">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         true;
-      {<<"put">>, <<"urn:xmpp:http:upload">>, _} -> true;
-      {<<"put">>, <<>>, <<"urn:xmpp:http:upload">>} -> true;
-      {<<"put">>, <<"eu:siacs:conversations:http:upload">>,
-       _} ->
-         true;
-      {<<"put">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         true;
-      {<<"get">>, <<"urn:xmpp:http:upload">>, _} -> true;
-      {<<"get">>, <<>>, <<"urn:xmpp:http:upload">>} -> true;
-      {<<"get">>, <<"eu:siacs:conversations:http:upload">>,
-       _} ->
-         true;
-      {<<"get">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         true;
-      {<<"request">>, <<"urn:xmpp:http:upload">>, _} -> true;
-      {<<"request">>, <<>>, <<"urn:xmpp:http:upload">>} ->
-         true;
-      {<<"request">>,
-       <<"eu:siacs:conversations:http:upload">>, _} ->
-         true;
-      {<<"request">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         true;
-      {<<"content-type">>, <<"urn:xmpp:http:upload">>, _} ->
-         true;
-      {<<"content-type">>, <<>>,
-       <<"urn:xmpp:http:upload">>} ->
-         true;
-      {<<"content-type">>,
-       <<"eu:siacs:conversations:http:upload">>, _} ->
-         true;
-      {<<"content-type">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         true;
-      {<<"size">>, <<"urn:xmpp:http:upload">>, _} -> true;
-      {<<"size">>, <<>>, <<"urn:xmpp:http:upload">>} -> true;
-      {<<"size">>, <<"eu:siacs:conversations:http:upload">>,
-       _} ->
-         true;
-      {<<"size">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         true;
-      {<<"filename">>, <<"urn:xmpp:http:upload">>, _} -> true;
-      {<<"filename">>, <<>>, <<"urn:xmpp:http:upload">>} ->
-         true;
-      {<<"filename">>,
-       <<"eu:siacs:conversations:http:upload">>, _} ->
-         true;
-      {<<"filename">>, <<>>,
-       <<"eu:siacs:conversations:http:upload">>} ->
-         true;
-      {<<"address">>, <<"urn:xmpp:sic:0">>, _} -> true;
-      {<<"address">>, <<>>, <<"urn:xmpp:sic:0">>} -> true;
-      {<<"address">>, <<"urn:xmpp:sic:1">>, _} -> true;
-      {<<"address">>, <<>>, <<"urn:xmpp:sic:1">>} -> true;
-      {<<"port">>, <<"urn:xmpp:sic:1">>, _} -> true;
-      {<<"port">>, <<>>, <<"urn:xmpp:sic:1">>} -> true;
-      {<<"ip">>, <<"urn:xmpp:sic:0">>, _} -> true;
-      {<<"ip">>, <<>>, <<"urn:xmpp:sic:0">>} -> true;
-      {<<"ip">>, <<"urn:xmpp:sic:1">>, _} -> true;
-      {<<"ip">>, <<>>, <<"urn:xmpp:sic:1">>} -> true;
-      {<<"x">>, <<"jabber:x:oob">>, _} -> true;
-      {<<"x">>, <<>>, <<"jabber:x:oob">>} -> true;
-      {<<"desc">>, <<"jabber:x:oob">>, _} -> true;
-      {<<"desc">>, <<>>, <<"jabber:x:oob">>} -> true;
-      {<<"url">>, <<"jabber:x:oob">>, _} -> true;
-      {<<"url">>, <<>>, <<"jabber:x:oob">>} -> true;
-      {<<"media">>, <<"urn:xmpp:media-element">>, _} -> true;
-      {<<"media">>, <<>>, <<"urn:xmpp:media-element">>} ->
-         true;
-      {<<"uri">>, <<"urn:xmpp:media-element">>, _} -> true;
-      {<<"uri">>, <<>>, <<"urn:xmpp:media-element">>} -> true;
-      {<<"captcha">>, <<"urn:xmpp:captcha">>, _} -> true;
-      {<<"captcha">>, <<>>, <<"urn:xmpp:captcha">>} -> true;
-      {<<"data">>, <<"urn:xmpp:bob">>, _} -> true;
-      {<<"data">>, <<>>, <<"urn:xmpp:bob">>} -> true;
-      {<<"stream:stream">>, <<"jabber:client">>, _} -> true;
-      {<<"stream:stream">>, <<>>, <<"jabber:client">>} ->
-         true;
-      {<<"stream:stream">>, <<"jabber:server">>, _} -> true;
-      {<<"stream:stream">>, <<>>, <<"jabber:server">>} ->
-         true;
-      {<<"stream:stream">>, <<"jabber:component:accept">>,
-       _} ->
-         true;
-      {<<"stream:stream">>, <<>>,
-       <<"jabber:component:accept">>} ->
-         true;
-      {<<"handshake">>, <<"jabber:component:accept">>, _} ->
-         true;
-      {<<"handshake">>, <<>>,
-       <<"jabber:component:accept">>} ->
-         true;
-      {<<"db:verify">>, <<"jabber:server">>, _} -> true;
-      {<<"db:verify">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"db:result">>, <<"jabber:server">>, _} -> true;
-      {<<"db:result">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"command">>,
-       <<"http://jabber.org/protocol/commands">>, _} ->
-         true;
-      {<<"command">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         true;
-      {<<"note">>, <<"http://jabber.org/protocol/commands">>,
-       _} ->
-         true;
-      {<<"note">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         true;
-      {<<"actions">>,
-       <<"http://jabber.org/protocol/commands">>, _} ->
-         true;
-      {<<"actions">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         true;
-      {<<"complete">>,
-       <<"http://jabber.org/protocol/commands">>, _} ->
-         true;
-      {<<"complete">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         true;
-      {<<"next">>, <<"http://jabber.org/protocol/commands">>,
-       _} ->
-         true;
-      {<<"next">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         true;
-      {<<"prev">>, <<"http://jabber.org/protocol/commands">>,
-       _} ->
-         true;
-      {<<"prev">>, <<>>,
-       <<"http://jabber.org/protocol/commands">>} ->
-         true;
-      {<<"client-id">>, <<"urn:xmpp:sid:0">>, _} -> true;
-      {<<"client-id">>, <<>>, <<"urn:xmpp:sid:0">>} -> true;
-      {<<"stanza-id">>, <<"urn:xmpp:sid:0">>, _} -> true;
-      {<<"stanza-id">>, <<>>, <<"urn:xmpp:sid:0">>} -> true;
-      {<<"addresses">>,
-       <<"http://jabber.org/protocol/address">>, _} ->
-         true;
-      {<<"addresses">>, <<>>,
-       <<"http://jabber.org/protocol/address">>} ->
-         true;
-      {<<"address">>,
-       <<"http://jabber.org/protocol/address">>, _} ->
-         true;
-      {<<"address">>, <<>>,
-       <<"http://jabber.org/protocol/address">>} ->
-         true;
-      {<<"nick">>, <<"http://jabber.org/protocol/nick">>,
-       _} ->
-         true;
-      {<<"nick">>, <<>>,
-       <<"http://jabber.org/protocol/nick">>} ->
-         true;
-      {<<"x">>, <<"jabber:x:expire">>, _} -> true;
-      {<<"x">>, <<>>, <<"jabber:x:expire">>} -> true;
-      {<<"x">>, <<"jabber:x:event">>, _} -> true;
-      {<<"x">>, <<>>, <<"jabber:x:event">>} -> true;
-      {<<"id">>, <<"jabber:x:event">>, _} -> true;
-      {<<"id">>, <<>>, <<"jabber:x:event">>} -> true;
-      {<<"composing">>, <<"jabber:x:event">>, _} -> true;
-      {<<"composing">>, <<>>, <<"jabber:x:event">>} -> true;
-      {<<"displayed">>, <<"jabber:x:event">>, _} -> true;
-      {<<"displayed">>, <<>>, <<"jabber:x:event">>} -> true;
-      {<<"delivered">>, <<"jabber:x:event">>, _} -> true;
-      {<<"delivered">>, <<>>, <<"jabber:x:event">>} -> true;
-      {<<"offline">>, <<"jabber:x:event">>, _} -> true;
-      {<<"offline">>, <<>>, <<"jabber:x:event">>} -> true;
-      {<<"query">>, <<"jabber:iq:search">>, _} -> true;
-      {<<"query">>, <<>>, <<"jabber:iq:search">>} -> true;
-      {<<"item">>, <<"jabber:iq:search">>, _} -> true;
-      {<<"item">>, <<>>, <<"jabber:iq:search">>} -> true;
-      {<<"email">>, <<"jabber:iq:search">>, _} -> true;
-      {<<"email">>, <<>>, <<"jabber:iq:search">>} -> true;
-      {<<"nick">>, <<"jabber:iq:search">>, _} -> true;
-      {<<"nick">>, <<>>, <<"jabber:iq:search">>} -> true;
-      {<<"last">>, <<"jabber:iq:search">>, _} -> true;
-      {<<"last">>, <<>>, <<"jabber:iq:search">>} -> true;
-      {<<"first">>, <<"jabber:iq:search">>, _} -> true;
-      {<<"first">>, <<>>, <<"jabber:iq:search">>} -> true;
-      {<<"instructions">>, <<"jabber:iq:search">>, _} -> true;
-      {<<"instructions">>, <<>>, <<"jabber:iq:search">>} ->
-         true;
-      {<<"no-permanent-storage">>, <<"urn:xmpp:hints">>, _} ->
-         true;
-      {<<"no-permanent-storage">>, <<>>,
-       <<"urn:xmpp:hints">>} ->
-         true;
-      {<<"no-permanent-store">>, <<"urn:xmpp:hints">>, _} ->
-         true;
-      {<<"no-permanent-store">>, <<>>,
-       <<"urn:xmpp:hints">>} ->
-         true;
-      {<<"store">>, <<"urn:xmpp:hints">>, _} -> true;
-      {<<"store">>, <<>>, <<"urn:xmpp:hints">>} -> true;
-      {<<"no-storage">>, <<"urn:xmpp:hints">>, _} -> true;
-      {<<"no-storage">>, <<>>, <<"urn:xmpp:hints">>} -> true;
-      {<<"no-store">>, <<"urn:xmpp:hints">>, _} -> true;
-      {<<"no-store">>, <<>>, <<"urn:xmpp:hints">>} -> true;
-      {<<"no-copy">>, <<"urn:xmpp:hints">>, _} -> true;
-      {<<"no-copy">>, <<>>, <<"urn:xmpp:hints">>} -> true;
-      {<<"participant">>, <<"urn:xmpp:mix:0">>, _} -> true;
-      {<<"participant">>, <<>>, <<"urn:xmpp:mix:0">>} -> true;
-      {<<"leave">>, <<"urn:xmpp:mix:0">>, _} -> true;
-      {<<"leave">>, <<>>, <<"urn:xmpp:mix:0">>} -> true;
-      {<<"join">>, <<"urn:xmpp:mix:0">>, _} -> true;
-      {<<"join">>, <<>>, <<"urn:xmpp:mix:0">>} -> true;
-      {<<"subscribe">>, <<"urn:xmpp:mix:0">>, _} -> true;
-      {<<"subscribe">>, <<>>, <<"urn:xmpp:mix:0">>} -> true;
-      {<<"offline">>,
-       <<"http://jabber.org/protocol/offline">>, _} ->
-         true;
-      {<<"offline">>, <<>>,
-       <<"http://jabber.org/protocol/offline">>} ->
-         true;
-      {<<"item">>, <<"http://jabber.org/protocol/offline">>,
-       _} ->
-         true;
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/offline">>} ->
-         true;
-      {<<"fetch">>, <<"http://jabber.org/protocol/offline">>,
-       _} ->
-         true;
-      {<<"fetch">>, <<>>,
-       <<"http://jabber.org/protocol/offline">>} ->
-         true;
-      {<<"purge">>, <<"http://jabber.org/protocol/offline">>,
-       _} ->
-         true;
-      {<<"purge">>, <<>>,
-       <<"http://jabber.org/protocol/offline">>} ->
-         true;
-      {<<"failed">>, <<"urn:xmpp:sm:2">>, _} -> true;
-      {<<"failed">>, <<>>, <<"urn:xmpp:sm:2">>} -> true;
-      {<<"failed">>, <<"urn:xmpp:sm:3">>, _} -> true;
-      {<<"failed">>, <<>>, <<"urn:xmpp:sm:3">>} -> true;
-      {<<"a">>, <<"urn:xmpp:sm:2">>, _} -> true;
-      {<<"a">>, <<>>, <<"urn:xmpp:sm:2">>} -> true;
-      {<<"a">>, <<"urn:xmpp:sm:3">>, _} -> true;
-      {<<"a">>, <<>>, <<"urn:xmpp:sm:3">>} -> true;
-      {<<"r">>, <<"urn:xmpp:sm:2">>, _} -> true;
-      {<<"r">>, <<>>, <<"urn:xmpp:sm:2">>} -> true;
-      {<<"r">>, <<"urn:xmpp:sm:3">>, _} -> true;
-      {<<"r">>, <<>>, <<"urn:xmpp:sm:3">>} -> true;
-      {<<"resumed">>, <<"urn:xmpp:sm:2">>, _} -> true;
-      {<<"resumed">>, <<>>, <<"urn:xmpp:sm:2">>} -> true;
-      {<<"resumed">>, <<"urn:xmpp:sm:3">>, _} -> true;
-      {<<"resumed">>, <<>>, <<"urn:xmpp:sm:3">>} -> true;
-      {<<"resume">>, <<"urn:xmpp:sm:2">>, _} -> true;
-      {<<"resume">>, <<>>, <<"urn:xmpp:sm:2">>} -> true;
-      {<<"resume">>, <<"urn:xmpp:sm:3">>, _} -> true;
-      {<<"resume">>, <<>>, <<"urn:xmpp:sm:3">>} -> true;
-      {<<"enabled">>, <<"urn:xmpp:sm:2">>, _} -> true;
-      {<<"enabled">>, <<>>, <<"urn:xmpp:sm:2">>} -> true;
-      {<<"enabled">>, <<"urn:xmpp:sm:3">>, _} -> true;
-      {<<"enabled">>, <<>>, <<"urn:xmpp:sm:3">>} -> true;
-      {<<"enable">>, <<"urn:xmpp:sm:2">>, _} -> true;
-      {<<"enable">>, <<>>, <<"urn:xmpp:sm:2">>} -> true;
-      {<<"enable">>, <<"urn:xmpp:sm:3">>, _} -> true;
-      {<<"enable">>, <<>>, <<"urn:xmpp:sm:3">>} -> true;
-      {<<"sm">>, <<"urn:xmpp:sm:2">>, _} -> true;
-      {<<"sm">>, <<>>, <<"urn:xmpp:sm:2">>} -> true;
-      {<<"sm">>, <<"urn:xmpp:sm:3">>, _} -> true;
-      {<<"sm">>, <<>>, <<"urn:xmpp:sm:3">>} -> true;
-      {<<"inactive">>, <<"urn:xmpp:csi:0">>, _} -> true;
-      {<<"inactive">>, <<>>, <<"urn:xmpp:csi:0">>} -> true;
-      {<<"active">>, <<"urn:xmpp:csi:0">>, _} -> true;
-      {<<"active">>, <<>>, <<"urn:xmpp:csi:0">>} -> true;
-      {<<"csi">>, <<"urn:xmpp:csi:0">>, _} -> true;
-      {<<"csi">>, <<>>, <<"urn:xmpp:csi:0">>} -> true;
-      {<<"sent">>, <<"urn:xmpp:carbons:2">>, _} -> true;
-      {<<"sent">>, <<>>, <<"urn:xmpp:carbons:2">>} -> true;
-      {<<"received">>, <<"urn:xmpp:carbons:2">>, _} -> true;
-      {<<"received">>, <<>>, <<"urn:xmpp:carbons:2">>} ->
-         true;
-      {<<"private">>, <<"urn:xmpp:carbons:2">>, _} -> true;
-      {<<"private">>, <<>>, <<"urn:xmpp:carbons:2">>} -> true;
-      {<<"enable">>, <<"urn:xmpp:carbons:2">>, _} -> true;
-      {<<"enable">>, <<>>, <<"urn:xmpp:carbons:2">>} -> true;
-      {<<"disable">>, <<"urn:xmpp:carbons:2">>, _} -> true;
-      {<<"disable">>, <<>>, <<"urn:xmpp:carbons:2">>} -> true;
-      {<<"forwarded">>, <<"urn:xmpp:forward:0">>, _} -> true;
-      {<<"forwarded">>, <<>>, <<"urn:xmpp:forward:0">>} ->
-         true;
-      {<<"fin">>, <<"urn:xmpp:mam:0">>, _} -> true;
-      {<<"fin">>, <<>>, <<"urn:xmpp:mam:0">>} -> true;
-      {<<"fin">>, <<"urn:xmpp:mam:1">>, _} -> true;
-      {<<"fin">>, <<>>, <<"urn:xmpp:mam:1">>} -> true;
-      {<<"prefs">>, <<"urn:xmpp:mam:0">>, _} -> true;
-      {<<"prefs">>, <<>>, <<"urn:xmpp:mam:0">>} -> true;
-      {<<"prefs">>, <<"urn:xmpp:mam:1">>, _} -> true;
-      {<<"prefs">>, <<>>, <<"urn:xmpp:mam:1">>} -> true;
-      {<<"prefs">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"prefs">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"always">>, <<"urn:xmpp:mam:0">>, _} -> true;
-      {<<"always">>, <<>>, <<"urn:xmpp:mam:0">>} -> true;
-      {<<"always">>, <<"urn:xmpp:mam:1">>, _} -> true;
-      {<<"always">>, <<>>, <<"urn:xmpp:mam:1">>} -> true;
-      {<<"always">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"always">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"never">>, <<"urn:xmpp:mam:0">>, _} -> true;
-      {<<"never">>, <<>>, <<"urn:xmpp:mam:0">>} -> true;
-      {<<"never">>, <<"urn:xmpp:mam:1">>, _} -> true;
-      {<<"never">>, <<>>, <<"urn:xmpp:mam:1">>} -> true;
-      {<<"never">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"never">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"jid">>, <<"urn:xmpp:mam:0">>, _} -> true;
-      {<<"jid">>, <<>>, <<"urn:xmpp:mam:0">>} -> true;
-      {<<"jid">>, <<"urn:xmpp:mam:1">>, _} -> true;
-      {<<"jid">>, <<>>, <<"urn:xmpp:mam:1">>} -> true;
-      {<<"jid">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"jid">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"result">>, <<"urn:xmpp:mam:0">>, _} -> true;
-      {<<"result">>, <<>>, <<"urn:xmpp:mam:0">>} -> true;
-      {<<"result">>, <<"urn:xmpp:mam:1">>, _} -> true;
-      {<<"result">>, <<>>, <<"urn:xmpp:mam:1">>} -> true;
-      {<<"result">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"result">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"archived">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"archived">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"query">>, <<"urn:xmpp:mam:0">>, _} -> true;
-      {<<"query">>, <<>>, <<"urn:xmpp:mam:0">>} -> true;
-      {<<"query">>, <<"urn:xmpp:mam:1">>, _} -> true;
-      {<<"query">>, <<>>, <<"urn:xmpp:mam:1">>} -> true;
-      {<<"query">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"query">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"withtext">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"withtext">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"with">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"with">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"end">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"end">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"start">>, <<"urn:xmpp:mam:tmp">>, _} -> true;
-      {<<"start">>, <<>>, <<"urn:xmpp:mam:tmp">>} -> true;
-      {<<"set">>, <<"http://jabber.org/protocol/rsm">>, _} ->
-         true;
-      {<<"set">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         true;
-      {<<"first">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         true;
-      {<<"first">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         true;
-      {<<"max">>, <<"http://jabber.org/protocol/rsm">>, _} ->
-         true;
-      {<<"max">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         true;
-      {<<"index">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         true;
-      {<<"index">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         true;
-      {<<"count">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         true;
-      {<<"count">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         true;
-      {<<"last">>, <<"http://jabber.org/protocol/rsm">>, _} ->
-         true;
-      {<<"last">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         true;
-      {<<"before">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         true;
-      {<<"before">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         true;
-      {<<"after">>, <<"http://jabber.org/protocol/rsm">>,
-       _} ->
-         true;
-      {<<"after">>, <<>>,
-       <<"http://jabber.org/protocol/rsm">>} ->
-         true;
-      {<<"unsubscribe">>, <<"urn:xmpp:mucsub:0">>, _} -> true;
-      {<<"unsubscribe">>, <<>>, <<"urn:xmpp:mucsub:0">>} ->
-         true;
-      {<<"subscribe">>, <<"urn:xmpp:mucsub:0">>, _} -> true;
-      {<<"subscribe">>, <<>>, <<"urn:xmpp:mucsub:0">>} ->
-         true;
-      {<<"event">>, <<"urn:xmpp:mucsub:0">>, _} -> true;
-      {<<"event">>, <<>>, <<"urn:xmpp:mucsub:0">>} -> true;
-      {<<"subscriptions">>, <<"urn:xmpp:mucsub:0">>, _} ->
-         true;
-      {<<"subscriptions">>, <<>>, <<"urn:xmpp:mucsub:0">>} ->
-         true;
-      {<<"subscription">>, <<"urn:xmpp:mucsub:0">>, _} ->
-         true;
-      {<<"subscription">>, <<>>, <<"urn:xmpp:mucsub:0">>} ->
-         true;
-      {<<"x">>, <<"jabber:x:conference">>, _} -> true;
-      {<<"x">>, <<>>, <<"jabber:x:conference">>} -> true;
-      {<<"unique">>,
-       <<"http://jabber.org/protocol/muc#unique">>, _} ->
-         true;
-      {<<"unique">>, <<>>,
-       <<"http://jabber.org/protocol/muc#unique">>} ->
-         true;
-      {<<"x">>, <<"http://jabber.org/protocol/muc">>, _} ->
-         true;
-      {<<"x">>, <<>>, <<"http://jabber.org/protocol/muc">>} ->
-         true;
-      {<<"query">>,
-       <<"http://jabber.org/protocol/muc#admin">>, _} ->
-         true;
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         true;
-      {<<"continue">>,
-       <<"http://jabber.org/protocol/muc#admin">>, _} ->
-         true;
-      {<<"continue">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         true;
-      {<<"actor">>,
-       <<"http://jabber.org/protocol/muc#admin">>, _} ->
-         true;
-      {<<"actor">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         true;
-      {<<"item">>, <<"http://jabber.org/protocol/muc#admin">>,
-       _} ->
-         true;
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         true;
-      {<<"item">>, <<"http://jabber.org/protocol/muc#owner">>,
-       _} ->
-         true;
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         true;
-      {<<"query">>,
-       <<"http://jabber.org/protocol/muc#owner">>, _} ->
-         true;
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         true;
-      {<<"password">>,
-       <<"http://jabber.org/protocol/muc#owner">>, _} ->
-         true;
-      {<<"password">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         true;
-      {<<"password">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         true;
-      {<<"password">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"password">>, <<"http://jabber.org/protocol/muc">>,
-       _} ->
-         true;
-      {<<"password">>, <<>>,
-       <<"http://jabber.org/protocol/muc">>} ->
-         true;
-      {<<"x">>, <<"http://jabber.org/protocol/muc#user">>,
-       _} ->
-         true;
-      {<<"x">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"item">>, <<"http://jabber.org/protocol/muc#user">>,
-       _} ->
-         true;
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"status">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         true;
-      {<<"status">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"continue">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         true;
-      {<<"continue">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"actor">>, <<"http://jabber.org/protocol/muc#user">>,
-       _} ->
-         true;
-      {<<"actor">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"invite">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         true;
-      {<<"invite">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"destroy">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         true;
-      {<<"destroy">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"destroy">>,
-       <<"http://jabber.org/protocol/muc#owner">>, _} ->
-         true;
-      {<<"destroy">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         true;
-      {<<"decline">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         true;
-      {<<"decline">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"reason">>,
-       <<"http://jabber.org/protocol/muc#user">>, _} ->
-         true;
-      {<<"reason">>, <<>>,
-       <<"http://jabber.org/protocol/muc#user">>} ->
-         true;
-      {<<"reason">>,
-       <<"http://jabber.org/protocol/muc#admin">>, _} ->
-         true;
-      {<<"reason">>, <<>>,
-       <<"http://jabber.org/protocol/muc#admin">>} ->
-         true;
-      {<<"reason">>,
-       <<"http://jabber.org/protocol/muc#owner">>, _} ->
-         true;
-      {<<"reason">>, <<>>,
-       <<"http://jabber.org/protocol/muc#owner">>} ->
-         true;
-      {<<"history">>, <<"http://jabber.org/protocol/muc">>,
-       _} ->
-         true;
-      {<<"history">>, <<>>,
-       <<"http://jabber.org/protocol/muc">>} ->
-         true;
-      {<<"query">>,
-       <<"http://jabber.org/protocol/bytestreams">>, _} ->
-         true;
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/bytestreams">>} ->
-         true;
-      {<<"activate">>,
-       <<"http://jabber.org/protocol/bytestreams">>, _} ->
-         true;
-      {<<"activate">>, <<>>,
-       <<"http://jabber.org/protocol/bytestreams">>} ->
-         true;
-      {<<"streamhost-used">>,
-       <<"http://jabber.org/protocol/bytestreams">>, _} ->
-         true;
-      {<<"streamhost-used">>, <<>>,
-       <<"http://jabber.org/protocol/bytestreams">>} ->
-         true;
-      {<<"streamhost">>,
-       <<"http://jabber.org/protocol/bytestreams">>, _} ->
-         true;
-      {<<"streamhost">>, <<>>,
-       <<"http://jabber.org/protocol/bytestreams">>} ->
-         true;
-      {<<"delay">>, <<"urn:xmpp:delay">>, _} -> true;
-      {<<"delay">>, <<>>, <<"urn:xmpp:delay">>} -> true;
-      {<<"paused">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         true;
-      {<<"paused">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         true;
-      {<<"inactive">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         true;
-      {<<"inactive">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         true;
-      {<<"gone">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         true;
-      {<<"gone">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         true;
-      {<<"composing">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         true;
-      {<<"composing">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         true;
-      {<<"active">>,
-       <<"http://jabber.org/protocol/chatstates">>, _} ->
-         true;
-      {<<"active">>, <<>>,
-       <<"http://jabber.org/protocol/chatstates">>} ->
-         true;
-      {<<"headers">>, <<"http://jabber.org/protocol/shim">>,
-       _} ->
-         true;
-      {<<"headers">>, <<>>,
-       <<"http://jabber.org/protocol/shim">>} ->
-         true;
-      {<<"header">>, <<"http://jabber.org/protocol/shim">>,
-       _} ->
-         true;
-      {<<"header">>, <<>>,
-       <<"http://jabber.org/protocol/shim">>} ->
-         true;
-      {<<"unsupported-access-model">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"unsupported-access-model">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"unsupported">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"unsupported">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"too-many-subscriptions">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"too-many-subscriptions">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"subid-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"subid-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"presence-subscription-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"presence-subscription-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"pending-subscription">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"pending-subscription">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"payload-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"payload-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"payload-too-big">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"payload-too-big">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"not-subscribed">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"not-subscribed">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"not-in-roster-group">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"not-in-roster-group">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"nodeid-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"nodeid-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"max-nodes-exceeded">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"max-nodes-exceeded">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"max-items-exceeded">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"max-items-exceeded">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"jid-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"jid-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"item-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"item-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"item-forbidden">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"item-forbidden">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"invalid-subid">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"invalid-subid">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"invalid-payload">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"invalid-payload">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"invalid-options">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"invalid-options">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"invalid-jid">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"invalid-jid">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"configuration-required">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"configuration-required">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"closed-node">>,
-       <<"http://jabber.org/protocol/pubsub#errors">>, _} ->
-         true;
-      {<<"closed-node">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#errors">>} ->
-         true;
-      {<<"pubsub">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"pubsub">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"pubsub">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"pubsub">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"purge">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"purge">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"purge">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"purge">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"purge">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"purge">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"delete">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"delete">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"delete">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"delete">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"delete">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"delete">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"redirect">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         true;
-      {<<"redirect">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"redirect">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"redirect">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"redirect">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"redirect">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"default">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"default">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"default">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"default">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"publish-options">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         true;
-      {<<"publish-options">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"configure">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         true;
-      {<<"configure">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"configure">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"configure">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"create">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"create">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"create">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"create">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"retract">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"retract">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"options">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"options">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"publish">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"publish">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"unsubscribe">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         true;
-      {<<"unsubscribe">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"subscribe">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         true;
-      {<<"subscribe">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"affiliations">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"affiliations">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"affiliations">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         true;
-      {<<"affiliations">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"subscriptions">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         true;
-      {<<"subscriptions">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"subscriptions">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"subscriptions">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"event">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"event">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"items">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"items">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"items">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"items">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"item">>, <<"http://jabber.org/protocol/pubsub">>,
-       _} ->
-         true;
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"item">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"retract">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"retract">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"configuration">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"configuration">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"affiliation">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"affiliation">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"affiliation">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         true;
-      {<<"affiliation">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"subscription">>,
-       <<"http://jabber.org/protocol/pubsub">>, _} ->
-         true;
-      {<<"subscription">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub">>} ->
-         true;
-      {<<"subscription">>,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _} ->
-         true;
-      {<<"subscription">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#owner">>} ->
-         true;
-      {<<"subscription">>,
-       <<"http://jabber.org/protocol/pubsub#event">>, _} ->
-         true;
-      {<<"subscription">>, <<>>,
-       <<"http://jabber.org/protocol/pubsub#event">>} ->
-         true;
-      {<<"x">>, <<"jabber:x:data">>, _} -> true;
-      {<<"x">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"item">>, <<"jabber:x:data">>, _} -> true;
-      {<<"item">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"reported">>, <<"jabber:x:data">>, _} -> true;
-      {<<"reported">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"title">>, <<"jabber:x:data">>, _} -> true;
-      {<<"title">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"instructions">>, <<"jabber:x:data">>, _} -> true;
-      {<<"instructions">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"field">>, <<"jabber:x:data">>, _} -> true;
-      {<<"field">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"option">>, <<"jabber:x:data">>, _} -> true;
-      {<<"option">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"value">>, <<"jabber:x:data">>, _} -> true;
-      {<<"value">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"desc">>, <<"jabber:x:data">>, _} -> true;
-      {<<"desc">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"required">>, <<"jabber:x:data">>, _} -> true;
-      {<<"required">>, <<>>, <<"jabber:x:data">>} -> true;
-      {<<"x">>, <<"vcard-temp:x:update">>, _} -> true;
-      {<<"x">>, <<>>, <<"vcard-temp:x:update">>} -> true;
-      {<<"photo">>, <<"vcard-temp:x:update">>, _} -> true;
-      {<<"photo">>, <<>>, <<"vcard-temp:x:update">>} -> true;
-      {<<"vCard">>, <<"vcard-temp">>, _} -> true;
-      {<<"vCard">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"CLASS">>, <<"vcard-temp">>, _} -> true;
-      {<<"CLASS">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"CATEGORIES">>, <<"vcard-temp">>, _} -> true;
-      {<<"CATEGORIES">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"KEY">>, <<"vcard-temp">>, _} -> true;
-      {<<"KEY">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"SOUND">>, <<"vcard-temp">>, _} -> true;
-      {<<"SOUND">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"ORG">>, <<"vcard-temp">>, _} -> true;
-      {<<"ORG">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PHOTO">>, <<"vcard-temp">>, _} -> true;
-      {<<"PHOTO">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"LOGO">>, <<"vcard-temp">>, _} -> true;
-      {<<"LOGO">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"BINVAL">>, <<"vcard-temp">>, _} -> true;
-      {<<"BINVAL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"GEO">>, <<"vcard-temp">>, _} -> true;
-      {<<"GEO">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"EMAIL">>, <<"vcard-temp">>, _} -> true;
-      {<<"EMAIL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"TEL">>, <<"vcard-temp">>, _} -> true;
-      {<<"TEL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"LABEL">>, <<"vcard-temp">>, _} -> true;
-      {<<"LABEL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"ADR">>, <<"vcard-temp">>, _} -> true;
-      {<<"ADR">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"N">>, <<"vcard-temp">>, _} -> true;
-      {<<"N">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"CONFIDENTIAL">>, <<"vcard-temp">>, _} -> true;
-      {<<"CONFIDENTIAL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PRIVATE">>, <<"vcard-temp">>, _} -> true;
-      {<<"PRIVATE">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PUBLIC">>, <<"vcard-temp">>, _} -> true;
-      {<<"PUBLIC">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"EXTVAL">>, <<"vcard-temp">>, _} -> true;
-      {<<"EXTVAL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"TYPE">>, <<"vcard-temp">>, _} -> true;
-      {<<"TYPE">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"DESC">>, <<"vcard-temp">>, _} -> true;
-      {<<"DESC">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"URL">>, <<"vcard-temp">>, _} -> true;
-      {<<"URL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"UID">>, <<"vcard-temp">>, _} -> true;
-      {<<"UID">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"SORT-STRING">>, <<"vcard-temp">>, _} -> true;
-      {<<"SORT-STRING">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"REV">>, <<"vcard-temp">>, _} -> true;
-      {<<"REV">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PRODID">>, <<"vcard-temp">>, _} -> true;
-      {<<"PRODID">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"NOTE">>, <<"vcard-temp">>, _} -> true;
-      {<<"NOTE">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"KEYWORD">>, <<"vcard-temp">>, _} -> true;
-      {<<"KEYWORD">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"ROLE">>, <<"vcard-temp">>, _} -> true;
-      {<<"ROLE">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"TITLE">>, <<"vcard-temp">>, _} -> true;
-      {<<"TITLE">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"TZ">>, <<"vcard-temp">>, _} -> true;
-      {<<"TZ">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"MAILER">>, <<"vcard-temp">>, _} -> true;
-      {<<"MAILER">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"JABBERID">>, <<"vcard-temp">>, _} -> true;
-      {<<"JABBERID">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"BDAY">>, <<"vcard-temp">>, _} -> true;
-      {<<"BDAY">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"NICKNAME">>, <<"vcard-temp">>, _} -> true;
-      {<<"NICKNAME">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"FN">>, <<"vcard-temp">>, _} -> true;
-      {<<"FN">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"VERSION">>, <<"vcard-temp">>, _} -> true;
-      {<<"VERSION">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"CRED">>, <<"vcard-temp">>, _} -> true;
-      {<<"CRED">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PHONETIC">>, <<"vcard-temp">>, _} -> true;
-      {<<"PHONETIC">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"ORGUNIT">>, <<"vcard-temp">>, _} -> true;
-      {<<"ORGUNIT">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"ORGNAME">>, <<"vcard-temp">>, _} -> true;
-      {<<"ORGNAME">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"LON">>, <<"vcard-temp">>, _} -> true;
-      {<<"LON">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"LAT">>, <<"vcard-temp">>, _} -> true;
-      {<<"LAT">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"USERID">>, <<"vcard-temp">>, _} -> true;
-      {<<"USERID">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"NUMBER">>, <<"vcard-temp">>, _} -> true;
-      {<<"NUMBER">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"LINE">>, <<"vcard-temp">>, _} -> true;
-      {<<"LINE">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"CTRY">>, <<"vcard-temp">>, _} -> true;
-      {<<"CTRY">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PCODE">>, <<"vcard-temp">>, _} -> true;
-      {<<"PCODE">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"REGION">>, <<"vcard-temp">>, _} -> true;
-      {<<"REGION">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"LOCALITY">>, <<"vcard-temp">>, _} -> true;
-      {<<"LOCALITY">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"STREET">>, <<"vcard-temp">>, _} -> true;
-      {<<"STREET">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"EXTADD">>, <<"vcard-temp">>, _} -> true;
-      {<<"EXTADD">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"POBOX">>, <<"vcard-temp">>, _} -> true;
-      {<<"POBOX">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"SUFFIX">>, <<"vcard-temp">>, _} -> true;
-      {<<"SUFFIX">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PREFIX">>, <<"vcard-temp">>, _} -> true;
-      {<<"PREFIX">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"MIDDLE">>, <<"vcard-temp">>, _} -> true;
-      {<<"MIDDLE">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"GIVEN">>, <<"vcard-temp">>, _} -> true;
-      {<<"GIVEN">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"FAMILY">>, <<"vcard-temp">>, _} -> true;
-      {<<"FAMILY">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"X400">>, <<"vcard-temp">>, _} -> true;
-      {<<"X400">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"INTERNET">>, <<"vcard-temp">>, _} -> true;
-      {<<"INTERNET">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PREF">>, <<"vcard-temp">>, _} -> true;
-      {<<"PREF">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"INTL">>, <<"vcard-temp">>, _} -> true;
-      {<<"INTL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"DOM">>, <<"vcard-temp">>, _} -> true;
-      {<<"DOM">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PARCEL">>, <<"vcard-temp">>, _} -> true;
-      {<<"PARCEL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"POSTAL">>, <<"vcard-temp">>, _} -> true;
-      {<<"POSTAL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PCS">>, <<"vcard-temp">>, _} -> true;
-      {<<"PCS">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"ISDN">>, <<"vcard-temp">>, _} -> true;
-      {<<"ISDN">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"MODEM">>, <<"vcard-temp">>, _} -> true;
-      {<<"MODEM">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"BBS">>, <<"vcard-temp">>, _} -> true;
-      {<<"BBS">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"VIDEO">>, <<"vcard-temp">>, _} -> true;
-      {<<"VIDEO">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"CELL">>, <<"vcard-temp">>, _} -> true;
-      {<<"CELL">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"MSG">>, <<"vcard-temp">>, _} -> true;
-      {<<"MSG">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"PAGER">>, <<"vcard-temp">>, _} -> true;
-      {<<"PAGER">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"FAX">>, <<"vcard-temp">>, _} -> true;
-      {<<"FAX">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"VOICE">>, <<"vcard-temp">>, _} -> true;
-      {<<"VOICE">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"WORK">>, <<"vcard-temp">>, _} -> true;
-      {<<"WORK">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"HOME">>, <<"vcard-temp">>, _} -> true;
-      {<<"HOME">>, <<>>, <<"vcard-temp">>} -> true;
-      {<<"stream:error">>, <<"jabber:client">>, _} -> true;
-      {<<"stream:error">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"stream:error">>, <<"jabber:server">>, _} -> true;
-      {<<"stream:error">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"stream:error">>, <<"jabber:component:accept">>,
-       _} ->
-         true;
-      {<<"stream:error">>, <<>>,
-       <<"jabber:component:accept">>} ->
-         true;
-      {<<"unsupported-version">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"unsupported-version">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"unsupported-stanza-type">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"unsupported-stanza-type">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"unsupported-encoding">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"unsupported-encoding">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"undefined-condition">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"undefined-condition">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"system-shutdown">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"system-shutdown">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"see-other-host">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"see-other-host">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"restricted-xml">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"restricted-xml">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"resource-constraint">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"resource-constraint">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"reset">>, <<"urn:ietf:params:xml:ns:xmpp-streams">>,
-       _} ->
-         true;
-      {<<"reset">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"remote-connection-failed">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"remote-connection-failed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"policy-violation">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"policy-violation">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"not-well-formed">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"not-well-formed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"not-authorized">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"not-authorized">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"invalid-xml">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"invalid-xml">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"invalid-namespace">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"invalid-namespace">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"invalid-id">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"invalid-id">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"invalid-from">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"invalid-from">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"internal-server-error">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"internal-server-error">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"improper-addressing">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"improper-addressing">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"host-unknown">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"host-unknown">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"host-gone">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"host-gone">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"connection-timeout">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"connection-timeout">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"conflict">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"conflict">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"bad-namespace-prefix">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"bad-namespace-prefix">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"bad-format">>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>, _} ->
-         true;
-      {<<"bad-format">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"text">>, <<"urn:ietf:params:xml:ns:xmpp-streams">>,
-       _} ->
-         true;
-      {<<"text">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-streams">>} ->
-         true;
-      {<<"time">>, <<"urn:xmpp:time">>, _} -> true;
-      {<<"time">>, <<>>, <<"urn:xmpp:time">>} -> true;
-      {<<"tzo">>, <<"urn:xmpp:time">>, _} -> true;
-      {<<"tzo">>, <<>>, <<"urn:xmpp:time">>} -> true;
-      {<<"utc">>, <<"urn:xmpp:time">>, _} -> true;
-      {<<"utc">>, <<>>, <<"urn:xmpp:time">>} -> true;
-      {<<"ping">>, <<"urn:xmpp:ping">>, _} -> true;
-      {<<"ping">>, <<>>, <<"urn:xmpp:ping">>} -> true;
-      {<<"session">>,
-       <<"urn:ietf:params:xml:ns:xmpp-session">>, _} ->
-         true;
-      {<<"session">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-session">>} ->
-         true;
-      {<<"optional">>,
-       <<"urn:ietf:params:xml:ns:xmpp-session">>, _} ->
-         true;
-      {<<"optional">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-session">>} ->
-         true;
-      {<<"query">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"query">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"key">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"key">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"text">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"text">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"misc">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"misc">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"date">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"date">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"url">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"url">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"phone">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"phone">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"zip">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"zip">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"state">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"state">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"city">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"city">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"address">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"address">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"email">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"email">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"last">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"last">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"first">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"first">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"name">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"name">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"password">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"password">>, <<>>, <<"jabber:iq:register">>} ->
-         true;
-      {<<"nick">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"nick">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"username">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"username">>, <<>>, <<"jabber:iq:register">>} ->
-         true;
-      {<<"instructions">>, <<"jabber:iq:register">>, _} ->
-         true;
-      {<<"instructions">>, <<>>, <<"jabber:iq:register">>} ->
-         true;
-      {<<"remove">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"remove">>, <<>>, <<"jabber:iq:register">>} -> true;
-      {<<"registered">>, <<"jabber:iq:register">>, _} -> true;
-      {<<"registered">>, <<>>, <<"jabber:iq:register">>} ->
-         true;
-      {<<"register">>,
-       <<"http://jabber.org/features/iq-register">>, _} ->
-         true;
-      {<<"register">>, <<>>,
-       <<"http://jabber.org/features/iq-register">>} ->
-         true;
-      {<<"c">>, <<"http://jabber.org/protocol/caps">>, _} ->
-         true;
-      {<<"c">>, <<>>,
-       <<"http://jabber.org/protocol/caps">>} ->
-         true;
-      {<<"ack">>, <<"p1:ack">>, _} -> true;
-      {<<"ack">>, <<>>, <<"p1:ack">>} -> true;
-      {<<"rebind">>, <<"p1:rebind">>, _} -> true;
-      {<<"rebind">>, <<>>, <<"p1:rebind">>} -> true;
-      {<<"push">>, <<"p1:push">>, _} -> true;
-      {<<"push">>, <<>>, <<"p1:push">>} -> true;
-      {<<"stream:features">>, <<"jabber:client">>, _} -> true;
-      {<<"stream:features">>, <<>>, <<"jabber:client">>} ->
-         true;
-      {<<"stream:features">>, <<"jabber:server">>, _} -> true;
-      {<<"stream:features">>, <<>>, <<"jabber:server">>} ->
-         true;
-      {<<"compression">>,
-       <<"http://jabber.org/features/compress">>, _} ->
-         true;
-      {<<"compression">>, <<>>,
-       <<"http://jabber.org/features/compress">>} ->
-         true;
-      {<<"method">>,
-       <<"http://jabber.org/features/compress">>, _} ->
-         true;
-      {<<"method">>, <<>>,
-       <<"http://jabber.org/features/compress">>} ->
-         true;
-      {<<"compressed">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         true;
-      {<<"compressed">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         true;
-      {<<"compress">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         true;
-      {<<"compress">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         true;
-      {<<"method">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         true;
-      {<<"method">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         true;
-      {<<"failure">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         true;
-      {<<"failure">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         true;
-      {<<"unsupported-method">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         true;
-      {<<"unsupported-method">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         true;
-      {<<"processing-failed">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         true;
-      {<<"processing-failed">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         true;
-      {<<"setup-failed">>,
-       <<"http://jabber.org/protocol/compress">>, _} ->
-         true;
-      {<<"setup-failed">>, <<>>,
-       <<"http://jabber.org/protocol/compress">>} ->
-         true;
-      {<<"failure">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-       _} ->
-         true;
-      {<<"failure">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         true;
-      {<<"proceed">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-       _} ->
-         true;
-      {<<"proceed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         true;
-      {<<"starttls">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-       _} ->
-         true;
-      {<<"starttls">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         true;
-      {<<"required">>, <<"urn:ietf:params:xml:ns:xmpp-tls">>,
-       _} ->
-         true;
-      {<<"required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-tls">>} ->
-         true;
-      {<<"mechanisms">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"mechanisms">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"mechanism">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"mechanism">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"failure">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         true;
-      {<<"failure">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"temporary-auth-failure">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"temporary-auth-failure">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"bad-protocol">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"bad-protocol">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"not-authorized">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"not-authorized">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"mechanism-too-weak">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"mechanism-too-weak">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"malformed-request">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"malformed-request">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"invalid-mechanism">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"invalid-mechanism">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"invalid-authzid">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"invalid-authzid">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"incorrect-encoding">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"incorrect-encoding">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"encryption-required">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"encryption-required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"credentials-expired">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"credentials-expired">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"account-disabled">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"account-disabled">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"aborted">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         true;
-      {<<"aborted">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"text">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         true;
-      {<<"text">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"success">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         true;
-      {<<"success">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"response">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         true;
-      {<<"response">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"challenge">>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>, _} ->
-         true;
-      {<<"challenge">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"abort">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         true;
-      {<<"abort">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"auth">>, <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-       _} ->
-         true;
-      {<<"auth">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-sasl">>} ->
-         true;
-      {<<"query">>, <<"jabber:iq:auth">>, _} -> true;
-      {<<"query">>, <<>>, <<"jabber:iq:auth">>} -> true;
-      {<<"resource">>, <<"jabber:iq:auth">>, _} -> true;
-      {<<"resource">>, <<>>, <<"jabber:iq:auth">>} -> true;
-      {<<"digest">>, <<"jabber:iq:auth">>, _} -> true;
-      {<<"digest">>, <<>>, <<"jabber:iq:auth">>} -> true;
-      {<<"password">>, <<"jabber:iq:auth">>, _} -> true;
-      {<<"password">>, <<>>, <<"jabber:iq:auth">>} -> true;
-      {<<"username">>, <<"jabber:iq:auth">>, _} -> true;
-      {<<"username">>, <<>>, <<"jabber:iq:auth">>} -> true;
-      {<<"bind">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>,
-       _} ->
-         true;
-      {<<"bind">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
-         true;
-      {<<"resource">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>,
-       _} ->
-         true;
-      {<<"resource">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
-         true;
-      {<<"jid">>, <<"urn:ietf:params:xml:ns:xmpp-bind">>,
-       _} ->
-         true;
-      {<<"jid">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-bind">>} ->
-         true;
-      {<<"error">>, <<"jabber:client">>, _} -> true;
-      {<<"error">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"error">>, <<"jabber:server">>, _} -> true;
-      {<<"error">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"error">>, <<"jabber:component:accept">>, _} -> true;
-      {<<"error">>, <<>>, <<"jabber:component:accept">>} ->
-         true;
-      {<<"text">>, <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-       _} ->
-         true;
-      {<<"text">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"unexpected-request">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"unexpected-request">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"undefined-condition">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"undefined-condition">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"subscription-required">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"subscription-required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"service-unavailable">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"service-unavailable">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"resource-constraint">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"resource-constraint">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"remote-server-timeout">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"remote-server-timeout">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"remote-server-not-found">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"remote-server-not-found">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"registration-required">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"registration-required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"redirect">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"redirect">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"recipient-unavailable">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"recipient-unavailable">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"policy-violation">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"policy-violation">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"payment-required">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"payment-required">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"not-authorized">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"not-authorized">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"not-allowed">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"not-allowed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"not-acceptable">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"not-acceptable">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"jid-malformed">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"jid-malformed">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"item-not-found">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"item-not-found">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"internal-server-error">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"internal-server-error">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"gone">>, <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-       _} ->
-         true;
-      {<<"gone">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"forbidden">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"forbidden">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"feature-not-implemented">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"feature-not-implemented">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"conflict">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"conflict">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"bad-request">>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>, _} ->
-         true;
-      {<<"bad-request">>, <<>>,
-       <<"urn:ietf:params:xml:ns:xmpp-stanzas">>} ->
-         true;
-      {<<"presence">>, <<"jabber:client">>, _} -> true;
-      {<<"presence">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"presence">>, <<"jabber:server">>, _} -> true;
-      {<<"presence">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"presence">>, <<"jabber:component:accept">>, _} ->
-         true;
-      {<<"presence">>, <<>>, <<"jabber:component:accept">>} ->
-         true;
-      {<<"priority">>, <<"jabber:client">>, _} -> true;
-      {<<"priority">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"priority">>, <<"jabber:server">>, _} -> true;
-      {<<"priority">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"priority">>, <<"jabber:component:accept">>, _} ->
-         true;
-      {<<"priority">>, <<>>, <<"jabber:component:accept">>} ->
-         true;
-      {<<"status">>, <<"jabber:client">>, _} -> true;
-      {<<"status">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"status">>, <<"jabber:server">>, _} -> true;
-      {<<"status">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"status">>, <<"jabber:component:accept">>, _} ->
-         true;
-      {<<"status">>, <<>>, <<"jabber:component:accept">>} ->
-         true;
-      {<<"show">>, <<"jabber:client">>, _} -> true;
-      {<<"show">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"show">>, <<"jabber:server">>, _} -> true;
-      {<<"show">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"show">>, <<"jabber:component:accept">>, _} -> true;
-      {<<"show">>, <<>>, <<"jabber:component:accept">>} ->
-         true;
-      {<<"message">>, <<"jabber:client">>, _} -> true;
-      {<<"message">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"message">>, <<"jabber:server">>, _} -> true;
-      {<<"message">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"message">>, <<"jabber:component:accept">>, _} ->
-         true;
-      {<<"message">>, <<>>, <<"jabber:component:accept">>} ->
-         true;
-      {<<"thread">>, <<"jabber:client">>, _} -> true;
-      {<<"thread">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"thread">>, <<"jabber:server">>, _} -> true;
-      {<<"thread">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"thread">>, <<"jabber:component:accept">>, _} ->
-         true;
-      {<<"thread">>, <<>>, <<"jabber:component:accept">>} ->
-         true;
-      {<<"body">>, <<"jabber:client">>, _} -> true;
-      {<<"body">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"body">>, <<"jabber:server">>, _} -> true;
-      {<<"body">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"body">>, <<"jabber:component:accept">>, _} -> true;
-      {<<"body">>, <<>>, <<"jabber:component:accept">>} ->
-         true;
-      {<<"subject">>, <<"jabber:client">>, _} -> true;
-      {<<"subject">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"subject">>, <<"jabber:server">>, _} -> true;
-      {<<"subject">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"subject">>, <<"jabber:component:accept">>, _} ->
-         true;
-      {<<"subject">>, <<>>, <<"jabber:component:accept">>} ->
-         true;
-      {<<"iq">>, <<"jabber:client">>, _} -> true;
-      {<<"iq">>, <<>>, <<"jabber:client">>} -> true;
-      {<<"iq">>, <<"jabber:server">>, _} -> true;
-      {<<"iq">>, <<>>, <<"jabber:server">>} -> true;
-      {<<"iq">>, <<"jabber:component:accept">>, _} -> true;
-      {<<"iq">>, <<>>, <<"jabber:component:accept">>} -> true;
-      {<<"query">>, <<"http://jabber.org/protocol/stats">>,
-       _} ->
-         true;
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/stats">>} ->
-         true;
-      {<<"stat">>, <<"http://jabber.org/protocol/stats">>,
-       _} ->
-         true;
-      {<<"stat">>, <<>>,
-       <<"http://jabber.org/protocol/stats">>} ->
-         true;
-      {<<"error">>, <<"http://jabber.org/protocol/stats">>,
-       _} ->
-         true;
-      {<<"error">>, <<>>,
-       <<"http://jabber.org/protocol/stats">>} ->
-         true;
-      {<<"storage">>, <<"storage:bookmarks">>, _} -> true;
-      {<<"storage">>, <<>>, <<"storage:bookmarks">>} -> true;
-      {<<"url">>, <<"storage:bookmarks">>, _} -> true;
-      {<<"url">>, <<>>, <<"storage:bookmarks">>} -> true;
-      {<<"conference">>, <<"storage:bookmarks">>, _} -> true;
-      {<<"conference">>, <<>>, <<"storage:bookmarks">>} ->
-         true;
-      {<<"password">>, <<"storage:bookmarks">>, _} -> true;
-      {<<"password">>, <<>>, <<"storage:bookmarks">>} -> true;
-      {<<"nick">>, <<"storage:bookmarks">>, _} -> true;
-      {<<"nick">>, <<>>, <<"storage:bookmarks">>} -> true;
-      {<<"query">>, <<"jabber:iq:private">>, _} -> true;
-      {<<"query">>, <<>>, <<"jabber:iq:private">>} -> true;
-      {<<"query">>,
-       <<"http://jabber.org/protocol/disco#items">>, _} ->
-         true;
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/disco#items">>} ->
-         true;
-      {<<"item">>,
-       <<"http://jabber.org/protocol/disco#items">>, _} ->
-         true;
-      {<<"item">>, <<>>,
-       <<"http://jabber.org/protocol/disco#items">>} ->
-         true;
-      {<<"query">>,
-       <<"http://jabber.org/protocol/disco#info">>, _} ->
-         true;
-      {<<"query">>, <<>>,
-       <<"http://jabber.org/protocol/disco#info">>} ->
-         true;
-      {<<"feature">>,
-       <<"http://jabber.org/protocol/disco#info">>, _} ->
-         true;
-      {<<"feature">>, <<>>,
-       <<"http://jabber.org/protocol/disco#info">>} ->
-         true;
-      {<<"identity">>,
-       <<"http://jabber.org/protocol/disco#info">>, _} ->
-         true;
-      {<<"identity">>, <<>>,
-       <<"http://jabber.org/protocol/disco#info">>} ->
-         true;
-      {<<"blocklist">>, <<"urn:xmpp:blocking">>, _} -> true;
-      {<<"blocklist">>, <<>>, <<"urn:xmpp:blocking">>} ->
-         true;
-      {<<"unblock">>, <<"urn:xmpp:blocking">>, _} -> true;
-      {<<"unblock">>, <<>>, <<"urn:xmpp:blocking">>} -> true;
-      {<<"block">>, <<"urn:xmpp:blocking">>, _} -> true;
-      {<<"block">>, <<>>, <<"urn:xmpp:blocking">>} -> true;
-      {<<"item">>, <<"urn:xmpp:blocking">>, _} -> true;
-      {<<"item">>, <<>>, <<"urn:xmpp:blocking">>} -> true;
-      {<<"query">>, <<"jabber:iq:privacy">>, _} -> true;
-      {<<"query">>, <<>>, <<"jabber:iq:privacy">>} -> true;
-      {<<"active">>, <<"jabber:iq:privacy">>, _} -> true;
-      {<<"active">>, <<>>, <<"jabber:iq:privacy">>} -> true;
-      {<<"default">>, <<"jabber:iq:privacy">>, _} -> true;
-      {<<"default">>, <<>>, <<"jabber:iq:privacy">>} -> true;
-      {<<"list">>, <<"jabber:iq:privacy">>, _} -> true;
-      {<<"list">>, <<>>, <<"jabber:iq:privacy">>} -> true;
-      {<<"item">>, <<"jabber:iq:privacy">>, _} -> true;
-      {<<"item">>, <<>>, <<"jabber:iq:privacy">>} -> true;
-      {<<"presence-out">>, <<"jabber:iq:privacy">>, _} ->
-         true;
-      {<<"presence-out">>, <<>>, <<"jabber:iq:privacy">>} ->
-         true;
-      {<<"presence-in">>, <<"jabber:iq:privacy">>, _} -> true;
-      {<<"presence-in">>, <<>>, <<"jabber:iq:privacy">>} ->
-         true;
-      {<<"iq">>, <<"jabber:iq:privacy">>, _} -> true;
-      {<<"iq">>, <<>>, <<"jabber:iq:privacy">>} -> true;
-      {<<"message">>, <<"jabber:iq:privacy">>, _} -> true;
-      {<<"message">>, <<>>, <<"jabber:iq:privacy">>} -> true;
-      {<<"ver">>, <<"urn:xmpp:features:rosterver">>, _} ->
-         true;
-      {<<"ver">>, <<>>, <<"urn:xmpp:features:rosterver">>} ->
-         true;
-      {<<"query">>, <<"jabber:iq:roster">>, _} -> true;
-      {<<"query">>, <<>>, <<"jabber:iq:roster">>} -> true;
-      {<<"item">>, <<"jabber:iq:roster">>, _} -> true;
-      {<<"item">>, <<>>, <<"jabber:iq:roster">>} -> true;
-      {<<"group">>, <<"jabber:iq:roster">>, _} -> true;
-      {<<"group">>, <<>>, <<"jabber:iq:roster">>} -> true;
-      {<<"query">>, <<"jabber:iq:version">>, _} -> true;
-      {<<"query">>, <<>>, <<"jabber:iq:version">>} -> true;
-      {<<"os">>, <<"jabber:iq:version">>, _} -> true;
-      {<<"os">>, <<>>, <<"jabber:iq:version">>} -> true;
-      {<<"version">>, <<"jabber:iq:version">>, _} -> true;
-      {<<"version">>, <<>>, <<"jabber:iq:version">>} -> true;
-      {<<"name">>, <<"jabber:iq:version">>, _} -> true;
-      {<<"name">>, <<>>, <<"jabber:iq:version">>} -> true;
-      {<<"query">>, <<"jabber:iq:last">>, _} -> true;
-      {<<"query">>, <<>>, <<"jabber:iq:last">>} -> true;
-      _ -> false
-    end.
-
-encode(_el) -> encode(_el, <<>>).
-
-encode({xmlel, _, _, _} = El, _) -> El;
-encode({last, _, _} = Query, TopXMLNS) ->
-    encode_last(Query, TopXMLNS);
-encode({version, _, _, _} = Query, TopXMLNS) ->
-    encode_version(Query, TopXMLNS);
-encode({roster_item, _, _, _, _, _} = Item, TopXMLNS) ->
-    encode_roster_item(Item, TopXMLNS);
-encode({roster_query, _, _} = Query, TopXMLNS) ->
-    encode_roster_query(Query, TopXMLNS);
-encode({rosterver_feature} = Ver, TopXMLNS) ->
-    encode_rosterver_feature(Ver, TopXMLNS);
-encode({privacy_item, _, _, _, _, _, _, _, _} = Item,
-       TopXMLNS) ->
-    encode_privacy_item(Item, TopXMLNS);
-encode({privacy_list, _, _} = List, TopXMLNS) ->
-    encode_privacy_list(List, TopXMLNS);
-encode({privacy_query, _, _, _} = Query, TopXMLNS) ->
-    encode_privacy(Query, TopXMLNS);
-encode({block, _} = Block, TopXMLNS) ->
-    encode_block(Block, TopXMLNS);
-encode({unblock, _} = Unblock, TopXMLNS) ->
-    encode_unblock(Unblock, TopXMLNS);
-encode({block_list, _} = Blocklist, TopXMLNS) ->
-    encode_block_list(Blocklist, TopXMLNS);
-encode({identity, _, _, _, _} = Identity, TopXMLNS) ->
-    encode_disco_identity(Identity, TopXMLNS);
-encode({disco_info, _, _, _, _} = Query, TopXMLNS) ->
-    encode_disco_info(Query, TopXMLNS);
-encode({disco_item, _, _, _} = Item, TopXMLNS) ->
-    encode_disco_item(Item, TopXMLNS);
-encode({disco_items, _, _, _} = Query, TopXMLNS) ->
-    encode_disco_items(Query, TopXMLNS);
-encode({private, _} = Query, TopXMLNS) ->
-    encode_private(Query, TopXMLNS);
-encode({bookmark_conference, _, _, _, _, _} =
-          Conference,
-       TopXMLNS) ->
-    encode_bookmark_conference(Conference, TopXMLNS);
-encode({bookmark_url, _, _} = Url, TopXMLNS) ->
-    encode_bookmark_url(Url, TopXMLNS);
-encode({bookmark_storage, _, _} = Storage, TopXMLNS) ->
-    encode_bookmarks_storage(Storage, TopXMLNS);
-encode({stat_error, _, _} = Error, TopXMLNS) ->
-    encode_stat_error(Error, TopXMLNS);
-encode({stat, _, _, _, _} = Stat, TopXMLNS) ->
-    encode_stat(Stat, TopXMLNS);
-encode({stats, _, _} = Query, TopXMLNS) ->
-    encode_stats(Query, TopXMLNS);
-encode({iq, _, _, _, _, _, _} = Iq, TopXMLNS) ->
-    encode_iq(Iq, TopXMLNS);
-encode({message, _, _, _, _, _, _, _, _, _} = Message,
-       TopXMLNS) ->
-    encode_message(Message, TopXMLNS);
-encode({presence, _, _, _, _, _, _, _, _, _} = Presence,
-       TopXMLNS) ->
-    encode_presence(Presence, TopXMLNS);
-encode({gone, _} = Gone, TopXMLNS) ->
-    encode_error_gone(Gone, TopXMLNS);
-encode({redirect, _} = Redirect, TopXMLNS) ->
-    encode_error_redirect(Redirect, TopXMLNS);
-encode({stanza_error, _, _, _, _, _, _} = Error,
-       TopXMLNS) ->
-    encode_error(Error, TopXMLNS);
-encode({bind, _, _} = Bind, TopXMLNS) ->
-    encode_bind(Bind, TopXMLNS);
-encode({legacy_auth, _, _, _, _} = Query, TopXMLNS) ->
-    encode_legacy_auth(Query, TopXMLNS);
-encode({sasl_auth, _, _} = Auth, TopXMLNS) ->
-    encode_sasl_auth(Auth, TopXMLNS);
-encode({sasl_abort} = Abort, TopXMLNS) ->
-    encode_sasl_abort(Abort, TopXMLNS);
-encode({sasl_challenge, _} = Challenge, TopXMLNS) ->
-    encode_sasl_challenge(Challenge, TopXMLNS);
-encode({sasl_response, _} = Response, TopXMLNS) ->
-    encode_sasl_response(Response, TopXMLNS);
-encode({sasl_success, _} = Success, TopXMLNS) ->
-    encode_sasl_success(Success, TopXMLNS);
-encode({sasl_failure, _, _} = Failure, TopXMLNS) ->
-    encode_sasl_failure(Failure, TopXMLNS);
-encode({sasl_mechanisms, _} = Mechanisms, TopXMLNS) ->
-    encode_sasl_mechanisms(Mechanisms, TopXMLNS);
-encode({starttls, _} = Starttls, TopXMLNS) ->
-    encode_starttls(Starttls, TopXMLNS);
-encode({starttls_proceed} = Proceed, TopXMLNS) ->
-    encode_starttls_proceed(Proceed, TopXMLNS);
-encode({starttls_failure} = Failure, TopXMLNS) ->
-    encode_starttls_failure(Failure, TopXMLNS);
-encode({compress_failure, _} = Failure, TopXMLNS) ->
-    encode_compress_failure(Failure, TopXMLNS);
-encode({compress, _} = Compress, TopXMLNS) ->
-    encode_compress(Compress, TopXMLNS);
-encode({compressed} = Compressed, TopXMLNS) ->
-    encode_compressed(Compressed, TopXMLNS);
-encode({compression, _} = Compression, TopXMLNS) ->
-    encode_compression(Compression, TopXMLNS);
-encode({stream_features, _} = Stream_features,
-       TopXMLNS) ->
-    encode_stream_features(Stream_features, TopXMLNS);
-encode({p1_push} = Push, TopXMLNS) ->
-    encode_p1_push(Push, TopXMLNS);
-encode({p1_rebind} = Rebind, TopXMLNS) ->
-    encode_p1_rebind(Rebind, TopXMLNS);
-encode({p1_ack} = Ack, TopXMLNS) ->
-    encode_p1_ack(Ack, TopXMLNS);
-encode({caps, _, _, _, _} = C, TopXMLNS) ->
-    encode_caps(C, TopXMLNS);
-encode({feature_register} = Register, TopXMLNS) ->
-    encode_feature_register(Register, TopXMLNS);
-encode({register, _, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _, _, _, _, _, _, _, _} =
-          Query,
-       TopXMLNS) ->
-    encode_register(Query, TopXMLNS);
-encode({xmpp_session, _} = Session, TopXMLNS) ->
-    encode_session(Session, TopXMLNS);
-encode({ping} = Ping, TopXMLNS) ->
-    encode_ping(Ping, TopXMLNS);
-encode({time, _, _} = Time, TopXMLNS) ->
-    encode_time(Time, TopXMLNS);
-encode({text, _, _} = Text, TopXMLNS) ->
-    encode_stream_error_text(Text, TopXMLNS);
-encode({'see-other-host', _} = See_other_host,
-       TopXMLNS) ->
-    encode_stream_error_see_other_host(See_other_host,
-                                      TopXMLNS);
-encode({stream_error, _, _} = Stream_error, TopXMLNS) ->
-    encode_stream_error(Stream_error, TopXMLNS);
-encode({vcard_name, _, _, _, _, _} = N, TopXMLNS) ->
-    encode_vcard_N(N, TopXMLNS);
-encode({vcard_adr, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _} =
-          Adr,
-       TopXMLNS) ->
-    encode_vcard_ADR(Adr, TopXMLNS);
-encode({vcard_label, _, _, _, _, _, _, _, _} = Label,
-       TopXMLNS) ->
-    encode_vcard_LABEL(Label, TopXMLNS);
-encode({vcard_tel, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _} =
-          Tel,
-       TopXMLNS) ->
-    encode_vcard_TEL(Tel, TopXMLNS);
-encode({vcard_email, _, _, _, _, _, _} = Email,
-       TopXMLNS) ->
-    encode_vcard_EMAIL(Email, TopXMLNS);
-encode({vcard_geo, _, _} = Geo, TopXMLNS) ->
-    encode_vcard_GEO(Geo, TopXMLNS);
-encode({vcard_logo, _, _, _} = Logo, TopXMLNS) ->
-    encode_vcard_LOGO(Logo, TopXMLNS);
-encode({vcard_photo, _, _, _} = Photo, TopXMLNS) ->
-    encode_vcard_PHOTO(Photo, TopXMLNS);
-encode({vcard_org, _, _} = Org, TopXMLNS) ->
-    encode_vcard_ORG(Org, TopXMLNS);
-encode({vcard_sound, _, _, _} = Sound, TopXMLNS) ->
-    encode_vcard_SOUND(Sound, TopXMLNS);
-encode({vcard_key, _, _} = Key, TopXMLNS) ->
-    encode_vcard_KEY(Key, TopXMLNS);
-encode({vcard_temp, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} =
-          Vcard,
-       TopXMLNS) ->
-    encode_vcard_temp(Vcard, TopXMLNS);
-encode({vcard_xupdate, _, _} = X, TopXMLNS) ->
-    encode_vcard_xupdate(X, TopXMLNS);
-encode({xdata_option, _, _} = Option, TopXMLNS) ->
-    encode_xdata_field_option(Option, TopXMLNS);
-encode({xdata_field, _, _, _, _, _, _, _, _} = Field,
-       TopXMLNS) ->
-    encode_xdata_field(Field, TopXMLNS);
-encode({xdata, _, _, _, _, _, _} = X, TopXMLNS) ->
-    encode_xdata(X, TopXMLNS);
-encode({ps_subscription, _, _, _, _, _, _} =
-          Subscription,
-       TopXMLNS) ->
-    encode_pubsub_subscription(Subscription, TopXMLNS);
-encode({ps_affiliation,
-       <<"http://jabber.org/protocol/pubsub">>, _, _, _} =
-          Affiliation,
-       TopXMLNS) ->
-    encode_pubsub_affiliation(Affiliation, TopXMLNS);
-encode({ps_affiliation, <<>>, _, _, _} = Affiliation,
-       TopXMLNS = <<"http://jabber.org/protocol/pubsub">>) ->
-    encode_pubsub_affiliation(Affiliation, TopXMLNS);
-encode({ps_affiliation,
-       <<"http://jabber.org/protocol/pubsub#owner">>, _, _,
-       _} =
-          Affiliation,
-       TopXMLNS) ->
-    encode_pubsub_owner_affiliation(Affiliation, TopXMLNS);
-encode({ps_affiliation, <<>>, _, _, _} = Affiliation,
-       TopXMLNS =
-          <<"http://jabber.org/protocol/pubsub#owner">>) ->
-    encode_pubsub_owner_affiliation(Affiliation, TopXMLNS);
-encode({ps_item, _, _, _, _, _} = Item, TopXMLNS) ->
-    encode_pubsub_item(Item, TopXMLNS);
-encode({ps_items, _, _, _, _, _, _} = Items,
-       TopXMLNS) ->
-    encode_pubsub_items(Items, TopXMLNS);
-encode({ps_event, _, _, _, _, _, _} = Event,
-       TopXMLNS) ->
-    encode_pubsub_event(Event, TopXMLNS);
-encode({ps_subscribe, _, _} = Subscribe, TopXMLNS) ->
-    encode_pubsub_subscribe(Subscribe, TopXMLNS);
-encode({ps_unsubscribe, _, _, _} = Unsubscribe,
-       TopXMLNS) ->
-    encode_pubsub_unsubscribe(Unsubscribe, TopXMLNS);
-encode({ps_publish, _, _} = Publish, TopXMLNS) ->
-    encode_pubsub_publish(Publish, TopXMLNS);
-encode({ps_options, _, _, _, _} = Options, TopXMLNS) ->
-    encode_pubsub_options(Options, TopXMLNS);
-encode({ps_retract, _, _, _} = Retract, TopXMLNS) ->
-    encode_pubsub_retract(Retract, TopXMLNS);
-encode({pubsub, _, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _, _} =
-          Pubsub,
-       TopXMLNS) ->
-    encode_pubsub(Pubsub, TopXMLNS);
-encode({pubsub_owner, _, _, _, _, _, _} = Pubsub,
-       TopXMLNS) ->
-    encode_pubsub_owner(Pubsub, TopXMLNS);
-encode({ps_error, 'closed-node', _} = Closed_node,
-       TopXMLNS) ->
-    encode_pubsub_error_closed_node(Closed_node, TopXMLNS);
-encode({ps_error, 'configuration-required', _} =
-          Configuration_required,
-       TopXMLNS) ->
-    encode_pubsub_error_configuration_required(Configuration_required,
-                                              TopXMLNS);
-encode({ps_error, 'invalid-jid', _} = Invalid_jid,
-       TopXMLNS) ->
-    encode_pubsub_error_invalid_jid(Invalid_jid, TopXMLNS);
-encode({ps_error, 'invalid-options', _} =
-          Invalid_options,
-       TopXMLNS) ->
-    encode_pubsub_error_invalid_options(Invalid_options,
-                                       TopXMLNS);
-encode({ps_error, 'invalid-payload', _} =
-          Invalid_payload,
-       TopXMLNS) ->
-    encode_pubsub_error_invalid_payload(Invalid_payload,
-                                       TopXMLNS);
-encode({ps_error, 'invalid-subid', _} = Invalid_subid,
-       TopXMLNS) ->
-    encode_pubsub_error_invalid_subid(Invalid_subid,
-                                     TopXMLNS);
-encode({ps_error, 'item-forbidden', _} = Item_forbidden,
-       TopXMLNS) ->
-    encode_pubsub_error_item_forbidden(Item_forbidden,
-                                      TopXMLNS);
-encode({ps_error, 'item-required', _} = Item_required,
-       TopXMLNS) ->
-    encode_pubsub_error_item_required(Item_required,
-                                     TopXMLNS);
-encode({ps_error, 'jid-required', _} = Jid_required,
-       TopXMLNS) ->
-    encode_pubsub_error_jid_required(Jid_required,
-                                    TopXMLNS);
-encode({ps_error, 'max-items-exceeded', _} =
-          Max_items_exceeded,
-       TopXMLNS) ->
-    encode_pubsub_error_max_items_exceeded(Max_items_exceeded,
-                                          TopXMLNS);
-encode({ps_error, 'max-nodes-exceeded', _} =
-          Max_nodes_exceeded,
-       TopXMLNS) ->
-    encode_pubsub_error_max_nodes_exceeded(Max_nodes_exceeded,
-                                          TopXMLNS);
-encode({ps_error, 'nodeid-required', _} =
-          Nodeid_required,
-       TopXMLNS) ->
-    encode_pubsub_error_nodeid_required(Nodeid_required,
-                                       TopXMLNS);
-encode({ps_error, 'not-in-roster-group', _} =
-          Not_in_roster_group,
-       TopXMLNS) ->
-    encode_pubsub_error_not_in_roster_group(Not_in_roster_group,
-                                           TopXMLNS);
-encode({ps_error, 'not-subscribed', _} = Not_subscribed,
-       TopXMLNS) ->
-    encode_pubsub_error_not_subscribed(Not_subscribed,
-                                      TopXMLNS);
-encode({ps_error, 'payload-too-big', _} =
-          Payload_too_big,
-       TopXMLNS) ->
-    encode_pubsub_error_payload_too_big(Payload_too_big,
-                                       TopXMLNS);
-encode({ps_error, 'payload-required', _} =
-          Payload_required,
-       TopXMLNS) ->
-    encode_pubsub_error_payload_required(Payload_required,
-                                        TopXMLNS);
-encode({ps_error, 'pending-subscription', _} =
-          Pending_subscription,
-       TopXMLNS) ->
-    encode_pubsub_error_pending_subscription(Pending_subscription,
-                                            TopXMLNS);
-encode({ps_error, 'presence-subscription-required', _} =
-          Presence_subscription_required,
-       TopXMLNS) ->
-    encode_pubsub_error_presence_subscription_required(Presence_subscription_required,
-                                                      TopXMLNS);
-encode({ps_error, 'subid-required', _} = Subid_required,
-       TopXMLNS) ->
-    encode_pubsub_error_subid_required(Subid_required,
-                                      TopXMLNS);
-encode({ps_error, 'too-many-subscriptions', _} =
-          Too_many_subscriptions,
-       TopXMLNS) ->
-    encode_pubsub_error_too_many_subscriptions(Too_many_subscriptions,
-                                              TopXMLNS);
-encode({ps_error, unsupported, _} = Unsupported,
-       TopXMLNS) ->
-    encode_pubsub_error_unsupported(Unsupported, TopXMLNS);
-encode({ps_error, 'unsupported-access-model', _} =
-          Unsupported_access_model,
-       TopXMLNS) ->
-    encode_pubsub_error_unsupported_access_model(Unsupported_access_model,
-                                                TopXMLNS);
-encode({shim, _} = Headers, TopXMLNS) ->
-    encode_shim_headers(Headers, TopXMLNS);
-encode({chatstate, active} = Active, TopXMLNS) ->
-    encode_chatstate_active(Active, TopXMLNS);
-encode({chatstate, composing} = Composing, TopXMLNS) ->
-    encode_chatstate_composing(Composing, TopXMLNS);
-encode({chatstate, gone} = Gone, TopXMLNS) ->
-    encode_chatstate_gone(Gone, TopXMLNS);
-encode({chatstate, inactive} = Inactive, TopXMLNS) ->
-    encode_chatstate_inactive(Inactive, TopXMLNS);
-encode({chatstate, paused} = Paused, TopXMLNS) ->
-    encode_chatstate_paused(Paused, TopXMLNS);
-encode({delay, _, _, _} = Delay, TopXMLNS) ->
-    encode_delay(Delay, TopXMLNS);
-encode({streamhost, _, _, _} = Streamhost, TopXMLNS) ->
-    encode_bytestreams_streamhost(Streamhost, TopXMLNS);
-encode({bytestreams, _, _, _, _, _, _} = Query,
-       TopXMLNS) ->
-    encode_bytestreams(Query, TopXMLNS);
-encode({muc_history, _, _, _, _} = History, TopXMLNS) ->
-    encode_muc_history(History, TopXMLNS);
-encode({muc_decline, _, _, _} = Decline, TopXMLNS) ->
-    encode_muc_user_decline(Decline, TopXMLNS);
-encode({muc_destroy, _, _, _, _} = Destroy, TopXMLNS) ->
-    encode_muc_destroy(Destroy, TopXMLNS);
-encode({muc_invite, _, _, _, _} = Invite, TopXMLNS) ->
-    encode_muc_user_invite(Invite, TopXMLNS);
-encode({muc_user, _, _, _, _, _, _} = X, TopXMLNS) ->
-    encode_muc_user(X, TopXMLNS);
-encode({muc_owner, _, _, _} = Query, TopXMLNS) ->
-    encode_muc_owner(Query, TopXMLNS);
-encode({muc_item, _, _, _, _, _, _, _} = Item,
-       TopXMLNS) ->
-    encode_muc_admin_item(Item, TopXMLNS);
-encode({muc_actor, _, _} = Actor, TopXMLNS) ->
-    encode_muc_admin_actor(Actor, TopXMLNS);
-encode({muc_admin, _} = Query, TopXMLNS) ->
-    encode_muc_admin(Query, TopXMLNS);
-encode({muc, _, _} = X, TopXMLNS) ->
-    encode_muc(X, TopXMLNS);
-encode({muc_unique, _} = Unique, TopXMLNS) ->
-    encode_muc_unique(Unique, TopXMLNS);
-encode({x_conference, _, _, _, _, _} = X, TopXMLNS) ->
-    encode_x_conference(X, TopXMLNS);
-encode({muc_subscriptions, _} = Subscriptions,
-       TopXMLNS) ->
-    encode_muc_subscriptions(Subscriptions, TopXMLNS);
-encode({muc_subscribe, _, _} = Subscribe, TopXMLNS) ->
-    encode_muc_subscribe(Subscribe, TopXMLNS);
-encode({muc_unsubscribe} = Unsubscribe, TopXMLNS) ->
-    encode_muc_unsubscribe(Unsubscribe, TopXMLNS);
-encode({rsm_first, _, _} = First, TopXMLNS) ->
-    encode_rsm_first(First, TopXMLNS);
-encode({rsm_set, _, _, _, _, _, _, _} = Set,
-       TopXMLNS) ->
-    encode_rsm_set(Set, TopXMLNS);
-encode({mam_query, _, _, _, _, _, _, _, _} = Query,
-       TopXMLNS) ->
-    encode_mam_query(Query, TopXMLNS);
-encode({mam_archived, _, _} = Archived, TopXMLNS) ->
-    encode_mam_archived(Archived, TopXMLNS);
-encode({mam_result, _, _, _, _} = Result, TopXMLNS) ->
-    encode_mam_result(Result, TopXMLNS);
-encode({mam_prefs, _, _, _, _} = Prefs, TopXMLNS) ->
-    encode_mam_prefs(Prefs, TopXMLNS);
-encode({mam_fin, _, _, _, _, _} = Fin, TopXMLNS) ->
-    encode_mam_fin(Fin, TopXMLNS);
-encode({forwarded, _, _} = Forwarded, TopXMLNS) ->
-    encode_forwarded(Forwarded, TopXMLNS);
-encode({carbons_disable} = Disable, TopXMLNS) ->
-    encode_carbons_disable(Disable, TopXMLNS);
-encode({carbons_enable} = Enable, TopXMLNS) ->
-    encode_carbons_enable(Enable, TopXMLNS);
-encode({carbons_private} = Private, TopXMLNS) ->
-    encode_carbons_private(Private, TopXMLNS);
-encode({carbons_received, _} = Received, TopXMLNS) ->
-    encode_carbons_received(Received, TopXMLNS);
-encode({carbons_sent, _} = Sent, TopXMLNS) ->
-    encode_carbons_sent(Sent, TopXMLNS);
-encode({feature_csi, <<"urn:xmpp:csi:0">>} = Csi,
-       TopXMLNS) ->
-    encode_feature_csi(Csi, TopXMLNS);
-encode({feature_csi, <<>>} = Csi,
-       TopXMLNS = <<"urn:xmpp:csi:0">>) ->
-    encode_feature_csi(Csi, TopXMLNS);
-encode({csi, active} = Active, TopXMLNS) ->
-    encode_csi_active(Active, TopXMLNS);
-encode({csi, inactive} = Inactive, TopXMLNS) ->
-    encode_csi_inactive(Inactive, TopXMLNS);
-encode({feature_sm, _} = Sm, TopXMLNS) ->
-    encode_feature_sm(Sm, TopXMLNS);
-encode({sm_enable, _, _, _} = Enable, TopXMLNS) ->
-    encode_sm_enable(Enable, TopXMLNS);
-encode({sm_enabled, _, _, _, _, _} = Enabled,
-       TopXMLNS) ->
-    encode_sm_enabled(Enabled, TopXMLNS);
-encode({sm_resume, _, _, _} = Resume, TopXMLNS) ->
-    encode_sm_resume(Resume, TopXMLNS);
-encode({sm_resumed, _, _, _} = Resumed, TopXMLNS) ->
-    encode_sm_resumed(Resumed, TopXMLNS);
-encode({sm_r, _} = R, TopXMLNS) ->
-    encode_sm_r(R, TopXMLNS);
-encode({sm_a, _, _} = A, TopXMLNS) ->
-    encode_sm_a(A, TopXMLNS);
-encode({sm_failed, _, _, _} = Failed, TopXMLNS) ->
-    encode_sm_failed(Failed, TopXMLNS);
-encode({offline_item, _, _} = Item, TopXMLNS) ->
-    encode_offline_item(Item, TopXMLNS);
-encode({offline, _, _, _} = Offline, TopXMLNS) ->
-    encode_offline(Offline, TopXMLNS);
-encode({mix_join, _, _} = Join, TopXMLNS) ->
-    encode_mix_join(Join, TopXMLNS);
-encode({mix_leave} = Leave, TopXMLNS) ->
-    encode_mix_leave(Leave, TopXMLNS);
-encode({mix_participant, _, _} = Participant,
-       TopXMLNS) ->
-    encode_mix_participant(Participant, TopXMLNS);
-encode({hint, 'no-copy'} = No_copy, TopXMLNS) ->
-    encode_hint_no_copy(No_copy, TopXMLNS);
-encode({hint, 'no-store'} = No_store, TopXMLNS) ->
-    encode_hint_no_store(No_store, TopXMLNS);
-encode({hint, 'no-storage'} = No_storage, TopXMLNS) ->
-    encode_hint_no_storage(No_storage, TopXMLNS);
-encode({hint, store} = Store, TopXMLNS) ->
-    encode_hint_store(Store, TopXMLNS);
-encode({hint, 'no-permanent-store'} =
-          No_permanent_store,
-       TopXMLNS) ->
-    encode_hint_no_permanent_store(No_permanent_store,
-                                  TopXMLNS);
-encode({hint, 'no-permanent-storage'} =
-          No_permanent_storage,
-       TopXMLNS) ->
-    encode_hint_no_permanent_storage(No_permanent_storage,
-                                    TopXMLNS);
-encode({search_item, _, _, _, _, _} = Item, TopXMLNS) ->
-    encode_search_item(Item, TopXMLNS);
-encode({search, _, _, _, _, _, _, _} = Query,
-       TopXMLNS) ->
-    encode_search(Query, TopXMLNS);
-encode({xevent, _, _, _, _, _} = X, TopXMLNS) ->
-    encode_xevent(X, TopXMLNS);
-encode({expire, _, _} = X, TopXMLNS) ->
-    encode_expire(X, TopXMLNS);
-encode({nick, _} = Nick, TopXMLNS) ->
-    encode_nick(Nick, TopXMLNS);
-encode({address, _, _, _, _, _} = Address, TopXMLNS) ->
-    encode_address(Address, TopXMLNS);
-encode({addresses, _} = Addresses, TopXMLNS) ->
-    encode_addresses(Addresses, TopXMLNS);
-encode({stanza_id, _, _} = Stanza_id, TopXMLNS) ->
-    encode_stanza_id(Stanza_id, TopXMLNS);
-encode({client_id, _} = Client_id, TopXMLNS) ->
-    encode_client_id(Client_id, TopXMLNS);
-encode({adhoc_actions, _, _, _, _} = Actions,
-       TopXMLNS) ->
-    encode_adhoc_command_actions(Actions, TopXMLNS);
-encode({adhoc_note, _, _} = Note, TopXMLNS) ->
-    encode_adhoc_command_notes(Note, TopXMLNS);
-encode({adhoc_command, _, _, _, _, _, _, _, _} =
-          Command,
-       TopXMLNS) ->
-    encode_adhoc_command(Command, TopXMLNS);
-encode({db_result, _, _, _, _, _} = Db_result,
-       TopXMLNS) ->
-    encode_db_result(Db_result, TopXMLNS);
-encode({db_verify, _, _, _, _, _, _} = Db_verify,
-       TopXMLNS) ->
-    encode_db_verify(Db_verify, TopXMLNS);
-encode({handshake, _} = Handshake, TopXMLNS) ->
-    encode_handshake(Handshake, TopXMLNS);
-encode({stream_start, _, _, _, _, _, _, _, _} =
-          Stream_stream,
-       TopXMLNS) ->
-    encode_stream_start(Stream_stream, TopXMLNS);
-encode({bob_data, _, _, _, _} = Data, TopXMLNS) ->
-    encode_bob_data(Data, TopXMLNS);
-encode({xcaptcha, _} = Captcha, TopXMLNS) ->
-    encode_captcha(Captcha, TopXMLNS);
-encode({media_uri, _, _} = Uri, TopXMLNS) ->
-    encode_media_uri(Uri, TopXMLNS);
-encode({media, _, _, _} = Media, TopXMLNS) ->
-    encode_media(Media, TopXMLNS);
-encode({oob_x, _, _, _} = X, TopXMLNS) ->
-    encode_oob_x(X, TopXMLNS);
-encode({sic, _, _, _} = Address, TopXMLNS) ->
-    encode_sic(Address, TopXMLNS);
-encode({upload_request, _, _, _, _} = Request,
-       TopXMLNS) ->
-    encode_upload_request(Request, TopXMLNS);
-encode({upload_slot, _, _, _} = Slot, TopXMLNS) ->
-    encode_upload_slot(Slot, TopXMLNS);
-encode({thumbnail, _, _, _, _} = Thumbnail, TopXMLNS) ->
-    encode_thumbnail(Thumbnail, TopXMLNS);
-encode({privilege_perm, _, _} = Perm, TopXMLNS) ->
-    encode_privilege_perm(Perm, TopXMLNS);
-encode({privilege, _, _} = Privilege, TopXMLNS) ->
-    encode_privilege(Privilege, TopXMLNS);
-encode({delegated, _, _} = Delegated, TopXMLNS) ->
-    encode_delegated(Delegated, TopXMLNS);
-encode({delegation, _, _} = Delegation, TopXMLNS) ->
-    encode_delegation(Delegation, TopXMLNS);
-encode({delegation_query, _, _} = Query, TopXMLNS) ->
-    encode_delegation_query(Query, TopXMLNS).
-
-get_name({address, _, _, _, _, _}) -> <<"address">>;
-get_name({addresses, _}) -> <<"addresses">>;
-get_name({adhoc_actions, _, _, _, _}) -> <<"actions">>;
-get_name({adhoc_command, _, _, _, _, _, _, _, _}) ->
-    <<"command">>;
-get_name({adhoc_note, _, _}) -> <<"note">>;
-get_name({bind, _, _}) -> <<"bind">>;
-get_name({block, _}) -> <<"block">>;
-get_name({block_list, _}) -> <<"blocklist">>;
-get_name({bob_data, _, _, _, _}) -> <<"data">>;
-get_name({bookmark_conference, _, _, _, _, _}) ->
-    <<"conference">>;
-get_name({bookmark_storage, _, _}) -> <<"storage">>;
-get_name({bookmark_url, _, _}) -> <<"url">>;
-get_name({bytestreams, _, _, _, _, _, _}) ->
-    <<"query">>;
-get_name({caps, _, _, _, _}) -> <<"c">>;
-get_name({carbons_disable}) -> <<"disable">>;
-get_name({carbons_enable}) -> <<"enable">>;
-get_name({carbons_private}) -> <<"private">>;
-get_name({carbons_received, _}) -> <<"received">>;
-get_name({carbons_sent, _}) -> <<"sent">>;
-get_name({chatstate, active}) -> <<"active">>;
-get_name({chatstate, composing}) -> <<"composing">>;
-get_name({chatstate, gone}) -> <<"gone">>;
-get_name({chatstate, inactive}) -> <<"inactive">>;
-get_name({chatstate, paused}) -> <<"paused">>;
-get_name({client_id, _}) -> <<"client-id">>;
-get_name({compress, _}) -> <<"compress">>;
-get_name({compress_failure, _}) -> <<"failure">>;
-get_name({compressed}) -> <<"compressed">>;
-get_name({compression, _}) -> <<"compression">>;
-get_name({csi, active}) -> <<"active">>;
-get_name({csi, inactive}) -> <<"inactive">>;
-get_name({db_result, _, _, _, _, _}) -> <<"db:result">>;
-get_name({db_verify, _, _, _, _, _, _}) ->
-    <<"db:verify">>;
-get_name({delay, _, _, _}) -> <<"delay">>;
-get_name({delegated, _, _}) -> <<"delegated">>;
-get_name({delegation, _, _}) -> <<"delegation">>;
-get_name({delegation_query, _, _}) -> <<"query">>;
-get_name({disco_info, _, _, _, _}) -> <<"query">>;
-get_name({disco_item, _, _, _}) -> <<"item">>;
-get_name({disco_items, _, _, _}) -> <<"query">>;
-get_name({expire, _, _}) -> <<"x">>;
-get_name({feature_csi, _}) -> <<"csi">>;
-get_name({feature_register}) -> <<"register">>;
-get_name({feature_sm, _}) -> <<"sm">>;
-get_name({forwarded, _, _}) -> <<"forwarded">>;
-get_name({gone, _}) -> <<"gone">>;
-get_name({handshake, _}) -> <<"handshake">>;
-get_name({hint, 'no-copy'}) -> <<"no-copy">>;
-get_name({hint, 'no-permanent-storage'}) ->
-    <<"no-permanent-storage">>;
-get_name({hint, 'no-permanent-store'}) ->
-    <<"no-permanent-store">>;
-get_name({hint, 'no-storage'}) -> <<"no-storage">>;
-get_name({hint, 'no-store'}) -> <<"no-store">>;
-get_name({hint, store}) -> <<"store">>;
-get_name({identity, _, _, _, _}) -> <<"identity">>;
-get_name({iq, _, _, _, _, _, _}) -> <<"iq">>;
-get_name({last, _, _}) -> <<"query">>;
-get_name({legacy_auth, _, _, _, _}) -> <<"query">>;
-get_name({mam_archived, _, _}) -> <<"archived">>;
-get_name({mam_fin, _, _, _, _, _}) -> <<"fin">>;
-get_name({mam_prefs, _, _, _, _}) -> <<"prefs">>;
-get_name({mam_query, _, _, _, _, _, _, _, _}) ->
-    <<"query">>;
-get_name({mam_result, _, _, _, _}) -> <<"result">>;
-get_name({media, _, _, _}) -> <<"media">>;
-get_name({media_uri, _, _}) -> <<"uri">>;
-get_name({message, _, _, _, _, _, _, _, _, _}) ->
-    <<"message">>;
-get_name({mix_join, _, _}) -> <<"join">>;
-get_name({mix_leave}) -> <<"leave">>;
-get_name({mix_participant, _, _}) -> <<"participant">>;
-get_name({muc, _, _}) -> <<"x">>;
-get_name({muc_actor, _, _}) -> <<"actor">>;
-get_name({muc_admin, _}) -> <<"query">>;
-get_name({muc_decline, _, _, _}) -> <<"decline">>;
-get_name({muc_destroy, _, _, _, _}) -> <<"destroy">>;
-get_name({muc_history, _, _, _, _}) -> <<"history">>;
-get_name({muc_invite, _, _, _, _}) -> <<"invite">>;
-get_name({muc_item, _, _, _, _, _, _, _}) -> <<"item">>;
-get_name({muc_owner, _, _, _}) -> <<"query">>;
-get_name({muc_subscribe, _, _}) -> <<"subscribe">>;
-get_name({muc_subscriptions, _}) -> <<"subscriptions">>;
-get_name({muc_unique, _}) -> <<"unique">>;
-get_name({muc_unsubscribe}) -> <<"unsubscribe">>;
-get_name({muc_user, _, _, _, _, _, _}) -> <<"x">>;
-get_name({nick, _}) -> <<"nick">>;
-get_name({offline, _, _, _}) -> <<"offline">>;
-get_name({offline_item, _, _}) -> <<"item">>;
-get_name({oob_x, _, _, _}) -> <<"x">>;
-get_name({p1_ack}) -> <<"ack">>;
-get_name({p1_push}) -> <<"push">>;
-get_name({p1_rebind}) -> <<"rebind">>;
-get_name({ping}) -> <<"ping">>;
-get_name({presence, _, _, _, _, _, _, _, _, _}) ->
-    <<"presence">>;
-get_name({privacy_item, _, _, _, _, _, _, _, _}) ->
-    <<"item">>;
-get_name({privacy_list, _, _}) -> <<"list">>;
-get_name({privacy_query, _, _, _}) -> <<"query">>;
-get_name({private, _}) -> <<"query">>;
-get_name({privilege, _, _}) -> <<"privilege">>;
-get_name({privilege_perm, _, _}) -> <<"perm">>;
-get_name({ps_affiliation, _, _, _, _}) ->
-    <<"affiliation">>;
-get_name({ps_error, 'closed-node', _}) ->
-    <<"closed-node">>;
-get_name({ps_error, 'configuration-required', _}) ->
-    <<"configuration-required">>;
-get_name({ps_error, 'invalid-jid', _}) ->
-    <<"invalid-jid">>;
-get_name({ps_error, 'invalid-options', _}) ->
-    <<"invalid-options">>;
-get_name({ps_error, 'invalid-payload', _}) ->
-    <<"invalid-payload">>;
-get_name({ps_error, 'invalid-subid', _}) ->
-    <<"invalid-subid">>;
-get_name({ps_error, 'item-forbidden', _}) ->
-    <<"item-forbidden">>;
-get_name({ps_error, 'item-required', _}) ->
-    <<"item-required">>;
-get_name({ps_error, 'jid-required', _}) ->
-    <<"jid-required">>;
-get_name({ps_error, 'max-items-exceeded', _}) ->
-    <<"max-items-exceeded">>;
-get_name({ps_error, 'max-nodes-exceeded', _}) ->
-    <<"max-nodes-exceeded">>;
-get_name({ps_error, 'nodeid-required', _}) ->
-    <<"nodeid-required">>;
-get_name({ps_error, 'not-in-roster-group', _}) ->
-    <<"not-in-roster-group">>;
-get_name({ps_error, 'not-subscribed', _}) ->
-    <<"not-subscribed">>;
-get_name({ps_error, 'payload-required', _}) ->
-    <<"payload-required">>;
-get_name({ps_error, 'payload-too-big', _}) ->
-    <<"payload-too-big">>;
-get_name({ps_error, 'pending-subscription', _}) ->
-    <<"pending-subscription">>;
-get_name({ps_error, 'presence-subscription-required',
-         _}) ->
-    <<"presence-subscription-required">>;
-get_name({ps_error, 'subid-required', _}) ->
-    <<"subid-required">>;
-get_name({ps_error, 'too-many-subscriptions', _}) ->
-    <<"too-many-subscriptions">>;
-get_name({ps_error, unsupported, _}) ->
-    <<"unsupported">>;
-get_name({ps_error, 'unsupported-access-model', _}) ->
-    <<"unsupported-access-model">>;
-get_name({ps_event, _, _, _, _, _, _}) -> <<"event">>;
-get_name({ps_item, _, _, _, _, _}) -> <<"item">>;
-get_name({ps_items, _, _, _, _, _, _}) -> <<"items">>;
-get_name({ps_options, _, _, _, _}) -> <<"options">>;
-get_name({ps_publish, _, _}) -> <<"publish">>;
-get_name({ps_retract, _, _, _}) -> <<"retract">>;
-get_name({ps_subscribe, _, _}) -> <<"subscribe">>;
-get_name({ps_subscription, _, _, _, _, _, _}) ->
-    <<"subscription">>;
-get_name({ps_unsubscribe, _, _, _}) ->
-    <<"unsubscribe">>;
-get_name({pubsub, _, _, _, _, _, _, _, _, _, _, _, _, _,
-         _, _, _}) ->
-    <<"pubsub">>;
-get_name({pubsub_owner, _, _, _, _, _, _}) ->
-    <<"pubsub">>;
-get_name({redirect, _}) -> <<"redirect">>;
-get_name({register, _, _, _, _, _, _, _, _, _, _, _, _,
-         _, _, _, _, _, _, _, _, _, _}) ->
-    <<"query">>;
-get_name({roster_item, _, _, _, _, _}) -> <<"item">>;
-get_name({roster_query, _, _}) -> <<"query">>;
-get_name({rosterver_feature}) -> <<"ver">>;
-get_name({rsm_first, _, _}) -> <<"first">>;
-get_name({rsm_set, _, _, _, _, _, _, _}) -> <<"set">>;
-get_name({sasl_abort}) -> <<"abort">>;
-get_name({sasl_auth, _, _}) -> <<"auth">>;
-get_name({sasl_challenge, _}) -> <<"challenge">>;
-get_name({sasl_failure, _, _}) -> <<"failure">>;
-get_name({sasl_mechanisms, _}) -> <<"mechanisms">>;
-get_name({sasl_response, _}) -> <<"response">>;
-get_name({sasl_success, _}) -> <<"success">>;
-get_name({search, _, _, _, _, _, _, _}) -> <<"query">>;
-get_name({search_item, _, _, _, _, _}) -> <<"item">>;
-get_name({'see-other-host', _}) -> <<"see-other-host">>;
-get_name({shim, _}) -> <<"headers">>;
-get_name({sic, _, _, _}) -> <<"address">>;
-get_name({sm_a, _, _}) -> <<"a">>;
-get_name({sm_enable, _, _, _}) -> <<"enable">>;
-get_name({sm_enabled, _, _, _, _, _}) -> <<"enabled">>;
-get_name({sm_failed, _, _, _}) -> <<"failed">>;
-get_name({sm_r, _}) -> <<"r">>;
-get_name({sm_resume, _, _, _}) -> <<"resume">>;
-get_name({sm_resumed, _, _, _}) -> <<"resumed">>;
-get_name({stanza_error, _, _, _, _, _, _}) ->
-    <<"error">>;
-get_name({stanza_id, _, _}) -> <<"stanza-id">>;
-get_name({starttls, _}) -> <<"starttls">>;
-get_name({starttls_failure}) -> <<"failure">>;
-get_name({starttls_proceed}) -> <<"proceed">>;
-get_name({stat, _, _, _, _}) -> <<"stat">>;
-get_name({stat_error, _, _}) -> <<"error">>;
-get_name({stats, _, _}) -> <<"query">>;
-get_name({stream_error, _, _}) -> <<"stream:error">>;
-get_name({stream_features, _}) -> <<"stream:features">>;
-get_name({stream_start, _, _, _, _, _, _, _, _}) ->
-    <<"stream:stream">>;
-get_name({streamhost, _, _, _}) -> <<"streamhost">>;
-get_name({text, _, _}) -> <<"text">>;
-get_name({thumbnail, _, _, _, _}) -> <<"thumbnail">>;
-get_name({time, _, _}) -> <<"time">>;
-get_name({unblock, _}) -> <<"unblock">>;
-get_name({upload_request, _, _, _, _}) -> <<"request">>;
-get_name({upload_slot, _, _, _}) -> <<"slot">>;
-get_name({vcard_adr, _, _, _, _, _, _, _, _, _, _, _, _,
-         _, _}) ->
-    <<"ADR">>;
-get_name({vcard_email, _, _, _, _, _, _}) ->
-    <<"EMAIL">>;
-get_name({vcard_geo, _, _}) -> <<"GEO">>;
-get_name({vcard_key, _, _}) -> <<"KEY">>;
-get_name({vcard_label, _, _, _, _, _, _, _, _}) ->
-    <<"LABEL">>;
-get_name({vcard_logo, _, _, _}) -> <<"LOGO">>;
-get_name({vcard_name, _, _, _, _, _}) -> <<"N">>;
-get_name({vcard_org, _, _}) -> <<"ORG">>;
-get_name({vcard_photo, _, _, _}) -> <<"PHOTO">>;
-get_name({vcard_sound, _, _, _}) -> <<"SOUND">>;
-get_name({vcard_tel, _, _, _, _, _, _, _, _, _, _, _, _,
-         _, _}) ->
-    <<"TEL">>;
-get_name({vcard_temp, _, _, _, _, _, _, _, _, _, _, _,
-         _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
-         _}) ->
-    <<"vCard">>;
-get_name({vcard_xupdate, _, _}) -> <<"x">>;
-get_name({version, _, _, _}) -> <<"query">>;
-get_name({x_conference, _, _, _, _, _}) -> <<"x">>;
-get_name({xcaptcha, _}) -> <<"captcha">>;
-get_name({xdata, _, _, _, _, _, _}) -> <<"x">>;
-get_name({xdata_field, _, _, _, _, _, _, _, _}) ->
-    <<"field">>;
-get_name({xdata_option, _, _}) -> <<"option">>;
-get_name({xevent, _, _, _, _, _}) -> <<"x">>;
-get_name({xmpp_session, _}) -> <<"session">>.
-
-get_ns({address, _, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/address">>;
-get_ns({addresses, _}) ->
-    <<"http://jabber.org/protocol/address">>;
-get_ns({adhoc_actions, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/commands">>;
-get_ns({adhoc_command, _, _, _, _, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/commands">>;
-get_ns({adhoc_note, _, _}) ->
-    <<"http://jabber.org/protocol/commands">>;
-get_ns({bind, _, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-bind">>;
-get_ns({block, _}) -> <<"urn:xmpp:blocking">>;
-get_ns({block_list, _}) -> <<"urn:xmpp:blocking">>;
-get_ns({bob_data, _, _, _, _}) -> <<"urn:xmpp:bob">>;
-get_ns({bookmark_conference, _, _, _, _, _}) ->
-    <<"storage:bookmarks">>;
-get_ns({bookmark_storage, _, _}) ->
-    <<"storage:bookmarks">>;
-get_ns({bookmark_url, _, _}) -> <<"storage:bookmarks">>;
-get_ns({bytestreams, _, _, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/bytestreams">>;
-get_ns({caps, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/caps">>;
-get_ns({carbons_disable}) -> <<"urn:xmpp:carbons:2">>;
-get_ns({carbons_enable}) -> <<"urn:xmpp:carbons:2">>;
-get_ns({carbons_private}) -> <<"urn:xmpp:carbons:2">>;
-get_ns({carbons_received, _}) ->
-    <<"urn:xmpp:carbons:2">>;
-get_ns({carbons_sent, _}) -> <<"urn:xmpp:carbons:2">>;
-get_ns({chatstate, active}) ->
-    <<"http://jabber.org/protocol/chatstates">>;
-get_ns({chatstate, composing}) ->
-    <<"http://jabber.org/protocol/chatstates">>;
-get_ns({chatstate, gone}) ->
-    <<"http://jabber.org/protocol/chatstates">>;
-get_ns({chatstate, inactive}) ->
-    <<"http://jabber.org/protocol/chatstates">>;
-get_ns({chatstate, paused}) ->
-    <<"http://jabber.org/protocol/chatstates">>;
-get_ns({client_id, _}) -> <<"urn:xmpp:sid:0">>;
-get_ns({compress, _}) ->
-    <<"http://jabber.org/protocol/compress">>;
-get_ns({compress_failure, _}) ->
-    <<"http://jabber.org/protocol/compress">>;
-get_ns({compressed}) ->
-    <<"http://jabber.org/protocol/compress">>;
-get_ns({compression, _}) ->
-    <<"http://jabber.org/features/compress">>;
-get_ns({csi, active}) -> <<"urn:xmpp:csi:0">>;
-get_ns({csi, inactive}) -> <<"urn:xmpp:csi:0">>;
-get_ns({db_result, _, _, _, _, _}) ->
-    <<"jabber:server">>;
-get_ns({db_verify, _, _, _, _, _, _}) ->
-    <<"jabber:server">>;
-get_ns({delay, _, _, _}) -> <<"urn:xmpp:delay">>;
-get_ns({delegated, _, _}) ->
-    <<"urn:xmpp:delegation:1">>;
-get_ns({delegation, _, _}) ->
-    <<"urn:xmpp:delegation:1">>;
-get_ns({delegation_query, _, _}) ->
-    <<"urn:xmpp:delegation:1">>;
-get_ns({disco_info, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/disco#info">>;
-get_ns({disco_item, _, _, _}) ->
-    <<"http://jabber.org/protocol/disco#items">>;
-get_ns({disco_items, _, _, _}) ->
-    <<"http://jabber.org/protocol/disco#items">>;
-get_ns({expire, _, _}) -> <<"jabber:x:expire">>;
-get_ns({feature_csi, Xmlns}) -> Xmlns;
-get_ns({feature_register}) ->
-    <<"http://jabber.org/features/iq-register">>;
-get_ns({feature_sm, Xmlns}) -> Xmlns;
-get_ns({forwarded, _, _}) -> <<"urn:xmpp:forward:0">>;
-get_ns({gone, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-stanzas">>;
-get_ns({handshake, _}) -> <<"jabber:component:accept">>;
-get_ns({hint, 'no-copy'}) -> <<"urn:xmpp:hints">>;
-get_ns({hint, 'no-permanent-storage'}) ->
-    <<"urn:xmpp:hints">>;
-get_ns({hint, 'no-permanent-store'}) ->
-    <<"urn:xmpp:hints">>;
-get_ns({hint, 'no-storage'}) -> <<"urn:xmpp:hints">>;
-get_ns({hint, 'no-store'}) -> <<"urn:xmpp:hints">>;
-get_ns({hint, store}) -> <<"urn:xmpp:hints">>;
-get_ns({identity, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/disco#info">>;
-get_ns({iq, _, _, _, _, _, _}) -> <<"jabber:client">>;
-get_ns({last, _, _}) -> <<"jabber:iq:last">>;
-get_ns({legacy_auth, _, _, _, _}) ->
-    <<"jabber:iq:auth">>;
-get_ns({mam_archived, _, _}) -> <<"urn:xmpp:mam:tmp">>;
-get_ns({mam_fin, Xmlns, _, _, _, _}) -> Xmlns;
-get_ns({mam_prefs, Xmlns, _, _, _}) -> Xmlns;
-get_ns({mam_query, Xmlns, _, _, _, _, _, _, _}) ->
-    Xmlns;
-get_ns({mam_result, Xmlns, _, _, _}) -> Xmlns;
-get_ns({media, _, _, _}) ->
-    <<"urn:xmpp:media-element">>;
-get_ns({media_uri, _, _}) ->
-    <<"urn:xmpp:media-element">>;
-get_ns({message, _, _, _, _, _, _, _, _, _}) ->
-    <<"jabber:client">>;
-get_ns({mix_join, _, _}) -> <<"urn:xmpp:mix:0">>;
-get_ns({mix_leave}) -> <<"urn:xmpp:mix:0">>;
-get_ns({mix_participant, _, _}) -> <<"urn:xmpp:mix:0">>;
-get_ns({muc, _, _}) ->
-    <<"http://jabber.org/protocol/muc">>;
-get_ns({muc_admin, _}) ->
-    <<"http://jabber.org/protocol/muc#admin">>;
-get_ns({muc_decline, _, _, _}) ->
-    <<"http://jabber.org/protocol/muc#user">>;
-get_ns({muc_destroy, Xmlns, _, _, _}) -> Xmlns;
-get_ns({muc_history, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/muc">>;
-get_ns({muc_invite, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/muc#user">>;
-get_ns({muc_owner, _, _, _}) ->
-    <<"http://jabber.org/protocol/muc#owner">>;
-get_ns({muc_subscribe, _, _}) ->
-    <<"urn:xmpp:mucsub:0">>;
-get_ns({muc_subscriptions, _}) ->
-    <<"urn:xmpp:mucsub:0">>;
-get_ns({muc_unique, _}) ->
-    <<"http://jabber.org/protocol/muc#unique">>;
-get_ns({muc_unsubscribe}) -> <<"urn:xmpp:mucsub:0">>;
-get_ns({muc_user, _, _, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/muc#user">>;
-get_ns({nick, _}) ->
-    <<"http://jabber.org/protocol/nick">>;
-get_ns({offline, _, _, _}) ->
-    <<"http://jabber.org/protocol/offline">>;
-get_ns({offline_item, _, _}) ->
-    <<"http://jabber.org/protocol/offline">>;
-get_ns({oob_x, _, _, _}) -> <<"jabber:x:oob">>;
-get_ns({p1_ack}) -> <<"p1:ack">>;
-get_ns({p1_push}) -> <<"p1:push">>;
-get_ns({p1_rebind}) -> <<"p1:rebind">>;
-get_ns({ping}) -> <<"urn:xmpp:ping">>;
-get_ns({presence, _, _, _, _, _, _, _, _, _}) ->
-    <<"jabber:client">>;
-get_ns({privacy_item, _, _, _, _, _, _, _, _}) ->
-    <<"jabber:iq:privacy">>;
-get_ns({privacy_list, _, _}) -> <<"jabber:iq:privacy">>;
-get_ns({privacy_query, _, _, _}) ->
-    <<"jabber:iq:privacy">>;
-get_ns({private, _}) -> <<"jabber:iq:private">>;
-get_ns({privilege, _, _}) -> <<"urn:xmpp:privilege:1">>;
-get_ns({privilege_perm, _, _}) ->
-    <<"urn:xmpp:privilege:1">>;
-get_ns({ps_affiliation, Xmlns, _, _, _}) -> Xmlns;
-get_ns({ps_error, 'closed-node', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'configuration-required', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'invalid-jid', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'invalid-options', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'invalid-payload', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'invalid-subid', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'item-forbidden', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'item-required', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'jid-required', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'max-items-exceeded', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'max-nodes-exceeded', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'nodeid-required', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'not-in-roster-group', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'not-subscribed', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'payload-required', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'payload-too-big', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'pending-subscription', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'presence-subscription-required',
-       _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'subid-required', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'too-many-subscriptions', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, unsupported, _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_error, 'unsupported-access-model', _}) ->
-    <<"http://jabber.org/protocol/pubsub#errors">>;
-get_ns({ps_event, _, _, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/pubsub#event">>;
-get_ns({ps_item, Xmlns, _, _, _, _}) -> Xmlns;
-get_ns({ps_items, Xmlns, _, _, _, _, _}) -> Xmlns;
-get_ns({ps_options, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/pubsub">>;
-get_ns({ps_publish, _, _}) ->
-    <<"http://jabber.org/protocol/pubsub">>;
-get_ns({ps_retract, _, _, _}) ->
-    <<"http://jabber.org/protocol/pubsub">>;
-get_ns({ps_subscribe, _, _}) ->
-    <<"http://jabber.org/protocol/pubsub">>;
-get_ns({ps_subscription, Xmlns, _, _, _, _, _}) ->
-    Xmlns;
-get_ns({ps_unsubscribe, _, _, _}) ->
-    <<"http://jabber.org/protocol/pubsub">>;
-get_ns({pubsub, _, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _, _}) ->
-    <<"http://jabber.org/protocol/pubsub">>;
-get_ns({pubsub_owner, _, _, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/pubsub#owner">>;
-get_ns({redirect, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-stanzas">>;
-get_ns({register, _, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _, _, _, _, _, _, _, _}) ->
-    <<"jabber:iq:register">>;
-get_ns({roster_item, _, _, _, _, _}) ->
-    <<"jabber:iq:roster">>;
-get_ns({roster_query, _, _}) -> <<"jabber:iq:roster">>;
-get_ns({rosterver_feature}) ->
-    <<"urn:xmpp:features:rosterver">>;
-get_ns({rsm_first, _, _}) ->
-    <<"http://jabber.org/protocol/rsm">>;
-get_ns({rsm_set, _, _, _, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/rsm">>;
-get_ns({sasl_abort}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-sasl">>;
-get_ns({sasl_auth, _, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-sasl">>;
-get_ns({sasl_challenge, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-sasl">>;
-get_ns({sasl_failure, _, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-sasl">>;
-get_ns({sasl_mechanisms, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-sasl">>;
-get_ns({sasl_response, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-sasl">>;
-get_ns({sasl_success, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-sasl">>;
-get_ns({search, _, _, _, _, _, _, _}) ->
-    <<"jabber:iq:search">>;
-get_ns({search_item, _, _, _, _, _}) ->
-    <<"jabber:iq:search">>;
-get_ns({'see-other-host', _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-streams">>;
-get_ns({shim, _}) ->
-    <<"http://jabber.org/protocol/shim">>;
-get_ns({sic, _, _, Xmlns}) -> Xmlns;
-get_ns({sm_a, _, Xmlns}) -> Xmlns;
-get_ns({sm_enable, _, _, Xmlns}) -> Xmlns;
-get_ns({sm_enabled, _, _, _, _, Xmlns}) -> Xmlns;
-get_ns({sm_failed, _, _, Xmlns}) -> Xmlns;
-get_ns({sm_r, Xmlns}) -> Xmlns;
-get_ns({sm_resume, _, _, Xmlns}) -> Xmlns;
-get_ns({sm_resumed, _, _, Xmlns}) -> Xmlns;
-get_ns({stanza_error, _, _, _, _, _, _}) ->
-    <<"jabber:client">>;
-get_ns({stanza_id, _, _}) -> <<"urn:xmpp:sid:0">>;
-get_ns({starttls, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-tls">>;
-get_ns({starttls_failure}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-tls">>;
-get_ns({starttls_proceed}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-tls">>;
-get_ns({stat, _, _, _, _}) ->
-    <<"http://jabber.org/protocol/stats">>;
-get_ns({stat_error, _, _}) ->
-    <<"http://jabber.org/protocol/stats">>;
-get_ns({stats, _, _}) ->
-    <<"http://jabber.org/protocol/stats">>;
-get_ns({stream_error, _, _}) -> <<"jabber:client">>;
-get_ns({stream_features, _}) -> <<"jabber:client">>;
-get_ns({stream_start, _, _, _, _, Xmlns, _, _, _}) ->
-    Xmlns;
-get_ns({streamhost, _, _, _}) ->
-    <<"http://jabber.org/protocol/bytestreams">>;
-get_ns({thumbnail, _, _, _, _}) ->
-    <<"urn:xmpp:thumbs:1">>;
-get_ns({time, _, _}) -> <<"urn:xmpp:time">>;
-get_ns({unblock, _}) -> <<"urn:xmpp:blocking">>;
-get_ns({upload_request, _, _, _, Xmlns}) -> Xmlns;
-get_ns({upload_slot, _, _, Xmlns}) -> Xmlns;
-get_ns({vcard_adr, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _}) ->
-    <<"vcard-temp">>;
-get_ns({vcard_email, _, _, _, _, _, _}) ->
-    <<"vcard-temp">>;
-get_ns({vcard_geo, _, _}) -> <<"vcard-temp">>;
-get_ns({vcard_key, _, _}) -> <<"vcard-temp">>;
-get_ns({vcard_label, _, _, _, _, _, _, _, _}) ->
-    <<"vcard-temp">>;
-get_ns({vcard_logo, _, _, _}) -> <<"vcard-temp">>;
-get_ns({vcard_name, _, _, _, _, _}) -> <<"vcard-temp">>;
-get_ns({vcard_org, _, _}) -> <<"vcard-temp">>;
-get_ns({vcard_photo, _, _, _}) -> <<"vcard-temp">>;
-get_ns({vcard_sound, _, _, _}) -> <<"vcard-temp">>;
-get_ns({vcard_tel, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _}) ->
-    <<"vcard-temp">>;
-get_ns({vcard_temp, _, _, _, _, _, _, _, _, _, _, _, _,
-       _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) ->
-    <<"vcard-temp">>;
-get_ns({vcard_xupdate, _, _}) ->
-    <<"vcard-temp:x:update">>;
-get_ns({version, _, _, _}) -> <<"jabber:iq:version">>;
-get_ns({x_conference, _, _, _, _, _}) ->
-    <<"jabber:x:conference">>;
-get_ns({xcaptcha, _}) -> <<"urn:xmpp:captcha">>;
-get_ns({xdata, _, _, _, _, _, _}) ->
-    <<"jabber:x:data">>;
-get_ns({xdata_field, _, _, _, _, _, _, _, _}) ->
-    <<"jabber:x:data">>;
-get_ns({xdata_option, _, _}) -> <<"jabber:x:data">>;
-get_ns({xevent, _, _, _, _, _}) -> <<"jabber:x:event">>;
-get_ns({xmpp_session, _}) ->
-    <<"urn:ietf:params:xml:ns:xmpp-session">>.
-
-dec_int(Val) -> dec_int(Val, infinity, infinity).
-
-dec_int(Val, Min, Max) ->
-    case list_to_integer(binary_to_list(Val)) of
-      Int when Int =< Max, Min == infinity -> Int;
-      Int when Int =< Max, Int >= Min -> Int
-    end.
-
-enc_int(Int) -> list_to_binary(integer_to_list(Int)).
-
-dec_enum(Val, Enums) ->
-    AtomVal = erlang:binary_to_existing_atom(Val, utf8),
-    case lists:member(AtomVal, Enums) of
-      true -> AtomVal
-    end.
-
-enc_enum(Atom) -> erlang:atom_to_binary(Atom, utf8).
-
-format_error({bad_attr_value, Attr, Tag, XMLNS}) ->
-    <<"Bad value of attribute '", Attr/binary, "' in tag <",
-      Tag/binary, "/> qualified by namespace '", XMLNS/binary,
-      "'">>;
-format_error({bad_cdata_value, <<>>, Tag, XMLNS}) ->
-    <<"Bad value of cdata in tag <", Tag/binary,
-      "/> qualified by namespace '", XMLNS/binary, "'">>;
-format_error({missing_tag, Tag, XMLNS}) ->
-    <<"Missing tag <", Tag/binary,
-      "/> qualified by namespace '", XMLNS/binary, "'">>;
-format_error({missing_attr, Attr, Tag, XMLNS}) ->
-    <<"Missing attribute '", Attr/binary, "' in tag <",
-      Tag/binary, "/> qualified by namespace '", XMLNS/binary,
-      "'">>;
-format_error({missing_cdata, <<>>, Tag, XMLNS}) ->
-    <<"Missing cdata in tag <", Tag/binary,
-      "/> qualified by namespace '", XMLNS/binary, "'">>;
-format_error({unknown_tag, Tag, XMLNS}) ->
-    <<"Unknown tag <", Tag/binary,
-      "/> qualified by namespace '", XMLNS/binary, "'">>;
-format_error({missing_tag_xmlns, Tag}) ->
-    <<"Missing namespace for tag <", Tag/binary, "/>">>.
-
-get_attr(Attr, Attrs) ->
-    case lists:keyfind(Attr, 1, Attrs) of
-      {_, Val} -> Val;
-      false -> <<>>
-    end.
-
-enc_xmlns_attrs(XMLNS, XMLNS) -> [];
-enc_xmlns_attrs(XMLNS, _) -> [{<<"xmlns">>, XMLNS}].
-
-choose_top_xmlns(<<>>, NSList, TopXMLNS) ->
-    case lists:member(TopXMLNS, NSList) of
-      true -> TopXMLNS;
-      false -> hd(NSList)
-    end;
-choose_top_xmlns(XMLNS, _, _) -> XMLNS.
-
-pp(Term) -> io_lib_pretty:print(Term, fun pp/2).
-
-pp(last, 2) -> [seconds, status];
-pp(version, 3) -> [name, ver, os];
-pp(roster_item, 5) ->
-    [jid, name, groups, subscription, ask];
-pp(roster_query, 2) -> [items, ver];
-pp(rosterver_feature, 0) -> [];
-pp(privacy_item, 8) ->
-    [order, action, type, value, message, iq, presence_in,
-     presence_out];
-pp(privacy_list, 2) -> [name, items];
-pp(privacy_query, 3) -> [lists, default, active];
-pp(block, 1) -> [items];
-pp(unblock, 1) -> [items];
-pp(block_list, 1) -> [items];
-pp(identity, 4) -> [category, type, lang, name];
-pp(disco_info, 4) ->
-    [node, identities, features, xdata];
-pp(disco_item, 3) -> [jid, name, node];
-pp(disco_items, 3) -> [node, items, rsm];
-pp(private, 1) -> [xml_els];
-pp(bookmark_conference, 5) ->
-    [name, jid, autojoin, nick, password];
-pp(bookmark_url, 2) -> [name, url];
-pp(bookmark_storage, 2) -> [conference, url];
-pp(stat_error, 2) -> [code, reason];
-pp(stat, 4) -> [name, units, value, error];
-pp(stats, 2) -> [list, node];
-pp(iq, 6) -> [id, type, lang, from, to, sub_els];
-pp(message, 9) ->
-    [id, type, lang, from, to, subject, body, thread,
-     sub_els];
-pp(presence, 9) ->
-    [id, type, lang, from, to, show, status, priority,
-     sub_els];
-pp(gone, 1) -> [uri];
-pp(redirect, 1) -> [uri];
-pp(stanza_error, 6) ->
-    [type, code, by, reason, text, sub_els];
-pp(bind, 2) -> [jid, resource];
-pp(legacy_auth, 4) ->
-    [username, password, digest, resource];
-pp(sasl_auth, 2) -> [mechanism, text];
-pp(sasl_abort, 0) -> [];
-pp(sasl_challenge, 1) -> [text];
-pp(sasl_response, 1) -> [text];
-pp(sasl_success, 1) -> [text];
-pp(sasl_failure, 2) -> [reason, text];
-pp(sasl_mechanisms, 1) -> [list];
-pp(starttls, 1) -> [required];
-pp(starttls_proceed, 0) -> [];
-pp(starttls_failure, 0) -> [];
-pp(compress_failure, 1) -> [reason];
-pp(compress, 1) -> [methods];
-pp(compressed, 0) -> [];
-pp(compression, 1) -> [methods];
-pp(stream_features, 1) -> [sub_els];
-pp(p1_push, 0) -> [];
-pp(p1_rebind, 0) -> [];
-pp(p1_ack, 0) -> [];
-pp(caps, 4) -> [node, version, hash, exts];
-pp(feature_register, 0) -> [];
-pp(register, 22) ->
-    [registered, remove, instructions, username, nick,
-     password, name, first, last, email, address, city,
-     state, zip, phone, url, date, misc, text, key, xdata,
-     sub_els];
-pp(xmpp_session, 1) -> [optional];
-pp(ping, 0) -> [];
-pp(time, 2) -> [tzo, utc];
-pp(text, 2) -> [lang, data];
-pp('see-other-host', 1) -> [host];
-pp(stream_error, 2) -> [reason, text];
-pp(vcard_name, 5) ->
-    [family, given, middle, prefix, suffix];
-pp(vcard_adr, 14) ->
-    [home, work, postal, parcel, dom, intl, pref, pobox,
-     extadd, street, locality, region, pcode, ctry];
-pp(vcard_label, 8) ->
-    [home, work, postal, parcel, dom, intl, pref, line];
-pp(vcard_tel, 14) ->
-    [home, work, voice, fax, pager, msg, cell, video, bbs,
-     modem, isdn, pcs, pref, number];
-pp(vcard_email, 6) ->
-    [home, work, internet, pref, x400, userid];
-pp(vcard_geo, 2) -> [lat, lon];
-pp(vcard_logo, 3) -> [type, binval, extval];
-pp(vcard_photo, 3) -> [type, binval, extval];
-pp(vcard_org, 2) -> [name, units];
-pp(vcard_sound, 3) -> [phonetic, binval, extval];
-pp(vcard_key, 2) -> [type, cred];
-pp(vcard_temp, 29) ->
-    [version, fn, n, nickname, photo, bday, adr, label, tel,
-     email, jabberid, mailer, tz, geo, title, role, logo,
-     org, categories, note, prodid, rev, sort_string, sound,
-     uid, url, class, key, desc];
-pp(xdata_option, 2) -> [label, value];
-pp(xdata_field, 8) ->
-    [label, type, var, required, desc, values, options,
-     sub_els];
-pp(xdata, 6) ->
-    [type, instructions, title, reported, items, fields];
-pp(ps_subscription, 6) ->
-    [xmlns, jid, type, node, subid, expiry];
-pp(ps_item, 5) -> [xmlns, id, xml_els, node, publisher];
-pp(ps_items, 6) ->
-    [xmlns, node, items, max_items, subid, retract];
-pp(ps_event, 6) ->
-    [items, purge, subscription, delete, create,
-     configuration];
-pp(ps_subscribe, 2) -> [node, jid];
-pp(ps_unsubscribe, 3) -> [node, jid, subid];
-pp(ps_publish, 2) -> [node, items];
-pp(ps_options, 4) -> [node, jid, subid, xdata];
-pp(ps_retract, 3) -> [node, notify, items];
-pp(pubsub, 16) ->
-    [subscriptions, subscription, affiliations, publish,
-     publish_options, subscribe, unsubscribe, options, items,
-     retract, create, configure, default, delete, purge,
-     rsm];
-pp(pubsub_owner, 6) ->
-    [affiliations, configure, default, delete, purge,
-     subscriptions];
-pp(shim, 1) -> [headers];
-pp(delay, 3) -> [stamp, from, desc];
-pp(streamhost, 3) -> [jid, host, port];
-pp(bytestreams, 6) ->
-    [hosts, used, activate, dstaddr, mode, sid];
-pp(muc_history, 4) ->
-    [maxchars, maxstanzas, seconds, since];
-pp(muc_decline, 3) -> [reason, from, to];
-pp(muc_destroy, 4) -> [xmlns, jid, reason, password];
-pp(muc_invite, 4) -> [reason, from, to, continue];
-pp(muc_user, 6) ->
-    [decline, destroy, invites, items, status_codes,
-     password];
-pp(muc_owner, 3) -> [destroy, config, items];
-pp(muc_item, 7) ->
-    [actor, continue, reason, affiliation, role, jid, nick];
-pp(muc_actor, 2) -> [jid, nick];
-pp(muc_admin, 1) -> [items];
-pp(muc, 2) -> [history, password];
-pp(muc_unique, 1) -> [name];
-pp(x_conference, 5) ->
-    [jid, password, reason, continue, thread];
-pp(muc_subscriptions, 1) -> [list];
-pp(muc_subscribe, 2) -> [nick, events];
-pp(muc_unsubscribe, 0) -> [];
-pp(rsm_first, 2) -> [index, data];
-pp(rsm_set, 7) ->
-    ['after', before, count, first, index, last, max];
-pp(mam_query, 8) ->
-    [xmlns, id, start, 'end', with, withtext, rsm, xdata];
-pp(mam_archived, 2) -> [by, id];
-pp(mam_result, 4) -> [xmlns, queryid, id, sub_els];
-pp(mam_prefs, 4) -> [xmlns, default, always, never];
-pp(mam_fin, 5) -> [xmlns, id, rsm, stable, complete];
-pp(forwarded, 2) -> [delay, xml_els];
-pp(carbons_disable, 0) -> [];
-pp(carbons_enable, 0) -> [];
-pp(carbons_private, 0) -> [];
-pp(carbons_received, 1) -> [forwarded];
-pp(carbons_sent, 1) -> [forwarded];
-pp(feature_csi, 1) -> [xmlns];
-pp(feature_sm, 1) -> [xmlns];
-pp(sm_enable, 3) -> [max, resume, xmlns];
-pp(sm_enabled, 5) -> [id, location, max, resume, xmlns];
-pp(sm_resume, 3) -> [h, previd, xmlns];
-pp(sm_resumed, 3) -> [h, previd, xmlns];
-pp(sm_r, 1) -> [xmlns];
-pp(sm_a, 2) -> [h, xmlns];
-pp(sm_failed, 3) -> [reason, h, xmlns];
-pp(offline_item, 2) -> [node, action];
-pp(offline, 3) -> [items, purge, fetch];
-pp(mix_join, 2) -> [jid, subscribe];
-pp(mix_leave, 0) -> [];
-pp(mix_participant, 2) -> [jid, nick];
-pp(search_item, 5) -> [jid, first, last, nick, email];
-pp(search, 7) ->
-    [instructions, first, last, nick, email, items, xdata];
-pp(xevent, 5) ->
-    [offline, delivered, displayed, composing, id];
-pp(expire, 2) -> [seconds, stored];
-pp(nick, 1) -> [name];
-pp(address, 5) -> [type, jid, desc, node, delivered];
-pp(addresses, 1) -> [list];
-pp(stanza_id, 2) -> [by, id];
-pp(client_id, 1) -> [id];
-pp(adhoc_actions, 4) -> [execute, prev, next, complete];
-pp(adhoc_note, 2) -> [type, data];
-pp(adhoc_command, 8) ->
-    [node, action, sid, status, lang, actions, notes,
-     xdata];
-pp(db_result, 5) -> [from, to, type, key, sub_els];
-pp(db_verify, 6) -> [from, to, id, type, key, sub_els];
-pp(handshake, 1) -> [data];
-pp(stream_start, 8) ->
-    [from, to, id, version, xmlns, stream_xmlns, db_xmlns,
-     lang];
-pp(bob_data, 4) -> [cid, 'max-age', type, data];
-pp(xcaptcha, 1) -> [xdata];
-pp(media_uri, 2) -> [type, uri];
-pp(media, 3) -> [height, width, uri];
-pp(oob_x, 3) -> [url, desc, sid];
-pp(sic, 3) -> [ip, port, xmlns];
-pp(upload_request, 4) ->
-    [filename, size, 'content-type', xmlns];
-pp(upload_slot, 3) -> [get, put, xmlns];
-pp(thumbnail, 4) -> [uri, 'media-type', width, height];
-pp(privilege_perm, 2) -> [access, type];
-pp(privilege, 2) -> [perms, forwarded];
-pp(delegated, 2) -> [ns, attrs];
-pp(delegation, 2) -> [delegated, forwarded];
-pp(delegation_query, 2) -> [to, delegate];
-pp(_, _) -> no.
-
-enc_ps_aff(member) -> <<"member">>;
-enc_ps_aff(none) -> <<"none">>;
-enc_ps_aff(outcast) -> <<"outcast">>;
-enc_ps_aff(owner) -> <<"owner">>;
-enc_ps_aff(publisher) -> <<"publisher">>;
-enc_ps_aff(publish_only) -> <<"publish-only">>.
-
-dec_ps_aff(<<"member">>) -> member;
-dec_ps_aff(<<"none">>) -> none;
-dec_ps_aff(<<"outcast">>) -> outcast;
-dec_ps_aff(<<"owner">>) -> owner;
-dec_ps_aff(<<"publisher">>) -> publisher;
-dec_ps_aff(<<"publish-only">>) -> publish_only.
-
-enc_version({Maj, Min}) ->
-    <<(integer_to_binary(Maj))/binary, $.,
-      (integer_to_binary(Min))/binary>>.
-
-dec_version(S) ->
-    [Major, Minor] = binary:split(S, <<$.>>),
-    {binary_to_integer(Major), binary_to_integer(Minor)}.
-
-enc_host_port(Host) when is_binary(Host) -> Host;
-enc_host_port({{_, _, _, _, _, _, _, _} = IPv6,
-              Port}) ->
-    enc_host_port({<<$[, (enc_ip(IPv6))/binary, $]>>,
-                  Port});
-enc_host_port({{_, _, _, _} = IPv4, Port}) ->
-    enc_host_port({enc_ip(IPv4), Port});
-enc_host_port({Host, Port}) ->
-    <<Host/binary, $:, (integer_to_binary(Port))/binary>>;
-enc_host_port(Addr) -> enc_ip(Addr).
-
-dec_host_port(<<$[, T/binary>>) ->
-    [IP, <<$:, Port/binary>>] = binary:split(T, <<$]>>),
-    {dec_ip(IP), dec_int(Port, 0, 65535)};
-dec_host_port(S) ->
-    case binary:split(S, <<$:>>) of
-      [S] -> try dec_ip(S) catch _:_ -> S end;
-      [S, P] ->
-         {try dec_ip(S) catch _:_ -> S end, dec_int(P, 0, 65535)}
-    end.
-
-enc_ip({0, 0, 0, 0, 0, 65535, A, B}) ->
-    enc_ip({(A bsr 8) band 255, A band 255,
-           (B bsr 8) band 255, B band 255});
-enc_ip(Addr) -> list_to_binary(inet_parse:ntoa(Addr)).
-
-dec_ip(S) ->
-    {ok, Addr} = inet_parse:address(binary_to_list(S)),
-    Addr.
-
-join([], _Sep) -> <<>>;
-join([H | T], Sep) ->
-    <<H/binary, << <<Sep, X/binary>>  || X <- T >>/binary>>.
-
-enc_bool(false) -> <<"false">>;
-enc_bool(true) -> <<"true">>.
-
-dec_bool(<<"false">>) -> false;
-dec_bool(<<"0">>) -> false;
-dec_bool(<<"true">>) -> true;
-dec_bool(<<"1">>) -> true.
-
-nameprep(S) ->
-    case jid:nameprep(S) of
-      error -> erlang:error(badarg);
-      S1 -> S1
-    end.
-
-resourceprep(R) ->
-    case jid:resourceprep(R) of
-      error -> erlang:error(badarg);
-      R1 -> R1
-    end.
-
-enc_jid(J) -> jid:to_string(J).
-
-dec_jid(Val) ->
-    case jid:from_string(Val) of
-      error -> erlang:error(badarg);
-      J -> J
-    end.
-
-enc_utc(Val) -> xmpp_util:encode_timestamp(Val).
-
-dec_utc(Val) -> xmpp_util:decode_timestamp(Val).
-
-enc_tzo({H, M}) ->
-    Sign = if H >= 0 -> <<>>;
-             true -> <<"-">>
-          end,
-    list_to_binary([Sign,
-                   io_lib:format("~2..0w:~2..0w", [H, M])]).
-
-dec_tzo(Val) ->
-    [H1, M1] = str:tokens(Val, <<":">>),
-    H = binary_to_integer(H1),
-    M = binary_to_integer(M1),
-    if H >= -12, H =< 12, M >= 0, M < 60 -> {H, M} end.
-
-decode_delegation_query(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"query">>, _attrs, _els}) ->
-    Delegate = decode_delegation_query_els(__TopXMLNS,
-                                          __IgnoreEls, _els, []),
-    To = decode_delegation_query_attrs(__TopXMLNS, _attrs,
-                                      undefined),
-    {delegation_query, To, Delegate}.
-
-decode_delegation_query_els(__TopXMLNS, __IgnoreEls, [],
-                           Delegate) ->
-    lists:reverse(Delegate);
-decode_delegation_query_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlel, <<"delegate">>, _attrs, _} = _el | _els],
-                           Delegate) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:delegation:1">> ->
-         decode_delegation_query_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     [decode_delegate(__TopXMLNS, __IgnoreEls,
-                                                      _el)
-                                      | Delegate]);
-      <<"urn:xmpp:delegation:1">> ->
-         decode_delegation_query_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     [decode_delegate(<<"urn:xmpp:delegation:1">>,
-                                                      __IgnoreEls, _el)
-                                      | Delegate]);
-      _ ->
-         decode_delegation_query_els(__TopXMLNS, __IgnoreEls,
-                                     _els, Delegate)
-    end;
-decode_delegation_query_els(__TopXMLNS, __IgnoreEls,
-                           [_ | _els], Delegate) ->
-    decode_delegation_query_els(__TopXMLNS, __IgnoreEls,
-                               _els, Delegate).
-
-decode_delegation_query_attrs(__TopXMLNS,
-                             [{<<"to">>, _val} | _attrs], _To) ->
-    decode_delegation_query_attrs(__TopXMLNS, _attrs, _val);
-decode_delegation_query_attrs(__TopXMLNS, [_ | _attrs],
-                             To) ->
-    decode_delegation_query_attrs(__TopXMLNS, _attrs, To);
-decode_delegation_query_attrs(__TopXMLNS, [], To) ->
-    decode_delegation_query_attr_to(__TopXMLNS, To).
-
-encode_delegation_query({delegation_query, To,
-                        Delegate},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:delegation:1">>, [],
-                        __TopXMLNS),
-    _els =
-       lists:reverse('encode_delegation_query_$delegate'(Delegate,
-                                                         __NewTopXMLNS, [])),
-    _attrs = encode_delegation_query_attr_to(To,
-                                            enc_xmlns_attrs(__NewTopXMLNS,
-                                                            __TopXMLNS)),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_delegation_query_$delegate'([], __TopXMLNS,
-                                   _acc) ->
-    _acc;
-'encode_delegation_query_$delegate'([Delegate | _els],
-                                   __TopXMLNS, _acc) ->
-    'encode_delegation_query_$delegate'(_els, __TopXMLNS,
-                                       [encode_delegate(Delegate, __TopXMLNS)
-                                        | _acc]).
-
-decode_delegation_query_attr_to(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"to">>, <<"query">>, __TopXMLNS}});
-decode_delegation_query_attr_to(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"query">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_delegation_query_attr_to(_val, _acc) ->
-    [{<<"to">>, enc_jid(_val)} | _acc].
-
-decode_delegate(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"delegate">>, _attrs, _els}) ->
-    Namespace = decode_delegate_attrs(__TopXMLNS, _attrs,
-                                     undefined),
-    Namespace.
-
-decode_delegate_attrs(__TopXMLNS,
-                     [{<<"namespace">>, _val} | _attrs], _Namespace) ->
-    decode_delegate_attrs(__TopXMLNS, _attrs, _val);
-decode_delegate_attrs(__TopXMLNS, [_ | _attrs],
-                     Namespace) ->
-    decode_delegate_attrs(__TopXMLNS, _attrs, Namespace);
-decode_delegate_attrs(__TopXMLNS, [], Namespace) ->
-    decode_delegate_attr_namespace(__TopXMLNS, Namespace).
-
-encode_delegate(Namespace, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:delegation:1">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_delegate_attr_namespace(Namespace,
-                                           enc_xmlns_attrs(__NewTopXMLNS,
-                                                           __TopXMLNS)),
-    {xmlel, <<"delegate">>, _attrs, _els}.
-
-decode_delegate_attr_namespace(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"namespace">>, <<"delegate">>,
-                  __TopXMLNS}});
-decode_delegate_attr_namespace(__TopXMLNS, _val) ->
-    _val.
-
-encode_delegate_attr_namespace(_val, _acc) ->
-    [{<<"namespace">>, _val} | _acc].
-
-decode_delegation(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"delegation">>, _attrs, _els}) ->
-    {Forwarded, Delegated} =
-       decode_delegation_els(__TopXMLNS, __IgnoreEls, _els,
-                             undefined, []),
-    {delegation, Delegated, Forwarded}.
-
-decode_delegation_els(__TopXMLNS, __IgnoreEls, [],
-                     Forwarded, Delegated) ->
-    {Forwarded, lists:reverse(Delegated)};
-decode_delegation_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"delegated">>, _attrs, _} = _el | _els],
-                     Forwarded, Delegated) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:delegation:1">> ->
-         decode_delegation_els(__TopXMLNS, __IgnoreEls, _els,
-                               Forwarded,
-                               [decode_delegated(__TopXMLNS, __IgnoreEls, _el)
-                                | Delegated]);
-      <<"urn:xmpp:delegation:1">> ->
-         decode_delegation_els(__TopXMLNS, __IgnoreEls, _els,
-                               Forwarded,
-                               [decode_delegated(<<"urn:xmpp:delegation:1">>,
-                                                 __IgnoreEls, _el)
-                                | Delegated]);
-      _ ->
-         decode_delegation_els(__TopXMLNS, __IgnoreEls, _els,
-                               Forwarded, Delegated)
-    end;
-decode_delegation_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"forwarded">>, _attrs, _} = _el | _els],
-                     Forwarded, Delegated) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:xmpp:forward:0">> ->
-         decode_delegation_els(__TopXMLNS, __IgnoreEls, _els,
-                               decode_forwarded(<<"urn:xmpp:forward:0">>,
-                                                __IgnoreEls, _el),
-                               Delegated);
-      _ ->
-         decode_delegation_els(__TopXMLNS, __IgnoreEls, _els,
-                               Forwarded, Delegated)
-    end;
-decode_delegation_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Forwarded, Delegated) ->
-    decode_delegation_els(__TopXMLNS, __IgnoreEls, _els,
-                         Forwarded, Delegated).
-
-encode_delegation({delegation, Delegated, Forwarded},
-                 __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:delegation:1">>, [],
-                        __TopXMLNS),
-    _els =
-       lists:reverse('encode_delegation_$forwarded'(Forwarded,
-                                                    __NewTopXMLNS,
-                                                    'encode_delegation_$delegated'(Delegated,
-                                                                                   __NewTopXMLNS,
-                                                                                   []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"delegation">>, _attrs, _els}.
-
-'encode_delegation_$forwarded'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_delegation_$forwarded'(Forwarded, __TopXMLNS,
-                              _acc) ->
-    [encode_forwarded(Forwarded, __TopXMLNS) | _acc].
-
-'encode_delegation_$delegated'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_delegation_$delegated'([Delegated | _els],
-                              __TopXMLNS, _acc) ->
-    'encode_delegation_$delegated'(_els, __TopXMLNS,
-                                  [encode_delegated(Delegated, __TopXMLNS)
-                                   | _acc]).
-
-decode_delegated(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"delegated">>, _attrs, _els}) ->
-    Attrs = decode_delegated_els(__TopXMLNS, __IgnoreEls,
-                                _els, []),
-    Ns = decode_delegated_attrs(__TopXMLNS, _attrs,
-                               undefined),
-    {delegated, Ns, Attrs}.
-
-decode_delegated_els(__TopXMLNS, __IgnoreEls, [],
-                    Attrs) ->
-    lists:reverse(Attrs);
-decode_delegated_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"attribute">>, _attrs, _} = _el | _els],
-                    Attrs) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:delegation:1">> ->
-         decode_delegated_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_delegated_attribute(__TopXMLNS,
-                                                          __IgnoreEls, _el)
-                               | Attrs]);
-      <<"urn:xmpp:delegation:1">> ->
-         decode_delegated_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_delegated_attribute(<<"urn:xmpp:delegation:1">>,
-                                                          __IgnoreEls, _el)
-                               | Attrs]);
-      _ ->
-         decode_delegated_els(__TopXMLNS, __IgnoreEls, _els,
-                              Attrs)
-    end;
-decode_delegated_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Attrs) ->
-    decode_delegated_els(__TopXMLNS, __IgnoreEls, _els,
-                        Attrs).
-
-decode_delegated_attrs(__TopXMLNS,
-                      [{<<"namespace">>, _val} | _attrs], _Ns) ->
-    decode_delegated_attrs(__TopXMLNS, _attrs, _val);
-decode_delegated_attrs(__TopXMLNS, [_ | _attrs], Ns) ->
-    decode_delegated_attrs(__TopXMLNS, _attrs, Ns);
-decode_delegated_attrs(__TopXMLNS, [], Ns) ->
-    decode_delegated_attr_namespace(__TopXMLNS, Ns).
-
-encode_delegated({delegated, Ns, Attrs}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:delegation:1">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_delegated_$attrs'(Attrs,
-                                                  __NewTopXMLNS, [])),
-    _attrs = encode_delegated_attr_namespace(Ns,
-                                            enc_xmlns_attrs(__NewTopXMLNS,
-                                                            __TopXMLNS)),
-    {xmlel, <<"delegated">>, _attrs, _els}.
-
-'encode_delegated_$attrs'([], __TopXMLNS, _acc) -> _acc;
-'encode_delegated_$attrs'([Attrs | _els], __TopXMLNS,
-                         _acc) ->
-    'encode_delegated_$attrs'(_els, __TopXMLNS,
-                             [encode_delegated_attribute(Attrs, __TopXMLNS)
-                              | _acc]).
-
-decode_delegated_attr_namespace(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"namespace">>, <<"delegated">>,
-                  __TopXMLNS}});
-decode_delegated_attr_namespace(__TopXMLNS, _val) ->
-    _val.
-
-encode_delegated_attr_namespace(_val, _acc) ->
-    [{<<"namespace">>, _val} | _acc].
-
-decode_delegated_attribute(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"attribute">>, _attrs, _els}) ->
-    Name = decode_delegated_attribute_attrs(__TopXMLNS,
-                                           _attrs, undefined),
-    Name.
-
-decode_delegated_attribute_attrs(__TopXMLNS,
-                                [{<<"name">>, _val} | _attrs], _Name) ->
-    decode_delegated_attribute_attrs(__TopXMLNS, _attrs,
-                                    _val);
-decode_delegated_attribute_attrs(__TopXMLNS,
-                                [_ | _attrs], Name) ->
-    decode_delegated_attribute_attrs(__TopXMLNS, _attrs,
-                                    Name);
-decode_delegated_attribute_attrs(__TopXMLNS, [],
-                                Name) ->
-    decode_delegated_attribute_attr_name(__TopXMLNS, Name).
-
-encode_delegated_attribute(Name, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:delegation:1">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_delegated_attribute_attr_name(Name,
-                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                 __TopXMLNS)),
-    {xmlel, <<"attribute">>, _attrs, _els}.
-
-decode_delegated_attribute_attr_name(__TopXMLNS,
-                                    undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"attribute">>,
-                  __TopXMLNS}});
-decode_delegated_attribute_attr_name(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-encode_delegated_attribute_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_privilege(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"privilege">>, _attrs, _els}) ->
-    {Perms, Forwarded} = decode_privilege_els(__TopXMLNS,
-                                             __IgnoreEls, _els, [], undefined),
-    {privilege, Perms, Forwarded}.
-
-decode_privilege_els(__TopXMLNS, __IgnoreEls, [], Perms,
-                    Forwarded) ->
-    {lists:reverse(Perms), Forwarded};
-decode_privilege_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"perm">>, _attrs, _} = _el | _els], Perms,
-                    Forwarded) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:privilege:1">> ->
-         decode_privilege_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_privilege_perm(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                               | Perms],
-                              Forwarded);
-      <<"urn:xmpp:privilege:1">> ->
-         decode_privilege_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_privilege_perm(<<"urn:xmpp:privilege:1">>,
-                                                     __IgnoreEls, _el)
-                               | Perms],
-                              Forwarded);
-      _ ->
-         decode_privilege_els(__TopXMLNS, __IgnoreEls, _els,
-                              Perms, Forwarded)
-    end;
-decode_privilege_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"forwarded">>, _attrs, _} = _el | _els],
-                    Perms, Forwarded) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:xmpp:forward:0">> ->
-         decode_privilege_els(__TopXMLNS, __IgnoreEls, _els,
-                              Perms,
-                              decode_forwarded(<<"urn:xmpp:forward:0">>,
-                                               __IgnoreEls, _el));
-      _ ->
-         decode_privilege_els(__TopXMLNS, __IgnoreEls, _els,
-                              Perms, Forwarded)
-    end;
-decode_privilege_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Perms, Forwarded) ->
-    decode_privilege_els(__TopXMLNS, __IgnoreEls, _els,
-                        Perms, Forwarded).
-
-encode_privilege({privilege, Perms, Forwarded},
-                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:privilege:1">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_privilege_$perms'(Perms,
-                                                  __NewTopXMLNS,
-                                                  'encode_privilege_$forwarded'(Forwarded,
-                                                                                __NewTopXMLNS,
-                                                                                []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"privilege">>, _attrs, _els}.
-
-'encode_privilege_$perms'([], __TopXMLNS, _acc) -> _acc;
-'encode_privilege_$perms'([Perms | _els], __TopXMLNS,
-                         _acc) ->
-    'encode_privilege_$perms'(_els, __TopXMLNS,
-                             [encode_privilege_perm(Perms, __TopXMLNS)
-                              | _acc]).
-
-'encode_privilege_$forwarded'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_privilege_$forwarded'(Forwarded, __TopXMLNS,
-                             _acc) ->
-    [encode_forwarded(Forwarded, __TopXMLNS) | _acc].
-
-decode_privilege_perm(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"perm">>, _attrs, _els}) ->
-    {Access, Type} = decode_privilege_perm_attrs(__TopXMLNS,
-                                                _attrs, undefined, undefined),
-    {privilege_perm, Access, Type}.
-
-decode_privilege_perm_attrs(__TopXMLNS,
-                           [{<<"access">>, _val} | _attrs], _Access, Type) ->
-    decode_privilege_perm_attrs(__TopXMLNS, _attrs, _val,
-                               Type);
-decode_privilege_perm_attrs(__TopXMLNS,
-                           [{<<"type">>, _val} | _attrs], Access, _Type) ->
-    decode_privilege_perm_attrs(__TopXMLNS, _attrs, Access,
-                               _val);
-decode_privilege_perm_attrs(__TopXMLNS, [_ | _attrs],
-                           Access, Type) ->
-    decode_privilege_perm_attrs(__TopXMLNS, _attrs, Access,
-                               Type);
-decode_privilege_perm_attrs(__TopXMLNS, [], Access,
-                           Type) ->
-    {decode_privilege_perm_attr_access(__TopXMLNS, Access),
-     decode_privilege_perm_attr_type(__TopXMLNS, Type)}.
-
-encode_privilege_perm({privilege_perm, Access, Type},
-                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:privilege:1">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_privilege_perm_attr_type(Type,
-                                            encode_privilege_perm_attr_access(Access,
-                                                                              enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                              __TopXMLNS))),
-    {xmlel, <<"perm">>, _attrs, _els}.
-
-decode_privilege_perm_attr_access(__TopXMLNS,
-                                 undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"access">>, <<"perm">>, __TopXMLNS}});
-decode_privilege_perm_attr_access(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [roster, message, presence])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"access">>, <<"perm">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_privilege_perm_attr_access(_val, _acc) ->
-    [{<<"access">>, enc_enum(_val)} | _acc].
-
-decode_privilege_perm_attr_type(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"perm">>, __TopXMLNS}});
-decode_privilege_perm_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [none, get, set, both, outgoing, roster,
-                        managed_entity])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"perm">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_privilege_perm_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_thumbnail(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"thumbnail">>, _attrs, _els}) ->
-    {Uri, Media_type, Width, Height} =
-       decode_thumbnail_attrs(__TopXMLNS, _attrs, undefined,
-                              undefined, undefined, undefined),
-    {thumbnail, Uri, Media_type, Width, Height}.
-
-decode_thumbnail_attrs(__TopXMLNS,
-                      [{<<"uri">>, _val} | _attrs], _Uri, Media_type, Width,
-                      Height) ->
-    decode_thumbnail_attrs(__TopXMLNS, _attrs, _val,
-                          Media_type, Width, Height);
-decode_thumbnail_attrs(__TopXMLNS,
-                      [{<<"media-type">>, _val} | _attrs], Uri, _Media_type,
-                      Width, Height) ->
-    decode_thumbnail_attrs(__TopXMLNS, _attrs, Uri, _val,
-                          Width, Height);
-decode_thumbnail_attrs(__TopXMLNS,
-                      [{<<"width">>, _val} | _attrs], Uri, Media_type, _Width,
-                      Height) ->
-    decode_thumbnail_attrs(__TopXMLNS, _attrs, Uri,
-                          Media_type, _val, Height);
-decode_thumbnail_attrs(__TopXMLNS,
-                      [{<<"height">>, _val} | _attrs], Uri, Media_type, Width,
-                      _Height) ->
-    decode_thumbnail_attrs(__TopXMLNS, _attrs, Uri,
-                          Media_type, Width, _val);
-decode_thumbnail_attrs(__TopXMLNS, [_ | _attrs], Uri,
-                      Media_type, Width, Height) ->
-    decode_thumbnail_attrs(__TopXMLNS, _attrs, Uri,
-                          Media_type, Width, Height);
-decode_thumbnail_attrs(__TopXMLNS, [], Uri, Media_type,
-                      Width, Height) ->
-    {decode_thumbnail_attr_uri(__TopXMLNS, Uri),
-     'decode_thumbnail_attr_media-type'(__TopXMLNS,
-                                       Media_type),
-     decode_thumbnail_attr_width(__TopXMLNS, Width),
-     decode_thumbnail_attr_height(__TopXMLNS, Height)}.
-
-encode_thumbnail({thumbnail, Uri, Media_type, Width,
-                 Height},
-                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:thumbs:1">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_thumbnail_attr_height(Height,
-                                         encode_thumbnail_attr_width(Width,
-                                                                     'encode_thumbnail_attr_media-type'(Media_type,
-                                                                                                        encode_thumbnail_attr_uri(Uri,
-                                                                                                                                  enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                  __TopXMLNS))))),
-    {xmlel, <<"thumbnail">>, _attrs, _els}.
-
-decode_thumbnail_attr_uri(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"uri">>, <<"thumbnail">>,
-                  __TopXMLNS}});
-decode_thumbnail_attr_uri(__TopXMLNS, _val) -> _val.
-
-encode_thumbnail_attr_uri(_val, _acc) ->
-    [{<<"uri">>, _val} | _acc].
-
-'decode_thumbnail_attr_media-type'(__TopXMLNS,
-                                  undefined) ->
-    <<>>;
-'decode_thumbnail_attr_media-type'(__TopXMLNS, _val) ->
-    _val.
-
-'encode_thumbnail_attr_media-type'(<<>>, _acc) -> _acc;
-'encode_thumbnail_attr_media-type'(_val, _acc) ->
-    [{<<"media-type">>, _val} | _acc].
-
-decode_thumbnail_attr_width(__TopXMLNS, undefined) ->
-    undefined;
-decode_thumbnail_attr_width(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"width">>, <<"thumbnail">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_thumbnail_attr_width(undefined, _acc) -> _acc;
-encode_thumbnail_attr_width(_val, _acc) ->
-    [{<<"width">>, enc_int(_val)} | _acc].
-
-decode_thumbnail_attr_height(__TopXMLNS, undefined) ->
-    undefined;
-decode_thumbnail_attr_height(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"height">>, <<"thumbnail">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_thumbnail_attr_height(undefined, _acc) -> _acc;
-encode_thumbnail_attr_height(_val, _acc) ->
-    [{<<"height">>, enc_int(_val)} | _acc].
-
-decode_upload_slot(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"slot">>, _attrs, _els}) ->
-    {Put, Get} = decode_upload_slot_els(__TopXMLNS,
-                                       __IgnoreEls, _els, undefined,
-                                       undefined),
-    Xmlns = decode_upload_slot_attrs(__TopXMLNS, _attrs,
-                                    undefined),
-    {upload_slot, Get, Put, Xmlns}.
-
-decode_upload_slot_els(__TopXMLNS, __IgnoreEls, [], Put,
-                      Get) ->
-    {Put, Get};
-decode_upload_slot_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"get">>, _attrs, _} = _el | _els], Put,
-                      Get) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"eu:siacs:conversations:http:upload">>;
-              __TopXMLNS == <<"urn:xmpp:http:upload">> ->
-         decode_upload_slot_els(__TopXMLNS, __IgnoreEls, _els,
-                                Put,
-                                decode_upload_get(__TopXMLNS, __IgnoreEls,
-                                                  _el));
-      <<"urn:xmpp:http:upload">> ->
-         decode_upload_slot_els(__TopXMLNS, __IgnoreEls, _els,
-                                Put,
-                                decode_upload_get(<<"urn:xmpp:http:upload">>,
-                                                  __IgnoreEls, _el));
-      <<"eu:siacs:conversations:http:upload">> ->
-         decode_upload_slot_els(__TopXMLNS, __IgnoreEls, _els,
-                                Put,
-                                decode_upload_get(<<"eu:siacs:conversations:http:upload">>,
-                                                  __IgnoreEls, _el));
-      _ ->
-         decode_upload_slot_els(__TopXMLNS, __IgnoreEls, _els,
-                                Put, Get)
-    end;
-decode_upload_slot_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"put">>, _attrs, _} = _el | _els], Put,
-                      Get) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"eu:siacs:conversations:http:upload">>;
-              __TopXMLNS == <<"urn:xmpp:http:upload">> ->
-         decode_upload_slot_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_upload_put(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                                Get);
-      <<"urn:xmpp:http:upload">> ->
-         decode_upload_slot_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_upload_put(<<"urn:xmpp:http:upload">>,
-                                                  __IgnoreEls, _el),
-                                Get);
-      <<"eu:siacs:conversations:http:upload">> ->
-         decode_upload_slot_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_upload_put(<<"eu:siacs:conversations:http:upload">>,
-                                                  __IgnoreEls, _el),
-                                Get);
-      _ ->
-         decode_upload_slot_els(__TopXMLNS, __IgnoreEls, _els,
-                                Put, Get)
-    end;
-decode_upload_slot_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Put, Get) ->
-    decode_upload_slot_els(__TopXMLNS, __IgnoreEls, _els,
-                          Put, Get).
-
-decode_upload_slot_attrs(__TopXMLNS,
-                        [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
-    decode_upload_slot_attrs(__TopXMLNS, _attrs, _val);
-decode_upload_slot_attrs(__TopXMLNS, [_ | _attrs],
-                        Xmlns) ->
-    decode_upload_slot_attrs(__TopXMLNS, _attrs, Xmlns);
-decode_upload_slot_attrs(__TopXMLNS, [], Xmlns) ->
-    decode_upload_slot_attr_xmlns(__TopXMLNS, Xmlns).
-
-encode_upload_slot({upload_slot, Get, Put, Xmlns},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:http:upload">>,
-                                     <<"eu:siacs:conversations:http:upload">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_upload_slot_$put'(Put,
-                                                  __NewTopXMLNS,
-                                                  'encode_upload_slot_$get'(Get,
-                                                                            __NewTopXMLNS,
-                                                                            []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"slot">>, _attrs, _els}.
-
-'encode_upload_slot_$put'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_upload_slot_$put'(Put, __TopXMLNS, _acc) ->
-    [encode_upload_put(Put, __TopXMLNS) | _acc].
-
-'encode_upload_slot_$get'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_upload_slot_$get'(Get, __TopXMLNS, _acc) ->
-    [encode_upload_get(Get, __TopXMLNS) | _acc].
-
-decode_upload_slot_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_upload_slot_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_upload_put(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"put">>, _attrs, _els}) ->
-    Cdata = decode_upload_put_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_upload_put_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_upload_put_cdata(__TopXMLNS, Cdata);
-decode_upload_put_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_upload_put_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_upload_put_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_upload_put_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_upload_put(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"urn:xmpp:http:upload">>,
-                                     <<"eu:siacs:conversations:http:upload">>],
-                                    __TopXMLNS),
-    _els = encode_upload_put_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"put">>, _attrs, _els}.
-
-decode_upload_put_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"put">>, __TopXMLNS}});
-decode_upload_put_cdata(__TopXMLNS, _val) -> _val.
-
-encode_upload_put_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_upload_get(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"get">>, _attrs, _els}) ->
-    Cdata = decode_upload_get_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_upload_get_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_upload_get_cdata(__TopXMLNS, Cdata);
-decode_upload_get_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_upload_get_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_upload_get_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_upload_get_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_upload_get(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"urn:xmpp:http:upload">>,
-                                     <<"eu:siacs:conversations:http:upload">>],
-                                    __TopXMLNS),
-    _els = encode_upload_get_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"get">>, _attrs, _els}.
-
-decode_upload_get_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"get">>, __TopXMLNS}});
-decode_upload_get_cdata(__TopXMLNS, _val) -> _val.
-
-encode_upload_get_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_upload_request(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"request">>, _attrs, _els}) ->
-    {Content_type, Size, Filename} =
-       decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                 <<>>, error, error),
-    Xmlns = decode_upload_request_attrs(__TopXMLNS, _attrs,
-                                       undefined),
-    {upload_request, Filename, Size, Content_type, Xmlns}.
-
-decode_upload_request_els(__TopXMLNS, __IgnoreEls, [],
-                         Content_type, Size, Filename) ->
-    {Content_type,
-     case Size of
-       error ->
-          erlang:error({xmpp_codec,
-                        {missing_tag, <<"size">>, __TopXMLNS}});
-       {value, Size1} -> Size1
-     end,
-     case Filename of
-       error ->
-          erlang:error({xmpp_codec,
-                        {missing_tag, <<"filename">>, __TopXMLNS}});
-       {value, Filename1} -> Filename1
-     end};
-decode_upload_request_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"filename">>, _attrs, _} = _el | _els],
-                         Content_type, Size, Filename) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"eu:siacs:conversations:http:upload">>;
-              __TopXMLNS == <<"urn:xmpp:http:upload">> ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Content_type, Size,
-                                   {value,
-                                    decode_upload_filename(__TopXMLNS,
-                                                           __IgnoreEls, _el)});
-      <<"urn:xmpp:http:upload">> ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Content_type, Size,
-                                   {value,
-                                    decode_upload_filename(<<"urn:xmpp:http:upload">>,
-                                                           __IgnoreEls, _el)});
-      <<"eu:siacs:conversations:http:upload">> ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Content_type, Size,
-                                   {value,
-                                    decode_upload_filename(<<"eu:siacs:conversations:http:upload">>,
-                                                           __IgnoreEls, _el)});
-      _ ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Content_type, Size, Filename)
-    end;
-decode_upload_request_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"size">>, _attrs, _} = _el | _els],
-                         Content_type, Size, Filename) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"eu:siacs:conversations:http:upload">>;
-              __TopXMLNS == <<"urn:xmpp:http:upload">> ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Content_type,
-                                   {value,
-                                    decode_upload_size(__TopXMLNS, __IgnoreEls,
-                                                       _el)},
-                                   Filename);
-      <<"urn:xmpp:http:upload">> ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Content_type,
-                                   {value,
-                                    decode_upload_size(<<"urn:xmpp:http:upload">>,
-                                                       __IgnoreEls, _el)},
-                                   Filename);
-      <<"eu:siacs:conversations:http:upload">> ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Content_type,
-                                   {value,
-                                    decode_upload_size(<<"eu:siacs:conversations:http:upload">>,
-                                                       __IgnoreEls, _el)},
-                                   Filename);
-      _ ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Content_type, Size, Filename)
-    end;
-decode_upload_request_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"content-type">>, _attrs, _} = _el | _els],
-                         Content_type, Size, Filename) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"eu:siacs:conversations:http:upload">>;
-              __TopXMLNS == <<"urn:xmpp:http:upload">> ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   decode_upload_content_type(__TopXMLNS,
-                                                              __IgnoreEls,
-                                                              _el),
-                                   Size, Filename);
-      <<"urn:xmpp:http:upload">> ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   decode_upload_content_type(<<"urn:xmpp:http:upload">>,
-                                                              __IgnoreEls,
-                                                              _el),
-                                   Size, Filename);
-      <<"eu:siacs:conversations:http:upload">> ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   decode_upload_content_type(<<"eu:siacs:conversations:http:upload">>,
-                                                              __IgnoreEls,
-                                                              _el),
-                                   Size, Filename);
-      _ ->
-         decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Content_type, Size, Filename)
-    end;
-decode_upload_request_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Content_type, Size, Filename) ->
-    decode_upload_request_els(__TopXMLNS, __IgnoreEls, _els,
-                             Content_type, Size, Filename).
-
-decode_upload_request_attrs(__TopXMLNS,
-                           [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
-    decode_upload_request_attrs(__TopXMLNS, _attrs, _val);
-decode_upload_request_attrs(__TopXMLNS, [_ | _attrs],
-                           Xmlns) ->
-    decode_upload_request_attrs(__TopXMLNS, _attrs, Xmlns);
-decode_upload_request_attrs(__TopXMLNS, [], Xmlns) ->
-    decode_upload_request_attr_xmlns(__TopXMLNS, Xmlns).
-
-encode_upload_request({upload_request, Filename, Size,
-                      Content_type, Xmlns},
-                     __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:http:upload">>,
-                                     <<"eu:siacs:conversations:http:upload">>],
-                                    __TopXMLNS),
-    _els =
-       lists:reverse('encode_upload_request_$content-type'(Content_type,
-                                                           __NewTopXMLNS,
-                                                           'encode_upload_request_$size'(Size,
-                                                                                         __NewTopXMLNS,
-                                                                                         'encode_upload_request_$filename'(Filename,
-                                                                                                                           __NewTopXMLNS,
-                                                                                                                           [])))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"request">>, _attrs, _els}.
-
-'encode_upload_request_$content-type'(<<>>, __TopXMLNS,
-                                     _acc) ->
-    _acc;
-'encode_upload_request_$content-type'(Content_type,
-                                     __TopXMLNS, _acc) ->
-    [encode_upload_content_type(Content_type, __TopXMLNS)
-     | _acc].
-
-'encode_upload_request_$size'(Size, __TopXMLNS, _acc) ->
-    [encode_upload_size(Size, __TopXMLNS) | _acc].
-
-'encode_upload_request_$filename'(Filename, __TopXMLNS,
-                                 _acc) ->
-    [encode_upload_filename(Filename, __TopXMLNS) | _acc].
-
-decode_upload_request_attr_xmlns(__TopXMLNS,
-                                undefined) ->
-    <<>>;
-decode_upload_request_attr_xmlns(__TopXMLNS, _val) ->
-    _val.
-
-decode_upload_content_type(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"content-type">>, _attrs, _els}) ->
-    Cdata = decode_upload_content_type_els(__TopXMLNS,
-                                          __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_upload_content_type_els(__TopXMLNS, __IgnoreEls,
-                              [], Cdata) ->
-    decode_upload_content_type_cdata(__TopXMLNS, Cdata);
-decode_upload_content_type_els(__TopXMLNS, __IgnoreEls,
-                              [{xmlcdata, _data} | _els], Cdata) ->
-    decode_upload_content_type_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<Cdata/binary, _data/binary>>);
-decode_upload_content_type_els(__TopXMLNS, __IgnoreEls,
-                              [_ | _els], Cdata) ->
-    decode_upload_content_type_els(__TopXMLNS, __IgnoreEls,
-                                  _els, Cdata).
-
-encode_upload_content_type(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"urn:xmpp:http:upload">>,
-                                     <<"eu:siacs:conversations:http:upload">>],
-                                    __TopXMLNS),
-    _els = encode_upload_content_type_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"content-type">>, _attrs, _els}.
-
-decode_upload_content_type_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_upload_content_type_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_upload_content_type_cdata(<<>>, _acc) -> _acc;
-encode_upload_content_type_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_upload_size(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"size">>, _attrs, _els}) ->
-    Cdata = decode_upload_size_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Cdata.
-
-decode_upload_size_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_upload_size_cdata(__TopXMLNS, Cdata);
-decode_upload_size_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_upload_size_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_upload_size_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_upload_size_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-encode_upload_size(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"urn:xmpp:http:upload">>,
-                                     <<"eu:siacs:conversations:http:upload">>],
-                                    __TopXMLNS),
-    _els = encode_upload_size_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"size">>, _attrs, _els}.
-
-decode_upload_size_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"size">>, __TopXMLNS}});
-decode_upload_size_cdata(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"size">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_upload_size_cdata(_val, _acc) ->
-    [{xmlcdata, enc_int(_val)} | _acc].
-
-decode_upload_filename(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"filename">>, _attrs, _els}) ->
-    Cdata = decode_upload_filename_els(__TopXMLNS,
-                                      __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_upload_filename_els(__TopXMLNS, __IgnoreEls, [],
-                          Cdata) ->
-    decode_upload_filename_cdata(__TopXMLNS, Cdata);
-decode_upload_filename_els(__TopXMLNS, __IgnoreEls,
-                          [{xmlcdata, _data} | _els], Cdata) ->
-    decode_upload_filename_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<Cdata/binary, _data/binary>>);
-decode_upload_filename_els(__TopXMLNS, __IgnoreEls,
-                          [_ | _els], Cdata) ->
-    decode_upload_filename_els(__TopXMLNS, __IgnoreEls,
-                              _els, Cdata).
-
-encode_upload_filename(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"urn:xmpp:http:upload">>,
-                                     <<"eu:siacs:conversations:http:upload">>],
-                                    __TopXMLNS),
-    _els = encode_upload_filename_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"filename">>, _attrs, _els}.
-
-decode_upload_filename_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"filename">>, __TopXMLNS}});
-decode_upload_filename_cdata(__TopXMLNS, _val) -> _val.
-
-encode_upload_filename_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_sic(__TopXMLNS, __IgnoreEls,
-          {xmlel, <<"address">>, _attrs, _els}) ->
-    {Ip, Port} = decode_sic_els(__TopXMLNS, __IgnoreEls,
-                               _els, undefined, undefined),
-    Xmlns = decode_sic_attrs(__TopXMLNS, _attrs, undefined),
-    {sic, Ip, Port, Xmlns}.
-
-decode_sic_els(__TopXMLNS, __IgnoreEls, [], Ip, Port) ->
-    {Ip, Port};
-decode_sic_els(__TopXMLNS, __IgnoreEls,
-              [{xmlel, <<"ip">>, _attrs, _} = _el | _els], Ip,
-              Port) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"urn:xmpp:sic:1">>;
-              __TopXMLNS == <<"urn:xmpp:sic:0">> ->
-         decode_sic_els(__TopXMLNS, __IgnoreEls, _els,
-                        decode_sic_ip(__TopXMLNS, __IgnoreEls, _el), Port);
-      <<"urn:xmpp:sic:0">> ->
-         decode_sic_els(__TopXMLNS, __IgnoreEls, _els,
-                        decode_sic_ip(<<"urn:xmpp:sic:0">>, __IgnoreEls, _el),
-                        Port);
-      <<"urn:xmpp:sic:1">> ->
-         decode_sic_els(__TopXMLNS, __IgnoreEls, _els,
-                        decode_sic_ip(<<"urn:xmpp:sic:1">>, __IgnoreEls, _el),
-                        Port);
-      _ ->
-         decode_sic_els(__TopXMLNS, __IgnoreEls, _els, Ip, Port)
-    end;
-decode_sic_els(__TopXMLNS, __IgnoreEls,
-              [{xmlel, <<"port">>, _attrs, _} = _el | _els], Ip,
-              Port) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:sic:1">> ->
-         decode_sic_els(__TopXMLNS, __IgnoreEls, _els, Ip,
-                        decode_sip_port(__TopXMLNS, __IgnoreEls, _el));
-      <<"urn:xmpp:sic:1">> ->
-         decode_sic_els(__TopXMLNS, __IgnoreEls, _els, Ip,
-                        decode_sip_port(<<"urn:xmpp:sic:1">>, __IgnoreEls,
-                                        _el));
-      _ ->
-         decode_sic_els(__TopXMLNS, __IgnoreEls, _els, Ip, Port)
-    end;
-decode_sic_els(__TopXMLNS, __IgnoreEls, [_ | _els], Ip,
-              Port) ->
-    decode_sic_els(__TopXMLNS, __IgnoreEls, _els, Ip, Port).
-
-decode_sic_attrs(__TopXMLNS,
-                [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
-    decode_sic_attrs(__TopXMLNS, _attrs, _val);
-decode_sic_attrs(__TopXMLNS, [_ | _attrs], Xmlns) ->
-    decode_sic_attrs(__TopXMLNS, _attrs, Xmlns);
-decode_sic_attrs(__TopXMLNS, [], Xmlns) ->
-    decode_sic_attr_xmlns(__TopXMLNS, Xmlns).
-
-encode_sic({sic, Ip, Port, Xmlns}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:sic:0">>,
-                                     <<"urn:xmpp:sic:1">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_sic_$ip'(Ip, __NewTopXMLNS,
-                                         'encode_sic_$port'(Port,
-                                                            __NewTopXMLNS,
-                                                            []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"address">>, _attrs, _els}.
-
-'encode_sic_$ip'(undefined, __TopXMLNS, _acc) -> _acc;
-'encode_sic_$ip'(Ip, __TopXMLNS, _acc) ->
-    [encode_sic_ip(Ip, __TopXMLNS) | _acc].
-
-'encode_sic_$port'(undefined, __TopXMLNS, _acc) -> _acc;
-'encode_sic_$port'(Port, __TopXMLNS, _acc) ->
-    [encode_sip_port(Port, __TopXMLNS) | _acc].
-
-decode_sic_attr_xmlns(__TopXMLNS, undefined) -> <<>>;
-decode_sic_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_sip_port(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"port">>, _attrs, _els}) ->
-    Cdata = decode_sip_port_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Cdata.
-
-decode_sip_port_els(__TopXMLNS, __IgnoreEls, [],
-                   Cdata) ->
-    decode_sip_port_cdata(__TopXMLNS, Cdata);
-decode_sip_port_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Cdata) ->
-    decode_sip_port_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Cdata/binary, _data/binary>>);
-decode_sip_port_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Cdata) ->
-    decode_sip_port_els(__TopXMLNS, __IgnoreEls, _els,
-                       Cdata).
-
-encode_sip_port(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:sic:1">>,
-                                    [], __TopXMLNS),
-    _els = encode_sip_port_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"port">>, _attrs, _els}.
-
-decode_sip_port_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"port">>, __TopXMLNS}});
-decode_sip_port_cdata(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, 65535) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"port">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sip_port_cdata(_val, _acc) ->
-    [{xmlcdata, enc_int(_val)} | _acc].
-
-decode_sic_ip(__TopXMLNS, __IgnoreEls,
-             {xmlel, <<"ip">>, _attrs, _els}) ->
-    Cdata = decode_sic_ip_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<>>),
-    Cdata.
-
-decode_sic_ip_els(__TopXMLNS, __IgnoreEls, [], Cdata) ->
-    decode_sic_ip_cdata(__TopXMLNS, Cdata);
-decode_sic_ip_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlcdata, _data} | _els], Cdata) ->
-    decode_sic_ip_els(__TopXMLNS, __IgnoreEls, _els,
-                     <<Cdata/binary, _data/binary>>);
-decode_sic_ip_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                 Cdata) ->
-    decode_sic_ip_els(__TopXMLNS, __IgnoreEls, _els, Cdata).
-
-encode_sic_ip(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"urn:xmpp:sic:0">>,
-                                     <<"urn:xmpp:sic:1">>],
-                                    __TopXMLNS),
-    _els = encode_sic_ip_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ip">>, _attrs, _els}.
-
-decode_sic_ip_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"ip">>, __TopXMLNS}});
-decode_sic_ip_cdata(__TopXMLNS, _val) ->
-    case catch dec_ip(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"ip">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sic_ip_cdata(_val, _acc) ->
-    [{xmlcdata, enc_ip(_val)} | _acc].
-
-decode_oob_x(__TopXMLNS, __IgnoreEls,
-            {xmlel, <<"x">>, _attrs, _els}) ->
-    {Desc, Url} = decode_oob_x_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>, error),
-    Sid = decode_oob_x_attrs(__TopXMLNS, _attrs, undefined),
-    {oob_x, Url, Desc, Sid}.
-
-decode_oob_x_els(__TopXMLNS, __IgnoreEls, [], Desc,
-                Url) ->
-    {Desc,
-     case Url of
-       error ->
-          erlang:error({xmpp_codec,
-                        {missing_tag, <<"url">>, __TopXMLNS}});
-       {value, Url1} -> Url1
-     end};
-decode_oob_x_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"url">>, _attrs, _} = _el | _els], Desc,
-                Url) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:oob">> ->
-         decode_oob_x_els(__TopXMLNS, __IgnoreEls, _els, Desc,
-                          {value,
-                           decode_oob_url(__TopXMLNS, __IgnoreEls, _el)});
-      <<"jabber:x:oob">> ->
-         decode_oob_x_els(__TopXMLNS, __IgnoreEls, _els, Desc,
-                          {value,
-                           decode_oob_url(<<"jabber:x:oob">>, __IgnoreEls,
-                                          _el)});
-      _ ->
-         decode_oob_x_els(__TopXMLNS, __IgnoreEls, _els, Desc,
-                          Url)
-    end;
-decode_oob_x_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"desc">>, _attrs, _} = _el | _els], Desc,
-                Url) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:oob">> ->
-         decode_oob_x_els(__TopXMLNS, __IgnoreEls, _els,
-                          decode_oob_desc(__TopXMLNS, __IgnoreEls, _el), Url);
-      <<"jabber:x:oob">> ->
-         decode_oob_x_els(__TopXMLNS, __IgnoreEls, _els,
-                          decode_oob_desc(<<"jabber:x:oob">>, __IgnoreEls,
-                                          _el),
-                          Url);
-      _ ->
-         decode_oob_x_els(__TopXMLNS, __IgnoreEls, _els, Desc,
-                          Url)
-    end;
-decode_oob_x_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                Desc, Url) ->
-    decode_oob_x_els(__TopXMLNS, __IgnoreEls, _els, Desc,
-                    Url).
-
-decode_oob_x_attrs(__TopXMLNS,
-                  [{<<"sid">>, _val} | _attrs], _Sid) ->
-    decode_oob_x_attrs(__TopXMLNS, _attrs, _val);
-decode_oob_x_attrs(__TopXMLNS, [_ | _attrs], Sid) ->
-    decode_oob_x_attrs(__TopXMLNS, _attrs, Sid);
-decode_oob_x_attrs(__TopXMLNS, [], Sid) ->
-    decode_oob_x_attr_sid(__TopXMLNS, Sid).
-
-encode_oob_x({oob_x, Url, Desc, Sid}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:oob">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_oob_x_$desc'(Desc,
-                                             __NewTopXMLNS,
-                                             'encode_oob_x_$url'(Url,
-                                                                 __NewTopXMLNS,
-                                                                 []))),
-    _attrs = encode_oob_x_attr_sid(Sid,
-                                  enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS)),
-    {xmlel, <<"x">>, _attrs, _els}.
-
-'encode_oob_x_$desc'(<<>>, __TopXMLNS, _acc) -> _acc;
-'encode_oob_x_$desc'(Desc, __TopXMLNS, _acc) ->
-    [encode_oob_desc(Desc, __TopXMLNS) | _acc].
-
-'encode_oob_x_$url'(Url, __TopXMLNS, _acc) ->
-    [encode_oob_url(Url, __TopXMLNS) | _acc].
-
-decode_oob_x_attr_sid(__TopXMLNS, undefined) -> <<>>;
-decode_oob_x_attr_sid(__TopXMLNS, _val) -> _val.
-
-encode_oob_x_attr_sid(<<>>, _acc) -> _acc;
-encode_oob_x_attr_sid(_val, _acc) ->
-    [{<<"sid">>, _val} | _acc].
-
-decode_oob_desc(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"desc">>, _attrs, _els}) ->
-    Cdata = decode_oob_desc_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Cdata.
-
-decode_oob_desc_els(__TopXMLNS, __IgnoreEls, [],
-                   Cdata) ->
-    decode_oob_desc_cdata(__TopXMLNS, Cdata);
-decode_oob_desc_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Cdata) ->
-    decode_oob_desc_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Cdata/binary, _data/binary>>);
-decode_oob_desc_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Cdata) ->
-    decode_oob_desc_els(__TopXMLNS, __IgnoreEls, _els,
-                       Cdata).
-
-encode_oob_desc(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:oob">>, [],
-                                    __TopXMLNS),
-    _els = encode_oob_desc_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"desc">>, _attrs, _els}.
-
-decode_oob_desc_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_oob_desc_cdata(__TopXMLNS, _val) -> _val.
-
-encode_oob_desc_cdata(<<>>, _acc) -> _acc;
-encode_oob_desc_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_oob_url(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"url">>, _attrs, _els}) ->
-    Cdata = decode_oob_url_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<>>),
-    Cdata.
-
-decode_oob_url_els(__TopXMLNS, __IgnoreEls, [],
-                  Cdata) ->
-    decode_oob_url_cdata(__TopXMLNS, Cdata);
-decode_oob_url_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlcdata, _data} | _els], Cdata) ->
-    decode_oob_url_els(__TopXMLNS, __IgnoreEls, _els,
-                      <<Cdata/binary, _data/binary>>);
-decode_oob_url_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Cdata) ->
-    decode_oob_url_els(__TopXMLNS, __IgnoreEls, _els,
-                      Cdata).
-
-encode_oob_url(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:oob">>, [],
-                                    __TopXMLNS),
-    _els = encode_oob_url_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"url">>, _attrs, _els}.
-
-decode_oob_url_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"url">>, __TopXMLNS}});
-decode_oob_url_cdata(__TopXMLNS, _val) -> _val.
-
-encode_oob_url_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_media(__TopXMLNS, __IgnoreEls,
-            {xmlel, <<"media">>, _attrs, _els}) ->
-    Uri = decode_media_els(__TopXMLNS, __IgnoreEls, _els,
-                          []),
-    {Height, Width} = decode_media_attrs(__TopXMLNS, _attrs,
-                                        undefined, undefined),
-    {media, Height, Width, Uri}.
-
-decode_media_els(__TopXMLNS, __IgnoreEls, [], Uri) ->
-    lists:reverse(Uri);
-decode_media_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"uri">>, _attrs, _} = _el | _els], Uri) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"urn:xmpp:media-element">> ->
-         decode_media_els(__TopXMLNS, __IgnoreEls, _els,
-                          [decode_media_uri(__TopXMLNS, __IgnoreEls, _el)
-                           | Uri]);
-      <<"urn:xmpp:media-element">> ->
-         decode_media_els(__TopXMLNS, __IgnoreEls, _els,
-                          [decode_media_uri(<<"urn:xmpp:media-element">>,
-                                            __IgnoreEls, _el)
-                           | Uri]);
-      _ ->
-         decode_media_els(__TopXMLNS, __IgnoreEls, _els, Uri)
-    end;
-decode_media_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                Uri) ->
-    decode_media_els(__TopXMLNS, __IgnoreEls, _els, Uri).
-
-decode_media_attrs(__TopXMLNS,
-                  [{<<"height">>, _val} | _attrs], _Height, Width) ->
-    decode_media_attrs(__TopXMLNS, _attrs, _val, Width);
-decode_media_attrs(__TopXMLNS,
-                  [{<<"width">>, _val} | _attrs], Height, _Width) ->
-    decode_media_attrs(__TopXMLNS, _attrs, Height, _val);
-decode_media_attrs(__TopXMLNS, [_ | _attrs], Height,
-                  Width) ->
-    decode_media_attrs(__TopXMLNS, _attrs, Height, Width);
-decode_media_attrs(__TopXMLNS, [], Height, Width) ->
-    {decode_media_attr_height(__TopXMLNS, Height),
-     decode_media_attr_width(__TopXMLNS, Width)}.
-
-encode_media({media, Height, Width, Uri}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:media-element">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_media_$uri'(Uri,
-                                            __NewTopXMLNS, [])),
-    _attrs = encode_media_attr_width(Width,
-                                    encode_media_attr_height(Height,
-                                                             enc_xmlns_attrs(__NewTopXMLNS,
-                                                                             __TopXMLNS))),
-    {xmlel, <<"media">>, _attrs, _els}.
-
-'encode_media_$uri'([], __TopXMLNS, _acc) -> _acc;
-'encode_media_$uri'([Uri | _els], __TopXMLNS, _acc) ->
-    'encode_media_$uri'(_els, __TopXMLNS,
-                       [encode_media_uri(Uri, __TopXMLNS) | _acc]).
-
-decode_media_attr_height(__TopXMLNS, undefined) ->
-    undefined;
-decode_media_attr_height(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"height">>, <<"media">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_media_attr_height(undefined, _acc) -> _acc;
-encode_media_attr_height(_val, _acc) ->
-    [{<<"height">>, enc_int(_val)} | _acc].
-
-decode_media_attr_width(__TopXMLNS, undefined) ->
-    undefined;
-decode_media_attr_width(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, inifinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"width">>, <<"media">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_media_attr_width(undefined, _acc) -> _acc;
-encode_media_attr_width(_val, _acc) ->
-    [{<<"width">>, enc_int(_val)} | _acc].
-
-decode_media_uri(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"uri">>, _attrs, _els}) ->
-    Uri = decode_media_uri_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<>>),
-    Type = decode_media_uri_attrs(__TopXMLNS, _attrs,
-                                 undefined),
-    {media_uri, Type, Uri}.
-
-decode_media_uri_els(__TopXMLNS, __IgnoreEls, [],
-                    Uri) ->
-    decode_media_uri_cdata(__TopXMLNS, Uri);
-decode_media_uri_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Uri) ->
-    decode_media_uri_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Uri/binary, _data/binary>>);
-decode_media_uri_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Uri) ->
-    decode_media_uri_els(__TopXMLNS, __IgnoreEls, _els,
-                        Uri).
-
-decode_media_uri_attrs(__TopXMLNS,
-                      [{<<"type">>, _val} | _attrs], _Type) ->
-    decode_media_uri_attrs(__TopXMLNS, _attrs, _val);
-decode_media_uri_attrs(__TopXMLNS, [_ | _attrs],
-                      Type) ->
-    decode_media_uri_attrs(__TopXMLNS, _attrs, Type);
-decode_media_uri_attrs(__TopXMLNS, [], Type) ->
-    decode_media_uri_attr_type(__TopXMLNS, Type).
-
-encode_media_uri({media_uri, Type, Uri}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:media-element">>, [],
-                        __TopXMLNS),
-    _els = encode_media_uri_cdata(Uri, []),
-    _attrs = encode_media_uri_attr_type(Type,
-                                       enc_xmlns_attrs(__NewTopXMLNS,
-                                                       __TopXMLNS)),
-    {xmlel, <<"uri">>, _attrs, _els}.
-
-decode_media_uri_attr_type(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"uri">>, __TopXMLNS}});
-decode_media_uri_attr_type(__TopXMLNS, _val) -> _val.
-
-encode_media_uri_attr_type(_val, _acc) ->
-    [{<<"type">>, _val} | _acc].
-
-decode_media_uri_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_media_uri_cdata(__TopXMLNS, _val) -> _val.
-
-encode_media_uri_cdata(<<>>, _acc) -> _acc;
-encode_media_uri_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_captcha(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"captcha">>, _attrs, _els}) ->
-    Xdata = decode_captcha_els(__TopXMLNS, __IgnoreEls,
-                              _els, error),
-    {xcaptcha, Xdata}.
-
-decode_captcha_els(__TopXMLNS, __IgnoreEls, [],
-                  Xdata) ->
-    case Xdata of
-      error ->
-         erlang:error({xmpp_codec,
-                       {missing_tag, <<"x">>, __TopXMLNS}});
-      {value, Xdata1} -> Xdata1
-    end;
-decode_captcha_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_captcha_els(__TopXMLNS, __IgnoreEls, _els,
-                            {value,
-                             decode_xdata(<<"jabber:x:data">>, __IgnoreEls,
-                                          _el)});
-      _ ->
-         decode_captcha_els(__TopXMLNS, __IgnoreEls, _els, Xdata)
-    end;
-decode_captcha_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Xdata) ->
-    decode_captcha_els(__TopXMLNS, __IgnoreEls, _els,
-                      Xdata).
-
-encode_captcha({xcaptcha, Xdata}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:captcha">>,
-                                    [], __TopXMLNS),
-    _els = lists:reverse('encode_captcha_$xdata'(Xdata,
-                                                __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"captcha">>, _attrs, _els}.
-
-'encode_captcha_$xdata'(Xdata, __TopXMLNS, _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-decode_bob_data(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"data">>, _attrs, _els}) ->
-    Data = decode_bob_data_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<>>),
-    {Cid, Max_age, Type} = decode_bob_data_attrs(__TopXMLNS,
-                                                _attrs, undefined, undefined,
-                                                undefined),
-    {bob_data, Cid, Max_age, Type, Data}.
-
-decode_bob_data_els(__TopXMLNS, __IgnoreEls, [],
-                   Data) ->
-    decode_bob_data_cdata(__TopXMLNS, Data);
-decode_bob_data_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Data) ->
-    decode_bob_data_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Data/binary, _data/binary>>);
-decode_bob_data_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Data) ->
-    decode_bob_data_els(__TopXMLNS, __IgnoreEls, _els,
-                       Data).
-
-decode_bob_data_attrs(__TopXMLNS,
-                     [{<<"cid">>, _val} | _attrs], _Cid, Max_age, Type) ->
-    decode_bob_data_attrs(__TopXMLNS, _attrs, _val, Max_age,
-                         Type);
-decode_bob_data_attrs(__TopXMLNS,
-                     [{<<"max-age">>, _val} | _attrs], Cid, _Max_age,
-                     Type) ->
-    decode_bob_data_attrs(__TopXMLNS, _attrs, Cid, _val,
-                         Type);
-decode_bob_data_attrs(__TopXMLNS,
-                     [{<<"type">>, _val} | _attrs], Cid, Max_age, _Type) ->
-    decode_bob_data_attrs(__TopXMLNS, _attrs, Cid, Max_age,
-                         _val);
-decode_bob_data_attrs(__TopXMLNS, [_ | _attrs], Cid,
-                     Max_age, Type) ->
-    decode_bob_data_attrs(__TopXMLNS, _attrs, Cid, Max_age,
-                         Type);
-decode_bob_data_attrs(__TopXMLNS, [], Cid, Max_age,
-                     Type) ->
-    {decode_bob_data_attr_cid(__TopXMLNS, Cid),
-     'decode_bob_data_attr_max-age'(__TopXMLNS, Max_age),
-     decode_bob_data_attr_type(__TopXMLNS, Type)}.
-
-encode_bob_data({bob_data, Cid, Max_age, Type, Data},
-               __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:bob">>, [],
-                                    __TopXMLNS),
-    _els = encode_bob_data_cdata(Data, []),
-    _attrs = encode_bob_data_attr_type(Type,
-                                      'encode_bob_data_attr_max-age'(Max_age,
-                                                                     encode_bob_data_attr_cid(Cid,
-                                                                                              enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                              __TopXMLNS)))),
-    {xmlel, <<"data">>, _attrs, _els}.
-
-decode_bob_data_attr_cid(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"cid">>, <<"data">>, __TopXMLNS}});
-decode_bob_data_attr_cid(__TopXMLNS, _val) -> _val.
-
-encode_bob_data_attr_cid(_val, _acc) ->
-    [{<<"cid">>, _val} | _acc].
-
-'decode_bob_data_attr_max-age'(__TopXMLNS, undefined) ->
-    undefined;
-'decode_bob_data_attr_max-age'(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"max-age">>, <<"data">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-'encode_bob_data_attr_max-age'(undefined, _acc) -> _acc;
-'encode_bob_data_attr_max-age'(_val, _acc) ->
-    [{<<"max-age">>, enc_int(_val)} | _acc].
-
-decode_bob_data_attr_type(__TopXMLNS, undefined) ->
-    <<>>;
-decode_bob_data_attr_type(__TopXMLNS, _val) -> _val.
-
-encode_bob_data_attr_type(<<>>, _acc) -> _acc;
-encode_bob_data_attr_type(_val, _acc) ->
-    [{<<"type">>, _val} | _acc].
-
-decode_bob_data_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_bob_data_cdata(__TopXMLNS, _val) ->
-    case catch base64:decode(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"data">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bob_data_cdata(<<>>, _acc) -> _acc;
-encode_bob_data_cdata(_val, _acc) ->
-    [{xmlcdata, base64:encode(_val)} | _acc].
-
-decode_stream_start(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"stream:stream">>, _attrs, _els}) ->
-    {From, To, Xmlns, Stream_xmlns, Db_xmlns, Lang, Version,
-     Id} =
-       decode_stream_start_attrs(__TopXMLNS, _attrs, undefined,
-                                 undefined, undefined, undefined, undefined,
-                                 undefined, undefined, undefined),
-    {stream_start, From, To, Id, Version, Xmlns,
-     Stream_xmlns, Db_xmlns, Lang}.
-
-decode_stream_start_attrs(__TopXMLNS,
-                         [{<<"from">>, _val} | _attrs], _From, To, Xmlns,
-                         Stream_xmlns, Db_xmlns, Lang, Version, Id) ->
-    decode_stream_start_attrs(__TopXMLNS, _attrs, _val, To,
-                             Xmlns, Stream_xmlns, Db_xmlns, Lang, Version, Id);
-decode_stream_start_attrs(__TopXMLNS,
-                         [{<<"to">>, _val} | _attrs], From, _To, Xmlns,
-                         Stream_xmlns, Db_xmlns, Lang, Version, Id) ->
-    decode_stream_start_attrs(__TopXMLNS, _attrs, From,
-                             _val, Xmlns, Stream_xmlns, Db_xmlns, Lang,
-                             Version, Id);
-decode_stream_start_attrs(__TopXMLNS,
-                         [{<<"xmlns">>, _val} | _attrs], From, To, _Xmlns,
-                         Stream_xmlns, Db_xmlns, Lang, Version, Id) ->
-    decode_stream_start_attrs(__TopXMLNS, _attrs, From, To,
-                             _val, Stream_xmlns, Db_xmlns, Lang, Version, Id);
-decode_stream_start_attrs(__TopXMLNS,
-                         [{<<"xmlns:stream">>, _val} | _attrs], From, To,
-                         Xmlns, _Stream_xmlns, Db_xmlns, Lang, Version, Id) ->
-    decode_stream_start_attrs(__TopXMLNS, _attrs, From, To,
-                             Xmlns, _val, Db_xmlns, Lang, Version, Id);
-decode_stream_start_attrs(__TopXMLNS,
-                         [{<<"xmlns:db">>, _val} | _attrs], From, To, Xmlns,
-                         Stream_xmlns, _Db_xmlns, Lang, Version, Id) ->
-    decode_stream_start_attrs(__TopXMLNS, _attrs, From, To,
-                             Xmlns, Stream_xmlns, _val, Lang, Version, Id);
-decode_stream_start_attrs(__TopXMLNS,
-                         [{<<"xml:lang">>, _val} | _attrs], From, To, Xmlns,
-                         Stream_xmlns, Db_xmlns, _Lang, Version, Id) ->
-    decode_stream_start_attrs(__TopXMLNS, _attrs, From, To,
-                             Xmlns, Stream_xmlns, Db_xmlns, _val, Version, Id);
-decode_stream_start_attrs(__TopXMLNS,
-                         [{<<"version">>, _val} | _attrs], From, To, Xmlns,
-                         Stream_xmlns, Db_xmlns, Lang, _Version, Id) ->
-    decode_stream_start_attrs(__TopXMLNS, _attrs, From, To,
-                             Xmlns, Stream_xmlns, Db_xmlns, Lang, _val, Id);
-decode_stream_start_attrs(__TopXMLNS,
-                         [{<<"id">>, _val} | _attrs], From, To, Xmlns,
-                         Stream_xmlns, Db_xmlns, Lang, Version, _Id) ->
-    decode_stream_start_attrs(__TopXMLNS, _attrs, From, To,
-                             Xmlns, Stream_xmlns, Db_xmlns, Lang, Version,
-                             _val);
-decode_stream_start_attrs(__TopXMLNS, [_ | _attrs],
-                         From, To, Xmlns, Stream_xmlns, Db_xmlns, Lang,
-                         Version, Id) ->
-    decode_stream_start_attrs(__TopXMLNS, _attrs, From, To,
-                             Xmlns, Stream_xmlns, Db_xmlns, Lang, Version, Id);
-decode_stream_start_attrs(__TopXMLNS, [], From, To,
-                         Xmlns, Stream_xmlns, Db_xmlns, Lang, Version, Id) ->
-    {decode_stream_start_attr_from(__TopXMLNS, From),
-     decode_stream_start_attr_to(__TopXMLNS, To),
-     decode_stream_start_attr_xmlns(__TopXMLNS, Xmlns),
-     'decode_stream_start_attr_xmlns:stream'(__TopXMLNS,
-                                            Stream_xmlns),
-     'decode_stream_start_attr_xmlns:db'(__TopXMLNS,
-                                        Db_xmlns),
-     'decode_stream_start_attr_xml:lang'(__TopXMLNS, Lang),
-     decode_stream_start_attr_version(__TopXMLNS, Version),
-     decode_stream_start_attr_id(__TopXMLNS, Id)}.
-
-encode_stream_start({stream_start, From, To, Id,
-                    Version, Xmlns, Stream_xmlns, Db_xmlns, Lang},
-                   __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_stream_start_attr_id(Id,
-                                        encode_stream_start_attr_version(Version,
-                                                                         'encode_stream_start_attr_xml:lang'(Lang,
-                                                                                                             'encode_stream_start_attr_xmlns:db'(Db_xmlns,
-                                                                                                                                                 'encode_stream_start_attr_xmlns:stream'(Stream_xmlns,
-                                                                                                                                                                                         encode_stream_start_attr_to(To,
-                                                                                                                                                                                                                     encode_stream_start_attr_from(From,
-                                                                                                                                                                                                                                                   enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                                                                                                                                   __TopXMLNS)))))))),
-    {xmlel, <<"stream:stream">>, _attrs, _els}.
-
-decode_stream_start_attr_from(__TopXMLNS, undefined) ->
-    undefined;
-decode_stream_start_attr_from(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"stream:stream">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_stream_start_attr_from(undefined, _acc) -> _acc;
-encode_stream_start_attr_from(_val, _acc) ->
-    [{<<"from">>, enc_jid(_val)} | _acc].
-
-decode_stream_start_attr_to(__TopXMLNS, undefined) ->
-    undefined;
-decode_stream_start_attr_to(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"stream:stream">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_stream_start_attr_to(undefined, _acc) -> _acc;
-encode_stream_start_attr_to(_val, _acc) ->
-    [{<<"to">>, enc_jid(_val)} | _acc].
-
-decode_stream_start_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_stream_start_attr_xmlns(__TopXMLNS, _val) ->
-    _val.
-
-'decode_stream_start_attr_xmlns:stream'(__TopXMLNS,
-                                       undefined) ->
-    <<>>;
-'decode_stream_start_attr_xmlns:stream'(__TopXMLNS,
-                                       _val) ->
-    _val.
-
-'encode_stream_start_attr_xmlns:stream'(<<>>, _acc) ->
-    _acc;
-'encode_stream_start_attr_xmlns:stream'(_val, _acc) ->
-    [{<<"xmlns:stream">>, _val} | _acc].
-
-'decode_stream_start_attr_xmlns:db'(__TopXMLNS,
-                                   undefined) ->
-    <<>>;
-'decode_stream_start_attr_xmlns:db'(__TopXMLNS, _val) ->
-    _val.
-
-'encode_stream_start_attr_xmlns:db'(<<>>, _acc) -> _acc;
-'encode_stream_start_attr_xmlns:db'(_val, _acc) ->
-    [{<<"xmlns:db">>, _val} | _acc].
-
-'decode_stream_start_attr_xml:lang'(__TopXMLNS,
-                                   undefined) ->
-    <<>>;
-'decode_stream_start_attr_xml:lang'(__TopXMLNS, _val) ->
-    _val.
-
-'encode_stream_start_attr_xml:lang'(<<>>, _acc) -> _acc;
-'encode_stream_start_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_stream_start_attr_version(__TopXMLNS,
-                                undefined) ->
-    undefined;
-decode_stream_start_attr_version(__TopXMLNS, _val) ->
-    case catch dec_version(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"version">>, <<"stream:stream">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_stream_start_attr_version(undefined, _acc) ->
-    _acc;
-encode_stream_start_attr_version(_val, _acc) ->
-    [{<<"version">>, enc_version(_val)} | _acc].
-
-decode_stream_start_attr_id(__TopXMLNS, undefined) ->
-    <<>>;
-decode_stream_start_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_stream_start_attr_id(<<>>, _acc) -> _acc;
-encode_stream_start_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_handshake(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"handshake">>, _attrs, _els}) ->
-    Data = decode_handshake_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    {handshake, Data}.
-
-decode_handshake_els(__TopXMLNS, __IgnoreEls, [],
-                    Data) ->
-    decode_handshake_cdata(__TopXMLNS, Data);
-decode_handshake_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Data) ->
-    decode_handshake_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Data/binary, _data/binary>>);
-decode_handshake_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Data) ->
-    decode_handshake_els(__TopXMLNS, __IgnoreEls, _els,
-                        Data).
-
-encode_handshake({handshake, Data}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:component:accept">>, [],
-                        __TopXMLNS),
-    _els = encode_handshake_cdata(Data, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"handshake">>, _attrs, _els}.
-
-decode_handshake_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_handshake_cdata(__TopXMLNS, _val) -> _val.
-
-encode_handshake_cdata(<<>>, _acc) -> _acc;
-encode_handshake_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_db_verify(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"db:verify">>, _attrs, _els}) ->
-    {Key, __Els} = decode_db_verify_els(__TopXMLNS,
-                                       __IgnoreEls, _els, <<>>, []),
-    {From, To, Id, Type} =
-       decode_db_verify_attrs(__TopXMLNS, _attrs, undefined,
-                              undefined, undefined, undefined),
-    {db_verify, From, To, Id, Type, Key, __Els}.
-
-decode_db_verify_els(__TopXMLNS, __IgnoreEls, [], Key,
-                    __Els) ->
-    {decode_db_verify_cdata(__TopXMLNS, Key),
-     lists:reverse(__Els)};
-decode_db_verify_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Key, __Els) ->
-    decode_db_verify_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Key/binary, _data/binary>>, __Els);
-decode_db_verify_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, _, _, _} = _el | _els], Key, __Els) ->
-    if __IgnoreEls ->
-          decode_db_verify_els(__TopXMLNS, __IgnoreEls, _els, Key,
-                               [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_db_verify_els(__TopXMLNS, __IgnoreEls, _els, Key,
-                                     [decode(_el, __TopXMLNS, []) | __Els]);
-            false ->
-                decode_db_verify_els(__TopXMLNS, __IgnoreEls, _els, Key,
-                                     __Els)
-          end
-    end.
-
-decode_db_verify_attrs(__TopXMLNS,
-                      [{<<"from">>, _val} | _attrs], _From, To, Id, Type) ->
-    decode_db_verify_attrs(__TopXMLNS, _attrs, _val, To, Id,
-                          Type);
-decode_db_verify_attrs(__TopXMLNS,
-                      [{<<"to">>, _val} | _attrs], From, _To, Id, Type) ->
-    decode_db_verify_attrs(__TopXMLNS, _attrs, From, _val,
-                          Id, Type);
-decode_db_verify_attrs(__TopXMLNS,
-                      [{<<"id">>, _val} | _attrs], From, To, _Id, Type) ->
-    decode_db_verify_attrs(__TopXMLNS, _attrs, From, To,
-                          _val, Type);
-decode_db_verify_attrs(__TopXMLNS,
-                      [{<<"type">>, _val} | _attrs], From, To, Id, _Type) ->
-    decode_db_verify_attrs(__TopXMLNS, _attrs, From, To, Id,
-                          _val);
-decode_db_verify_attrs(__TopXMLNS, [_ | _attrs], From,
-                      To, Id, Type) ->
-    decode_db_verify_attrs(__TopXMLNS, _attrs, From, To, Id,
-                          Type);
-decode_db_verify_attrs(__TopXMLNS, [], From, To, Id,
-                      Type) ->
-    {decode_db_verify_attr_from(__TopXMLNS, From),
-     decode_db_verify_attr_to(__TopXMLNS, To),
-     decode_db_verify_attr_id(__TopXMLNS, Id),
-     decode_db_verify_attr_type(__TopXMLNS, Type)}.
-
-encode_db_verify({db_verify, From, To, Id, Type, Key,
-                 __Els},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:server">>,
-                                    [], __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els] ++
-            encode_db_verify_cdata(Key, []),
-    _attrs = encode_db_verify_attr_type(Type,
-                                       encode_db_verify_attr_id(Id,
-                                                                encode_db_verify_attr_to(To,
-                                                                                         encode_db_verify_attr_from(From,
-                                                                                                                    enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                    __TopXMLNS))))),
-    {xmlel, <<"db:verify">>, _attrs, _els}.
-
-decode_db_verify_attr_from(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"from">>, <<"db:verify">>,
-                  __TopXMLNS}});
-decode_db_verify_attr_from(__TopXMLNS, _val) ->
-    case catch nameprep(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"db:verify">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_db_verify_attr_from(_val, _acc) ->
-    [{<<"from">>, nameprep(_val)} | _acc].
-
-decode_db_verify_attr_to(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"to">>, <<"db:verify">>, __TopXMLNS}});
-decode_db_verify_attr_to(__TopXMLNS, _val) ->
-    case catch nameprep(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"db:verify">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_db_verify_attr_to(_val, _acc) ->
-    [{<<"to">>, nameprep(_val)} | _acc].
-
-decode_db_verify_attr_id(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"id">>, <<"db:verify">>, __TopXMLNS}});
-decode_db_verify_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_db_verify_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_db_verify_attr_type(__TopXMLNS, undefined) ->
-    undefined;
-decode_db_verify_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [valid, invalid, error]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"db:verify">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_db_verify_attr_type(undefined, _acc) -> _acc;
-encode_db_verify_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_db_verify_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_db_verify_cdata(__TopXMLNS, _val) -> _val.
-
-encode_db_verify_cdata(<<>>, _acc) -> _acc;
-encode_db_verify_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_db_result(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"db:result">>, _attrs, _els}) ->
-    {Key, __Els} = decode_db_result_els(__TopXMLNS,
-                                       __IgnoreEls, _els, <<>>, []),
-    {From, To, Type} = decode_db_result_attrs(__TopXMLNS,
-                                             _attrs, undefined, undefined,
-                                             undefined),
-    {db_result, From, To, Type, Key, __Els}.
-
-decode_db_result_els(__TopXMLNS, __IgnoreEls, [], Key,
-                    __Els) ->
-    {decode_db_result_cdata(__TopXMLNS, Key),
-     lists:reverse(__Els)};
-decode_db_result_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Key, __Els) ->
-    decode_db_result_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Key/binary, _data/binary>>, __Els);
-decode_db_result_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, _, _, _} = _el | _els], Key, __Els) ->
-    if __IgnoreEls ->
-          decode_db_result_els(__TopXMLNS, __IgnoreEls, _els, Key,
-                               [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_db_result_els(__TopXMLNS, __IgnoreEls, _els, Key,
-                                     [decode(_el, __TopXMLNS, []) | __Els]);
-            false ->
-                decode_db_result_els(__TopXMLNS, __IgnoreEls, _els, Key,
-                                     __Els)
-          end
-    end.
-
-decode_db_result_attrs(__TopXMLNS,
-                      [{<<"from">>, _val} | _attrs], _From, To, Type) ->
-    decode_db_result_attrs(__TopXMLNS, _attrs, _val, To,
-                          Type);
-decode_db_result_attrs(__TopXMLNS,
-                      [{<<"to">>, _val} | _attrs], From, _To, Type) ->
-    decode_db_result_attrs(__TopXMLNS, _attrs, From, _val,
-                          Type);
-decode_db_result_attrs(__TopXMLNS,
-                      [{<<"type">>, _val} | _attrs], From, To, _Type) ->
-    decode_db_result_attrs(__TopXMLNS, _attrs, From, To,
-                          _val);
-decode_db_result_attrs(__TopXMLNS, [_ | _attrs], From,
-                      To, Type) ->
-    decode_db_result_attrs(__TopXMLNS, _attrs, From, To,
-                          Type);
-decode_db_result_attrs(__TopXMLNS, [], From, To,
-                      Type) ->
-    {decode_db_result_attr_from(__TopXMLNS, From),
-     decode_db_result_attr_to(__TopXMLNS, To),
-     decode_db_result_attr_type(__TopXMLNS, Type)}.
-
-encode_db_result({db_result, From, To, Type, Key,
-                 __Els},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:server">>,
-                                    [], __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els] ++
-            encode_db_result_cdata(Key, []),
-    _attrs = encode_db_result_attr_type(Type,
-                                       encode_db_result_attr_to(To,
-                                                                encode_db_result_attr_from(From,
-                                                                                           enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                           __TopXMLNS)))),
-    {xmlel, <<"db:result">>, _attrs, _els}.
-
-decode_db_result_attr_from(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"from">>, <<"db:result">>,
-                  __TopXMLNS}});
-decode_db_result_attr_from(__TopXMLNS, _val) ->
-    case catch nameprep(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"db:result">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_db_result_attr_from(_val, _acc) ->
-    [{<<"from">>, nameprep(_val)} | _acc].
-
-decode_db_result_attr_to(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"to">>, <<"db:result">>, __TopXMLNS}});
-decode_db_result_attr_to(__TopXMLNS, _val) ->
-    case catch nameprep(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"db:result">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_db_result_attr_to(_val, _acc) ->
-    [{<<"to">>, nameprep(_val)} | _acc].
-
-decode_db_result_attr_type(__TopXMLNS, undefined) ->
-    undefined;
-decode_db_result_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [valid, invalid, error]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"db:result">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_db_result_attr_type(undefined, _acc) -> _acc;
-encode_db_result_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_db_result_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_db_result_cdata(__TopXMLNS, _val) -> _val.
-
-encode_db_result_cdata(<<>>, _acc) -> _acc;
-encode_db_result_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_adhoc_command(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"command">>, _attrs, _els}) ->
-    {Xdata, Notes, Actions} =
-       decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                                undefined, [], undefined),
-    {Node, Lang, Sid, Status, Action} =
-       decode_adhoc_command_attrs(__TopXMLNS, _attrs,
-                                  undefined, undefined, undefined, undefined,
-                                  undefined),
-    {adhoc_command, Node, Action, Sid, Status, Lang,
-     Actions, Notes, Xdata}.
-
-decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, [],
-                        Xdata, Notes, Actions) ->
-    {Xdata, lists:reverse(Notes), Actions};
-decode_adhoc_command_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlel, <<"actions">>, _attrs, _} = _el | _els],
-                        Xdata, Notes, Actions) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Xdata, Notes,
-                                  decode_adhoc_command_actions(__TopXMLNS,
-                                                               __IgnoreEls,
-                                                               _el));
-      <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Xdata, Notes,
-                                  decode_adhoc_command_actions(<<"http://jabber.org/protocol/commands">>,
-                                                               __IgnoreEls,
-                                                               _el));
-      _ ->
-         decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Xdata, Notes, Actions)
-    end;
-decode_adhoc_command_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata,
-                        Notes, Actions) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                                  decode_xdata(<<"jabber:x:data">>,
-                                               __IgnoreEls, _el),
-                                  Notes, Actions);
-      _ ->
-         decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Xdata, Notes, Actions)
-    end;
-decode_adhoc_command_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlel, <<"note">>, _attrs, _} = _el | _els], Xdata,
-                        Notes, Actions) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Xdata,
-                                  [decode_adhoc_command_notes(__TopXMLNS,
-                                                              __IgnoreEls, _el)
-                                   | Notes],
-                                  Actions);
-      <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Xdata,
-                                  [decode_adhoc_command_notes(<<"http://jabber.org/protocol/commands">>,
-                                                              __IgnoreEls, _el)
-                                   | Notes],
-                                  Actions);
-      _ ->
-         decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Xdata, Notes, Actions)
-    end;
-decode_adhoc_command_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Xdata, Notes, Actions) ->
-    decode_adhoc_command_els(__TopXMLNS, __IgnoreEls, _els,
-                            Xdata, Notes, Actions).
-
-decode_adhoc_command_attrs(__TopXMLNS,
-                          [{<<"node">>, _val} | _attrs], _Node, Lang, Sid,
-                          Status, Action) ->
-    decode_adhoc_command_attrs(__TopXMLNS, _attrs, _val,
-                              Lang, Sid, Status, Action);
-decode_adhoc_command_attrs(__TopXMLNS,
-                          [{<<"xml:lang">>, _val} | _attrs], Node, _Lang, Sid,
-                          Status, Action) ->
-    decode_adhoc_command_attrs(__TopXMLNS, _attrs, Node,
-                              _val, Sid, Status, Action);
-decode_adhoc_command_attrs(__TopXMLNS,
-                          [{<<"sessionid">>, _val} | _attrs], Node, Lang, _Sid,
-                          Status, Action) ->
-    decode_adhoc_command_attrs(__TopXMLNS, _attrs, Node,
-                              Lang, _val, Status, Action);
-decode_adhoc_command_attrs(__TopXMLNS,
-                          [{<<"status">>, _val} | _attrs], Node, Lang, Sid,
-                          _Status, Action) ->
-    decode_adhoc_command_attrs(__TopXMLNS, _attrs, Node,
-                              Lang, Sid, _val, Action);
-decode_adhoc_command_attrs(__TopXMLNS,
-                          [{<<"action">>, _val} | _attrs], Node, Lang, Sid,
-                          Status, _Action) ->
-    decode_adhoc_command_attrs(__TopXMLNS, _attrs, Node,
-                              Lang, Sid, Status, _val);
-decode_adhoc_command_attrs(__TopXMLNS, [_ | _attrs],
-                          Node, Lang, Sid, Status, Action) ->
-    decode_adhoc_command_attrs(__TopXMLNS, _attrs, Node,
-                              Lang, Sid, Status, Action);
-decode_adhoc_command_attrs(__TopXMLNS, [], Node, Lang,
-                          Sid, Status, Action) ->
-    {decode_adhoc_command_attr_node(__TopXMLNS, Node),
-     'decode_adhoc_command_attr_xml:lang'(__TopXMLNS, Lang),
-     decode_adhoc_command_attr_sessionid(__TopXMLNS, Sid),
-     decode_adhoc_command_attr_status(__TopXMLNS, Status),
-     decode_adhoc_command_attr_action(__TopXMLNS, Action)}.
-
-encode_adhoc_command({adhoc_command, Node, Action, Sid,
-                     Status, Lang, Actions, Notes, Xdata},
-                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/commands">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_adhoc_command_$xdata'(Xdata,
-                                                   __NewTopXMLNS,
-                                                   'encode_adhoc_command_$notes'(Notes,
-                                                                                 __NewTopXMLNS,
-                                                                                 'encode_adhoc_command_$actions'(Actions,
-                                                                                                                 __NewTopXMLNS,
-                                                                                                                 [])))),
-    _attrs = encode_adhoc_command_attr_action(Action,
-                                             encode_adhoc_command_attr_status(Status,
-                                                                              encode_adhoc_command_attr_sessionid(Sid,
-                                                                                                                  'encode_adhoc_command_attr_xml:lang'(Lang,
-                                                                                                                                                       encode_adhoc_command_attr_node(Node,
-                                                                                                                                                                                      enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                                                                      __TopXMLNS)))))),
-    {xmlel, <<"command">>, _attrs, _els}.
-
-'encode_adhoc_command_$xdata'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_adhoc_command_$xdata'(Xdata, __TopXMLNS,
-                             _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-'encode_adhoc_command_$notes'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_adhoc_command_$notes'([Notes | _els],
-                             __TopXMLNS, _acc) ->
-    'encode_adhoc_command_$notes'(_els, __TopXMLNS,
-                                 [encode_adhoc_command_notes(Notes, __TopXMLNS)
-                                  | _acc]).
-
-'encode_adhoc_command_$actions'(undefined, __TopXMLNS,
-                               _acc) ->
-    _acc;
-'encode_adhoc_command_$actions'(Actions, __TopXMLNS,
-                               _acc) ->
-    [encode_adhoc_command_actions(Actions, __TopXMLNS)
-     | _acc].
-
-decode_adhoc_command_attr_node(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"command">>, __TopXMLNS}});
-decode_adhoc_command_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_adhoc_command_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-'decode_adhoc_command_attr_xml:lang'(__TopXMLNS,
-                                    undefined) ->
-    <<>>;
-'decode_adhoc_command_attr_xml:lang'(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-'encode_adhoc_command_attr_xml:lang'(<<>>, _acc) ->
-    _acc;
-'encode_adhoc_command_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_adhoc_command_attr_sessionid(__TopXMLNS,
-                                   undefined) ->
-    <<>>;
-decode_adhoc_command_attr_sessionid(__TopXMLNS, _val) ->
-    _val.
-
-encode_adhoc_command_attr_sessionid(<<>>, _acc) -> _acc;
-encode_adhoc_command_attr_sessionid(_val, _acc) ->
-    [{<<"sessionid">>, _val} | _acc].
-
-decode_adhoc_command_attr_status(__TopXMLNS,
-                                undefined) ->
-    undefined;
-decode_adhoc_command_attr_status(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [canceled, completed, executing])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"status">>, <<"command">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_adhoc_command_attr_status(undefined, _acc) ->
-    _acc;
-encode_adhoc_command_attr_status(_val, _acc) ->
-    [{<<"status">>, enc_enum(_val)} | _acc].
-
-decode_adhoc_command_attr_action(__TopXMLNS,
-                                undefined) ->
-    execute;
-decode_adhoc_command_attr_action(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [cancel, complete, execute, next, prev])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"action">>, <<"command">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_adhoc_command_attr_action(execute, _acc) -> _acc;
-encode_adhoc_command_attr_action(_val, _acc) ->
-    [{<<"action">>, enc_enum(_val)} | _acc].
-
-decode_adhoc_command_notes(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"note">>, _attrs, _els}) ->
-    Data = decode_adhoc_command_notes_els(__TopXMLNS,
-                                         __IgnoreEls, _els, <<>>),
-    Type = decode_adhoc_command_notes_attrs(__TopXMLNS,
-                                           _attrs, undefined),
-    {adhoc_note, Type, Data}.
-
-decode_adhoc_command_notes_els(__TopXMLNS, __IgnoreEls,
-                              [], Data) ->
-    decode_adhoc_command_notes_cdata(__TopXMLNS, Data);
-decode_adhoc_command_notes_els(__TopXMLNS, __IgnoreEls,
-                              [{xmlcdata, _data} | _els], Data) ->
-    decode_adhoc_command_notes_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<Data/binary, _data/binary>>);
-decode_adhoc_command_notes_els(__TopXMLNS, __IgnoreEls,
-                              [_ | _els], Data) ->
-    decode_adhoc_command_notes_els(__TopXMLNS, __IgnoreEls,
-                                  _els, Data).
-
-decode_adhoc_command_notes_attrs(__TopXMLNS,
-                                [{<<"type">>, _val} | _attrs], _Type) ->
-    decode_adhoc_command_notes_attrs(__TopXMLNS, _attrs,
-                                    _val);
-decode_adhoc_command_notes_attrs(__TopXMLNS,
-                                [_ | _attrs], Type) ->
-    decode_adhoc_command_notes_attrs(__TopXMLNS, _attrs,
-                                    Type);
-decode_adhoc_command_notes_attrs(__TopXMLNS, [],
-                                Type) ->
-    decode_adhoc_command_notes_attr_type(__TopXMLNS, Type).
-
-encode_adhoc_command_notes({adhoc_note, Type, Data},
-                          __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/commands">>,
-                        [], __TopXMLNS),
-    _els = encode_adhoc_command_notes_cdata(Data, []),
-    _attrs = encode_adhoc_command_notes_attr_type(Type,
-                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                 __TopXMLNS)),
-    {xmlel, <<"note">>, _attrs, _els}.
-
-decode_adhoc_command_notes_attr_type(__TopXMLNS,
-                                    undefined) ->
-    info;
-decode_adhoc_command_notes_attr_type(__TopXMLNS,
-                                    _val) ->
-    case catch dec_enum(_val, [info, warn, error]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"note">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_adhoc_command_notes_attr_type(info, _acc) ->
-    _acc;
-encode_adhoc_command_notes_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_adhoc_command_notes_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_adhoc_command_notes_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_adhoc_command_notes_cdata(<<>>, _acc) -> _acc;
-encode_adhoc_command_notes_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_adhoc_command_actions(__TopXMLNS, __IgnoreEls,
-                            {xmlel, <<"actions">>, _attrs, _els}) ->
-    {Next, Complete, Prev} =
-       decode_adhoc_command_actions_els(__TopXMLNS,
-                                        __IgnoreEls, _els, false, false,
-                                        false),
-    Execute = decode_adhoc_command_actions_attrs(__TopXMLNS,
-                                                _attrs, undefined),
-    {adhoc_actions, Execute, Prev, Next, Complete}.
-
-decode_adhoc_command_actions_els(__TopXMLNS,
-                                __IgnoreEls, [], Next, Complete, Prev) ->
-    {Next, Complete, Prev};
-decode_adhoc_command_actions_els(__TopXMLNS,
-                                __IgnoreEls,
-                                [{xmlel, <<"prev">>, _attrs, _} = _el | _els],
-                                Next, Complete, Prev) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_actions_els(__TopXMLNS,
-                                          __IgnoreEls, _els, Next, Complete,
-                                          decode_adhoc_command_prev(__TopXMLNS,
-                                                                    __IgnoreEls,
-                                                                    _el));
-      <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_actions_els(__TopXMLNS,
-                                          __IgnoreEls, _els, Next, Complete,
-                                          decode_adhoc_command_prev(<<"http://jabber.org/protocol/commands">>,
-                                                                    __IgnoreEls,
-                                                                    _el));
-      _ ->
-         decode_adhoc_command_actions_els(__TopXMLNS,
-                                          __IgnoreEls, _els, Next, Complete,
-                                          Prev)
-    end;
-decode_adhoc_command_actions_els(__TopXMLNS,
-                                __IgnoreEls,
-                                [{xmlel, <<"next">>, _attrs, _} = _el | _els],
-                                Next, Complete, Prev) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_actions_els(__TopXMLNS,
-                                          __IgnoreEls, _els,
-                                          decode_adhoc_command_next(__TopXMLNS,
-                                                                    __IgnoreEls,
-                                                                    _el),
-                                          Complete, Prev);
-      <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_actions_els(__TopXMLNS,
-                                          __IgnoreEls, _els,
-                                          decode_adhoc_command_next(<<"http://jabber.org/protocol/commands">>,
-                                                                    __IgnoreEls,
-                                                                    _el),
-                                          Complete, Prev);
-      _ ->
-         decode_adhoc_command_actions_els(__TopXMLNS,
-                                          __IgnoreEls, _els, Next, Complete,
-                                          Prev)
-    end;
-decode_adhoc_command_actions_els(__TopXMLNS,
-                                __IgnoreEls,
-                                [{xmlel, <<"complete">>, _attrs, _} = _el
-                                 | _els],
-                                Next, Complete, Prev) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_actions_els(__TopXMLNS,
-                                          __IgnoreEls, _els, Next,
-                                          decode_adhoc_command_complete(__TopXMLNS,
-                                                                        __IgnoreEls,
-                                                                        _el),
-                                          Prev);
-      <<"http://jabber.org/protocol/commands">> ->
-         decode_adhoc_command_actions_els(__TopXMLNS,
-                                          __IgnoreEls, _els, Next,
-                                          decode_adhoc_command_complete(<<"http://jabber.org/protocol/commands">>,
-                                                                        __IgnoreEls,
-                                                                        _el),
-                                          Prev);
-      _ ->
-         decode_adhoc_command_actions_els(__TopXMLNS,
-                                          __IgnoreEls, _els, Next, Complete,
-                                          Prev)
-    end;
-decode_adhoc_command_actions_els(__TopXMLNS,
-                                __IgnoreEls, [_ | _els], Next, Complete,
-                                Prev) ->
-    decode_adhoc_command_actions_els(__TopXMLNS,
-                                    __IgnoreEls, _els, Next, Complete, Prev).
-
-decode_adhoc_command_actions_attrs(__TopXMLNS,
-                                  [{<<"execute">>, _val} | _attrs],
-                                  _Execute) ->
-    decode_adhoc_command_actions_attrs(__TopXMLNS, _attrs,
-                                      _val);
-decode_adhoc_command_actions_attrs(__TopXMLNS,
-                                  [_ | _attrs], Execute) ->
-    decode_adhoc_command_actions_attrs(__TopXMLNS, _attrs,
-                                      Execute);
-decode_adhoc_command_actions_attrs(__TopXMLNS, [],
-                                  Execute) ->
-    decode_adhoc_command_actions_attr_execute(__TopXMLNS,
-                                             Execute).
-
-encode_adhoc_command_actions({adhoc_actions, Execute,
-                             Prev, Next, Complete},
-                            __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/commands">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_adhoc_command_actions_$next'(Next,
-                                                          __NewTopXMLNS,
-                                                          'encode_adhoc_command_actions_$complete'(Complete,
-                                                                                                   __NewTopXMLNS,
-                                                                                                   'encode_adhoc_command_actions_$prev'(Prev,
-                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                        [])))),
-    _attrs =
-       encode_adhoc_command_actions_attr_execute(Execute,
-                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                 __TopXMLNS)),
-    {xmlel, <<"actions">>, _attrs, _els}.
-
-'encode_adhoc_command_actions_$next'(false, __TopXMLNS,
-                                    _acc) ->
-    _acc;
-'encode_adhoc_command_actions_$next'(Next, __TopXMLNS,
-                                    _acc) ->
-    [encode_adhoc_command_next(Next, __TopXMLNS) | _acc].
-
-'encode_adhoc_command_actions_$complete'(false,
-                                        __TopXMLNS, _acc) ->
-    _acc;
-'encode_adhoc_command_actions_$complete'(Complete,
-                                        __TopXMLNS, _acc) ->
-    [encode_adhoc_command_complete(Complete, __TopXMLNS)
-     | _acc].
-
-'encode_adhoc_command_actions_$prev'(false, __TopXMLNS,
-                                    _acc) ->
-    _acc;
-'encode_adhoc_command_actions_$prev'(Prev, __TopXMLNS,
-                                    _acc) ->
-    [encode_adhoc_command_prev(Prev, __TopXMLNS) | _acc].
-
-decode_adhoc_command_actions_attr_execute(__TopXMLNS,
-                                         undefined) ->
-    undefined;
-decode_adhoc_command_actions_attr_execute(__TopXMLNS,
-                                         _val) ->
-    case catch dec_enum(_val, [complete, next, prev]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"execute">>, <<"actions">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_adhoc_command_actions_attr_execute(undefined,
-                                         _acc) ->
-    _acc;
-encode_adhoc_command_actions_attr_execute(_val, _acc) ->
-    [{<<"execute">>, enc_enum(_val)} | _acc].
-
-decode_adhoc_command_complete(__TopXMLNS, __IgnoreEls,
-                             {xmlel, <<"complete">>, _attrs, _els}) ->
-    true.
-
-encode_adhoc_command_complete(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/commands">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"complete">>, _attrs, _els}.
-
-decode_adhoc_command_next(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"next">>, _attrs, _els}) ->
-    true.
-
-encode_adhoc_command_next(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/commands">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"next">>, _attrs, _els}.
-
-decode_adhoc_command_prev(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"prev">>, _attrs, _els}) ->
-    true.
-
-encode_adhoc_command_prev(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/commands">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"prev">>, _attrs, _els}.
-
-decode_client_id(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"client-id">>, _attrs, _els}) ->
-    Id = decode_client_id_attrs(__TopXMLNS, _attrs,
-                               undefined),
-    {client_id, Id}.
-
-decode_client_id_attrs(__TopXMLNS,
-                      [{<<"id">>, _val} | _attrs], _Id) ->
-    decode_client_id_attrs(__TopXMLNS, _attrs, _val);
-decode_client_id_attrs(__TopXMLNS, [_ | _attrs], Id) ->
-    decode_client_id_attrs(__TopXMLNS, _attrs, Id);
-decode_client_id_attrs(__TopXMLNS, [], Id) ->
-    decode_client_id_attr_id(__TopXMLNS, Id).
-
-encode_client_id({client_id, Id}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:sid:0">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_client_id_attr_id(Id,
-                                     enc_xmlns_attrs(__NewTopXMLNS,
-                                                     __TopXMLNS)),
-    {xmlel, <<"client-id">>, _attrs, _els}.
-
-decode_client_id_attr_id(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"id">>, <<"client-id">>, __TopXMLNS}});
-decode_client_id_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_client_id_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_stanza_id(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"stanza-id">>, _attrs, _els}) ->
-    {Id, By} = decode_stanza_id_attrs(__TopXMLNS, _attrs,
-                                     undefined, undefined),
-    {stanza_id, By, Id}.
-
-decode_stanza_id_attrs(__TopXMLNS,
-                      [{<<"id">>, _val} | _attrs], _Id, By) ->
-    decode_stanza_id_attrs(__TopXMLNS, _attrs, _val, By);
-decode_stanza_id_attrs(__TopXMLNS,
-                      [{<<"by">>, _val} | _attrs], Id, _By) ->
-    decode_stanza_id_attrs(__TopXMLNS, _attrs, Id, _val);
-decode_stanza_id_attrs(__TopXMLNS, [_ | _attrs], Id,
-                      By) ->
-    decode_stanza_id_attrs(__TopXMLNS, _attrs, Id, By);
-decode_stanza_id_attrs(__TopXMLNS, [], Id, By) ->
-    {decode_stanza_id_attr_id(__TopXMLNS, Id),
-     decode_stanza_id_attr_by(__TopXMLNS, By)}.
-
-encode_stanza_id({stanza_id, By, Id}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:sid:0">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_stanza_id_attr_by(By,
-                                     encode_stanza_id_attr_id(Id,
-                                                              enc_xmlns_attrs(__NewTopXMLNS,
-                                                                              __TopXMLNS))),
-    {xmlel, <<"stanza-id">>, _attrs, _els}.
-
-decode_stanza_id_attr_id(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"id">>, <<"stanza-id">>, __TopXMLNS}});
-decode_stanza_id_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_stanza_id_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_stanza_id_attr_by(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"by">>, <<"stanza-id">>, __TopXMLNS}});
-decode_stanza_id_attr_by(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"by">>, <<"stanza-id">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_stanza_id_attr_by(_val, _acc) ->
-    [{<<"by">>, enc_jid(_val)} | _acc].
-
-decode_addresses(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"addresses">>, _attrs, _els}) ->
-    List = decode_addresses_els(__TopXMLNS, __IgnoreEls,
-                               _els, []),
-    {addresses, List}.
-
-decode_addresses_els(__TopXMLNS, __IgnoreEls, [],
-                    List) ->
-    lists:reverse(List);
-decode_addresses_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"address">>, _attrs, _} = _el | _els],
-                    List) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/address">> ->
-         decode_addresses_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_address(__TopXMLNS, __IgnoreEls, _el)
-                               | List]);
-      <<"http://jabber.org/protocol/address">> ->
-         decode_addresses_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_address(<<"http://jabber.org/protocol/address">>,
-                                              __IgnoreEls, _el)
-                               | List]);
-      _ ->
-         decode_addresses_els(__TopXMLNS, __IgnoreEls, _els,
-                              List)
-    end;
-decode_addresses_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], List) ->
-    decode_addresses_els(__TopXMLNS, __IgnoreEls, _els,
-                        List).
-
-encode_addresses({addresses, List}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/address">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_addresses_$list'(List,
-                                                 __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"addresses">>, _attrs, _els}.
-
-'encode_addresses_$list'([], __TopXMLNS, _acc) -> _acc;
-'encode_addresses_$list'([List | _els], __TopXMLNS,
-                        _acc) ->
-    'encode_addresses_$list'(_els, __TopXMLNS,
-                            [encode_address(List, __TopXMLNS) | _acc]).
-
-decode_address(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"address">>, _attrs, _els}) ->
-    {Type, Jid, Desc, Node, Delivered} =
-       decode_address_attrs(__TopXMLNS, _attrs, undefined,
-                            undefined, undefined, undefined, undefined),
-    {address, Type, Jid, Desc, Node, Delivered}.
-
-decode_address_attrs(__TopXMLNS,
-                    [{<<"type">>, _val} | _attrs], _Type, Jid, Desc, Node,
-                    Delivered) ->
-    decode_address_attrs(__TopXMLNS, _attrs, _val, Jid,
-                        Desc, Node, Delivered);
-decode_address_attrs(__TopXMLNS,
-                    [{<<"jid">>, _val} | _attrs], Type, _Jid, Desc, Node,
-                    Delivered) ->
-    decode_address_attrs(__TopXMLNS, _attrs, Type, _val,
-                        Desc, Node, Delivered);
-decode_address_attrs(__TopXMLNS,
-                    [{<<"desc">>, _val} | _attrs], Type, Jid, _Desc, Node,
-                    Delivered) ->
-    decode_address_attrs(__TopXMLNS, _attrs, Type, Jid,
-                        _val, Node, Delivered);
-decode_address_attrs(__TopXMLNS,
-                    [{<<"node">>, _val} | _attrs], Type, Jid, Desc, _Node,
-                    Delivered) ->
-    decode_address_attrs(__TopXMLNS, _attrs, Type, Jid,
-                        Desc, _val, Delivered);
-decode_address_attrs(__TopXMLNS,
-                    [{<<"delivered">>, _val} | _attrs], Type, Jid, Desc,
-                    Node, _Delivered) ->
-    decode_address_attrs(__TopXMLNS, _attrs, Type, Jid,
-                        Desc, Node, _val);
-decode_address_attrs(__TopXMLNS, [_ | _attrs], Type,
-                    Jid, Desc, Node, Delivered) ->
-    decode_address_attrs(__TopXMLNS, _attrs, Type, Jid,
-                        Desc, Node, Delivered);
-decode_address_attrs(__TopXMLNS, [], Type, Jid, Desc,
-                    Node, Delivered) ->
-    {decode_address_attr_type(__TopXMLNS, Type),
-     decode_address_attr_jid(__TopXMLNS, Jid),
-     decode_address_attr_desc(__TopXMLNS, Desc),
-     decode_address_attr_node(__TopXMLNS, Node),
-     decode_address_attr_delivered(__TopXMLNS, Delivered)}.
-
-encode_address({address, Type, Jid, Desc, Node,
-               Delivered},
-              __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/address">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_address_attr_delivered(Delivered,
-                                          encode_address_attr_node(Node,
-                                                                   encode_address_attr_desc(Desc,
-                                                                                            encode_address_attr_jid(Jid,
-                                                                                                                    encode_address_attr_type(Type,
-                                                                                                                                             enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                             __TopXMLNS)))))),
-    {xmlel, <<"address">>, _attrs, _els}.
-
-decode_address_attr_type(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"address">>, __TopXMLNS}});
-decode_address_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [bcc, cc, noreply, ofrom, replyroom, replyto, to])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"address">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_address_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_address_attr_jid(__TopXMLNS, undefined) ->
-    undefined;
-decode_address_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"address">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_address_attr_jid(undefined, _acc) -> _acc;
-encode_address_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_address_attr_desc(__TopXMLNS, undefined) -> <<>>;
-decode_address_attr_desc(__TopXMLNS, _val) -> _val.
-
-encode_address_attr_desc(<<>>, _acc) -> _acc;
-encode_address_attr_desc(_val, _acc) ->
-    [{<<"desc">>, _val} | _acc].
-
-decode_address_attr_node(__TopXMLNS, undefined) -> <<>>;
-decode_address_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_address_attr_node(<<>>, _acc) -> _acc;
-encode_address_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_address_attr_delivered(__TopXMLNS, undefined) ->
-    undefined;
-decode_address_attr_delivered(__TopXMLNS, _val) ->
-    case catch dec_bool(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"delivered">>, <<"address">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_address_attr_delivered(undefined, _acc) -> _acc;
-encode_address_attr_delivered(_val, _acc) ->
-    [{<<"delivered">>, enc_bool(_val)} | _acc].
-
-decode_nick(__TopXMLNS, __IgnoreEls,
-           {xmlel, <<"nick">>, _attrs, _els}) ->
-    Name = decode_nick_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<>>),
-    {nick, Name}.
-
-decode_nick_els(__TopXMLNS, __IgnoreEls, [], Name) ->
-    decode_nick_cdata(__TopXMLNS, Name);
-decode_nick_els(__TopXMLNS, __IgnoreEls,
-               [{xmlcdata, _data} | _els], Name) ->
-    decode_nick_els(__TopXMLNS, __IgnoreEls, _els,
-                   <<Name/binary, _data/binary>>);
-decode_nick_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-               Name) ->
-    decode_nick_els(__TopXMLNS, __IgnoreEls, _els, Name).
-
-encode_nick({nick, Name}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/nick">>,
-                        [], __TopXMLNS),
-    _els = encode_nick_cdata(Name, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"nick">>, _attrs, _els}.
-
-decode_nick_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"nick">>, __TopXMLNS}});
-decode_nick_cdata(__TopXMLNS, _val) -> _val.
-
-encode_nick_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_expire(__TopXMLNS, __IgnoreEls,
-             {xmlel, <<"x">>, _attrs, _els}) ->
-    {Seconds, Stored} = decode_expire_attrs(__TopXMLNS,
-                                           _attrs, undefined, undefined),
-    {expire, Seconds, Stored}.
-
-decode_expire_attrs(__TopXMLNS,
-                   [{<<"seconds">>, _val} | _attrs], _Seconds, Stored) ->
-    decode_expire_attrs(__TopXMLNS, _attrs, _val, Stored);
-decode_expire_attrs(__TopXMLNS,
-                   [{<<"stored">>, _val} | _attrs], Seconds, _Stored) ->
-    decode_expire_attrs(__TopXMLNS, _attrs, Seconds, _val);
-decode_expire_attrs(__TopXMLNS, [_ | _attrs], Seconds,
-                   Stored) ->
-    decode_expire_attrs(__TopXMLNS, _attrs, Seconds,
-                       Stored);
-decode_expire_attrs(__TopXMLNS, [], Seconds, Stored) ->
-    {decode_expire_attr_seconds(__TopXMLNS, Seconds),
-     decode_expire_attr_stored(__TopXMLNS, Stored)}.
-
-encode_expire({expire, Seconds, Stored}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:expire">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_expire_attr_stored(Stored,
-                                      encode_expire_attr_seconds(Seconds,
-                                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                 __TopXMLNS))),
-    {xmlel, <<"x">>, _attrs, _els}.
-
-decode_expire_attr_seconds(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"seconds">>, <<"x">>, __TopXMLNS}});
-decode_expire_attr_seconds(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"seconds">>, <<"x">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_expire_attr_seconds(_val, _acc) ->
-    [{<<"seconds">>, enc_int(_val)} | _acc].
-
-decode_expire_attr_stored(__TopXMLNS, undefined) ->
-    undefined;
-decode_expire_attr_stored(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"stored">>, <<"x">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_expire_attr_stored(undefined, _acc) -> _acc;
-encode_expire_attr_stored(_val, _acc) ->
-    [{<<"stored">>, enc_int(_val)} | _acc].
-
-decode_xevent(__TopXMLNS, __IgnoreEls,
-             {xmlel, <<"x">>, _attrs, _els}) ->
-    {Id, Displayed, Delivered, Offline, Composing} =
-       decode_xevent_els(__TopXMLNS, __IgnoreEls, _els,
-                         undefined, false, false, false, false),
-    {xevent, Offline, Delivered, Displayed, Composing, Id}.
-
-decode_xevent_els(__TopXMLNS, __IgnoreEls, [], Id,
-                 Displayed, Delivered, Offline, Composing) ->
-    {Id, Displayed, Delivered, Offline, Composing};
-decode_xevent_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"offline">>, _attrs, _} = _el | _els], Id,
-                 Displayed, Delivered, Offline, Composing) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed, Delivered,
-                           decode_xevent_offline(__TopXMLNS, __IgnoreEls, _el),
-                           Composing);
-      <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed, Delivered,
-                           decode_xevent_offline(<<"jabber:x:event">>,
-                                                 __IgnoreEls, _el),
-                           Composing);
-      _ ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed, Delivered, Offline, Composing)
-    end;
-decode_xevent_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"delivered">>, _attrs, _} = _el | _els], Id,
-                 Displayed, Delivered, Offline, Composing) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed,
-                           decode_xevent_delivered(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                           Offline, Composing);
-      <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed,
-                           decode_xevent_delivered(<<"jabber:x:event">>,
-                                                   __IgnoreEls, _el),
-                           Offline, Composing);
-      _ ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed, Delivered, Offline, Composing)
-    end;
-decode_xevent_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"displayed">>, _attrs, _} = _el | _els], Id,
-                 Displayed, Delivered, Offline, Composing) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           decode_xevent_displayed(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                           Delivered, Offline, Composing);
-      <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           decode_xevent_displayed(<<"jabber:x:event">>,
-                                                   __IgnoreEls, _el),
-                           Delivered, Offline, Composing);
-      _ ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed, Delivered, Offline, Composing)
-    end;
-decode_xevent_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"composing">>, _attrs, _} = _el | _els], Id,
-                 Displayed, Delivered, Offline, Composing) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed, Delivered, Offline,
-                           decode_xevent_composing(__TopXMLNS, __IgnoreEls,
-                                                   _el));
-      <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed, Delivered, Offline,
-                           decode_xevent_composing(<<"jabber:x:event">>,
-                                                   __IgnoreEls, _el));
-      _ ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed, Delivered, Offline, Composing)
-    end;
-decode_xevent_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"id">>, _attrs, _} = _el | _els], Id,
-                 Displayed, Delivered, Offline, Composing) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els,
-                           decode_xevent_id(__TopXMLNS, __IgnoreEls, _el),
-                           Displayed, Delivered, Offline, Composing);
-      <<"jabber:x:event">> ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els,
-                           decode_xevent_id(<<"jabber:x:event">>, __IgnoreEls,
-                                            _el),
-                           Displayed, Delivered, Offline, Composing);
-      _ ->
-         decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                           Displayed, Delivered, Offline, Composing)
-    end;
-decode_xevent_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                 Id, Displayed, Delivered, Offline, Composing) ->
-    decode_xevent_els(__TopXMLNS, __IgnoreEls, _els, Id,
-                     Displayed, Delivered, Offline, Composing).
-
-encode_xevent({xevent, Offline, Delivered, Displayed,
-              Composing, Id},
-             __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:event">>,
-                                    [], __TopXMLNS),
-    _els = lists:reverse('encode_xevent_$id'(Id,
-                                            __NewTopXMLNS,
-                                            'encode_xevent_$displayed'(Displayed,
-                                                                       __NewTopXMLNS,
-                                                                       'encode_xevent_$delivered'(Delivered,
-                                                                                                  __NewTopXMLNS,
-                                                                                                  'encode_xevent_$offline'(Offline,
-                                                                                                                           __NewTopXMLNS,
-                                                                                                                           'encode_xevent_$composing'(Composing,
-                                                                                                                                                      __NewTopXMLNS,
-                                                                                                                                                      [])))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"x">>, _attrs, _els}.
-
-'encode_xevent_$id'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_xevent_$id'(Id, __TopXMLNS, _acc) ->
-    [encode_xevent_id(Id, __TopXMLNS) | _acc].
-
-'encode_xevent_$displayed'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_xevent_$displayed'(Displayed, __TopXMLNS,
-                          _acc) ->
-    [encode_xevent_displayed(Displayed, __TopXMLNS) | _acc].
-
-'encode_xevent_$delivered'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_xevent_$delivered'(Delivered, __TopXMLNS,
-                          _acc) ->
-    [encode_xevent_delivered(Delivered, __TopXMLNS) | _acc].
-
-'encode_xevent_$offline'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_xevent_$offline'(Offline, __TopXMLNS, _acc) ->
-    [encode_xevent_offline(Offline, __TopXMLNS) | _acc].
-
-'encode_xevent_$composing'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_xevent_$composing'(Composing, __TopXMLNS,
-                          _acc) ->
-    [encode_xevent_composing(Composing, __TopXMLNS) | _acc].
-
-decode_xevent_id(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"id">>, _attrs, _els}) ->
-    Cdata = decode_xevent_id_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_xevent_id_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_xevent_id_cdata(__TopXMLNS, Cdata);
-decode_xevent_id_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_xevent_id_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_xevent_id_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_xevent_id_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_xevent_id(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:event">>,
-                                    [], __TopXMLNS),
-    _els = encode_xevent_id_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"id">>, _attrs, _els}.
-
-decode_xevent_id_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_xevent_id_cdata(__TopXMLNS, _val) -> _val.
-
-encode_xevent_id_cdata(<<>>, _acc) -> _acc;
-encode_xevent_id_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_xevent_composing(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"composing">>, _attrs, _els}) ->
-    true.
-
-encode_xevent_composing(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:event">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"composing">>, _attrs, _els}.
-
-decode_xevent_displayed(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"displayed">>, _attrs, _els}) ->
-    true.
-
-encode_xevent_displayed(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:event">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"displayed">>, _attrs, _els}.
-
-decode_xevent_delivered(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"delivered">>, _attrs, _els}) ->
-    true.
-
-encode_xevent_delivered(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:event">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"delivered">>, _attrs, _els}.
-
-decode_xevent_offline(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"offline">>, _attrs, _els}) ->
-    true.
-
-encode_xevent_offline(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:event">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"offline">>, _attrs, _els}.
-
-decode_search(__TopXMLNS, __IgnoreEls,
-             {xmlel, <<"query">>, _attrs, _els}) ->
-    {Xdata, Items, Instructions, Last, First, Nick, Email} =
-       decode_search_els(__TopXMLNS, __IgnoreEls, _els,
-                         undefined, [], undefined, undefined, undefined,
-                         undefined, undefined),
-    {search, Instructions, First, Last, Nick, Email, Items,
-     Xdata}.
-
-decode_search_els(__TopXMLNS, __IgnoreEls, [], Xdata,
-                 Items, Instructions, Last, First, Nick, Email) ->
-    {Xdata, lists:reverse(Items), Instructions, Last, First,
-     Nick, Email};
-decode_search_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"instructions">>, _attrs, _} = _el | _els],
-                 Xdata, Items, Instructions, Last, First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items,
-                           decode_search_instructions(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                           Last, First, Nick, Email);
-      <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items,
-                           decode_search_instructions(<<"jabber:iq:search">>,
-                                                      __IgnoreEls, _el),
-                           Last, First, Nick, Email);
-      _ ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First, Nick, Email)
-    end;
-decode_search_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"first">>, _attrs, _} = _el | _els], Xdata,
-                 Items, Instructions, Last, First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last,
-                           decode_search_first(__TopXMLNS, __IgnoreEls, _el),
-                           Nick, Email);
-      <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last,
-                           decode_search_first(<<"jabber:iq:search">>,
-                                               __IgnoreEls, _el),
-                           Nick, Email);
-      _ ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First, Nick, Email)
-    end;
-decode_search_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"last">>, _attrs, _} = _el | _els], Xdata,
-                 Items, Instructions, Last, First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions,
-                           decode_search_last(__TopXMLNS, __IgnoreEls, _el),
-                           First, Nick, Email);
-      <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions,
-                           decode_search_last(<<"jabber:iq:search">>,
-                                              __IgnoreEls, _el),
-                           First, Nick, Email);
-      _ ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First, Nick, Email)
-    end;
-decode_search_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"nick">>, _attrs, _} = _el | _els], Xdata,
-                 Items, Instructions, Last, First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First,
-                           decode_search_nick(__TopXMLNS, __IgnoreEls, _el),
-                           Email);
-      <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First,
-                           decode_search_nick(<<"jabber:iq:search">>,
-                                              __IgnoreEls, _el),
-                           Email);
-      _ ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First, Nick, Email)
-    end;
-decode_search_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"email">>, _attrs, _} = _el | _els], Xdata,
-                 Items, Instructions, Last, First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First, Nick,
-                           decode_search_email(__TopXMLNS, __IgnoreEls, _el));
-      <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First, Nick,
-                           decode_search_email(<<"jabber:iq:search">>,
-                                               __IgnoreEls, _el));
-      _ ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First, Nick, Email)
-    end;
-decode_search_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"item">>, _attrs, _} = _el | _els], Xdata,
-                 Items, Instructions, Last, First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           [decode_search_item(__TopXMLNS, __IgnoreEls, _el)
-                            | Items],
-                           Instructions, Last, First, Nick, Email);
-      <<"jabber:iq:search">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           [decode_search_item(<<"jabber:iq:search">>,
-                                               __IgnoreEls, _el)
-                            | Items],
-                           Instructions, Last, First, Nick, Email);
-      _ ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First, Nick, Email)
-    end;
-decode_search_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata,
-                 Items, Instructions, Last, First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els,
-                           decode_xdata(<<"jabber:x:data">>, __IgnoreEls, _el),
-                           Items, Instructions, Last, First, Nick, Email);
-      _ ->
-         decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                           Items, Instructions, Last, First, Nick, Email)
-    end;
-decode_search_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                 Xdata, Items, Instructions, Last, First, Nick, Email) ->
-    decode_search_els(__TopXMLNS, __IgnoreEls, _els, Xdata,
-                     Items, Instructions, Last, First, Nick, Email).
-
-encode_search({search, Instructions, First, Last, Nick,
-              Email, Items, Xdata},
-             __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:search">>,
-                                    [], __TopXMLNS),
-    _els = lists:reverse('encode_search_$xdata'(Xdata,
-                                               __NewTopXMLNS,
-                                               'encode_search_$items'(Items,
-                                                                      __NewTopXMLNS,
-                                                                      'encode_search_$instructions'(Instructions,
-                                                                                                    __NewTopXMLNS,
-                                                                                                    'encode_search_$last'(Last,
-                                                                                                                          __NewTopXMLNS,
-                                                                                                                          'encode_search_$first'(First,
-                                                                                                                                                 __NewTopXMLNS,
-                                                                                                                                                 'encode_search_$nick'(Nick,
-                                                                                                                                                                       __NewTopXMLNS,
-                                                                                                                                                                       'encode_search_$email'(Email,
-                                                                                                                                                                                              __NewTopXMLNS,
-                                                                                                                                                                                              [])))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_search_$xdata'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_search_$xdata'(Xdata, __TopXMLNS, _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-'encode_search_$items'([], __TopXMLNS, _acc) -> _acc;
-'encode_search_$items'([Items | _els], __TopXMLNS,
-                      _acc) ->
-    'encode_search_$items'(_els, __TopXMLNS,
-                          [encode_search_item(Items, __TopXMLNS) | _acc]).
-
-'encode_search_$instructions'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_search_$instructions'(Instructions, __TopXMLNS,
-                             _acc) ->
-    [encode_search_instructions(Instructions, __TopXMLNS)
-     | _acc].
-
-'encode_search_$last'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_search_$last'(Last, __TopXMLNS, _acc) ->
-    [encode_search_last(Last, __TopXMLNS) | _acc].
-
-'encode_search_$first'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_search_$first'(First, __TopXMLNS, _acc) ->
-    [encode_search_first(First, __TopXMLNS) | _acc].
-
-'encode_search_$nick'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_search_$nick'(Nick, __TopXMLNS, _acc) ->
-    [encode_search_nick(Nick, __TopXMLNS) | _acc].
-
-'encode_search_$email'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_search_$email'(Email, __TopXMLNS, _acc) ->
-    [encode_search_email(Email, __TopXMLNS) | _acc].
-
-decode_search_item(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"item">>, _attrs, _els}) ->
-    {Last, First, Nick, Email} =
-       decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                              undefined, undefined, undefined, undefined),
-    Jid = decode_search_item_attrs(__TopXMLNS, _attrs,
-                                  undefined),
-    {search_item, Jid, First, Last, Nick, Email}.
-
-decode_search_item_els(__TopXMLNS, __IgnoreEls, [],
-                      Last, First, Nick, Email) ->
-    {Last, First, Nick, Email};
-decode_search_item_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"first">>, _attrs, _} = _el | _els], Last,
-                      First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last,
-                                decode_search_first(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                                Nick, Email);
-      <<"jabber:iq:search">> ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last,
-                                decode_search_first(<<"jabber:iq:search">>,
-                                                    __IgnoreEls, _el),
-                                Nick, Email);
-      _ ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last, First, Nick, Email)
-    end;
-decode_search_item_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"last">>, _attrs, _} = _el | _els], Last,
-                      First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_search_last(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                                First, Nick, Email);
-      <<"jabber:iq:search">> ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_search_last(<<"jabber:iq:search">>,
-                                                   __IgnoreEls, _el),
-                                First, Nick, Email);
-      _ ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last, First, Nick, Email)
-    end;
-decode_search_item_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"nick">>, _attrs, _} = _el | _els], Last,
-                      First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last, First,
-                                decode_search_nick(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                                Email);
-      <<"jabber:iq:search">> ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last, First,
-                                decode_search_nick(<<"jabber:iq:search">>,
-                                                   __IgnoreEls, _el),
-                                Email);
-      _ ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last, First, Nick, Email)
-    end;
-decode_search_item_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"email">>, _attrs, _} = _el | _els], Last,
-                      First, Nick, Email) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:search">> ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last, First, Nick,
-                                decode_search_email(__TopXMLNS, __IgnoreEls,
-                                                    _el));
-      <<"jabber:iq:search">> ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last, First, Nick,
-                                decode_search_email(<<"jabber:iq:search">>,
-                                                    __IgnoreEls, _el));
-      _ ->
-         decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Last, First, Nick, Email)
-    end;
-decode_search_item_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Last, First, Nick, Email) ->
-    decode_search_item_els(__TopXMLNS, __IgnoreEls, _els,
-                          Last, First, Nick, Email).
-
-decode_search_item_attrs(__TopXMLNS,
-                        [{<<"jid">>, _val} | _attrs], _Jid) ->
-    decode_search_item_attrs(__TopXMLNS, _attrs, _val);
-decode_search_item_attrs(__TopXMLNS, [_ | _attrs],
-                        Jid) ->
-    decode_search_item_attrs(__TopXMLNS, _attrs, Jid);
-decode_search_item_attrs(__TopXMLNS, [], Jid) ->
-    decode_search_item_attr_jid(__TopXMLNS, Jid).
-
-encode_search_item({search_item, Jid, First, Last, Nick,
-                   Email},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:search">>,
-                                    [], __TopXMLNS),
-    _els = lists:reverse('encode_search_item_$last'(Last,
-                                                   __NewTopXMLNS,
-                                                   'encode_search_item_$first'(First,
-                                                                               __NewTopXMLNS,
-                                                                               'encode_search_item_$nick'(Nick,
-                                                                                                          __NewTopXMLNS,
-                                                                                                          'encode_search_item_$email'(Email,
-                                                                                                                                      __NewTopXMLNS,
-                                                                                                                                      []))))),
-    _attrs = encode_search_item_attr_jid(Jid,
-                                        enc_xmlns_attrs(__NewTopXMLNS,
-                                                        __TopXMLNS)),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-'encode_search_item_$last'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_search_item_$last'(Last, __TopXMLNS, _acc) ->
-    [encode_search_last(Last, __TopXMLNS) | _acc].
-
-'encode_search_item_$first'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_search_item_$first'(First, __TopXMLNS, _acc) ->
-    [encode_search_first(First, __TopXMLNS) | _acc].
-
-'encode_search_item_$nick'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_search_item_$nick'(Nick, __TopXMLNS, _acc) ->
-    [encode_search_nick(Nick, __TopXMLNS) | _acc].
-
-'encode_search_item_$email'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_search_item_$email'(Email, __TopXMLNS, _acc) ->
-    [encode_search_email(Email, __TopXMLNS) | _acc].
-
-decode_search_item_attr_jid(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"item">>, __TopXMLNS}});
-decode_search_item_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_search_item_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_search_email(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"email">>, _attrs, _els}) ->
-    Cdata = decode_search_email_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_search_email_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_search_email_cdata(__TopXMLNS, Cdata);
-decode_search_email_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_search_email_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_search_email_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_search_email_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_search_email(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:search">>,
-                                    [], __TopXMLNS),
-    _els = encode_search_email_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"email">>, _attrs, _els}.
-
-decode_search_email_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_search_email_cdata(__TopXMLNS, _val) -> _val.
-
-encode_search_email_cdata(<<>>, _acc) -> _acc;
-encode_search_email_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_search_nick(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"nick">>, _attrs, _els}) ->
-    Cdata = decode_search_nick_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Cdata.
-
-decode_search_nick_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_search_nick_cdata(__TopXMLNS, Cdata);
-decode_search_nick_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_search_nick_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_search_nick_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_search_nick_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-encode_search_nick(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:search">>,
-                                    [], __TopXMLNS),
-    _els = encode_search_nick_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"nick">>, _attrs, _els}.
-
-decode_search_nick_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_search_nick_cdata(__TopXMLNS, _val) -> _val.
-
-encode_search_nick_cdata(<<>>, _acc) -> _acc;
-encode_search_nick_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_search_last(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"last">>, _attrs, _els}) ->
-    Cdata = decode_search_last_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Cdata.
-
-decode_search_last_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_search_last_cdata(__TopXMLNS, Cdata);
-decode_search_last_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_search_last_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_search_last_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_search_last_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-encode_search_last(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:search">>,
-                                    [], __TopXMLNS),
-    _els = encode_search_last_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"last">>, _attrs, _els}.
-
-decode_search_last_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_search_last_cdata(__TopXMLNS, _val) -> _val.
-
-encode_search_last_cdata(<<>>, _acc) -> _acc;
-encode_search_last_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_search_first(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"first">>, _attrs, _els}) ->
-    Cdata = decode_search_first_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_search_first_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_search_first_cdata(__TopXMLNS, Cdata);
-decode_search_first_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_search_first_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_search_first_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_search_first_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_search_first(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:search">>,
-                                    [], __TopXMLNS),
-    _els = encode_search_first_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"first">>, _attrs, _els}.
-
-decode_search_first_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_search_first_cdata(__TopXMLNS, _val) -> _val.
-
-encode_search_first_cdata(<<>>, _acc) -> _acc;
-encode_search_first_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_search_instructions(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"instructions">>, _attrs, _els}) ->
-    Cdata = decode_search_instructions_els(__TopXMLNS,
-                                          __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_search_instructions_els(__TopXMLNS, __IgnoreEls,
-                              [], Cdata) ->
-    decode_search_instructions_cdata(__TopXMLNS, Cdata);
-decode_search_instructions_els(__TopXMLNS, __IgnoreEls,
-                              [{xmlcdata, _data} | _els], Cdata) ->
-    decode_search_instructions_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<Cdata/binary, _data/binary>>);
-decode_search_instructions_els(__TopXMLNS, __IgnoreEls,
-                              [_ | _els], Cdata) ->
-    decode_search_instructions_els(__TopXMLNS, __IgnoreEls,
-                                  _els, Cdata).
-
-encode_search_instructions(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:search">>,
-                                    [], __TopXMLNS),
-    _els = encode_search_instructions_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"instructions">>, _attrs, _els}.
-
-decode_search_instructions_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_search_instructions_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_search_instructions_cdata(<<>>, _acc) -> _acc;
-encode_search_instructions_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_hint_no_permanent_storage(__TopXMLNS,
-                                __IgnoreEls,
-                                {xmlel, <<"no-permanent-storage">>, _attrs,
-                                 _els}) ->
-    {hint, 'no-permanent-storage'}.
-
-encode_hint_no_permanent_storage({hint,
-                                 'no-permanent-storage'},
-                                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:hints">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"no-permanent-storage">>, _attrs, _els}.
-
-decode_hint_no_permanent_store(__TopXMLNS, __IgnoreEls,
-                              {xmlel, <<"no-permanent-store">>, _attrs,
-                               _els}) ->
-    {hint, 'no-permanent-store'}.
-
-encode_hint_no_permanent_store({hint,
-                               'no-permanent-store'},
-                              __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:hints">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"no-permanent-store">>, _attrs, _els}.
-
-decode_hint_store(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"store">>, _attrs, _els}) ->
-    {hint, store}.
-
-encode_hint_store({hint, store}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:hints">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"store">>, _attrs, _els}.
-
-decode_hint_no_storage(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"no-storage">>, _attrs, _els}) ->
-    {hint, 'no-storage'}.
-
-encode_hint_no_storage({hint, 'no-storage'},
-                      __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:hints">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"no-storage">>, _attrs, _els}.
-
-decode_hint_no_store(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"no-store">>, _attrs, _els}) ->
-    {hint, 'no-store'}.
-
-encode_hint_no_store({hint, 'no-store'}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:hints">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"no-store">>, _attrs, _els}.
-
-decode_hint_no_copy(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"no-copy">>, _attrs, _els}) ->
-    {hint, 'no-copy'}.
-
-encode_hint_no_copy({hint, 'no-copy'}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:hints">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"no-copy">>, _attrs, _els}.
-
-decode_mix_participant(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"participant">>, _attrs, _els}) ->
-    {Jid, Nick} = decode_mix_participant_attrs(__TopXMLNS,
-                                              _attrs, undefined, undefined),
-    {mix_participant, Jid, Nick}.
-
-decode_mix_participant_attrs(__TopXMLNS,
-                            [{<<"jid">>, _val} | _attrs], _Jid, Nick) ->
-    decode_mix_participant_attrs(__TopXMLNS, _attrs, _val,
-                                Nick);
-decode_mix_participant_attrs(__TopXMLNS,
-                            [{<<"nick">>, _val} | _attrs], Jid, _Nick) ->
-    decode_mix_participant_attrs(__TopXMLNS, _attrs, Jid,
-                                _val);
-decode_mix_participant_attrs(__TopXMLNS, [_ | _attrs],
-                            Jid, Nick) ->
-    decode_mix_participant_attrs(__TopXMLNS, _attrs, Jid,
-                                Nick);
-decode_mix_participant_attrs(__TopXMLNS, [], Jid,
-                            Nick) ->
-    {decode_mix_participant_attr_jid(__TopXMLNS, Jid),
-     decode_mix_participant_attr_nick(__TopXMLNS, Nick)}.
-
-encode_mix_participant({mix_participant, Jid, Nick},
-                      __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:mix:0">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_mix_participant_attr_nick(Nick,
-                                             encode_mix_participant_attr_jid(Jid,
-                                                                             enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                             __TopXMLNS))),
-    {xmlel, <<"participant">>, _attrs, _els}.
-
-decode_mix_participant_attr_jid(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"participant">>,
-                  __TopXMLNS}});
-decode_mix_participant_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"participant">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mix_participant_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_mix_participant_attr_nick(__TopXMLNS,
-                                undefined) ->
-    <<>>;
-decode_mix_participant_attr_nick(__TopXMLNS, _val) ->
-    _val.
-
-encode_mix_participant_attr_nick(<<>>, _acc) -> _acc;
-encode_mix_participant_attr_nick(_val, _acc) ->
-    [{<<"nick">>, _val} | _acc].
-
-decode_mix_leave(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"leave">>, _attrs, _els}) ->
-    {mix_leave}.
-
-encode_mix_leave({mix_leave}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:mix:0">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"leave">>, _attrs, _els}.
-
-decode_mix_join(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"join">>, _attrs, _els}) ->
-    Subscribe = decode_mix_join_els(__TopXMLNS, __IgnoreEls,
-                                   _els, []),
-    Jid = decode_mix_join_attrs(__TopXMLNS, _attrs,
-                               undefined),
-    {mix_join, Jid, Subscribe}.
-
-decode_mix_join_els(__TopXMLNS, __IgnoreEls, [],
-                   Subscribe) ->
-    lists:reverse(Subscribe);
-decode_mix_join_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"subscribe">>, _attrs, _} = _el | _els],
-                   Subscribe) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:mix:0">> ->
-         decode_mix_join_els(__TopXMLNS, __IgnoreEls, _els,
-                             [decode_mix_subscribe(__TopXMLNS, __IgnoreEls,
-                                                   _el)
-                              | Subscribe]);
-      <<"urn:xmpp:mix:0">> ->
-         decode_mix_join_els(__TopXMLNS, __IgnoreEls, _els,
-                             [decode_mix_subscribe(<<"urn:xmpp:mix:0">>,
-                                                   __IgnoreEls, _el)
-                              | Subscribe]);
-      _ ->
-         decode_mix_join_els(__TopXMLNS, __IgnoreEls, _els,
-                             Subscribe)
-    end;
-decode_mix_join_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Subscribe) ->
-    decode_mix_join_els(__TopXMLNS, __IgnoreEls, _els,
-                       Subscribe).
-
-decode_mix_join_attrs(__TopXMLNS,
-                     [{<<"jid">>, _val} | _attrs], _Jid) ->
-    decode_mix_join_attrs(__TopXMLNS, _attrs, _val);
-decode_mix_join_attrs(__TopXMLNS, [_ | _attrs], Jid) ->
-    decode_mix_join_attrs(__TopXMLNS, _attrs, Jid);
-decode_mix_join_attrs(__TopXMLNS, [], Jid) ->
-    decode_mix_join_attr_jid(__TopXMLNS, Jid).
-
-encode_mix_join({mix_join, Jid, Subscribe},
-               __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:mix:0">>,
-                                    [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_mix_join_$subscribe'(Subscribe,
-                                                  __NewTopXMLNS, [])),
-    _attrs = encode_mix_join_attr_jid(Jid,
-                                     enc_xmlns_attrs(__NewTopXMLNS,
-                                                     __TopXMLNS)),
-    {xmlel, <<"join">>, _attrs, _els}.
-
-'encode_mix_join_$subscribe'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_mix_join_$subscribe'([Subscribe | _els],
-                            __TopXMLNS, _acc) ->
-    'encode_mix_join_$subscribe'(_els, __TopXMLNS,
-                                [encode_mix_subscribe(Subscribe, __TopXMLNS)
-                                 | _acc]).
-
-decode_mix_join_attr_jid(__TopXMLNS, undefined) ->
-    undefined;
-decode_mix_join_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"join">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mix_join_attr_jid(undefined, _acc) -> _acc;
-encode_mix_join_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_mix_subscribe(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"subscribe">>, _attrs, _els}) ->
-    Node = decode_mix_subscribe_attrs(__TopXMLNS, _attrs,
-                                     undefined),
-    Node.
-
-decode_mix_subscribe_attrs(__TopXMLNS,
-                          [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_mix_subscribe_attrs(__TopXMLNS, _attrs, _val);
-decode_mix_subscribe_attrs(__TopXMLNS, [_ | _attrs],
-                          Node) ->
-    decode_mix_subscribe_attrs(__TopXMLNS, _attrs, Node);
-decode_mix_subscribe_attrs(__TopXMLNS, [], Node) ->
-    decode_mix_subscribe_attr_node(__TopXMLNS, Node).
-
-encode_mix_subscribe(Node, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:mix:0">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_mix_subscribe_attr_node(Node,
-                                           enc_xmlns_attrs(__NewTopXMLNS,
-                                                           __TopXMLNS)),
-    {xmlel, <<"subscribe">>, _attrs, _els}.
-
-decode_mix_subscribe_attr_node(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"subscribe">>,
-                  __TopXMLNS}});
-decode_mix_subscribe_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_mix_subscribe_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_offline(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"offline">>, _attrs, _els}) ->
-    {Items, Purge, Fetch} = decode_offline_els(__TopXMLNS,
-                                              __IgnoreEls, _els, [], false,
-                                              false),
-    {offline, Items, Purge, Fetch}.
-
-decode_offline_els(__TopXMLNS, __IgnoreEls, [], Items,
-                  Purge, Fetch) ->
-    {lists:reverse(Items), Purge, Fetch};
-decode_offline_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"purge">>, _attrs, _} = _el | _els], Items,
-                  Purge, Fetch) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/offline">> ->
-         decode_offline_els(__TopXMLNS, __IgnoreEls, _els, Items,
-                            decode_offline_purge(__TopXMLNS, __IgnoreEls, _el),
-                            Fetch);
-      <<"http://jabber.org/protocol/offline">> ->
-         decode_offline_els(__TopXMLNS, __IgnoreEls, _els, Items,
-                            decode_offline_purge(<<"http://jabber.org/protocol/offline">>,
-                                                 __IgnoreEls, _el),
-                            Fetch);
-      _ ->
-         decode_offline_els(__TopXMLNS, __IgnoreEls, _els, Items,
-                            Purge, Fetch)
-    end;
-decode_offline_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"fetch">>, _attrs, _} = _el | _els], Items,
-                  Purge, Fetch) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/offline">> ->
-         decode_offline_els(__TopXMLNS, __IgnoreEls, _els, Items,
-                            Purge,
-                            decode_offline_fetch(__TopXMLNS, __IgnoreEls,
-                                                 _el));
-      <<"http://jabber.org/protocol/offline">> ->
-         decode_offline_els(__TopXMLNS, __IgnoreEls, _els, Items,
-                            Purge,
-                            decode_offline_fetch(<<"http://jabber.org/protocol/offline">>,
-                                                 __IgnoreEls, _el));
-      _ ->
-         decode_offline_els(__TopXMLNS, __IgnoreEls, _els, Items,
-                            Purge, Fetch)
-    end;
-decode_offline_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items,
-                  Purge, Fetch) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/offline">> ->
-         decode_offline_els(__TopXMLNS, __IgnoreEls, _els,
-                            [decode_offline_item(__TopXMLNS, __IgnoreEls, _el)
-                             | Items],
-                            Purge, Fetch);
-      <<"http://jabber.org/protocol/offline">> ->
-         decode_offline_els(__TopXMLNS, __IgnoreEls, _els,
-                            [decode_offline_item(<<"http://jabber.org/protocol/offline">>,
-                                                 __IgnoreEls, _el)
-                             | Items],
-                            Purge, Fetch);
-      _ ->
-         decode_offline_els(__TopXMLNS, __IgnoreEls, _els, Items,
-                            Purge, Fetch)
-    end;
-decode_offline_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Items, Purge, Fetch) ->
-    decode_offline_els(__TopXMLNS, __IgnoreEls, _els, Items,
-                      Purge, Fetch).
-
-encode_offline({offline, Items, Purge, Fetch},
-              __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/offline">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_offline_$items'(Items,
-                                                __NewTopXMLNS,
-                                                'encode_offline_$purge'(Purge,
-                                                                        __NewTopXMLNS,
-                                                                        'encode_offline_$fetch'(Fetch,
-                                                                                                __NewTopXMLNS,
-                                                                                                [])))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"offline">>, _attrs, _els}.
-
-'encode_offline_$items'([], __TopXMLNS, _acc) -> _acc;
-'encode_offline_$items'([Items | _els], __TopXMLNS,
-                       _acc) ->
-    'encode_offline_$items'(_els, __TopXMLNS,
-                           [encode_offline_item(Items, __TopXMLNS) | _acc]).
-
-'encode_offline_$purge'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_offline_$purge'(Purge, __TopXMLNS, _acc) ->
-    [encode_offline_purge(Purge, __TopXMLNS) | _acc].
-
-'encode_offline_$fetch'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_offline_$fetch'(Fetch, __TopXMLNS, _acc) ->
-    [encode_offline_fetch(Fetch, __TopXMLNS) | _acc].
-
-decode_offline_item(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"item">>, _attrs, _els}) ->
-    {Node, Action} = decode_offline_item_attrs(__TopXMLNS,
-                                              _attrs, undefined, undefined),
-    {offline_item, Node, Action}.
-
-decode_offline_item_attrs(__TopXMLNS,
-                         [{<<"node">>, _val} | _attrs], _Node, Action) ->
-    decode_offline_item_attrs(__TopXMLNS, _attrs, _val,
-                             Action);
-decode_offline_item_attrs(__TopXMLNS,
-                         [{<<"action">>, _val} | _attrs], Node, _Action) ->
-    decode_offline_item_attrs(__TopXMLNS, _attrs, Node,
-                             _val);
-decode_offline_item_attrs(__TopXMLNS, [_ | _attrs],
-                         Node, Action) ->
-    decode_offline_item_attrs(__TopXMLNS, _attrs, Node,
-                             Action);
-decode_offline_item_attrs(__TopXMLNS, [], Node,
-                         Action) ->
-    {decode_offline_item_attr_node(__TopXMLNS, Node),
-     decode_offline_item_attr_action(__TopXMLNS, Action)}.
-
-encode_offline_item({offline_item, Node, Action},
-                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/offline">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_offline_item_attr_action(Action,
-                                            encode_offline_item_attr_node(Node,
-                                                                          enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                          __TopXMLNS))),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-decode_offline_item_attr_node(__TopXMLNS, undefined) ->
-    <<>>;
-decode_offline_item_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_offline_item_attr_node(<<>>, _acc) -> _acc;
-encode_offline_item_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_offline_item_attr_action(__TopXMLNS,
-                               undefined) ->
-    undefined;
-decode_offline_item_attr_action(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [view, remove]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"action">>, <<"item">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_offline_item_attr_action(undefined, _acc) ->
-    _acc;
-encode_offline_item_attr_action(_val, _acc) ->
-    [{<<"action">>, enc_enum(_val)} | _acc].
-
-decode_offline_fetch(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"fetch">>, _attrs, _els}) ->
-    true.
-
-encode_offline_fetch(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/offline">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"fetch">>, _attrs, _els}.
-
-decode_offline_purge(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"purge">>, _attrs, _els}) ->
-    true.
-
-encode_offline_purge(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/offline">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"purge">>, _attrs, _els}.
-
-decode_sm_failed(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"failed">>, _attrs, _els}) ->
-    Reason = decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                                 _els, undefined),
-    {H, Xmlns} = decode_sm_failed_attrs(__TopXMLNS, _attrs,
-                                       undefined, undefined),
-    {sm_failed, Reason, H, Xmlns}.
-
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls, [],
-                    Reason) ->
-    Reason;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"bad-request">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_bad_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                       __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"conflict">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_conflict(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                    __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"feature-not-implemented">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_feature_not_implemented(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                                   __IgnoreEls,
-                                                                   _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"forbidden">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_forbidden(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                     __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"gone">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_gone(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"internal-server-error">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_internal_server_error(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                                 __IgnoreEls,
-                                                                 _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"item-not-found">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_item_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                          __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"jid-malformed">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_jid_malformed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                         __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"not-acceptable">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_not_acceptable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                          __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"not-allowed">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_not_allowed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                       __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"not-authorized">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                          __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"policy-violation">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_policy_violation(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                            __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"recipient-unavailable">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_recipient_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                                 __IgnoreEls,
-                                                                 _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"redirect">>, _attrs, _} = _el | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_redirect(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                    __IgnoreEls, _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"registration-required">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_registration_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                                 __IgnoreEls,
-                                                                 _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"remote-server-not-found">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_remote_server_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                                   __IgnoreEls,
-                                                                   _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"remote-server-timeout">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_remote_server_timeout(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                                 __IgnoreEls,
-                                                                 _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"resource-constraint">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_resource_constraint(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                               __IgnoreEls,
-                                                               _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"service-unavailable">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_service_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                               __IgnoreEls,
-                                                               _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"subscription-required">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_subscription_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                                 __IgnoreEls,
-                                                                 _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"undefined-condition">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_undefined_condition(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                               __IgnoreEls,
-                                                               _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"unexpected-request">>, _attrs, _} = _el
-                     | _els],
-                    Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_error_unexpected_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                              __IgnoreEls,
-                                                              _el));
-      _ ->
-         decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                              Reason)
-    end;
-decode_sm_failed_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Reason) ->
-    decode_sm_failed_els(__TopXMLNS, __IgnoreEls, _els,
-                        Reason).
-
-decode_sm_failed_attrs(__TopXMLNS,
-                      [{<<"h">>, _val} | _attrs], _H, Xmlns) ->
-    decode_sm_failed_attrs(__TopXMLNS, _attrs, _val, Xmlns);
-decode_sm_failed_attrs(__TopXMLNS,
-                      [{<<"xmlns">>, _val} | _attrs], H, _Xmlns) ->
-    decode_sm_failed_attrs(__TopXMLNS, _attrs, H, _val);
-decode_sm_failed_attrs(__TopXMLNS, [_ | _attrs], H,
-                      Xmlns) ->
-    decode_sm_failed_attrs(__TopXMLNS, _attrs, H, Xmlns);
-decode_sm_failed_attrs(__TopXMLNS, [], H, Xmlns) ->
-    {decode_sm_failed_attr_h(__TopXMLNS, H),
-     decode_sm_failed_attr_xmlns(__TopXMLNS, Xmlns)}.
-
-encode_sm_failed({sm_failed, Reason, H, Xmlns},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_sm_failed_$reason'(Reason,
-                                                   __NewTopXMLNS, [])),
-    _attrs = encode_sm_failed_attr_h(H,
-                                    enc_xmlns_attrs(__NewTopXMLNS,
-                                                    __TopXMLNS)),
-    {xmlel, <<"failed">>, _attrs, _els}.
-
-'encode_sm_failed_$reason'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_sm_failed_$reason'('bad-request' = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_bad_request(Reason, __TopXMLNS) | _acc];
-'encode_sm_failed_$reason'(conflict = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_conflict(Reason, __TopXMLNS) | _acc];
-'encode_sm_failed_$reason'('feature-not-implemented' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_feature_not_implemented(Reason,
-                                         __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'(forbidden = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_forbidden(Reason, __TopXMLNS) | _acc];
-'encode_sm_failed_$reason'({gone, _} = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_gone(Reason, __TopXMLNS) | _acc];
-'encode_sm_failed_$reason'('internal-server-error' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_internal_server_error(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('item-not-found' = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_item_not_found(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('jid-malformed' = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_jid_malformed(Reason, __TopXMLNS) | _acc];
-'encode_sm_failed_$reason'('not-acceptable' = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_not_acceptable(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('not-allowed' = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_not_allowed(Reason, __TopXMLNS) | _acc];
-'encode_sm_failed_$reason'('not-authorized' = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_not_authorized(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('policy-violation' = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_policy_violation(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('recipient-unavailable' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_recipient_unavailable(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'({redirect, _} = Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_redirect(Reason, __TopXMLNS) | _acc];
-'encode_sm_failed_$reason'('registration-required' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_registration_required(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('remote-server-not-found' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_remote_server_not_found(Reason,
-                                         __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('remote-server-timeout' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_remote_server_timeout(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('resource-constraint' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_resource_constraint(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('service-unavailable' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_service_unavailable(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('subscription-required' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_subscription_required(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('undefined-condition' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_undefined_condition(Reason, __TopXMLNS)
-     | _acc];
-'encode_sm_failed_$reason'('unexpected-request' =
-                              Reason,
-                          __TopXMLNS, _acc) ->
-    [encode_error_unexpected_request(Reason, __TopXMLNS)
-     | _acc].
-
-decode_sm_failed_attr_h(__TopXMLNS, undefined) ->
-    undefined;
-decode_sm_failed_attr_h(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"h">>, <<"failed">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sm_failed_attr_h(undefined, _acc) -> _acc;
-encode_sm_failed_attr_h(_val, _acc) ->
-    [{<<"h">>, enc_int(_val)} | _acc].
-
-decode_sm_failed_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_sm_failed_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_sm_a(__TopXMLNS, __IgnoreEls,
-           {xmlel, <<"a">>, _attrs, _els}) ->
-    {H, Xmlns} = decode_sm_a_attrs(__TopXMLNS, _attrs,
-                                  undefined, undefined),
-    {sm_a, H, Xmlns}.
-
-decode_sm_a_attrs(__TopXMLNS,
-                 [{<<"h">>, _val} | _attrs], _H, Xmlns) ->
-    decode_sm_a_attrs(__TopXMLNS, _attrs, _val, Xmlns);
-decode_sm_a_attrs(__TopXMLNS,
-                 [{<<"xmlns">>, _val} | _attrs], H, _Xmlns) ->
-    decode_sm_a_attrs(__TopXMLNS, _attrs, H, _val);
-decode_sm_a_attrs(__TopXMLNS, [_ | _attrs], H, Xmlns) ->
-    decode_sm_a_attrs(__TopXMLNS, _attrs, H, Xmlns);
-decode_sm_a_attrs(__TopXMLNS, [], H, Xmlns) ->
-    {decode_sm_a_attr_h(__TopXMLNS, H),
-     decode_sm_a_attr_xmlns(__TopXMLNS, Xmlns)}.
-
-encode_sm_a({sm_a, H, Xmlns}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_sm_a_attr_h(H,
-                               enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS)),
-    {xmlel, <<"a">>, _attrs, _els}.
-
-decode_sm_a_attr_h(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"h">>, <<"a">>, __TopXMLNS}});
-decode_sm_a_attr_h(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"h">>, <<"a">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sm_a_attr_h(_val, _acc) ->
-    [{<<"h">>, enc_int(_val)} | _acc].
-
-decode_sm_a_attr_xmlns(__TopXMLNS, undefined) -> <<>>;
-decode_sm_a_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_sm_r(__TopXMLNS, __IgnoreEls,
-           {xmlel, <<"r">>, _attrs, _els}) ->
-    Xmlns = decode_sm_r_attrs(__TopXMLNS, _attrs,
-                             undefined),
-    {sm_r, Xmlns}.
-
-decode_sm_r_attrs(__TopXMLNS,
-                 [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
-    decode_sm_r_attrs(__TopXMLNS, _attrs, _val);
-decode_sm_r_attrs(__TopXMLNS, [_ | _attrs], Xmlns) ->
-    decode_sm_r_attrs(__TopXMLNS, _attrs, Xmlns);
-decode_sm_r_attrs(__TopXMLNS, [], Xmlns) ->
-    decode_sm_r_attr_xmlns(__TopXMLNS, Xmlns).
-
-encode_sm_r({sm_r, Xmlns}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"r">>, _attrs, _els}.
-
-decode_sm_r_attr_xmlns(__TopXMLNS, undefined) -> <<>>;
-decode_sm_r_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_sm_resumed(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"resumed">>, _attrs, _els}) ->
-    {H, Xmlns, Previd} = decode_sm_resumed_attrs(__TopXMLNS,
-                                                _attrs, undefined, undefined,
-                                                undefined),
-    {sm_resumed, H, Previd, Xmlns}.
-
-decode_sm_resumed_attrs(__TopXMLNS,
-                       [{<<"h">>, _val} | _attrs], _H, Xmlns, Previd) ->
-    decode_sm_resumed_attrs(__TopXMLNS, _attrs, _val, Xmlns,
-                           Previd);
-decode_sm_resumed_attrs(__TopXMLNS,
-                       [{<<"xmlns">>, _val} | _attrs], H, _Xmlns, Previd) ->
-    decode_sm_resumed_attrs(__TopXMLNS, _attrs, H, _val,
-                           Previd);
-decode_sm_resumed_attrs(__TopXMLNS,
-                       [{<<"previd">>, _val} | _attrs], H, Xmlns, _Previd) ->
-    decode_sm_resumed_attrs(__TopXMLNS, _attrs, H, Xmlns,
-                           _val);
-decode_sm_resumed_attrs(__TopXMLNS, [_ | _attrs], H,
-                       Xmlns, Previd) ->
-    decode_sm_resumed_attrs(__TopXMLNS, _attrs, H, Xmlns,
-                           Previd);
-decode_sm_resumed_attrs(__TopXMLNS, [], H, Xmlns,
-                       Previd) ->
-    {decode_sm_resumed_attr_h(__TopXMLNS, H),
-     decode_sm_resumed_attr_xmlns(__TopXMLNS, Xmlns),
-     decode_sm_resumed_attr_previd(__TopXMLNS, Previd)}.
-
-encode_sm_resumed({sm_resumed, H, Previd, Xmlns},
-                 __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_sm_resumed_attr_previd(Previd,
-                                          encode_sm_resumed_attr_h(H,
-                                                                   enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                   __TopXMLNS))),
-    {xmlel, <<"resumed">>, _attrs, _els}.
-
-decode_sm_resumed_attr_h(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"h">>, <<"resumed">>, __TopXMLNS}});
-decode_sm_resumed_attr_h(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"h">>, <<"resumed">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sm_resumed_attr_h(_val, _acc) ->
-    [{<<"h">>, enc_int(_val)} | _acc].
-
-decode_sm_resumed_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_sm_resumed_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_sm_resumed_attr_previd(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"previd">>, <<"resumed">>,
-                  __TopXMLNS}});
-decode_sm_resumed_attr_previd(__TopXMLNS, _val) -> _val.
-
-encode_sm_resumed_attr_previd(_val, _acc) ->
-    [{<<"previd">>, _val} | _acc].
-
-decode_sm_resume(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"resume">>, _attrs, _els}) ->
-    {H, Xmlns, Previd} = decode_sm_resume_attrs(__TopXMLNS,
-                                               _attrs, undefined, undefined,
-                                               undefined),
-    {sm_resume, H, Previd, Xmlns}.
-
-decode_sm_resume_attrs(__TopXMLNS,
-                      [{<<"h">>, _val} | _attrs], _H, Xmlns, Previd) ->
-    decode_sm_resume_attrs(__TopXMLNS, _attrs, _val, Xmlns,
-                          Previd);
-decode_sm_resume_attrs(__TopXMLNS,
-                      [{<<"xmlns">>, _val} | _attrs], H, _Xmlns, Previd) ->
-    decode_sm_resume_attrs(__TopXMLNS, _attrs, H, _val,
-                          Previd);
-decode_sm_resume_attrs(__TopXMLNS,
-                      [{<<"previd">>, _val} | _attrs], H, Xmlns, _Previd) ->
-    decode_sm_resume_attrs(__TopXMLNS, _attrs, H, Xmlns,
-                          _val);
-decode_sm_resume_attrs(__TopXMLNS, [_ | _attrs], H,
-                      Xmlns, Previd) ->
-    decode_sm_resume_attrs(__TopXMLNS, _attrs, H, Xmlns,
-                          Previd);
-decode_sm_resume_attrs(__TopXMLNS, [], H, Xmlns,
-                      Previd) ->
-    {decode_sm_resume_attr_h(__TopXMLNS, H),
-     decode_sm_resume_attr_xmlns(__TopXMLNS, Xmlns),
-     decode_sm_resume_attr_previd(__TopXMLNS, Previd)}.
-
-encode_sm_resume({sm_resume, H, Previd, Xmlns},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_sm_resume_attr_previd(Previd,
-                                         encode_sm_resume_attr_h(H,
-                                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                 __TopXMLNS))),
-    {xmlel, <<"resume">>, _attrs, _els}.
-
-decode_sm_resume_attr_h(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"h">>, <<"resume">>, __TopXMLNS}});
-decode_sm_resume_attr_h(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"h">>, <<"resume">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sm_resume_attr_h(_val, _acc) ->
-    [{<<"h">>, enc_int(_val)} | _acc].
-
-decode_sm_resume_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_sm_resume_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_sm_resume_attr_previd(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"previd">>, <<"resume">>,
-                  __TopXMLNS}});
-decode_sm_resume_attr_previd(__TopXMLNS, _val) -> _val.
-
-encode_sm_resume_attr_previd(_val, _acc) ->
-    [{<<"previd">>, _val} | _acc].
-
-decode_sm_enabled(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"enabled">>, _attrs, _els}) ->
-    {Id, Location, Xmlns, Max, Resume} =
-       decode_sm_enabled_attrs(__TopXMLNS, _attrs, undefined,
-                               undefined, undefined, undefined, undefined),
-    {sm_enabled, Id, Location, Max, Resume, Xmlns}.
-
-decode_sm_enabled_attrs(__TopXMLNS,
-                       [{<<"id">>, _val} | _attrs], _Id, Location, Xmlns, Max,
-                       Resume) ->
-    decode_sm_enabled_attrs(__TopXMLNS, _attrs, _val,
-                           Location, Xmlns, Max, Resume);
-decode_sm_enabled_attrs(__TopXMLNS,
-                       [{<<"location">>, _val} | _attrs], Id, _Location, Xmlns,
-                       Max, Resume) ->
-    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id, _val,
-                           Xmlns, Max, Resume);
-decode_sm_enabled_attrs(__TopXMLNS,
-                       [{<<"xmlns">>, _val} | _attrs], Id, Location, _Xmlns,
-                       Max, Resume) ->
-    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id,
-                           Location, _val, Max, Resume);
-decode_sm_enabled_attrs(__TopXMLNS,
-                       [{<<"max">>, _val} | _attrs], Id, Location, Xmlns, _Max,
-                       Resume) ->
-    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id,
-                           Location, Xmlns, _val, Resume);
-decode_sm_enabled_attrs(__TopXMLNS,
-                       [{<<"resume">>, _val} | _attrs], Id, Location, Xmlns,
-                       Max, _Resume) ->
-    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id,
-                           Location, Xmlns, Max, _val);
-decode_sm_enabled_attrs(__TopXMLNS, [_ | _attrs], Id,
-                       Location, Xmlns, Max, Resume) ->
-    decode_sm_enabled_attrs(__TopXMLNS, _attrs, Id,
-                           Location, Xmlns, Max, Resume);
-decode_sm_enabled_attrs(__TopXMLNS, [], Id, Location,
-                       Xmlns, Max, Resume) ->
-    {decode_sm_enabled_attr_id(__TopXMLNS, Id),
-     decode_sm_enabled_attr_location(__TopXMLNS, Location),
-     decode_sm_enabled_attr_xmlns(__TopXMLNS, Xmlns),
-     decode_sm_enabled_attr_max(__TopXMLNS, Max),
-     decode_sm_enabled_attr_resume(__TopXMLNS, Resume)}.
-
-encode_sm_enabled({sm_enabled, Id, Location, Max,
-                  Resume, Xmlns},
-                 __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_sm_enabled_attr_resume(Resume,
-                                          encode_sm_enabled_attr_max(Max,
-                                                                     encode_sm_enabled_attr_location(Location,
-                                                                                                     encode_sm_enabled_attr_id(Id,
-                                                                                                                               enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                               __TopXMLNS))))),
-    {xmlel, <<"enabled">>, _attrs, _els}.
-
-decode_sm_enabled_attr_id(__TopXMLNS, undefined) ->
-    <<>>;
-decode_sm_enabled_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_sm_enabled_attr_id(<<>>, _acc) -> _acc;
-encode_sm_enabled_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_sm_enabled_attr_location(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_sm_enabled_attr_location(__TopXMLNS, _val) ->
-    _val.
-
-encode_sm_enabled_attr_location(<<>>, _acc) -> _acc;
-encode_sm_enabled_attr_location(_val, _acc) ->
-    [{<<"location">>, _val} | _acc].
-
-decode_sm_enabled_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_sm_enabled_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_sm_enabled_attr_max(__TopXMLNS, undefined) ->
-    undefined;
-decode_sm_enabled_attr_max(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"max">>, <<"enabled">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sm_enabled_attr_max(undefined, _acc) -> _acc;
-encode_sm_enabled_attr_max(_val, _acc) ->
-    [{<<"max">>, enc_int(_val)} | _acc].
-
-decode_sm_enabled_attr_resume(__TopXMLNS, undefined) ->
-    false;
-decode_sm_enabled_attr_resume(__TopXMLNS, _val) ->
-    case catch dec_bool(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"resume">>, <<"enabled">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sm_enabled_attr_resume(false, _acc) -> _acc;
-encode_sm_enabled_attr_resume(_val, _acc) ->
-    [{<<"resume">>, enc_bool(_val)} | _acc].
-
-decode_sm_enable(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"enable">>, _attrs, _els}) ->
-    {Max, Xmlns, Resume} =
-       decode_sm_enable_attrs(__TopXMLNS, _attrs, undefined,
-                              undefined, undefined),
-    {sm_enable, Max, Resume, Xmlns}.
-
-decode_sm_enable_attrs(__TopXMLNS,
-                      [{<<"max">>, _val} | _attrs], _Max, Xmlns, Resume) ->
-    decode_sm_enable_attrs(__TopXMLNS, _attrs, _val, Xmlns,
-                          Resume);
-decode_sm_enable_attrs(__TopXMLNS,
-                      [{<<"xmlns">>, _val} | _attrs], Max, _Xmlns, Resume) ->
-    decode_sm_enable_attrs(__TopXMLNS, _attrs, Max, _val,
-                          Resume);
-decode_sm_enable_attrs(__TopXMLNS,
-                      [{<<"resume">>, _val} | _attrs], Max, Xmlns, _Resume) ->
-    decode_sm_enable_attrs(__TopXMLNS, _attrs, Max, Xmlns,
-                          _val);
-decode_sm_enable_attrs(__TopXMLNS, [_ | _attrs], Max,
-                      Xmlns, Resume) ->
-    decode_sm_enable_attrs(__TopXMLNS, _attrs, Max, Xmlns,
-                          Resume);
-decode_sm_enable_attrs(__TopXMLNS, [], Max, Xmlns,
-                      Resume) ->
-    {decode_sm_enable_attr_max(__TopXMLNS, Max),
-     decode_sm_enable_attr_xmlns(__TopXMLNS, Xmlns),
-     decode_sm_enable_attr_resume(__TopXMLNS, Resume)}.
-
-encode_sm_enable({sm_enable, Max, Resume, Xmlns},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_sm_enable_attr_resume(Resume,
-                                         encode_sm_enable_attr_max(Max,
-                                                                   enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                   __TopXMLNS))),
-    {xmlel, <<"enable">>, _attrs, _els}.
-
-decode_sm_enable_attr_max(__TopXMLNS, undefined) ->
-    undefined;
-decode_sm_enable_attr_max(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"max">>, <<"enable">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sm_enable_attr_max(undefined, _acc) -> _acc;
-encode_sm_enable_attr_max(_val, _acc) ->
-    [{<<"max">>, enc_int(_val)} | _acc].
-
-decode_sm_enable_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_sm_enable_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_sm_enable_attr_resume(__TopXMLNS, undefined) ->
-    false;
-decode_sm_enable_attr_resume(__TopXMLNS, _val) ->
-    case catch dec_bool(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"resume">>, <<"enable">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sm_enable_attr_resume(false, _acc) -> _acc;
-encode_sm_enable_attr_resume(_val, _acc) ->
-    [{<<"resume">>, enc_bool(_val)} | _acc].
-
-decode_feature_sm(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"sm">>, _attrs, _els}) ->
-    Xmlns = decode_feature_sm_attrs(__TopXMLNS, _attrs,
-                                   undefined),
-    {feature_sm, Xmlns}.
-
-decode_feature_sm_attrs(__TopXMLNS,
-                       [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
-    decode_feature_sm_attrs(__TopXMLNS, _attrs, _val);
-decode_feature_sm_attrs(__TopXMLNS, [_ | _attrs],
-                       Xmlns) ->
-    decode_feature_sm_attrs(__TopXMLNS, _attrs, Xmlns);
-decode_feature_sm_attrs(__TopXMLNS, [], Xmlns) ->
-    decode_feature_sm_attr_xmlns(__TopXMLNS, Xmlns).
-
-encode_feature_sm({feature_sm, Xmlns}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:sm:2">>, <<"urn:xmpp:sm:3">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"sm">>, _attrs, _els}.
-
-decode_feature_sm_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_feature_sm_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_csi_inactive(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"inactive">>, _attrs, _els}) ->
-    {csi, inactive}.
-
-encode_csi_inactive({csi, inactive}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:csi:0">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"inactive">>, _attrs, _els}.
-
-decode_csi_active(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"active">>, _attrs, _els}) ->
-    {csi, active}.
-
-encode_csi_active({csi, active}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:csi:0">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"active">>, _attrs, _els}.
-
-decode_feature_csi(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"csi">>, _attrs, _els}) ->
-    Xmlns = decode_feature_csi_attrs(__TopXMLNS, _attrs,
-                                    undefined),
-    {feature_csi, Xmlns}.
-
-decode_feature_csi_attrs(__TopXMLNS,
-                        [{<<"xmlns">>, _val} | _attrs], _Xmlns) ->
-    decode_feature_csi_attrs(__TopXMLNS, _attrs, _val);
-decode_feature_csi_attrs(__TopXMLNS, [_ | _attrs],
-                        Xmlns) ->
-    decode_feature_csi_attrs(__TopXMLNS, _attrs, Xmlns);
-decode_feature_csi_attrs(__TopXMLNS, [], Xmlns) ->
-    decode_feature_csi_attr_xmlns(__TopXMLNS, Xmlns).
-
-encode_feature_csi({feature_csi, Xmlns}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:csi:0">>], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"csi">>, _attrs, _els}.
-
-decode_feature_csi_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_feature_csi_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_carbons_sent(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"sent">>, _attrs, _els}) ->
-    Forwarded = decode_carbons_sent_els(__TopXMLNS,
-                                       __IgnoreEls, _els, error),
-    {carbons_sent, Forwarded}.
-
-decode_carbons_sent_els(__TopXMLNS, __IgnoreEls, [],
-                       Forwarded) ->
-    case Forwarded of
-      error ->
-         erlang:error({xmpp_codec,
-                       {missing_tag, <<"forwarded">>, __TopXMLNS}});
-      {value, Forwarded1} -> Forwarded1
-    end;
-decode_carbons_sent_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"forwarded">>, _attrs, _} = _el | _els],
-                       Forwarded) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:xmpp:forward:0">> ->
-         decode_carbons_sent_els(__TopXMLNS, __IgnoreEls, _els,
-                                 {value,
-                                  decode_forwarded(<<"urn:xmpp:forward:0">>,
-                                                   __IgnoreEls, _el)});
-      _ ->
-         decode_carbons_sent_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Forwarded)
-    end;
-decode_carbons_sent_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Forwarded) ->
-    decode_carbons_sent_els(__TopXMLNS, __IgnoreEls, _els,
-                           Forwarded).
-
-encode_carbons_sent({carbons_sent, Forwarded},
-                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:carbons:2">>, [],
-                        __TopXMLNS),
-    _els =
-       lists:reverse('encode_carbons_sent_$forwarded'(Forwarded,
-                                                      __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"sent">>, _attrs, _els}.
-
-'encode_carbons_sent_$forwarded'(Forwarded, __TopXMLNS,
-                                _acc) ->
-    [encode_forwarded(Forwarded, __TopXMLNS) | _acc].
-
-decode_carbons_received(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"received">>, _attrs, _els}) ->
-    Forwarded = decode_carbons_received_els(__TopXMLNS,
-                                           __IgnoreEls, _els, error),
-    {carbons_received, Forwarded}.
-
-decode_carbons_received_els(__TopXMLNS, __IgnoreEls, [],
-                           Forwarded) ->
-    case Forwarded of
-      error ->
-         erlang:error({xmpp_codec,
-                       {missing_tag, <<"forwarded">>, __TopXMLNS}});
-      {value, Forwarded1} -> Forwarded1
-    end;
-decode_carbons_received_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlel, <<"forwarded">>, _attrs, _} = _el | _els],
-                           Forwarded) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:xmpp:forward:0">> ->
-         decode_carbons_received_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     {value,
-                                      decode_forwarded(<<"urn:xmpp:forward:0">>,
-                                                       __IgnoreEls, _el)});
-      _ ->
-         decode_carbons_received_els(__TopXMLNS, __IgnoreEls,
-                                     _els, Forwarded)
-    end;
-decode_carbons_received_els(__TopXMLNS, __IgnoreEls,
-                           [_ | _els], Forwarded) ->
-    decode_carbons_received_els(__TopXMLNS, __IgnoreEls,
-                               _els, Forwarded).
-
-encode_carbons_received({carbons_received, Forwarded},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:carbons:2">>, [],
-                        __TopXMLNS),
-    _els =
-       lists:reverse('encode_carbons_received_$forwarded'(Forwarded,
-                                                          __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"received">>, _attrs, _els}.
-
-'encode_carbons_received_$forwarded'(Forwarded,
-                                    __TopXMLNS, _acc) ->
-    [encode_forwarded(Forwarded, __TopXMLNS) | _acc].
-
-decode_carbons_private(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"private">>, _attrs, _els}) ->
-    {carbons_private}.
-
-encode_carbons_private({carbons_private}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:carbons:2">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"private">>, _attrs, _els}.
-
-decode_carbons_enable(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"enable">>, _attrs, _els}) ->
-    {carbons_enable}.
-
-encode_carbons_enable({carbons_enable}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:carbons:2">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"enable">>, _attrs, _els}.
-
-decode_carbons_disable(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"disable">>, _attrs, _els}) ->
-    {carbons_disable}.
-
-encode_carbons_disable({carbons_disable}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:carbons:2">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"disable">>, _attrs, _els}.
-
-decode_forwarded(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"forwarded">>, _attrs, _els}) ->
-    {Delay, __Xmls} = decode_forwarded_els(__TopXMLNS,
-                                          __IgnoreEls, _els, undefined, []),
-    {forwarded, Delay, __Xmls}.
-
-decode_forwarded_els(__TopXMLNS, __IgnoreEls, [], Delay,
-                    __Xmls) ->
-    {Delay, lists:reverse(__Xmls)};
-decode_forwarded_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"delay">>, _attrs, _} = _el | _els], Delay,
-                    __Xmls) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:xmpp:delay">> ->
-         decode_forwarded_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_delay(<<"urn:xmpp:delay">>, __IgnoreEls,
-                                           _el),
-                              __Xmls);
-      _ ->
-         decode_forwarded_els(__TopXMLNS, __IgnoreEls, _els,
-                              Delay, __Xmls)
-    end;
-decode_forwarded_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, _, _, _} = _el | _els], Delay, __Xmls) ->
-    decode_forwarded_els(__TopXMLNS, __IgnoreEls, _els,
-                        Delay, [_el | __Xmls]);
-decode_forwarded_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Delay, __Xmls) ->
-    decode_forwarded_els(__TopXMLNS, __IgnoreEls, _els,
-                        Delay, __Xmls).
-
-encode_forwarded({forwarded, Delay, __Xmls},
-                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:forward:0">>, [],
-                        __TopXMLNS),
-    _els = __Xmls ++
-            lists:reverse('encode_forwarded_$delay'(Delay,
-                                                    __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"forwarded">>, _attrs, _els}.
-
-'encode_forwarded_$delay'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_forwarded_$delay'(Delay, __TopXMLNS, _acc) ->
-    [encode_delay(Delay, __TopXMLNS) | _acc].
-
-decode_mam_fin(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"fin">>, _attrs, _els}) ->
-    Rsm = decode_mam_fin_els(__TopXMLNS, __IgnoreEls, _els,
-                            undefined),
-    {Id, Xmlns, Stable, Complete} =
-       decode_mam_fin_attrs(__TopXMLNS, _attrs, undefined,
-                            undefined, undefined, undefined),
-    {mam_fin, Xmlns, Id, Rsm, Stable, Complete}.
-
-decode_mam_fin_els(__TopXMLNS, __IgnoreEls, [], Rsm) ->
-    Rsm;
-decode_mam_fin_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"set">>, _attrs, _} = _el | _els], Rsm) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_mam_fin_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_rsm_set(<<"http://jabber.org/protocol/rsm">>,
-                                           __IgnoreEls, _el));
-      _ ->
-         decode_mam_fin_els(__TopXMLNS, __IgnoreEls, _els, Rsm)
-    end;
-decode_mam_fin_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Rsm) ->
-    decode_mam_fin_els(__TopXMLNS, __IgnoreEls, _els, Rsm).
-
-decode_mam_fin_attrs(__TopXMLNS,
-                    [{<<"queryid">>, _val} | _attrs], _Id, Xmlns, Stable,
-                    Complete) ->
-    decode_mam_fin_attrs(__TopXMLNS, _attrs, _val, Xmlns,
-                        Stable, Complete);
-decode_mam_fin_attrs(__TopXMLNS,
-                    [{<<"xmlns">>, _val} | _attrs], Id, _Xmlns, Stable,
-                    Complete) ->
-    decode_mam_fin_attrs(__TopXMLNS, _attrs, Id, _val,
-                        Stable, Complete);
-decode_mam_fin_attrs(__TopXMLNS,
-                    [{<<"stable">>, _val} | _attrs], Id, Xmlns, _Stable,
-                    Complete) ->
-    decode_mam_fin_attrs(__TopXMLNS, _attrs, Id, Xmlns,
-                        _val, Complete);
-decode_mam_fin_attrs(__TopXMLNS,
-                    [{<<"complete">>, _val} | _attrs], Id, Xmlns, Stable,
-                    _Complete) ->
-    decode_mam_fin_attrs(__TopXMLNS, _attrs, Id, Xmlns,
-                        Stable, _val);
-decode_mam_fin_attrs(__TopXMLNS, [_ | _attrs], Id,
-                    Xmlns, Stable, Complete) ->
-    decode_mam_fin_attrs(__TopXMLNS, _attrs, Id, Xmlns,
-                        Stable, Complete);
-decode_mam_fin_attrs(__TopXMLNS, [], Id, Xmlns, Stable,
-                    Complete) ->
-    {decode_mam_fin_attr_queryid(__TopXMLNS, Id),
-     decode_mam_fin_attr_xmlns(__TopXMLNS, Xmlns),
-     decode_mam_fin_attr_stable(__TopXMLNS, Stable),
-     decode_mam_fin_attr_complete(__TopXMLNS, Complete)}.
-
-encode_mam_fin({mam_fin, Xmlns, Id, Rsm, Stable,
-               Complete},
-              __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:mam:0">>,
-                                     <<"urn:xmpp:mam:1">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_mam_fin_$rsm'(Rsm,
-                                              __NewTopXMLNS, [])),
-    _attrs = encode_mam_fin_attr_complete(Complete,
-                                         encode_mam_fin_attr_stable(Stable,
-                                                                    encode_mam_fin_attr_queryid(Id,
-                                                                                                enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                __TopXMLNS)))),
-    {xmlel, <<"fin">>, _attrs, _els}.
-
-'encode_mam_fin_$rsm'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_mam_fin_$rsm'(Rsm, __TopXMLNS, _acc) ->
-    [encode_rsm_set(Rsm, __TopXMLNS) | _acc].
-
-decode_mam_fin_attr_queryid(__TopXMLNS, undefined) ->
-    <<>>;
-decode_mam_fin_attr_queryid(__TopXMLNS, _val) -> _val.
-
-encode_mam_fin_attr_queryid(<<>>, _acc) -> _acc;
-encode_mam_fin_attr_queryid(_val, _acc) ->
-    [{<<"queryid">>, _val} | _acc].
-
-decode_mam_fin_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_mam_fin_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_mam_fin_attr_stable(__TopXMLNS, undefined) ->
-    undefined;
-decode_mam_fin_attr_stable(__TopXMLNS, _val) ->
-    case catch dec_bool(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"stable">>, <<"fin">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mam_fin_attr_stable(undefined, _acc) -> _acc;
-encode_mam_fin_attr_stable(_val, _acc) ->
-    [{<<"stable">>, enc_bool(_val)} | _acc].
-
-decode_mam_fin_attr_complete(__TopXMLNS, undefined) ->
-    undefined;
-decode_mam_fin_attr_complete(__TopXMLNS, _val) ->
-    case catch dec_bool(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"complete">>, <<"fin">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mam_fin_attr_complete(undefined, _acc) -> _acc;
-encode_mam_fin_attr_complete(_val, _acc) ->
-    [{<<"complete">>, enc_bool(_val)} | _acc].
-
-decode_mam_prefs(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"prefs">>, _attrs, _els}) ->
-    {Never, Always} = decode_mam_prefs_els(__TopXMLNS,
-                                          __IgnoreEls, _els, undefined,
-                                          undefined),
-    {Default, Xmlns} = decode_mam_prefs_attrs(__TopXMLNS,
-                                             _attrs, undefined, undefined),
-    {mam_prefs, Xmlns, Default, Always, Never}.
-
-decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, [], Never,
-                    Always) ->
-    {Never, Always};
-decode_mam_prefs_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"always">>, _attrs, _} = _el | _els], Never,
-                    Always) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"urn:xmpp:mam:1">>;
-              __TopXMLNS == <<"urn:xmpp:mam:0">>;
-              __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              Never,
-                              decode_mam_always(__TopXMLNS, __IgnoreEls, _el));
-      <<"urn:xmpp:mam:0">> ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              Never,
-                              decode_mam_always(<<"urn:xmpp:mam:0">>,
-                                                __IgnoreEls, _el));
-      <<"urn:xmpp:mam:1">> ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              Never,
-                              decode_mam_always(<<"urn:xmpp:mam:1">>,
-                                                __IgnoreEls, _el));
-      <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              Never,
-                              decode_mam_always(<<"urn:xmpp:mam:tmp">>,
-                                                __IgnoreEls, _el));
-      _ ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              Never, Always)
-    end;
-decode_mam_prefs_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"never">>, _attrs, _} = _el | _els], Never,
-                    Always) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"urn:xmpp:mam:1">>;
-              __TopXMLNS == <<"urn:xmpp:mam:0">>;
-              __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_mam_never(__TopXMLNS, __IgnoreEls, _el),
-                              Always);
-      <<"urn:xmpp:mam:0">> ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_mam_never(<<"urn:xmpp:mam:0">>,
-                                               __IgnoreEls, _el),
-                              Always);
-      <<"urn:xmpp:mam:1">> ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_mam_never(<<"urn:xmpp:mam:1">>,
-                                               __IgnoreEls, _el),
-                              Always);
-      <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_mam_never(<<"urn:xmpp:mam:tmp">>,
-                                               __IgnoreEls, _el),
-                              Always);
-      _ ->
-         decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                              Never, Always)
-    end;
-decode_mam_prefs_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Never, Always) ->
-    decode_mam_prefs_els(__TopXMLNS, __IgnoreEls, _els,
-                        Never, Always).
-
-decode_mam_prefs_attrs(__TopXMLNS,
-                      [{<<"default">>, _val} | _attrs], _Default, Xmlns) ->
-    decode_mam_prefs_attrs(__TopXMLNS, _attrs, _val, Xmlns);
-decode_mam_prefs_attrs(__TopXMLNS,
-                      [{<<"xmlns">>, _val} | _attrs], Default, _Xmlns) ->
-    decode_mam_prefs_attrs(__TopXMLNS, _attrs, Default,
-                          _val);
-decode_mam_prefs_attrs(__TopXMLNS, [_ | _attrs],
-                      Default, Xmlns) ->
-    decode_mam_prefs_attrs(__TopXMLNS, _attrs, Default,
-                          Xmlns);
-decode_mam_prefs_attrs(__TopXMLNS, [], Default,
-                      Xmlns) ->
-    {decode_mam_prefs_attr_default(__TopXMLNS, Default),
-     decode_mam_prefs_attr_xmlns(__TopXMLNS, Xmlns)}.
-
-encode_mam_prefs({mam_prefs, Xmlns, Default, Always,
-                 Never},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:mam:0">>,
-                                     <<"urn:xmpp:mam:1">>,
-                                     <<"urn:xmpp:mam:tmp">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_mam_prefs_$never'(Never,
-                                                  __NewTopXMLNS,
-                                                  'encode_mam_prefs_$always'(Always,
-                                                                             __NewTopXMLNS,
-                                                                             []))),
-    _attrs = encode_mam_prefs_attr_default(Default,
-                                          enc_xmlns_attrs(__NewTopXMLNS,
-                                                          __TopXMLNS)),
-    {xmlel, <<"prefs">>, _attrs, _els}.
-
-'encode_mam_prefs_$never'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_mam_prefs_$never'(Never, __TopXMLNS, _acc) ->
-    [encode_mam_never(Never, __TopXMLNS) | _acc].
-
-'encode_mam_prefs_$always'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_mam_prefs_$always'(Always, __TopXMLNS, _acc) ->
-    [encode_mam_always(Always, __TopXMLNS) | _acc].
-
-decode_mam_prefs_attr_default(__TopXMLNS, undefined) ->
-    undefined;
-decode_mam_prefs_attr_default(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [always, never, roster]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"default">>, <<"prefs">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mam_prefs_attr_default(undefined, _acc) -> _acc;
-encode_mam_prefs_attr_default(_val, _acc) ->
-    [{<<"default">>, enc_enum(_val)} | _acc].
-
-decode_mam_prefs_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_mam_prefs_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_mam_always(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"always">>, _attrs, _els}) ->
-    Jids = decode_mam_always_els(__TopXMLNS, __IgnoreEls,
-                                _els, []),
-    Jids.
-
-decode_mam_always_els(__TopXMLNS, __IgnoreEls, [],
-                     Jids) ->
-    lists:reverse(Jids);
-decode_mam_always_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"jid">>, _attrs, _} = _el | _els], Jids) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"urn:xmpp:mam:1">>;
-              __TopXMLNS == <<"urn:xmpp:mam:0">>;
-              __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                               [decode_mam_jid(__TopXMLNS, __IgnoreEls, _el)
-                                | Jids]);
-      <<"urn:xmpp:mam:0">> ->
-         decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                               [decode_mam_jid(<<"urn:xmpp:mam:0">>,
-                                               __IgnoreEls, _el)
-                                | Jids]);
-      <<"urn:xmpp:mam:1">> ->
-         decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                               [decode_mam_jid(<<"urn:xmpp:mam:1">>,
-                                               __IgnoreEls, _el)
-                                | Jids]);
-      <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                               [decode_mam_jid(<<"urn:xmpp:mam:tmp">>,
-                                               __IgnoreEls, _el)
-                                | Jids]);
-      _ ->
-         decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                               Jids)
-    end;
-decode_mam_always_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Jids) ->
-    decode_mam_always_els(__TopXMLNS, __IgnoreEls, _els,
-                         Jids).
-
-encode_mam_always(Jids, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"urn:xmpp:mam:0">>,
-                                     <<"urn:xmpp:mam:1">>,
-                                     <<"urn:xmpp:mam:tmp">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_mam_always_$jids'(Jids,
-                                                  __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"always">>, _attrs, _els}.
-
-'encode_mam_always_$jids'([], __TopXMLNS, _acc) -> _acc;
-'encode_mam_always_$jids'([Jids | _els], __TopXMLNS,
-                         _acc) ->
-    'encode_mam_always_$jids'(_els, __TopXMLNS,
-                             [encode_mam_jid(Jids, __TopXMLNS) | _acc]).
-
-decode_mam_never(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"never">>, _attrs, _els}) ->
-    Jids = decode_mam_never_els(__TopXMLNS, __IgnoreEls,
-                               _els, []),
-    Jids.
-
-decode_mam_never_els(__TopXMLNS, __IgnoreEls, [],
-                    Jids) ->
-    lists:reverse(Jids);
-decode_mam_never_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"jid">>, _attrs, _} = _el | _els], Jids) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"urn:xmpp:mam:1">>;
-              __TopXMLNS == <<"urn:xmpp:mam:0">>;
-              __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_mam_jid(__TopXMLNS, __IgnoreEls, _el)
-                               | Jids]);
-      <<"urn:xmpp:mam:0">> ->
-         decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_mam_jid(<<"urn:xmpp:mam:0">>,
-                                              __IgnoreEls, _el)
-                               | Jids]);
-      <<"urn:xmpp:mam:1">> ->
-         decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_mam_jid(<<"urn:xmpp:mam:1">>,
-                                              __IgnoreEls, _el)
-                               | Jids]);
-      <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_mam_jid(<<"urn:xmpp:mam:tmp">>,
-                                              __IgnoreEls, _el)
-                               | Jids]);
-      _ ->
-         decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                              Jids)
-    end;
-decode_mam_never_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Jids) ->
-    decode_mam_never_els(__TopXMLNS, __IgnoreEls, _els,
-                        Jids).
-
-encode_mam_never(Jids, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"urn:xmpp:mam:0">>,
-                                     <<"urn:xmpp:mam:1">>,
-                                     <<"urn:xmpp:mam:tmp">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_mam_never_$jids'(Jids,
-                                                 __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"never">>, _attrs, _els}.
-
-'encode_mam_never_$jids'([], __TopXMLNS, _acc) -> _acc;
-'encode_mam_never_$jids'([Jids | _els], __TopXMLNS,
-                        _acc) ->
-    'encode_mam_never_$jids'(_els, __TopXMLNS,
-                            [encode_mam_jid(Jids, __TopXMLNS) | _acc]).
-
-decode_mam_jid(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"jid">>, _attrs, _els}) ->
-    Cdata = decode_mam_jid_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<>>),
-    Cdata.
-
-decode_mam_jid_els(__TopXMLNS, __IgnoreEls, [],
-                  Cdata) ->
-    decode_mam_jid_cdata(__TopXMLNS, Cdata);
-decode_mam_jid_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlcdata, _data} | _els], Cdata) ->
-    decode_mam_jid_els(__TopXMLNS, __IgnoreEls, _els,
-                      <<Cdata/binary, _data/binary>>);
-decode_mam_jid_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Cdata) ->
-    decode_mam_jid_els(__TopXMLNS, __IgnoreEls, _els,
-                      Cdata).
-
-encode_mam_jid(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"urn:xmpp:mam:0">>,
-                                     <<"urn:xmpp:mam:1">>,
-                                     <<"urn:xmpp:mam:tmp">>],
-                                    __TopXMLNS),
-    _els = encode_mam_jid_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"jid">>, _attrs, _els}.
-
-decode_mam_jid_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"jid">>, __TopXMLNS}});
-decode_mam_jid_cdata(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"jid">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mam_jid_cdata(_val, _acc) ->
-    [{xmlcdata, enc_jid(_val)} | _acc].
-
-decode_mam_result(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"result">>, _attrs, _els}) ->
-    __Els = decode_mam_result_els(__TopXMLNS, __IgnoreEls,
-                                 _els, []),
-    {Queryid, Xmlns, Id} =
-       decode_mam_result_attrs(__TopXMLNS, _attrs, undefined,
-                               undefined, undefined),
-    {mam_result, Xmlns, Queryid, Id, __Els}.
-
-decode_mam_result_els(__TopXMLNS, __IgnoreEls, [],
-                     __Els) ->
-    lists:reverse(__Els);
-decode_mam_result_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, _, _, _} = _el | _els], __Els) ->
-    if __IgnoreEls ->
-          decode_mam_result_els(__TopXMLNS, __IgnoreEls, _els,
-                                [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_mam_result_els(__TopXMLNS, __IgnoreEls, _els,
-                                      [decode(_el, __TopXMLNS, []) | __Els]);
-            false ->
-                decode_mam_result_els(__TopXMLNS, __IgnoreEls, _els,
-                                      __Els)
-          end
-    end;
-decode_mam_result_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], __Els) ->
-    decode_mam_result_els(__TopXMLNS, __IgnoreEls, _els,
-                         __Els).
-
-decode_mam_result_attrs(__TopXMLNS,
-                       [{<<"queryid">>, _val} | _attrs], _Queryid, Xmlns,
-                       Id) ->
-    decode_mam_result_attrs(__TopXMLNS, _attrs, _val, Xmlns,
-                           Id);
-decode_mam_result_attrs(__TopXMLNS,
-                       [{<<"xmlns">>, _val} | _attrs], Queryid, _Xmlns, Id) ->
-    decode_mam_result_attrs(__TopXMLNS, _attrs, Queryid,
-                           _val, Id);
-decode_mam_result_attrs(__TopXMLNS,
-                       [{<<"id">>, _val} | _attrs], Queryid, Xmlns, _Id) ->
-    decode_mam_result_attrs(__TopXMLNS, _attrs, Queryid,
-                           Xmlns, _val);
-decode_mam_result_attrs(__TopXMLNS, [_ | _attrs],
-                       Queryid, Xmlns, Id) ->
-    decode_mam_result_attrs(__TopXMLNS, _attrs, Queryid,
-                           Xmlns, Id);
-decode_mam_result_attrs(__TopXMLNS, [], Queryid, Xmlns,
-                       Id) ->
-    {decode_mam_result_attr_queryid(__TopXMLNS, Queryid),
-     decode_mam_result_attr_xmlns(__TopXMLNS, Xmlns),
-     decode_mam_result_attr_id(__TopXMLNS, Id)}.
-
-encode_mam_result({mam_result, Xmlns, Queryid, Id,
-                  __Els},
-                 __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:mam:0">>,
-                                     <<"urn:xmpp:mam:1">>,
-                                     <<"urn:xmpp:mam:tmp">>],
-                                    __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els],
-    _attrs = encode_mam_result_attr_id(Id,
-                                      encode_mam_result_attr_queryid(Queryid,
-                                                                     enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                     __TopXMLNS))),
-    {xmlel, <<"result">>, _attrs, _els}.
-
-decode_mam_result_attr_queryid(__TopXMLNS, undefined) ->
-    <<>>;
-decode_mam_result_attr_queryid(__TopXMLNS, _val) ->
-    _val.
-
-encode_mam_result_attr_queryid(<<>>, _acc) -> _acc;
-encode_mam_result_attr_queryid(_val, _acc) ->
-    [{<<"queryid">>, _val} | _acc].
-
-decode_mam_result_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_mam_result_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_mam_result_attr_id(__TopXMLNS, undefined) ->
-    <<>>;
-decode_mam_result_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_mam_result_attr_id(<<>>, _acc) -> _acc;
-encode_mam_result_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_mam_archived(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"archived">>, _attrs, _els}) ->
-    {Id, By} = decode_mam_archived_attrs(__TopXMLNS, _attrs,
-                                        undefined, undefined),
-    {mam_archived, By, Id}.
-
-decode_mam_archived_attrs(__TopXMLNS,
-                         [{<<"id">>, _val} | _attrs], _Id, By) ->
-    decode_mam_archived_attrs(__TopXMLNS, _attrs, _val, By);
-decode_mam_archived_attrs(__TopXMLNS,
-                         [{<<"by">>, _val} | _attrs], Id, _By) ->
-    decode_mam_archived_attrs(__TopXMLNS, _attrs, Id, _val);
-decode_mam_archived_attrs(__TopXMLNS, [_ | _attrs], Id,
-                         By) ->
-    decode_mam_archived_attrs(__TopXMLNS, _attrs, Id, By);
-decode_mam_archived_attrs(__TopXMLNS, [], Id, By) ->
-    {decode_mam_archived_attr_id(__TopXMLNS, Id),
-     decode_mam_archived_attr_by(__TopXMLNS, By)}.
-
-encode_mam_archived({mam_archived, By, Id},
-                   __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:mam:tmp">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_mam_archived_attr_by(By,
-                                        encode_mam_archived_attr_id(Id,
-                                                                    enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                    __TopXMLNS))),
-    {xmlel, <<"archived">>, _attrs, _els}.
-
-decode_mam_archived_attr_id(__TopXMLNS, undefined) ->
-    <<>>;
-decode_mam_archived_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_mam_archived_attr_id(<<>>, _acc) -> _acc;
-encode_mam_archived_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_mam_archived_attr_by(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"by">>, <<"archived">>, __TopXMLNS}});
-decode_mam_archived_attr_by(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"by">>, <<"archived">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mam_archived_attr_by(_val, _acc) ->
-    [{<<"by">>, enc_jid(_val)} | _acc].
-
-decode_mam_query(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"query">>, _attrs, _els}) ->
-    {Xdata, Withtext, End, Start, With, Rsm} =
-       decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                            undefined, undefined, undefined, undefined,
-                            undefined, undefined),
-    {Id, Xmlns} = decode_mam_query_attrs(__TopXMLNS, _attrs,
-                                        undefined, undefined),
-    {mam_query, Xmlns, Id, Start, End, With, Withtext, Rsm,
-     Xdata}.
-
-decode_mam_query_els(__TopXMLNS, __IgnoreEls, [], Xdata,
-                    Withtext, End, Start, With, Rsm) ->
-    {Xdata, Withtext, End, Start, With, Rsm};
-decode_mam_query_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"start">>, _attrs, _} = _el | _els], Xdata,
-                    Withtext, End, Start, With, Rsm) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End,
-                              decode_mam_start(__TopXMLNS, __IgnoreEls, _el),
-                              With, Rsm);
-      <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End,
-                              decode_mam_start(<<"urn:xmpp:mam:tmp">>,
-                                               __IgnoreEls, _el),
-                              With, Rsm);
-      _ ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End, Start, With, Rsm)
-    end;
-decode_mam_query_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"end">>, _attrs, _} = _el | _els], Xdata,
-                    Withtext, End, Start, With, Rsm) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext,
-                              decode_mam_end(__TopXMLNS, __IgnoreEls, _el),
-                              Start, With, Rsm);
-      <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext,
-                              decode_mam_end(<<"urn:xmpp:mam:tmp">>,
-                                             __IgnoreEls, _el),
-                              Start, With, Rsm);
-      _ ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End, Start, With, Rsm)
-    end;
-decode_mam_query_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"with">>, _attrs, _} = _el | _els], Xdata,
-                    Withtext, End, Start, With, Rsm) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End, Start,
-                              decode_mam_with(__TopXMLNS, __IgnoreEls, _el),
-                              Rsm);
-      <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End, Start,
-                              decode_mam_with(<<"urn:xmpp:mam:tmp">>,
-                                              __IgnoreEls, _el),
-                              Rsm);
-      _ ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End, Start, With, Rsm)
-    end;
-decode_mam_query_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"withtext">>, _attrs, _} = _el | _els],
-                    Xdata, Withtext, End, Start, With, Rsm) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata,
-                              decode_mam_withtext(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                              End, Start, With, Rsm);
-      <<"urn:xmpp:mam:tmp">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata,
-                              decode_mam_withtext(<<"urn:xmpp:mam:tmp">>,
-                                                  __IgnoreEls, _el),
-                              End, Start, With, Rsm);
-      _ ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End, Start, With, Rsm)
-    end;
-decode_mam_query_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"set">>, _attrs, _} = _el | _els], Xdata,
-                    Withtext, End, Start, With, Rsm) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End, Start, With,
-                              decode_rsm_set(<<"http://jabber.org/protocol/rsm">>,
-                                             __IgnoreEls, _el));
-      _ ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End, Start, With, Rsm)
-    end;
-decode_mam_query_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata,
-                    Withtext, End, Start, With, Rsm) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_xdata(<<"jabber:x:data">>, __IgnoreEls,
-                                           _el),
-                              Withtext, End, Start, With, Rsm);
-      _ ->
-         decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                              Xdata, Withtext, End, Start, With, Rsm)
-    end;
-decode_mam_query_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Xdata, Withtext, End, Start, With, Rsm) ->
-    decode_mam_query_els(__TopXMLNS, __IgnoreEls, _els,
-                        Xdata, Withtext, End, Start, With, Rsm).
-
-decode_mam_query_attrs(__TopXMLNS,
-                      [{<<"queryid">>, _val} | _attrs], _Id, Xmlns) ->
-    decode_mam_query_attrs(__TopXMLNS, _attrs, _val, Xmlns);
-decode_mam_query_attrs(__TopXMLNS,
-                      [{<<"xmlns">>, _val} | _attrs], Id, _Xmlns) ->
-    decode_mam_query_attrs(__TopXMLNS, _attrs, Id, _val);
-decode_mam_query_attrs(__TopXMLNS, [_ | _attrs], Id,
-                      Xmlns) ->
-    decode_mam_query_attrs(__TopXMLNS, _attrs, Id, Xmlns);
-decode_mam_query_attrs(__TopXMLNS, [], Id, Xmlns) ->
-    {decode_mam_query_attr_queryid(__TopXMLNS, Id),
-     decode_mam_query_attr_xmlns(__TopXMLNS, Xmlns)}.
-
-encode_mam_query({mam_query, Xmlns, Id, Start, End,
-                 With, Withtext, Rsm, Xdata},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"urn:xmpp:mam:0">>,
-                                     <<"urn:xmpp:mam:1">>,
-                                     <<"urn:xmpp:mam:tmp">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_mam_query_$xdata'(Xdata,
-                                                  __NewTopXMLNS,
-                                                  'encode_mam_query_$withtext'(Withtext,
-                                                                               __NewTopXMLNS,
-                                                                               'encode_mam_query_$end'(End,
-                                                                                                       __NewTopXMLNS,
-                                                                                                       'encode_mam_query_$start'(Start,
-                                                                                                                                 __NewTopXMLNS,
-                                                                                                                                 'encode_mam_query_$with'(With,
-                                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                                          'encode_mam_query_$rsm'(Rsm,
-                                                                                                                                                                                  __NewTopXMLNS,
-                                                                                                                                                                                  []))))))),
-    _attrs = encode_mam_query_attr_queryid(Id,
-                                          enc_xmlns_attrs(__NewTopXMLNS,
-                                                          __TopXMLNS)),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_mam_query_$xdata'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_mam_query_$xdata'(Xdata, __TopXMLNS, _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-'encode_mam_query_$withtext'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_mam_query_$withtext'(Withtext, __TopXMLNS,
-                            _acc) ->
-    [encode_mam_withtext(Withtext, __TopXMLNS) | _acc].
-
-'encode_mam_query_$end'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_mam_query_$end'(End, __TopXMLNS, _acc) ->
-    [encode_mam_end(End, __TopXMLNS) | _acc].
-
-'encode_mam_query_$start'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_mam_query_$start'(Start, __TopXMLNS, _acc) ->
-    [encode_mam_start(Start, __TopXMLNS) | _acc].
-
-'encode_mam_query_$with'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_mam_query_$with'(With, __TopXMLNS, _acc) ->
-    [encode_mam_with(With, __TopXMLNS) | _acc].
-
-'encode_mam_query_$rsm'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_mam_query_$rsm'(Rsm, __TopXMLNS, _acc) ->
-    [encode_rsm_set(Rsm, __TopXMLNS) | _acc].
-
-decode_mam_query_attr_queryid(__TopXMLNS, undefined) ->
-    <<>>;
-decode_mam_query_attr_queryid(__TopXMLNS, _val) -> _val.
-
-encode_mam_query_attr_queryid(<<>>, _acc) -> _acc;
-encode_mam_query_attr_queryid(_val, _acc) ->
-    [{<<"queryid">>, _val} | _acc].
-
-decode_mam_query_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_mam_query_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_mam_withtext(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"withtext">>, _attrs, _els}) ->
-    Cdata = decode_mam_withtext_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_mam_withtext_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_mam_withtext_cdata(__TopXMLNS, Cdata);
-decode_mam_withtext_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_mam_withtext_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_mam_withtext_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_mam_withtext_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_mam_withtext(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:mam:tmp">>,
-                                    [], __TopXMLNS),
-    _els = encode_mam_withtext_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"withtext">>, _attrs, _els}.
-
-decode_mam_withtext_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"withtext">>, __TopXMLNS}});
-decode_mam_withtext_cdata(__TopXMLNS, _val) -> _val.
-
-encode_mam_withtext_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_mam_with(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"with">>, _attrs, _els}) ->
-    Cdata = decode_mam_with_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Cdata.
-
-decode_mam_with_els(__TopXMLNS, __IgnoreEls, [],
-                   Cdata) ->
-    decode_mam_with_cdata(__TopXMLNS, Cdata);
-decode_mam_with_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Cdata) ->
-    decode_mam_with_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Cdata/binary, _data/binary>>);
-decode_mam_with_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Cdata) ->
-    decode_mam_with_els(__TopXMLNS, __IgnoreEls, _els,
-                       Cdata).
-
-encode_mam_with(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:mam:tmp">>,
-                                    [], __TopXMLNS),
-    _els = encode_mam_with_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"with">>, _attrs, _els}.
-
-decode_mam_with_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"with">>, __TopXMLNS}});
-decode_mam_with_cdata(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"with">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mam_with_cdata(_val, _acc) ->
-    [{xmlcdata, enc_jid(_val)} | _acc].
-
-decode_mam_end(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"end">>, _attrs, _els}) ->
-    Cdata = decode_mam_end_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<>>),
-    Cdata.
-
-decode_mam_end_els(__TopXMLNS, __IgnoreEls, [],
-                  Cdata) ->
-    decode_mam_end_cdata(__TopXMLNS, Cdata);
-decode_mam_end_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlcdata, _data} | _els], Cdata) ->
-    decode_mam_end_els(__TopXMLNS, __IgnoreEls, _els,
-                      <<Cdata/binary, _data/binary>>);
-decode_mam_end_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Cdata) ->
-    decode_mam_end_els(__TopXMLNS, __IgnoreEls, _els,
-                      Cdata).
-
-encode_mam_end(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:mam:tmp">>,
-                                    [], __TopXMLNS),
-    _els = encode_mam_end_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"end">>, _attrs, _els}.
-
-decode_mam_end_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"end">>, __TopXMLNS}});
-decode_mam_end_cdata(__TopXMLNS, _val) ->
-    case catch dec_utc(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"end">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mam_end_cdata(_val, _acc) ->
-    [{xmlcdata, enc_utc(_val)} | _acc].
-
-decode_mam_start(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"start">>, _attrs, _els}) ->
-    Cdata = decode_mam_start_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_mam_start_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_mam_start_cdata(__TopXMLNS, Cdata);
-decode_mam_start_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_mam_start_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_mam_start_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_mam_start_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_mam_start(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:mam:tmp">>,
-                                    [], __TopXMLNS),
-    _els = encode_mam_start_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"start">>, _attrs, _els}.
-
-decode_mam_start_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"start">>, __TopXMLNS}});
-decode_mam_start_cdata(__TopXMLNS, _val) ->
-    case catch dec_utc(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"start">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_mam_start_cdata(_val, _acc) ->
-    [{xmlcdata, enc_utc(_val)} | _acc].
-
-decode_rsm_set(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"set">>, _attrs, _els}) ->
-    {After, Last, First, Count, Before, Max, Index} =
-       decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els,
-                          undefined, undefined, undefined, undefined,
-                          undefined, undefined, undefined),
-    {rsm_set, After, Before, Count, First, Index, Last,
-     Max}.
-
-decode_rsm_set_els(__TopXMLNS, __IgnoreEls, [], After,
-                  Last, First, Count, Before, Max, Index) ->
-    {After, Last, First, Count, Before, Max, Index};
-decode_rsm_set_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"after">>, _attrs, _} = _el | _els], After,
-                  Last, First, Count, Before, Max, Index) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_rsm_after(__TopXMLNS, __IgnoreEls, _el),
-                            Last, First, Count, Before, Max, Index);
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_rsm_after(<<"http://jabber.org/protocol/rsm">>,
-                                             __IgnoreEls, _el),
-                            Last, First, Count, Before, Max, Index);
-      _ ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before, Max, Index)
-    end;
-decode_rsm_set_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"before">>, _attrs, _} = _el | _els], After,
-                  Last, First, Count, Before, Max, Index) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count,
-                            decode_rsm_before(__TopXMLNS, __IgnoreEls, _el),
-                            Max, Index);
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count,
-                            decode_rsm_before(<<"http://jabber.org/protocol/rsm">>,
-                                              __IgnoreEls, _el),
-                            Max, Index);
-      _ ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before, Max, Index)
-    end;
-decode_rsm_set_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"count">>, _attrs, _} = _el | _els], After,
-                  Last, First, Count, Before, Max, Index) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First,
-                            decode_rsm_count(__TopXMLNS, __IgnoreEls, _el),
-                            Before, Max, Index);
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First,
-                            decode_rsm_count(<<"http://jabber.org/protocol/rsm">>,
-                                             __IgnoreEls, _el),
-                            Before, Max, Index);
-      _ ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before, Max, Index)
-    end;
-decode_rsm_set_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"first">>, _attrs, _} = _el | _els], After,
-                  Last, First, Count, Before, Max, Index) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last,
-                            decode_rsm_first(__TopXMLNS, __IgnoreEls, _el),
-                            Count, Before, Max, Index);
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last,
-                            decode_rsm_first(<<"http://jabber.org/protocol/rsm">>,
-                                             __IgnoreEls, _el),
-                            Count, Before, Max, Index);
-      _ ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before, Max, Index)
-    end;
-decode_rsm_set_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"index">>, _attrs, _} = _el | _els], After,
-                  Last, First, Count, Before, Max, Index) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before, Max,
-                            decode_rsm_index(__TopXMLNS, __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before, Max,
-                            decode_rsm_index(<<"http://jabber.org/protocol/rsm">>,
-                                             __IgnoreEls, _el));
-      _ ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before, Max, Index)
-    end;
-decode_rsm_set_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"last">>, _attrs, _} = _el | _els], After,
-                  Last, First, Count, Before, Max, Index) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            decode_rsm_last(__TopXMLNS, __IgnoreEls, _el),
-                            First, Count, Before, Max, Index);
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            decode_rsm_last(<<"http://jabber.org/protocol/rsm">>,
-                                            __IgnoreEls, _el),
-                            First, Count, Before, Max, Index);
-      _ ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before, Max, Index)
-    end;
-decode_rsm_set_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"max">>, _attrs, _} = _el | _els], After,
-                  Last, First, Count, Before, Max, Index) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before,
-                            decode_rsm_max(__TopXMLNS, __IgnoreEls, _el),
-                            Index);
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before,
-                            decode_rsm_max(<<"http://jabber.org/protocol/rsm">>,
-                                           __IgnoreEls, _el),
-                            Index);
-      _ ->
-         decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                            Last, First, Count, Before, Max, Index)
-    end;
-decode_rsm_set_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  After, Last, First, Count, Before, Max, Index) ->
-    decode_rsm_set_els(__TopXMLNS, __IgnoreEls, _els, After,
-                      Last, First, Count, Before, Max, Index).
-
-encode_rsm_set({rsm_set, After, Before, Count, First,
-               Index, Last, Max},
-              __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/rsm">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_rsm_set_$after'(After,
-                                                __NewTopXMLNS,
-                                                'encode_rsm_set_$last'(Last,
-                                                                       __NewTopXMLNS,
-                                                                       'encode_rsm_set_$first'(First,
-                                                                                               __NewTopXMLNS,
-                                                                                               'encode_rsm_set_$count'(Count,
-                                                                                                                       __NewTopXMLNS,
-                                                                                                                       'encode_rsm_set_$before'(Before,
-                                                                                                                                                __NewTopXMLNS,
-                                                                                                                                                'encode_rsm_set_$max'(Max,
-                                                                                                                                                                      __NewTopXMLNS,
-                                                                                                                                                                      'encode_rsm_set_$index'(Index,
-                                                                                                                                                                                              __NewTopXMLNS,
-                                                                                                                                                                                              [])))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"set">>, _attrs, _els}.
-
-'encode_rsm_set_$after'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_rsm_set_$after'(After, __TopXMLNS, _acc) ->
-    [encode_rsm_after(After, __TopXMLNS) | _acc].
-
-'encode_rsm_set_$last'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_rsm_set_$last'(Last, __TopXMLNS, _acc) ->
-    [encode_rsm_last(Last, __TopXMLNS) | _acc].
-
-'encode_rsm_set_$first'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_rsm_set_$first'(First, __TopXMLNS, _acc) ->
-    [encode_rsm_first(First, __TopXMLNS) | _acc].
-
-'encode_rsm_set_$count'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_rsm_set_$count'(Count, __TopXMLNS, _acc) ->
-    [encode_rsm_count(Count, __TopXMLNS) | _acc].
-
-'encode_rsm_set_$before'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_rsm_set_$before'(Before, __TopXMLNS, _acc) ->
-    [encode_rsm_before(Before, __TopXMLNS) | _acc].
-
-'encode_rsm_set_$max'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_rsm_set_$max'(Max, __TopXMLNS, _acc) ->
-    [encode_rsm_max(Max, __TopXMLNS) | _acc].
-
-'encode_rsm_set_$index'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_rsm_set_$index'(Index, __TopXMLNS, _acc) ->
-    [encode_rsm_index(Index, __TopXMLNS) | _acc].
-
-decode_rsm_first(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"first">>, _attrs, _els}) ->
-    Data = decode_rsm_first_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Index = decode_rsm_first_attrs(__TopXMLNS, _attrs,
-                                  undefined),
-    {rsm_first, Index, Data}.
-
-decode_rsm_first_els(__TopXMLNS, __IgnoreEls, [],
-                    Data) ->
-    decode_rsm_first_cdata(__TopXMLNS, Data);
-decode_rsm_first_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Data) ->
-    decode_rsm_first_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Data/binary, _data/binary>>);
-decode_rsm_first_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Data) ->
-    decode_rsm_first_els(__TopXMLNS, __IgnoreEls, _els,
-                        Data).
-
-decode_rsm_first_attrs(__TopXMLNS,
-                      [{<<"index">>, _val} | _attrs], _Index) ->
-    decode_rsm_first_attrs(__TopXMLNS, _attrs, _val);
-decode_rsm_first_attrs(__TopXMLNS, [_ | _attrs],
-                      Index) ->
-    decode_rsm_first_attrs(__TopXMLNS, _attrs, Index);
-decode_rsm_first_attrs(__TopXMLNS, [], Index) ->
-    decode_rsm_first_attr_index(__TopXMLNS, Index).
-
-encode_rsm_first({rsm_first, Index, Data},
-                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/rsm">>,
-                        [], __TopXMLNS),
-    _els = encode_rsm_first_cdata(Data, []),
-    _attrs = encode_rsm_first_attr_index(Index,
-                                        enc_xmlns_attrs(__NewTopXMLNS,
-                                                        __TopXMLNS)),
-    {xmlel, <<"first">>, _attrs, _els}.
-
-decode_rsm_first_attr_index(__TopXMLNS, undefined) ->
-    undefined;
-decode_rsm_first_attr_index(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"index">>, <<"first">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_rsm_first_attr_index(undefined, _acc) -> _acc;
-encode_rsm_first_attr_index(_val, _acc) ->
-    [{<<"index">>, enc_int(_val)} | _acc].
-
-decode_rsm_first_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_rsm_first_cdata(__TopXMLNS, _val) -> _val.
-
-encode_rsm_first_cdata(<<>>, _acc) -> _acc;
-encode_rsm_first_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_rsm_max(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"max">>, _attrs, _els}) ->
-    Cdata = decode_rsm_max_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<>>),
-    Cdata.
-
-decode_rsm_max_els(__TopXMLNS, __IgnoreEls, [],
-                  Cdata) ->
-    decode_rsm_max_cdata(__TopXMLNS, Cdata);
-decode_rsm_max_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlcdata, _data} | _els], Cdata) ->
-    decode_rsm_max_els(__TopXMLNS, __IgnoreEls, _els,
-                      <<Cdata/binary, _data/binary>>);
-decode_rsm_max_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Cdata) ->
-    decode_rsm_max_els(__TopXMLNS, __IgnoreEls, _els,
-                      Cdata).
-
-encode_rsm_max(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/rsm">>,
-                        [], __TopXMLNS),
-    _els = encode_rsm_max_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"max">>, _attrs, _els}.
-
-decode_rsm_max_cdata(__TopXMLNS, <<>>) -> undefined;
-decode_rsm_max_cdata(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"max">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_rsm_max_cdata(undefined, _acc) -> _acc;
-encode_rsm_max_cdata(_val, _acc) ->
-    [{xmlcdata, enc_int(_val)} | _acc].
-
-decode_rsm_index(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"index">>, _attrs, _els}) ->
-    Cdata = decode_rsm_index_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_rsm_index_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_rsm_index_cdata(__TopXMLNS, Cdata);
-decode_rsm_index_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_rsm_index_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_rsm_index_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_rsm_index_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_rsm_index(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/rsm">>,
-                        [], __TopXMLNS),
-    _els = encode_rsm_index_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"index">>, _attrs, _els}.
-
-decode_rsm_index_cdata(__TopXMLNS, <<>>) -> undefined;
-decode_rsm_index_cdata(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"index">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_rsm_index_cdata(undefined, _acc) -> _acc;
-encode_rsm_index_cdata(_val, _acc) ->
-    [{xmlcdata, enc_int(_val)} | _acc].
-
-decode_rsm_count(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"count">>, _attrs, _els}) ->
-    Cdata = decode_rsm_count_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_rsm_count_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_rsm_count_cdata(__TopXMLNS, Cdata);
-decode_rsm_count_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_rsm_count_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_rsm_count_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_rsm_count_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_rsm_count(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/rsm">>,
-                        [], __TopXMLNS),
-    _els = encode_rsm_count_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"count">>, _attrs, _els}.
-
-decode_rsm_count_cdata(__TopXMLNS, <<>>) -> undefined;
-decode_rsm_count_cdata(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"count">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_rsm_count_cdata(undefined, _acc) -> _acc;
-encode_rsm_count_cdata(_val, _acc) ->
-    [{xmlcdata, enc_int(_val)} | _acc].
-
-decode_rsm_last(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"last">>, _attrs, _els}) ->
-    Cdata = decode_rsm_last_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Cdata.
-
-decode_rsm_last_els(__TopXMLNS, __IgnoreEls, [],
-                   Cdata) ->
-    decode_rsm_last_cdata(__TopXMLNS, Cdata);
-decode_rsm_last_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Cdata) ->
-    decode_rsm_last_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Cdata/binary, _data/binary>>);
-decode_rsm_last_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Cdata) ->
-    decode_rsm_last_els(__TopXMLNS, __IgnoreEls, _els,
-                       Cdata).
-
-encode_rsm_last(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/rsm">>,
-                        [], __TopXMLNS),
-    _els = encode_rsm_last_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"last">>, _attrs, _els}.
-
-decode_rsm_last_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_rsm_last_cdata(__TopXMLNS, _val) -> _val.
-
-encode_rsm_last_cdata(<<>>, _acc) -> _acc;
-encode_rsm_last_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_rsm_before(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"before">>, _attrs, _els}) ->
-    Cdata = decode_rsm_before_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_rsm_before_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_rsm_before_cdata(__TopXMLNS, Cdata);
-decode_rsm_before_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_rsm_before_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_rsm_before_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_rsm_before_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_rsm_before(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/rsm">>,
-                        [], __TopXMLNS),
-    _els = encode_rsm_before_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"before">>, _attrs, _els}.
-
-decode_rsm_before_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_rsm_before_cdata(__TopXMLNS, _val) -> _val.
-
-encode_rsm_before_cdata(<<>>, _acc) -> _acc;
-encode_rsm_before_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_rsm_after(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"after">>, _attrs, _els}) ->
-    Cdata = decode_rsm_after_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_rsm_after_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_rsm_after_cdata(__TopXMLNS, Cdata);
-decode_rsm_after_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_rsm_after_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_rsm_after_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_rsm_after_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_rsm_after(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/rsm">>,
-                        [], __TopXMLNS),
-    _els = encode_rsm_after_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"after">>, _attrs, _els}.
-
-decode_rsm_after_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_rsm_after_cdata(__TopXMLNS, _val) -> _val.
-
-encode_rsm_after_cdata(<<>>, _acc) -> _acc;
-encode_rsm_after_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_muc_unsubscribe(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"unsubscribe">>, _attrs, _els}) ->
-    {muc_unsubscribe}.
-
-encode_muc_unsubscribe({muc_unsubscribe}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:mucsub:0">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"unsubscribe">>, _attrs, _els}.
-
-decode_muc_subscribe(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"subscribe">>, _attrs, _els}) ->
-    Events = decode_muc_subscribe_els(__TopXMLNS,
-                                     __IgnoreEls, _els, []),
-    Nick = decode_muc_subscribe_attrs(__TopXMLNS, _attrs,
-                                     undefined),
-    {muc_subscribe, Nick, Events}.
-
-decode_muc_subscribe_els(__TopXMLNS, __IgnoreEls, [],
-                        Events) ->
-    lists:reverse(Events);
-decode_muc_subscribe_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlel, <<"event">>, _attrs, _} = _el | _els],
-                        Events) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:mucsub:0">> ->
-         decode_muc_subscribe_els(__TopXMLNS, __IgnoreEls, _els,
-                                  [decode_muc_subscribe_event(__TopXMLNS,
-                                                              __IgnoreEls, _el)
-                                   | Events]);
-      <<"urn:xmpp:mucsub:0">> ->
-         decode_muc_subscribe_els(__TopXMLNS, __IgnoreEls, _els,
-                                  [decode_muc_subscribe_event(<<"urn:xmpp:mucsub:0">>,
-                                                              __IgnoreEls, _el)
-                                   | Events]);
-      _ ->
-         decode_muc_subscribe_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Events)
-    end;
-decode_muc_subscribe_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Events) ->
-    decode_muc_subscribe_els(__TopXMLNS, __IgnoreEls, _els,
-                            Events).
-
-decode_muc_subscribe_attrs(__TopXMLNS,
-                          [{<<"nick">>, _val} | _attrs], _Nick) ->
-    decode_muc_subscribe_attrs(__TopXMLNS, _attrs, _val);
-decode_muc_subscribe_attrs(__TopXMLNS, [_ | _attrs],
-                          Nick) ->
-    decode_muc_subscribe_attrs(__TopXMLNS, _attrs, Nick);
-decode_muc_subscribe_attrs(__TopXMLNS, [], Nick) ->
-    decode_muc_subscribe_attr_nick(__TopXMLNS, Nick).
-
-encode_muc_subscribe({muc_subscribe, Nick, Events},
-                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:mucsub:0">>, [],
-                        __TopXMLNS),
-    _els =
-       lists:reverse('encode_muc_subscribe_$events'(Events,
-                                                    __NewTopXMLNS, [])),
-    _attrs = encode_muc_subscribe_attr_nick(Nick,
-                                           enc_xmlns_attrs(__NewTopXMLNS,
-                                                           __TopXMLNS)),
-    {xmlel, <<"subscribe">>, _attrs, _els}.
-
-'encode_muc_subscribe_$events'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_muc_subscribe_$events'([Events | _els],
-                              __TopXMLNS, _acc) ->
-    'encode_muc_subscribe_$events'(_els, __TopXMLNS,
-                                  [encode_muc_subscribe_event(Events,
-                                                              __TopXMLNS)
-                                   | _acc]).
-
-decode_muc_subscribe_attr_nick(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"nick">>, <<"subscribe">>,
-                  __TopXMLNS}});
-decode_muc_subscribe_attr_nick(__TopXMLNS, _val) ->
-    _val.
-
-encode_muc_subscribe_attr_nick(_val, _acc) ->
-    [{<<"nick">>, _val} | _acc].
-
-decode_muc_subscribe_event(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"event">>, _attrs, _els}) ->
-    Node = decode_muc_subscribe_event_attrs(__TopXMLNS,
-                                           _attrs, undefined),
-    Node.
-
-decode_muc_subscribe_event_attrs(__TopXMLNS,
-                                [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_muc_subscribe_event_attrs(__TopXMLNS, _attrs,
-                                    _val);
-decode_muc_subscribe_event_attrs(__TopXMLNS,
-                                [_ | _attrs], Node) ->
-    decode_muc_subscribe_event_attrs(__TopXMLNS, _attrs,
-                                    Node);
-decode_muc_subscribe_event_attrs(__TopXMLNS, [],
-                                Node) ->
-    decode_muc_subscribe_event_attr_node(__TopXMLNS, Node).
-
-encode_muc_subscribe_event(Node, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:mucsub:0">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_muc_subscribe_event_attr_node(Node,
-                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                 __TopXMLNS)),
-    {xmlel, <<"event">>, _attrs, _els}.
-
-decode_muc_subscribe_event_attr_node(__TopXMLNS,
-                                    undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"event">>, __TopXMLNS}});
-decode_muc_subscribe_event_attr_node(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-encode_muc_subscribe_event_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_muc_subscriptions(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"subscriptions">>, _attrs, _els}) ->
-    List = decode_muc_subscriptions_els(__TopXMLNS,
-                                       __IgnoreEls, _els, []),
-    {muc_subscriptions, List}.
-
-decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                            [], List) ->
-    lists:reverse(List);
-decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlel, <<"subscription">>, _attrs, _} = _el
-                             | _els],
-                            List) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:mucsub:0">> ->
-         decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                      _els,
-                                      [decode_muc_subscription(__TopXMLNS,
-                                                               __IgnoreEls,
-                                                               _el)
-                                       | List]);
-      <<"urn:xmpp:mucsub:0">> ->
-         decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                      _els,
-                                      [decode_muc_subscription(<<"urn:xmpp:mucsub:0">>,
-                                                               __IgnoreEls,
-                                                               _el)
-                                       | List]);
-      _ ->
-         decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                      _els, List)
-    end;
-decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                            [_ | _els], List) ->
-    decode_muc_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                _els, List).
-
-encode_muc_subscriptions({muc_subscriptions, List},
-                        __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:mucsub:0">>, [],
-                        __TopXMLNS),
-    _els =
-       lists:reverse('encode_muc_subscriptions_$list'(List,
-                                                      __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"subscriptions">>, _attrs, _els}.
-
-'encode_muc_subscriptions_$list'([], __TopXMLNS,
-                                _acc) ->
-    _acc;
-'encode_muc_subscriptions_$list'([List | _els],
-                                __TopXMLNS, _acc) ->
-    'encode_muc_subscriptions_$list'(_els, __TopXMLNS,
-                                    [encode_muc_subscription(List, __TopXMLNS)
-                                     | _acc]).
-
-decode_muc_subscription(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"subscription">>, _attrs, _els}) ->
-    Jid = decode_muc_subscription_attrs(__TopXMLNS, _attrs,
-                                       undefined),
-    Jid.
-
-decode_muc_subscription_attrs(__TopXMLNS,
-                             [{<<"jid">>, _val} | _attrs], _Jid) ->
-    decode_muc_subscription_attrs(__TopXMLNS, _attrs, _val);
-decode_muc_subscription_attrs(__TopXMLNS, [_ | _attrs],
-                             Jid) ->
-    decode_muc_subscription_attrs(__TopXMLNS, _attrs, Jid);
-decode_muc_subscription_attrs(__TopXMLNS, [], Jid) ->
-    decode_muc_subscription_attr_jid(__TopXMLNS, Jid).
-
-encode_muc_subscription(Jid, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:mucsub:0">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_muc_subscription_attr_jid(Jid,
-                                             enc_xmlns_attrs(__NewTopXMLNS,
-                                                             __TopXMLNS)),
-    {xmlel, <<"subscription">>, _attrs, _els}.
-
-decode_muc_subscription_attr_jid(__TopXMLNS,
-                                undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"subscription">>,
-                  __TopXMLNS}});
-decode_muc_subscription_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"subscription">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_subscription_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_x_conference(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"x">>, _attrs, _els}) ->
-    {Jid, Password, Reason, Thread, Continue} =
-       decode_x_conference_attrs(__TopXMLNS, _attrs, undefined,
-                                 undefined, undefined, undefined, undefined),
-    {x_conference, Jid, Password, Reason, Continue, Thread}.
-
-decode_x_conference_attrs(__TopXMLNS,
-                         [{<<"jid">>, _val} | _attrs], _Jid, Password, Reason,
-                         Thread, Continue) ->
-    decode_x_conference_attrs(__TopXMLNS, _attrs, _val,
-                             Password, Reason, Thread, Continue);
-decode_x_conference_attrs(__TopXMLNS,
-                         [{<<"password">>, _val} | _attrs], Jid, _Password,
-                         Reason, Thread, Continue) ->
-    decode_x_conference_attrs(__TopXMLNS, _attrs, Jid, _val,
-                             Reason, Thread, Continue);
-decode_x_conference_attrs(__TopXMLNS,
-                         [{<<"reason">>, _val} | _attrs], Jid, Password,
-                         _Reason, Thread, Continue) ->
-    decode_x_conference_attrs(__TopXMLNS, _attrs, Jid,
-                             Password, _val, Thread, Continue);
-decode_x_conference_attrs(__TopXMLNS,
-                         [{<<"thread">>, _val} | _attrs], Jid, Password,
-                         Reason, _Thread, Continue) ->
-    decode_x_conference_attrs(__TopXMLNS, _attrs, Jid,
-                             Password, Reason, _val, Continue);
-decode_x_conference_attrs(__TopXMLNS,
-                         [{<<"continue">>, _val} | _attrs], Jid, Password,
-                         Reason, Thread, _Continue) ->
-    decode_x_conference_attrs(__TopXMLNS, _attrs, Jid,
-                             Password, Reason, Thread, _val);
-decode_x_conference_attrs(__TopXMLNS, [_ | _attrs], Jid,
-                         Password, Reason, Thread, Continue) ->
-    decode_x_conference_attrs(__TopXMLNS, _attrs, Jid,
-                             Password, Reason, Thread, Continue);
-decode_x_conference_attrs(__TopXMLNS, [], Jid, Password,
-                         Reason, Thread, Continue) ->
-    {decode_x_conference_attr_jid(__TopXMLNS, Jid),
-     decode_x_conference_attr_password(__TopXMLNS, Password),
-     decode_x_conference_attr_reason(__TopXMLNS, Reason),
-     decode_x_conference_attr_thread(__TopXMLNS, Thread),
-     decode_x_conference_attr_continue(__TopXMLNS,
-                                      Continue)}.
-
-encode_x_conference({x_conference, Jid, Password,
-                    Reason, Continue, Thread},
-                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:x:conference">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_x_conference_attr_continue(Continue,
-                                              encode_x_conference_attr_thread(Thread,
-                                                                              encode_x_conference_attr_reason(Reason,
-                                                                                                              encode_x_conference_attr_password(Password,
-                                                                                                                                                encode_x_conference_attr_jid(Jid,
-                                                                                                                                                                             enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                                                             __TopXMLNS)))))),
-    {xmlel, <<"x">>, _attrs, _els}.
-
-decode_x_conference_attr_jid(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"x">>, __TopXMLNS}});
-decode_x_conference_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"x">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_x_conference_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_x_conference_attr_password(__TopXMLNS,
-                                 undefined) ->
-    <<>>;
-decode_x_conference_attr_password(__TopXMLNS, _val) ->
-    _val.
-
-encode_x_conference_attr_password(<<>>, _acc) -> _acc;
-encode_x_conference_attr_password(_val, _acc) ->
-    [{<<"password">>, _val} | _acc].
-
-decode_x_conference_attr_reason(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_x_conference_attr_reason(__TopXMLNS, _val) ->
-    _val.
-
-encode_x_conference_attr_reason(<<>>, _acc) -> _acc;
-encode_x_conference_attr_reason(_val, _acc) ->
-    [{<<"reason">>, _val} | _acc].
-
-decode_x_conference_attr_thread(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_x_conference_attr_thread(__TopXMLNS, _val) ->
-    _val.
-
-encode_x_conference_attr_thread(<<>>, _acc) -> _acc;
-encode_x_conference_attr_thread(_val, _acc) ->
-    [{<<"thread">>, _val} | _acc].
-
-decode_x_conference_attr_continue(__TopXMLNS,
-                                 undefined) ->
-    undefined;
-decode_x_conference_attr_continue(__TopXMLNS, _val) ->
-    case catch dec_bool(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"continue">>, <<"x">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_x_conference_attr_continue(undefined, _acc) ->
-    _acc;
-encode_x_conference_attr_continue(_val, _acc) ->
-    [{<<"continue">>, enc_bool(_val)} | _acc].
-
-decode_muc_unique(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"unique">>, _attrs, _els}) ->
-    Name = decode_muc_unique_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    {muc_unique, Name}.
-
-decode_muc_unique_els(__TopXMLNS, __IgnoreEls, [],
-                     Name) ->
-    decode_muc_unique_cdata(__TopXMLNS, Name);
-decode_muc_unique_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Name) ->
-    decode_muc_unique_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Name/binary, _data/binary>>);
-decode_muc_unique_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Name) ->
-    decode_muc_unique_els(__TopXMLNS, __IgnoreEls, _els,
-                         Name).
-
-encode_muc_unique({muc_unique, Name}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#unique">>,
-                        [], __TopXMLNS),
-    _els = encode_muc_unique_cdata(Name, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"unique">>, _attrs, _els}.
-
-decode_muc_unique_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_muc_unique_cdata(__TopXMLNS, _val) -> _val.
-
-encode_muc_unique_cdata(<<>>, _acc) -> _acc;
-encode_muc_unique_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_muc(__TopXMLNS, __IgnoreEls,
-          {xmlel, <<"x">>, _attrs, _els}) ->
-    {Password, History} = decode_muc_els(__TopXMLNS,
-                                        __IgnoreEls, _els, undefined,
-                                        undefined),
-    {muc, History, Password}.
-
-decode_muc_els(__TopXMLNS, __IgnoreEls, [], Password,
-              History) ->
-    {Password, History};
-decode_muc_els(__TopXMLNS, __IgnoreEls,
-              [{xmlel, <<"history">>, _attrs, _} = _el | _els],
-              Password, History) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc">> ->
-         decode_muc_els(__TopXMLNS, __IgnoreEls, _els, Password,
-                        decode_muc_history(__TopXMLNS, __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc">> ->
-         decode_muc_els(__TopXMLNS, __IgnoreEls, _els, Password,
-                        decode_muc_history(<<"http://jabber.org/protocol/muc">>,
-                                           __IgnoreEls, _el));
-      _ ->
-         decode_muc_els(__TopXMLNS, __IgnoreEls, _els, Password,
-                        History)
-    end;
-decode_muc_els(__TopXMLNS, __IgnoreEls,
-              [{xmlel, <<"password">>, _attrs, _} = _el | _els],
-              Password, History) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc">> ->
-         decode_muc_els(__TopXMLNS, __IgnoreEls, _els,
-                        decode_muc_password(__TopXMLNS, __IgnoreEls, _el),
-                        History);
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_els(__TopXMLNS, __IgnoreEls, _els,
-                        decode_muc_password(<<"http://jabber.org/protocol/muc#owner">>,
-                                            __IgnoreEls, _el),
-                        History);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_els(__TopXMLNS, __IgnoreEls, _els,
-                        decode_muc_password(<<"http://jabber.org/protocol/muc#user">>,
-                                            __IgnoreEls, _el),
-                        History);
-      <<"http://jabber.org/protocol/muc">> ->
-         decode_muc_els(__TopXMLNS, __IgnoreEls, _els,
-                        decode_muc_password(<<"http://jabber.org/protocol/muc">>,
-                                            __IgnoreEls, _el),
-                        History);
-      _ ->
-         decode_muc_els(__TopXMLNS, __IgnoreEls, _els, Password,
-                        History)
-    end;
-decode_muc_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-              Password, History) ->
-    decode_muc_els(__TopXMLNS, __IgnoreEls, _els, Password,
-                  History).
-
-encode_muc({muc, History, Password}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_muc_$password'(Password,
-                                               __NewTopXMLNS,
-                                               'encode_muc_$history'(History,
-                                                                     __NewTopXMLNS,
-                                                                     []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"x">>, _attrs, _els}.
-
-'encode_muc_$password'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_muc_$password'(Password, __TopXMLNS, _acc) ->
-    [encode_muc_password(Password, __TopXMLNS) | _acc].
-
-'encode_muc_$history'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_muc_$history'(History, __TopXMLNS, _acc) ->
-    [encode_muc_history(History, __TopXMLNS) | _acc].
-
-decode_muc_admin(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"query">>, _attrs, _els}) ->
-    Items = decode_muc_admin_els(__TopXMLNS, __IgnoreEls,
-                                _els, []),
-    {muc_admin, Items}.
-
-decode_muc_admin_els(__TopXMLNS, __IgnoreEls, [],
-                    Items) ->
-    lists:reverse(Items);
-decode_muc_admin_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_admin_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_muc_admin_item(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                               | Items]);
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_admin_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_muc_admin_item(<<"http://jabber.org/protocol/muc#admin">>,
-                                                     __IgnoreEls, _el)
-                               | Items]);
-      _ ->
-         decode_muc_admin_els(__TopXMLNS, __IgnoreEls, _els,
-                              Items)
-    end;
-decode_muc_admin_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Items) ->
-    decode_muc_admin_els(__TopXMLNS, __IgnoreEls, _els,
-                        Items).
-
-encode_muc_admin({muc_admin, Items}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#admin">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_muc_admin_$items'(Items,
-                                                  __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_muc_admin_$items'([], __TopXMLNS, _acc) -> _acc;
-'encode_muc_admin_$items'([Items | _els], __TopXMLNS,
-                         _acc) ->
-    'encode_muc_admin_$items'(_els, __TopXMLNS,
-                             [encode_muc_admin_item(Items, __TopXMLNS)
-                              | _acc]).
-
-decode_muc_admin_continue(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"continue">>, _attrs, _els}) ->
-    Thread = decode_muc_admin_continue_attrs(__TopXMLNS,
-                                            _attrs, undefined),
-    Thread.
-
-decode_muc_admin_continue_attrs(__TopXMLNS,
-                               [{<<"thread">>, _val} | _attrs], _Thread) ->
-    decode_muc_admin_continue_attrs(__TopXMLNS, _attrs,
-                                   _val);
-decode_muc_admin_continue_attrs(__TopXMLNS,
-                               [_ | _attrs], Thread) ->
-    decode_muc_admin_continue_attrs(__TopXMLNS, _attrs,
-                                   Thread);
-decode_muc_admin_continue_attrs(__TopXMLNS, [],
-                               Thread) ->
-    decode_muc_admin_continue_attr_thread(__TopXMLNS,
-                                         Thread).
-
-encode_muc_admin_continue(Thread, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#admin">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_muc_admin_continue_attr_thread(Thread,
-                                                  enc_xmlns_attrs(__NewTopXMLNS,
-                                                                  __TopXMLNS)),
-    {xmlel, <<"continue">>, _attrs, _els}.
-
-decode_muc_admin_continue_attr_thread(__TopXMLNS,
-                                     undefined) ->
-    <<>>;
-decode_muc_admin_continue_attr_thread(__TopXMLNS,
-                                     _val) ->
-    _val.
-
-encode_muc_admin_continue_attr_thread(<<>>, _acc) ->
-    _acc;
-encode_muc_admin_continue_attr_thread(_val, _acc) ->
-    [{<<"thread">>, _val} | _acc].
-
-decode_muc_admin_actor(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"actor">>, _attrs, _els}) ->
-    {Jid, Nick} = decode_muc_admin_actor_attrs(__TopXMLNS,
-                                              _attrs, undefined, undefined),
-    {muc_actor, Jid, Nick}.
-
-decode_muc_admin_actor_attrs(__TopXMLNS,
-                            [{<<"jid">>, _val} | _attrs], _Jid, Nick) ->
-    decode_muc_admin_actor_attrs(__TopXMLNS, _attrs, _val,
-                                Nick);
-decode_muc_admin_actor_attrs(__TopXMLNS,
-                            [{<<"nick">>, _val} | _attrs], Jid, _Nick) ->
-    decode_muc_admin_actor_attrs(__TopXMLNS, _attrs, Jid,
-                                _val);
-decode_muc_admin_actor_attrs(__TopXMLNS, [_ | _attrs],
-                            Jid, Nick) ->
-    decode_muc_admin_actor_attrs(__TopXMLNS, _attrs, Jid,
-                                Nick);
-decode_muc_admin_actor_attrs(__TopXMLNS, [], Jid,
-                            Nick) ->
-    {decode_muc_admin_actor_attr_jid(__TopXMLNS, Jid),
-     decode_muc_admin_actor_attr_nick(__TopXMLNS, Nick)}.
-
-encode_muc_admin_actor({muc_actor, Jid, Nick},
-                      __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#admin">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_muc_admin_actor_attr_nick(Nick,
-                                             encode_muc_admin_actor_attr_jid(Jid,
-                                                                             enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                             __TopXMLNS))),
-    {xmlel, <<"actor">>, _attrs, _els}.
-
-decode_muc_admin_actor_attr_jid(__TopXMLNS,
-                               undefined) ->
-    undefined;
-decode_muc_admin_actor_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"actor">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_admin_actor_attr_jid(undefined, _acc) ->
-    _acc;
-encode_muc_admin_actor_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_muc_admin_actor_attr_nick(__TopXMLNS,
-                                undefined) ->
-    <<>>;
-decode_muc_admin_actor_attr_nick(__TopXMLNS, _val) ->
-    _val.
-
-encode_muc_admin_actor_attr_nick(<<>>, _acc) -> _acc;
-encode_muc_admin_actor_attr_nick(_val, _acc) ->
-    [{<<"nick">>, _val} | _acc].
-
-decode_muc_admin_item(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"item">>, _attrs, _els}) ->
-    {Actor, Continue, Reason} =
-       decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 undefined, undefined, <<>>),
-    {Affiliation, Role, Jid, Nick} =
-       decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
-                                   undefined, undefined, undefined, undefined),
-    {muc_item, Actor, Continue, Reason, Affiliation, Role,
-     Jid, Nick}.
-
-decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, [],
-                         Actor, Continue, Reason) ->
-    {Actor, Continue, Reason};
-decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"actor">>, _attrs, _} = _el | _els], Actor,
-                         Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   decode_muc_admin_actor(__TopXMLNS,
-                                                          __IgnoreEls, _el),
-                                   Continue, Reason);
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   decode_muc_admin_actor(<<"http://jabber.org/protocol/muc#admin">>,
-                                                          __IgnoreEls, _el),
-                                   Continue, Reason);
-      _ ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue, Reason)
-    end;
-decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"continue">>, _attrs, _} = _el | _els],
-                         Actor, Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor,
-                                   decode_muc_admin_continue(__TopXMLNS,
-                                                             __IgnoreEls, _el),
-                                   Reason);
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor,
-                                   decode_muc_admin_continue(<<"http://jabber.org/protocol/muc#admin">>,
-                                                             __IgnoreEls, _el),
-                                   Reason);
-      _ ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue, Reason)
-    end;
-decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
-                         Actor, Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue,
-                                   decode_muc_reason(__TopXMLNS, __IgnoreEls,
-                                                     _el));
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue,
-                                   decode_muc_reason(<<"http://jabber.org/protocol/muc#user">>,
-                                                     __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue,
-                                   decode_muc_reason(<<"http://jabber.org/protocol/muc#admin">>,
-                                                     __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue,
-                                   decode_muc_reason(<<"http://jabber.org/protocol/muc#owner">>,
-                                                     __IgnoreEls, _el));
-      _ ->
-         decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue, Reason)
-    end;
-decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Actor, Continue, Reason) ->
-    decode_muc_admin_item_els(__TopXMLNS, __IgnoreEls, _els,
-                             Actor, Continue, Reason).
-
-decode_muc_admin_item_attrs(__TopXMLNS,
-                           [{<<"affiliation">>, _val} | _attrs], _Affiliation,
-                           Role, Jid, Nick) ->
-    decode_muc_admin_item_attrs(__TopXMLNS, _attrs, _val,
-                               Role, Jid, Nick);
-decode_muc_admin_item_attrs(__TopXMLNS,
-                           [{<<"role">>, _val} | _attrs], Affiliation, _Role,
-                           Jid, Nick) ->
-    decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
-                               Affiliation, _val, Jid, Nick);
-decode_muc_admin_item_attrs(__TopXMLNS,
-                           [{<<"jid">>, _val} | _attrs], Affiliation, Role,
-                           _Jid, Nick) ->
-    decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
-                               Affiliation, Role, _val, Nick);
-decode_muc_admin_item_attrs(__TopXMLNS,
-                           [{<<"nick">>, _val} | _attrs], Affiliation, Role,
-                           Jid, _Nick) ->
-    decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
-                               Affiliation, Role, Jid, _val);
-decode_muc_admin_item_attrs(__TopXMLNS, [_ | _attrs],
-                           Affiliation, Role, Jid, Nick) ->
-    decode_muc_admin_item_attrs(__TopXMLNS, _attrs,
-                               Affiliation, Role, Jid, Nick);
-decode_muc_admin_item_attrs(__TopXMLNS, [], Affiliation,
-                           Role, Jid, Nick) ->
-    {decode_muc_admin_item_attr_affiliation(__TopXMLNS,
-                                           Affiliation),
-     decode_muc_admin_item_attr_role(__TopXMLNS, Role),
-     decode_muc_admin_item_attr_jid(__TopXMLNS, Jid),
-     decode_muc_admin_item_attr_nick(__TopXMLNS, Nick)}.
-
-encode_muc_admin_item({muc_item, Actor, Continue,
-                      Reason, Affiliation, Role, Jid, Nick},
-                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#admin">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_muc_admin_item_$actor'(Actor,
-                                                    __NewTopXMLNS,
-                                                    'encode_muc_admin_item_$continue'(Continue,
-                                                                                      __NewTopXMLNS,
-                                                                                      'encode_muc_admin_item_$reason'(Reason,
-                                                                                                                      __NewTopXMLNS,
-                                                                                                                      [])))),
-    _attrs = encode_muc_admin_item_attr_nick(Nick,
-                                            encode_muc_admin_item_attr_jid(Jid,
-                                                                           encode_muc_admin_item_attr_role(Role,
-                                                                                                           encode_muc_admin_item_attr_affiliation(Affiliation,
-                                                                                                                                                  enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                                  __TopXMLNS))))),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-'encode_muc_admin_item_$actor'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_muc_admin_item_$actor'(Actor, __TopXMLNS,
-                              _acc) ->
-    [encode_muc_admin_actor(Actor, __TopXMLNS) | _acc].
-
-'encode_muc_admin_item_$continue'(undefined, __TopXMLNS,
-                                 _acc) ->
-    _acc;
-'encode_muc_admin_item_$continue'(Continue, __TopXMLNS,
-                                 _acc) ->
-    [encode_muc_admin_continue(Continue, __TopXMLNS)
-     | _acc].
-
-'encode_muc_admin_item_$reason'(<<>>, __TopXMLNS,
-                               _acc) ->
-    _acc;
-'encode_muc_admin_item_$reason'(Reason, __TopXMLNS,
-                               _acc) ->
-    [encode_muc_reason(Reason, __TopXMLNS) | _acc].
-
-decode_muc_admin_item_attr_affiliation(__TopXMLNS,
-                                      undefined) ->
-    undefined;
-decode_muc_admin_item_attr_affiliation(__TopXMLNS,
-                                      _val) ->
-    case catch dec_enum(_val,
-                       [admin, member, none, outcast, owner])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"affiliation">>, <<"item">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_admin_item_attr_affiliation(undefined,
-                                      _acc) ->
-    _acc;
-encode_muc_admin_item_attr_affiliation(_val, _acc) ->
-    [{<<"affiliation">>, enc_enum(_val)} | _acc].
-
-decode_muc_admin_item_attr_role(__TopXMLNS,
-                               undefined) ->
-    undefined;
-decode_muc_admin_item_attr_role(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [moderator, none, participant, visitor])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"role">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_admin_item_attr_role(undefined, _acc) ->
-    _acc;
-encode_muc_admin_item_attr_role(_val, _acc) ->
-    [{<<"role">>, enc_enum(_val)} | _acc].
-
-decode_muc_admin_item_attr_jid(__TopXMLNS, undefined) ->
-    undefined;
-decode_muc_admin_item_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_admin_item_attr_jid(undefined, _acc) -> _acc;
-encode_muc_admin_item_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_muc_admin_item_attr_nick(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_muc_admin_item_attr_nick(__TopXMLNS, _val) ->
-    _val.
-
-encode_muc_admin_item_attr_nick(<<>>, _acc) -> _acc;
-encode_muc_admin_item_attr_nick(_val, _acc) ->
-    [{<<"nick">>, _val} | _acc].
-
-decode_muc_owner_item(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"item">>, _attrs, _els}) ->
-    {Actor, Continue, Reason} =
-       decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 undefined, undefined, <<>>),
-    {Affiliation, Role, Jid, Nick} =
-       decode_muc_owner_item_attrs(__TopXMLNS, _attrs,
-                                   undefined, undefined, undefined, undefined),
-    {muc_item, Actor, Continue, Reason, Affiliation, Role,
-     Jid, Nick}.
-
-decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, [],
-                         Actor, Continue, Reason) ->
-    {Actor, Continue, Reason};
-decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"actor">>, _attrs, _} = _el | _els], Actor,
-                         Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   decode_muc_admin_actor(<<"http://jabber.org/protocol/muc#admin">>,
-                                                          __IgnoreEls, _el),
-                                   Continue, Reason);
-      _ ->
-         decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue, Reason)
-    end;
-decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"continue">>, _attrs, _} = _el | _els],
-                         Actor, Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor,
-                                   decode_muc_admin_continue(<<"http://jabber.org/protocol/muc#admin">>,
-                                                             __IgnoreEls, _el),
-                                   Reason);
-      _ ->
-         decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue, Reason)
-    end;
-decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
-                         Actor, Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue,
-                                   decode_muc_reason(__TopXMLNS, __IgnoreEls,
-                                                     _el));
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue,
-                                   decode_muc_reason(<<"http://jabber.org/protocol/muc#user">>,
-                                                     __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue,
-                                   decode_muc_reason(<<"http://jabber.org/protocol/muc#admin">>,
-                                                     __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue,
-                                   decode_muc_reason(<<"http://jabber.org/protocol/muc#owner">>,
-                                                     __IgnoreEls, _el));
-      _ ->
-         decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Actor, Continue, Reason)
-    end;
-decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Actor, Continue, Reason) ->
-    decode_muc_owner_item_els(__TopXMLNS, __IgnoreEls, _els,
-                             Actor, Continue, Reason).
-
-decode_muc_owner_item_attrs(__TopXMLNS,
-                           [{<<"affiliation">>, _val} | _attrs], _Affiliation,
-                           Role, Jid, Nick) ->
-    decode_muc_owner_item_attrs(__TopXMLNS, _attrs, _val,
-                               Role, Jid, Nick);
-decode_muc_owner_item_attrs(__TopXMLNS,
-                           [{<<"role">>, _val} | _attrs], Affiliation, _Role,
-                           Jid, Nick) ->
-    decode_muc_owner_item_attrs(__TopXMLNS, _attrs,
-                               Affiliation, _val, Jid, Nick);
-decode_muc_owner_item_attrs(__TopXMLNS,
-                           [{<<"jid">>, _val} | _attrs], Affiliation, Role,
-                           _Jid, Nick) ->
-    decode_muc_owner_item_attrs(__TopXMLNS, _attrs,
-                               Affiliation, Role, _val, Nick);
-decode_muc_owner_item_attrs(__TopXMLNS,
-                           [{<<"nick">>, _val} | _attrs], Affiliation, Role,
-                           Jid, _Nick) ->
-    decode_muc_owner_item_attrs(__TopXMLNS, _attrs,
-                               Affiliation, Role, Jid, _val);
-decode_muc_owner_item_attrs(__TopXMLNS, [_ | _attrs],
-                           Affiliation, Role, Jid, Nick) ->
-    decode_muc_owner_item_attrs(__TopXMLNS, _attrs,
-                               Affiliation, Role, Jid, Nick);
-decode_muc_owner_item_attrs(__TopXMLNS, [], Affiliation,
-                           Role, Jid, Nick) ->
-    {decode_muc_owner_item_attr_affiliation(__TopXMLNS,
-                                           Affiliation),
-     decode_muc_owner_item_attr_role(__TopXMLNS, Role),
-     decode_muc_owner_item_attr_jid(__TopXMLNS, Jid),
-     decode_muc_owner_item_attr_nick(__TopXMLNS, Nick)}.
-
-encode_muc_owner_item({muc_item, Actor, Continue,
-                      Reason, Affiliation, Role, Jid, Nick},
-                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#owner">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_muc_owner_item_$actor'(Actor,
-                                                    __NewTopXMLNS,
-                                                    'encode_muc_owner_item_$continue'(Continue,
-                                                                                      __NewTopXMLNS,
-                                                                                      'encode_muc_owner_item_$reason'(Reason,
-                                                                                                                      __NewTopXMLNS,
-                                                                                                                      [])))),
-    _attrs = encode_muc_owner_item_attr_nick(Nick,
-                                            encode_muc_owner_item_attr_jid(Jid,
-                                                                           encode_muc_owner_item_attr_role(Role,
-                                                                                                           encode_muc_owner_item_attr_affiliation(Affiliation,
-                                                                                                                                                  enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                                  __TopXMLNS))))),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-'encode_muc_owner_item_$actor'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_muc_owner_item_$actor'(Actor, __TopXMLNS,
-                              _acc) ->
-    [encode_muc_admin_actor(Actor, __TopXMLNS) | _acc].
-
-'encode_muc_owner_item_$continue'(undefined, __TopXMLNS,
-                                 _acc) ->
-    _acc;
-'encode_muc_owner_item_$continue'(Continue, __TopXMLNS,
-                                 _acc) ->
-    [encode_muc_admin_continue(Continue, __TopXMLNS)
-     | _acc].
-
-'encode_muc_owner_item_$reason'(<<>>, __TopXMLNS,
-                               _acc) ->
-    _acc;
-'encode_muc_owner_item_$reason'(Reason, __TopXMLNS,
-                               _acc) ->
-    [encode_muc_reason(Reason, __TopXMLNS) | _acc].
-
-decode_muc_owner_item_attr_affiliation(__TopXMLNS,
-                                      undefined) ->
-    undefined;
-decode_muc_owner_item_attr_affiliation(__TopXMLNS,
-                                      _val) ->
-    case catch dec_enum(_val,
-                       [admin, member, none, outcast, owner])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"affiliation">>, <<"item">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_owner_item_attr_affiliation(undefined,
-                                      _acc) ->
-    _acc;
-encode_muc_owner_item_attr_affiliation(_val, _acc) ->
-    [{<<"affiliation">>, enc_enum(_val)} | _acc].
-
-decode_muc_owner_item_attr_role(__TopXMLNS,
-                               undefined) ->
-    undefined;
-decode_muc_owner_item_attr_role(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [moderator, none, participant, visitor])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"role">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_owner_item_attr_role(undefined, _acc) ->
-    _acc;
-encode_muc_owner_item_attr_role(_val, _acc) ->
-    [{<<"role">>, enc_enum(_val)} | _acc].
-
-decode_muc_owner_item_attr_jid(__TopXMLNS, undefined) ->
-    undefined;
-decode_muc_owner_item_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_owner_item_attr_jid(undefined, _acc) -> _acc;
-encode_muc_owner_item_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_muc_owner_item_attr_nick(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_muc_owner_item_attr_nick(__TopXMLNS, _val) ->
-    _val.
-
-encode_muc_owner_item_attr_nick(<<>>, _acc) -> _acc;
-encode_muc_owner_item_attr_nick(_val, _acc) ->
-    [{<<"nick">>, _val} | _acc].
-
-decode_muc_owner(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"query">>, _attrs, _els}) ->
-    {Items, Config, Destroy} =
-       decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els, [],
-                            undefined, undefined),
-    {muc_owner, Destroy, Config, Items}.
-
-decode_muc_owner_els(__TopXMLNS, __IgnoreEls, [], Items,
-                    Config, Destroy) ->
-    {lists:reverse(Items), Config, Destroy};
-decode_muc_owner_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"destroy">>, _attrs, _} = _el | _els], Items,
-                    Config, Destroy) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                              Items, Config,
-                              decode_muc_destroy(__TopXMLNS, __IgnoreEls,
-                                                 _el));
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                              Items, Config,
-                              decode_muc_destroy(<<"http://jabber.org/protocol/muc#user">>,
-                                                 __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                              Items, Config,
-                              decode_muc_destroy(<<"http://jabber.org/protocol/muc#owner">>,
-                                                 __IgnoreEls, _el));
-      _ ->
-         decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                              Items, Config, Destroy)
-    end;
-decode_muc_owner_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"x">>, _attrs, _} = _el | _els], Items,
-                    Config, Destroy) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                              Items,
-                              decode_xdata(<<"jabber:x:data">>, __IgnoreEls,
-                                           _el),
-                              Destroy);
-      _ ->
-         decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                              Items, Config, Destroy)
-    end;
-decode_muc_owner_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items,
-                    Config, Destroy) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_muc_owner_item(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                               | Items],
-                              Config, Destroy);
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_muc_owner_item(<<"http://jabber.org/protocol/muc#owner">>,
-                                                     __IgnoreEls, _el)
-                               | Items],
-                              Config, Destroy);
-      _ ->
-         decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                              Items, Config, Destroy)
-    end;
-decode_muc_owner_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Items, Config, Destroy) ->
-    decode_muc_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                        Items, Config, Destroy).
-
-encode_muc_owner({muc_owner, Destroy, Config, Items},
-                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#owner">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_muc_owner_$items'(Items,
-                                                  __NewTopXMLNS,
-                                                  'encode_muc_owner_$config'(Config,
-                                                                             __NewTopXMLNS,
-                                                                             'encode_muc_owner_$destroy'(Destroy,
-                                                                                                         __NewTopXMLNS,
-                                                                                                         [])))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_muc_owner_$items'([], __TopXMLNS, _acc) -> _acc;
-'encode_muc_owner_$items'([Items | _els], __TopXMLNS,
-                         _acc) ->
-    'encode_muc_owner_$items'(_els, __TopXMLNS,
-                             [encode_muc_owner_item(Items, __TopXMLNS)
-                              | _acc]).
-
-'encode_muc_owner_$config'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_muc_owner_$config'(Config, __TopXMLNS, _acc) ->
-    [encode_xdata(Config, __TopXMLNS) | _acc].
-
-'encode_muc_owner_$destroy'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_muc_owner_$destroy'(Destroy, __TopXMLNS,
-                           _acc) ->
-    [encode_muc_destroy(Destroy, __TopXMLNS) | _acc].
-
-decode_muc_password(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"password">>, _attrs, _els}) ->
-    Cdata = decode_muc_password_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_muc_password_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_muc_password_cdata(__TopXMLNS, Cdata);
-decode_muc_password_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_muc_password_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_muc_password_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_muc_password_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_muc_password(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"http://jabber.org/protocol/muc#owner">>,
-                                     <<"http://jabber.org/protocol/muc#user">>,
-                                     <<"http://jabber.org/protocol/muc">>],
-                                    __TopXMLNS),
-    _els = encode_muc_password_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"password">>, _attrs, _els}.
-
-decode_muc_password_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_muc_password_cdata(__TopXMLNS, _val) -> _val.
-
-encode_muc_password_cdata(<<>>, _acc) -> _acc;
-encode_muc_password_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_muc_user(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"x">>, _attrs, _els}) ->
-    {Status_codes, Items, Invites, Password, Decline,
-     Destroy} =
-       decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els, [],
-                           [], [], undefined, undefined, undefined),
-    {muc_user, Decline, Destroy, Invites, Items,
-     Status_codes, Password}.
-
-decode_muc_user_els(__TopXMLNS, __IgnoreEls, [],
-                   Status_codes, Items, Invites, Password, Decline,
-                   Destroy) ->
-    {lists:reverse(Status_codes), lists:reverse(Items),
-     lists:reverse(Invites), Password, Decline, Destroy};
-decode_muc_user_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"decline">>, _attrs, _} = _el | _els],
-                   Status_codes, Items, Invites, Password, Decline,
-                   Destroy) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password,
-                             decode_muc_user_decline(__TopXMLNS, __IgnoreEls,
-                                                     _el),
-                             Destroy);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password,
-                             decode_muc_user_decline(<<"http://jabber.org/protocol/muc#user">>,
-                                                     __IgnoreEls, _el),
-                             Destroy);
-      _ ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password, Decline,
-                             Destroy)
-    end;
-decode_muc_user_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"destroy">>, _attrs, _} = _el | _els],
-                   Status_codes, Items, Invites, Password, Decline,
-                   Destroy) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password, Decline,
-                             decode_muc_destroy(__TopXMLNS, __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password, Decline,
-                             decode_muc_destroy(<<"http://jabber.org/protocol/muc#user">>,
-                                                __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password, Decline,
-                             decode_muc_destroy(<<"http://jabber.org/protocol/muc#owner">>,
-                                                __IgnoreEls, _el));
-      _ ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password, Decline,
-                             Destroy)
-    end;
-decode_muc_user_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"password">>, _attrs, _} = _el | _els],
-                   Status_codes, Items, Invites, Password, Decline,
-                   Destroy) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites,
-                             decode_muc_password(__TopXMLNS, __IgnoreEls, _el),
-                             Decline, Destroy);
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites,
-                             decode_muc_password(<<"http://jabber.org/protocol/muc#owner">>,
-                                                 __IgnoreEls, _el),
-                             Decline, Destroy);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites,
-                             decode_muc_password(<<"http://jabber.org/protocol/muc#user">>,
-                                                 __IgnoreEls, _el),
-                             Decline, Destroy);
-      <<"http://jabber.org/protocol/muc">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites,
-                             decode_muc_password(<<"http://jabber.org/protocol/muc">>,
-                                                 __IgnoreEls, _el),
-                             Decline, Destroy);
-      _ ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password, Decline,
-                             Destroy)
-    end;
-decode_muc_user_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"invite">>, _attrs, _} = _el | _els],
-                   Status_codes, Items, Invites, Password, Decline,
-                   Destroy) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items,
-                             [decode_muc_user_invite(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                              | Invites],
-                             Password, Decline, Destroy);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items,
-                             [decode_muc_user_invite(<<"http://jabber.org/protocol/muc#user">>,
-                                                     __IgnoreEls, _el)
-                              | Invites],
-                             Password, Decline, Destroy);
-      _ ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password, Decline,
-                             Destroy)
-    end;
-decode_muc_user_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"item">>, _attrs, _} = _el | _els],
-                   Status_codes, Items, Invites, Password, Decline,
-                   Destroy) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes,
-                             [decode_muc_user_item(__TopXMLNS, __IgnoreEls,
-                                                   _el)
-                              | Items],
-                             Invites, Password, Decline, Destroy);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes,
-                             [decode_muc_user_item(<<"http://jabber.org/protocol/muc#user">>,
-                                                   __IgnoreEls, _el)
-                              | Items],
-                             Invites, Password, Decline, Destroy);
-      _ ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password, Decline,
-                             Destroy)
-    end;
-decode_muc_user_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"status">>, _attrs, _} = _el | _els],
-                   Status_codes, Items, Invites, Password, Decline,
-                   Destroy) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             case decode_muc_user_status(__TopXMLNS,
-                                                         __IgnoreEls, _el)
-                                 of
-                               undefined -> Status_codes;
-                               _new_el -> [_new_el | Status_codes]
-                             end,
-                             Items, Invites, Password, Decline, Destroy);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             case
-                               decode_muc_user_status(<<"http://jabber.org/protocol/muc#user">>,
-                                                      __IgnoreEls, _el)
-                                 of
-                               undefined -> Status_codes;
-                               _new_el -> [_new_el | Status_codes]
-                             end,
-                             Items, Invites, Password, Decline, Destroy);
-      _ ->
-         decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status_codes, Items, Invites, Password, Decline,
-                             Destroy)
-    end;
-decode_muc_user_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Status_codes, Items, Invites, Password, Decline,
-                   Destroy) ->
-    decode_muc_user_els(__TopXMLNS, __IgnoreEls, _els,
-                       Status_codes, Items, Invites, Password, Decline,
-                       Destroy).
-
-encode_muc_user({muc_user, Decline, Destroy, Invites,
-                Items, Status_codes, Password},
-               __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#user">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_muc_user_$status_codes'(Status_codes,
-                                                     __NewTopXMLNS,
-                                                     'encode_muc_user_$items'(Items,
-                                                                              __NewTopXMLNS,
-                                                                              'encode_muc_user_$invites'(Invites,
-                                                                                                         __NewTopXMLNS,
-                                                                                                         'encode_muc_user_$password'(Password,
-                                                                                                                                     __NewTopXMLNS,
-                                                                                                                                     'encode_muc_user_$decline'(Decline,
-                                                                                                                                                                __NewTopXMLNS,
-                                                                                                                                                                'encode_muc_user_$destroy'(Destroy,
-                                                                                                                                                                                           __NewTopXMLNS,
-                                                                                                                                                                                           []))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"x">>, _attrs, _els}.
-
-'encode_muc_user_$status_codes'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_muc_user_$status_codes'([Status_codes | _els],
-                               __TopXMLNS, _acc) ->
-    'encode_muc_user_$status_codes'(_els, __TopXMLNS,
-                                   [encode_muc_user_status(Status_codes,
-                                                           __TopXMLNS)
-                                    | _acc]).
-
-'encode_muc_user_$items'([], __TopXMLNS, _acc) -> _acc;
-'encode_muc_user_$items'([Items | _els], __TopXMLNS,
-                        _acc) ->
-    'encode_muc_user_$items'(_els, __TopXMLNS,
-                            [encode_muc_user_item(Items, __TopXMLNS) | _acc]).
-
-'encode_muc_user_$invites'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_muc_user_$invites'([Invites | _els], __TopXMLNS,
-                          _acc) ->
-    'encode_muc_user_$invites'(_els, __TopXMLNS,
-                              [encode_muc_user_invite(Invites, __TopXMLNS)
-                               | _acc]).
-
-'encode_muc_user_$password'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_muc_user_$password'(Password, __TopXMLNS,
-                           _acc) ->
-    [encode_muc_password(Password, __TopXMLNS) | _acc].
-
-'encode_muc_user_$decline'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_muc_user_$decline'(Decline, __TopXMLNS, _acc) ->
-    [encode_muc_user_decline(Decline, __TopXMLNS) | _acc].
-
-'encode_muc_user_$destroy'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_muc_user_$destroy'(Destroy, __TopXMLNS, _acc) ->
-    [encode_muc_destroy(Destroy, __TopXMLNS) | _acc].
-
-decode_muc_user_item(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"item">>, _attrs, _els}) ->
-    {Actor, Continue, Reason} =
-       decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                undefined, undefined, <<>>),
-    {Affiliation, Role, Jid, Nick} =
-       decode_muc_user_item_attrs(__TopXMLNS, _attrs,
-                                  undefined, undefined, undefined, undefined),
-    {muc_item, Actor, Continue, Reason, Affiliation, Role,
-     Jid, Nick}.
-
-decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, [],
-                        Actor, Continue, Reason) ->
-    {Actor, Continue, Reason};
-decode_muc_user_item_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlel, <<"actor">>, _attrs, _} = _el | _els], Actor,
-                        Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  decode_muc_user_actor(__TopXMLNS,
-                                                        __IgnoreEls, _el),
-                                  Continue, Reason);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  decode_muc_user_actor(<<"http://jabber.org/protocol/muc#user">>,
-                                                        __IgnoreEls, _el),
-                                  Continue, Reason);
-      _ ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Actor, Continue, Reason)
-    end;
-decode_muc_user_item_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlel, <<"continue">>, _attrs, _} = _el | _els],
-                        Actor, Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Actor,
-                                  decode_muc_user_continue(__TopXMLNS,
-                                                           __IgnoreEls, _el),
-                                  Reason);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Actor,
-                                  decode_muc_user_continue(<<"http://jabber.org/protocol/muc#user">>,
-                                                           __IgnoreEls, _el),
-                                  Reason);
-      _ ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Actor, Continue, Reason)
-    end;
-decode_muc_user_item_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlel, <<"reason">>, _attrs, _} = _el | _els], Actor,
-                        Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Actor, Continue,
-                                  decode_muc_reason(__TopXMLNS, __IgnoreEls,
-                                                    _el));
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Actor, Continue,
-                                  decode_muc_reason(<<"http://jabber.org/protocol/muc#user">>,
-                                                    __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Actor, Continue,
-                                  decode_muc_reason(<<"http://jabber.org/protocol/muc#admin">>,
-                                                    __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Actor, Continue,
-                                  decode_muc_reason(<<"http://jabber.org/protocol/muc#owner">>,
-                                                    __IgnoreEls, _el));
-      _ ->
-         decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Actor, Continue, Reason)
-    end;
-decode_muc_user_item_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Actor, Continue, Reason) ->
-    decode_muc_user_item_els(__TopXMLNS, __IgnoreEls, _els,
-                            Actor, Continue, Reason).
-
-decode_muc_user_item_attrs(__TopXMLNS,
-                          [{<<"affiliation">>, _val} | _attrs], _Affiliation,
-                          Role, Jid, Nick) ->
-    decode_muc_user_item_attrs(__TopXMLNS, _attrs, _val,
-                              Role, Jid, Nick);
-decode_muc_user_item_attrs(__TopXMLNS,
-                          [{<<"role">>, _val} | _attrs], Affiliation, _Role,
-                          Jid, Nick) ->
-    decode_muc_user_item_attrs(__TopXMLNS, _attrs,
-                              Affiliation, _val, Jid, Nick);
-decode_muc_user_item_attrs(__TopXMLNS,
-                          [{<<"jid">>, _val} | _attrs], Affiliation, Role,
-                          _Jid, Nick) ->
-    decode_muc_user_item_attrs(__TopXMLNS, _attrs,
-                              Affiliation, Role, _val, Nick);
-decode_muc_user_item_attrs(__TopXMLNS,
-                          [{<<"nick">>, _val} | _attrs], Affiliation, Role,
-                          Jid, _Nick) ->
-    decode_muc_user_item_attrs(__TopXMLNS, _attrs,
-                              Affiliation, Role, Jid, _val);
-decode_muc_user_item_attrs(__TopXMLNS, [_ | _attrs],
-                          Affiliation, Role, Jid, Nick) ->
-    decode_muc_user_item_attrs(__TopXMLNS, _attrs,
-                              Affiliation, Role, Jid, Nick);
-decode_muc_user_item_attrs(__TopXMLNS, [], Affiliation,
-                          Role, Jid, Nick) ->
-    {decode_muc_user_item_attr_affiliation(__TopXMLNS,
-                                          Affiliation),
-     decode_muc_user_item_attr_role(__TopXMLNS, Role),
-     decode_muc_user_item_attr_jid(__TopXMLNS, Jid),
-     decode_muc_user_item_attr_nick(__TopXMLNS, Nick)}.
-
-encode_muc_user_item({muc_item, Actor, Continue, Reason,
-                     Affiliation, Role, Jid, Nick},
-                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#user">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_muc_user_item_$actor'(Actor,
-                                                   __NewTopXMLNS,
-                                                   'encode_muc_user_item_$continue'(Continue,
-                                                                                    __NewTopXMLNS,
-                                                                                    'encode_muc_user_item_$reason'(Reason,
-                                                                                                                   __NewTopXMLNS,
-                                                                                                                   [])))),
-    _attrs = encode_muc_user_item_attr_nick(Nick,
-                                           encode_muc_user_item_attr_jid(Jid,
-                                                                         encode_muc_user_item_attr_role(Role,
-                                                                                                        encode_muc_user_item_attr_affiliation(Affiliation,
-                                                                                                                                              enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                              __TopXMLNS))))),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-'encode_muc_user_item_$actor'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_muc_user_item_$actor'(Actor, __TopXMLNS,
-                             _acc) ->
-    [encode_muc_user_actor(Actor, __TopXMLNS) | _acc].
-
-'encode_muc_user_item_$continue'(undefined, __TopXMLNS,
-                                _acc) ->
-    _acc;
-'encode_muc_user_item_$continue'(Continue, __TopXMLNS,
-                                _acc) ->
-    [encode_muc_user_continue(Continue, __TopXMLNS) | _acc].
-
-'encode_muc_user_item_$reason'(<<>>, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_muc_user_item_$reason'(Reason, __TopXMLNS,
-                              _acc) ->
-    [encode_muc_reason(Reason, __TopXMLNS) | _acc].
-
-decode_muc_user_item_attr_affiliation(__TopXMLNS,
-                                     undefined) ->
-    undefined;
-decode_muc_user_item_attr_affiliation(__TopXMLNS,
-                                     _val) ->
-    case catch dec_enum(_val,
-                       [admin, member, none, outcast, owner])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"affiliation">>, <<"item">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_user_item_attr_affiliation(undefined,
-                                     _acc) ->
-    _acc;
-encode_muc_user_item_attr_affiliation(_val, _acc) ->
-    [{<<"affiliation">>, enc_enum(_val)} | _acc].
-
-decode_muc_user_item_attr_role(__TopXMLNS, undefined) ->
-    undefined;
-decode_muc_user_item_attr_role(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [moderator, none, participant, visitor])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"role">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_user_item_attr_role(undefined, _acc) -> _acc;
-encode_muc_user_item_attr_role(_val, _acc) ->
-    [{<<"role">>, enc_enum(_val)} | _acc].
-
-decode_muc_user_item_attr_jid(__TopXMLNS, undefined) ->
-    undefined;
-decode_muc_user_item_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_user_item_attr_jid(undefined, _acc) -> _acc;
-encode_muc_user_item_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_muc_user_item_attr_nick(__TopXMLNS, undefined) ->
-    <<>>;
-decode_muc_user_item_attr_nick(__TopXMLNS, _val) ->
-    _val.
-
-encode_muc_user_item_attr_nick(<<>>, _acc) -> _acc;
-encode_muc_user_item_attr_nick(_val, _acc) ->
-    [{<<"nick">>, _val} | _acc].
-
-decode_muc_user_status(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"status">>, _attrs, _els}) ->
-    Code = decode_muc_user_status_attrs(__TopXMLNS, _attrs,
-                                       undefined),
-    Code.
-
-decode_muc_user_status_attrs(__TopXMLNS,
-                            [{<<"code">>, _val} | _attrs], _Code) ->
-    decode_muc_user_status_attrs(__TopXMLNS, _attrs, _val);
-decode_muc_user_status_attrs(__TopXMLNS, [_ | _attrs],
-                            Code) ->
-    decode_muc_user_status_attrs(__TopXMLNS, _attrs, Code);
-decode_muc_user_status_attrs(__TopXMLNS, [], Code) ->
-    decode_muc_user_status_attr_code(__TopXMLNS, Code).
-
-encode_muc_user_status(Code, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#user">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_muc_user_status_attr_code(Code,
-                                             enc_xmlns_attrs(__NewTopXMLNS,
-                                                             __TopXMLNS)),
-    {xmlel, <<"status">>, _attrs, _els}.
-
-decode_muc_user_status_attr_code(__TopXMLNS,
-                                undefined) ->
-    undefined;
-decode_muc_user_status_attr_code(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 100, 999) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"code">>, <<"status">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_user_status_attr_code(undefined, _acc) ->
-    _acc;
-encode_muc_user_status_attr_code(_val, _acc) ->
-    [{<<"code">>, enc_int(_val)} | _acc].
-
-decode_muc_user_continue(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"continue">>, _attrs, _els}) ->
-    Thread = decode_muc_user_continue_attrs(__TopXMLNS,
-                                           _attrs, undefined),
-    Thread.
-
-decode_muc_user_continue_attrs(__TopXMLNS,
-                              [{<<"thread">>, _val} | _attrs], _Thread) ->
-    decode_muc_user_continue_attrs(__TopXMLNS, _attrs,
-                                  _val);
-decode_muc_user_continue_attrs(__TopXMLNS, [_ | _attrs],
-                              Thread) ->
-    decode_muc_user_continue_attrs(__TopXMLNS, _attrs,
-                                  Thread);
-decode_muc_user_continue_attrs(__TopXMLNS, [],
-                              Thread) ->
-    decode_muc_user_continue_attr_thread(__TopXMLNS,
-                                        Thread).
-
-encode_muc_user_continue(Thread, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#user">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_muc_user_continue_attr_thread(Thread,
-                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                 __TopXMLNS)),
-    {xmlel, <<"continue">>, _attrs, _els}.
-
-decode_muc_user_continue_attr_thread(__TopXMLNS,
-                                    undefined) ->
-    <<>>;
-decode_muc_user_continue_attr_thread(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-encode_muc_user_continue_attr_thread(<<>>, _acc) ->
-    _acc;
-encode_muc_user_continue_attr_thread(_val, _acc) ->
-    [{<<"thread">>, _val} | _acc].
-
-decode_muc_user_actor(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"actor">>, _attrs, _els}) ->
-    {Jid, Nick} = decode_muc_user_actor_attrs(__TopXMLNS,
-                                             _attrs, undefined, undefined),
-    {muc_actor, Jid, Nick}.
-
-decode_muc_user_actor_attrs(__TopXMLNS,
-                           [{<<"jid">>, _val} | _attrs], _Jid, Nick) ->
-    decode_muc_user_actor_attrs(__TopXMLNS, _attrs, _val,
-                               Nick);
-decode_muc_user_actor_attrs(__TopXMLNS,
-                           [{<<"nick">>, _val} | _attrs], Jid, _Nick) ->
-    decode_muc_user_actor_attrs(__TopXMLNS, _attrs, Jid,
-                               _val);
-decode_muc_user_actor_attrs(__TopXMLNS, [_ | _attrs],
-                           Jid, Nick) ->
-    decode_muc_user_actor_attrs(__TopXMLNS, _attrs, Jid,
-                               Nick);
-decode_muc_user_actor_attrs(__TopXMLNS, [], Jid,
-                           Nick) ->
-    {decode_muc_user_actor_attr_jid(__TopXMLNS, Jid),
-     decode_muc_user_actor_attr_nick(__TopXMLNS, Nick)}.
-
-encode_muc_user_actor({muc_actor, Jid, Nick},
-                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#user">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_muc_user_actor_attr_nick(Nick,
-                                            encode_muc_user_actor_attr_jid(Jid,
-                                                                           enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                           __TopXMLNS))),
-    {xmlel, <<"actor">>, _attrs, _els}.
-
-decode_muc_user_actor_attr_jid(__TopXMLNS, undefined) ->
-    undefined;
-decode_muc_user_actor_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"actor">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_user_actor_attr_jid(undefined, _acc) -> _acc;
-encode_muc_user_actor_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_muc_user_actor_attr_nick(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_muc_user_actor_attr_nick(__TopXMLNS, _val) ->
-    _val.
-
-encode_muc_user_actor_attr_nick(<<>>, _acc) -> _acc;
-encode_muc_user_actor_attr_nick(_val, _acc) ->
-    [{<<"nick">>, _val} | _acc].
-
-decode_muc_user_invite(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"invite">>, _attrs, _els}) ->
-    {Continue, Reason} =
-       decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                                  _els, undefined, <<>>),
-    {To, From} = decode_muc_user_invite_attrs(__TopXMLNS,
-                                             _attrs, undefined, undefined),
-    {muc_invite, Reason, From, To, Continue}.
-
-decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls, [],
-                          Continue, Reason) ->
-    {Continue, Reason};
-decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                          [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
-                          Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                                    _els, Continue,
-                                    decode_muc_reason(__TopXMLNS, __IgnoreEls,
-                                                      _el));
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                                    _els, Continue,
-                                    decode_muc_reason(<<"http://jabber.org/protocol/muc#user">>,
-                                                      __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                                    _els, Continue,
-                                    decode_muc_reason(<<"http://jabber.org/protocol/muc#admin">>,
-                                                      __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                                    _els, Continue,
-                                    decode_muc_reason(<<"http://jabber.org/protocol/muc#owner">>,
-                                                      __IgnoreEls, _el));
-      _ ->
-         decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                                    _els, Continue, Reason)
-    end;
-decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                          [{xmlel, <<"continue">>, _attrs, _} = _el | _els],
-                          Continue, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                                    _els,
-                                    decode_muc_user_continue(__TopXMLNS,
-                                                             __IgnoreEls, _el),
-                                    Reason);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                                    _els,
-                                    decode_muc_user_continue(<<"http://jabber.org/protocol/muc#user">>,
-                                                             __IgnoreEls, _el),
-                                    Reason);
-      _ ->
-         decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                                    _els, Continue, Reason)
-    end;
-decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                          [_ | _els], Continue, Reason) ->
-    decode_muc_user_invite_els(__TopXMLNS, __IgnoreEls,
-                              _els, Continue, Reason).
-
-decode_muc_user_invite_attrs(__TopXMLNS,
-                            [{<<"to">>, _val} | _attrs], _To, From) ->
-    decode_muc_user_invite_attrs(__TopXMLNS, _attrs, _val,
-                                From);
-decode_muc_user_invite_attrs(__TopXMLNS,
-                            [{<<"from">>, _val} | _attrs], To, _From) ->
-    decode_muc_user_invite_attrs(__TopXMLNS, _attrs, To,
-                                _val);
-decode_muc_user_invite_attrs(__TopXMLNS, [_ | _attrs],
-                            To, From) ->
-    decode_muc_user_invite_attrs(__TopXMLNS, _attrs, To,
-                                From);
-decode_muc_user_invite_attrs(__TopXMLNS, [], To,
-                            From) ->
-    {decode_muc_user_invite_attr_to(__TopXMLNS, To),
-     decode_muc_user_invite_attr_from(__TopXMLNS, From)}.
-
-encode_muc_user_invite({muc_invite, Reason, From, To,
-                       Continue},
-                      __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#user">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_muc_user_invite_$continue'(Continue,
-                                                        __NewTopXMLNS,
-                                                        'encode_muc_user_invite_$reason'(Reason,
-                                                                                         __NewTopXMLNS,
-                                                                                         []))),
-    _attrs = encode_muc_user_invite_attr_from(From,
-                                             encode_muc_user_invite_attr_to(To,
-                                                                            enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                            __TopXMLNS))),
-    {xmlel, <<"invite">>, _attrs, _els}.
-
-'encode_muc_user_invite_$continue'(undefined,
-                                  __TopXMLNS, _acc) ->
-    _acc;
-'encode_muc_user_invite_$continue'(Continue, __TopXMLNS,
-                                  _acc) ->
-    [encode_muc_user_continue(Continue, __TopXMLNS) | _acc].
-
-'encode_muc_user_invite_$reason'(<<>>, __TopXMLNS,
-                                _acc) ->
-    _acc;
-'encode_muc_user_invite_$reason'(Reason, __TopXMLNS,
-                                _acc) ->
-    [encode_muc_reason(Reason, __TopXMLNS) | _acc].
-
-decode_muc_user_invite_attr_to(__TopXMLNS, undefined) ->
-    undefined;
-decode_muc_user_invite_attr_to(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"invite">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_user_invite_attr_to(undefined, _acc) -> _acc;
-encode_muc_user_invite_attr_to(_val, _acc) ->
-    [{<<"to">>, enc_jid(_val)} | _acc].
-
-decode_muc_user_invite_attr_from(__TopXMLNS,
-                                undefined) ->
-    undefined;
-decode_muc_user_invite_attr_from(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"invite">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_user_invite_attr_from(undefined, _acc) ->
-    _acc;
-encode_muc_user_invite_attr_from(_val, _acc) ->
-    [{<<"from">>, enc_jid(_val)} | _acc].
-
-decode_muc_destroy(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"destroy">>, _attrs, _els}) ->
-    {Password, Reason} = decode_muc_destroy_els(__TopXMLNS,
-                                               __IgnoreEls, _els, undefined,
-                                               <<>>),
-    {Jid, Xmlns} = decode_muc_destroy_attrs(__TopXMLNS,
-                                           _attrs, undefined, undefined),
-    {muc_destroy, Xmlns, Jid, Reason, Password}.
-
-decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, [],
-                      Password, Reason) ->
-    {Password, Reason};
-decode_muc_destroy_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
-                      Password, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">>;
-              __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                Password,
-                                decode_muc_reason(__TopXMLNS, __IgnoreEls,
-                                                  _el));
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                Password,
-                                decode_muc_reason(<<"http://jabber.org/protocol/muc#user">>,
-                                                  __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                Password,
-                                decode_muc_reason(<<"http://jabber.org/protocol/muc#admin">>,
-                                                  __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                Password,
-                                decode_muc_reason(<<"http://jabber.org/protocol/muc#owner">>,
-                                                  __IgnoreEls, _el));
-      _ ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                Password, Reason)
-    end;
-decode_muc_destroy_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"password">>, _attrs, _} = _el | _els],
-                      Password, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">>;
-              __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_muc_password(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                                Reason);
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_muc_password(<<"http://jabber.org/protocol/muc#owner">>,
-                                                    __IgnoreEls, _el),
-                                Reason);
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_muc_password(<<"http://jabber.org/protocol/muc#user">>,
-                                                    __IgnoreEls, _el),
-                                Reason);
-      <<"http://jabber.org/protocol/muc">> ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_muc_password(<<"http://jabber.org/protocol/muc">>,
-                                                    __IgnoreEls, _el),
-                                Reason);
-      _ ->
-         decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                                Password, Reason)
-    end;
-decode_muc_destroy_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Password, Reason) ->
-    decode_muc_destroy_els(__TopXMLNS, __IgnoreEls, _els,
-                          Password, Reason).
-
-decode_muc_destroy_attrs(__TopXMLNS,
-                        [{<<"jid">>, _val} | _attrs], _Jid, Xmlns) ->
-    decode_muc_destroy_attrs(__TopXMLNS, _attrs, _val,
-                            Xmlns);
-decode_muc_destroy_attrs(__TopXMLNS,
-                        [{<<"xmlns">>, _val} | _attrs], Jid, _Xmlns) ->
-    decode_muc_destroy_attrs(__TopXMLNS, _attrs, Jid, _val);
-decode_muc_destroy_attrs(__TopXMLNS, [_ | _attrs], Jid,
-                        Xmlns) ->
-    decode_muc_destroy_attrs(__TopXMLNS, _attrs, Jid,
-                            Xmlns);
-decode_muc_destroy_attrs(__TopXMLNS, [], Jid, Xmlns) ->
-    {decode_muc_destroy_attr_jid(__TopXMLNS, Jid),
-     decode_muc_destroy_attr_xmlns(__TopXMLNS, Xmlns)}.
-
-encode_muc_destroy({muc_destroy, Xmlns, Jid, Reason,
-                   Password},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"http://jabber.org/protocol/muc#user">>,
-                                     <<"http://jabber.org/protocol/muc#owner">>],
-                                    __TopXMLNS),
-    _els =
-       lists:reverse('encode_muc_destroy_$password'(Password,
-                                                    __NewTopXMLNS,
-                                                    'encode_muc_destroy_$reason'(Reason,
-                                                                                 __NewTopXMLNS,
-                                                                                 []))),
-    _attrs = encode_muc_destroy_attr_jid(Jid,
-                                        enc_xmlns_attrs(__NewTopXMLNS,
-                                                        __TopXMLNS)),
-    {xmlel, <<"destroy">>, _attrs, _els}.
-
-'encode_muc_destroy_$password'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_muc_destroy_$password'(Password, __TopXMLNS,
-                              _acc) ->
-    [encode_muc_password(Password, __TopXMLNS) | _acc].
-
-'encode_muc_destroy_$reason'(<<>>, __TopXMLNS, _acc) ->
-    _acc;
-'encode_muc_destroy_$reason'(Reason, __TopXMLNS,
-                            _acc) ->
-    [encode_muc_reason(Reason, __TopXMLNS) | _acc].
-
-decode_muc_destroy_attr_jid(__TopXMLNS, undefined) ->
-    undefined;
-decode_muc_destroy_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"destroy">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_destroy_attr_jid(undefined, _acc) -> _acc;
-encode_muc_destroy_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_muc_destroy_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_muc_destroy_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_muc_user_decline(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"decline">>, _attrs, _els}) ->
-    Reason = decode_muc_user_decline_els(__TopXMLNS,
-                                        __IgnoreEls, _els, <<>>),
-    {To, From} = decode_muc_user_decline_attrs(__TopXMLNS,
-                                              _attrs, undefined, undefined),
-    {muc_decline, Reason, From, To}.
-
-decode_muc_user_decline_els(__TopXMLNS, __IgnoreEls, [],
-                           Reason) ->
-    Reason;
-decode_muc_user_decline_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlel, <<"reason">>, _attrs, _} = _el | _els],
-                           Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_decline_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_muc_reason(__TopXMLNS, __IgnoreEls,
-                                                       _el));
-      <<"http://jabber.org/protocol/muc#user">> ->
-         decode_muc_user_decline_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_muc_reason(<<"http://jabber.org/protocol/muc#user">>,
-                                                       __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#admin">> ->
-         decode_muc_user_decline_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_muc_reason(<<"http://jabber.org/protocol/muc#admin">>,
-                                                       __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/muc#owner">> ->
-         decode_muc_user_decline_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_muc_reason(<<"http://jabber.org/protocol/muc#owner">>,
-                                                       __IgnoreEls, _el));
-      _ ->
-         decode_muc_user_decline_els(__TopXMLNS, __IgnoreEls,
-                                     _els, Reason)
-    end;
-decode_muc_user_decline_els(__TopXMLNS, __IgnoreEls,
-                           [_ | _els], Reason) ->
-    decode_muc_user_decline_els(__TopXMLNS, __IgnoreEls,
-                               _els, Reason).
-
-decode_muc_user_decline_attrs(__TopXMLNS,
-                             [{<<"to">>, _val} | _attrs], _To, From) ->
-    decode_muc_user_decline_attrs(__TopXMLNS, _attrs, _val,
-                                 From);
-decode_muc_user_decline_attrs(__TopXMLNS,
-                             [{<<"from">>, _val} | _attrs], To, _From) ->
-    decode_muc_user_decline_attrs(__TopXMLNS, _attrs, To,
-                                 _val);
-decode_muc_user_decline_attrs(__TopXMLNS, [_ | _attrs],
-                             To, From) ->
-    decode_muc_user_decline_attrs(__TopXMLNS, _attrs, To,
-                                 From);
-decode_muc_user_decline_attrs(__TopXMLNS, [], To,
-                             From) ->
-    {decode_muc_user_decline_attr_to(__TopXMLNS, To),
-     decode_muc_user_decline_attr_from(__TopXMLNS, From)}.
-
-encode_muc_user_decline({muc_decline, Reason, From, To},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc#user">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_muc_user_decline_$reason'(Reason,
-                                                       __NewTopXMLNS, [])),
-    _attrs = encode_muc_user_decline_attr_from(From,
-                                              encode_muc_user_decline_attr_to(To,
-                                                                              enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                              __TopXMLNS))),
-    {xmlel, <<"decline">>, _attrs, _els}.
-
-'encode_muc_user_decline_$reason'(<<>>, __TopXMLNS,
-                                 _acc) ->
-    _acc;
-'encode_muc_user_decline_$reason'(Reason, __TopXMLNS,
-                                 _acc) ->
-    [encode_muc_reason(Reason, __TopXMLNS) | _acc].
-
-decode_muc_user_decline_attr_to(__TopXMLNS,
-                               undefined) ->
-    undefined;
-decode_muc_user_decline_attr_to(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"decline">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_user_decline_attr_to(undefined, _acc) ->
-    _acc;
-encode_muc_user_decline_attr_to(_val, _acc) ->
-    [{<<"to">>, enc_jid(_val)} | _acc].
-
-decode_muc_user_decline_attr_from(__TopXMLNS,
-                                 undefined) ->
-    undefined;
-decode_muc_user_decline_attr_from(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"decline">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_user_decline_attr_from(undefined, _acc) ->
-    _acc;
-encode_muc_user_decline_attr_from(_val, _acc) ->
-    [{<<"from">>, enc_jid(_val)} | _acc].
-
-decode_muc_reason(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"reason">>, _attrs, _els}) ->
-    Cdata = decode_muc_reason_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_muc_reason_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_muc_reason_cdata(__TopXMLNS, Cdata);
-decode_muc_reason_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_muc_reason_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_muc_reason_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_muc_reason_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_muc_reason(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"http://jabber.org/protocol/muc#user">>,
-                                     <<"http://jabber.org/protocol/muc#admin">>,
-                                     <<"http://jabber.org/protocol/muc#owner">>],
-                                    __TopXMLNS),
-    _els = encode_muc_reason_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"reason">>, _attrs, _els}.
-
-decode_muc_reason_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_muc_reason_cdata(__TopXMLNS, _val) -> _val.
-
-encode_muc_reason_cdata(<<>>, _acc) -> _acc;
-encode_muc_reason_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_muc_history(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"history">>, _attrs, _els}) ->
-    {Maxchars, Maxstanzas, Seconds, Since} =
-       decode_muc_history_attrs(__TopXMLNS, _attrs, undefined,
-                                undefined, undefined, undefined),
-    {muc_history, Maxchars, Maxstanzas, Seconds, Since}.
-
-decode_muc_history_attrs(__TopXMLNS,
-                        [{<<"maxchars">>, _val} | _attrs], _Maxchars,
-                        Maxstanzas, Seconds, Since) ->
-    decode_muc_history_attrs(__TopXMLNS, _attrs, _val,
-                            Maxstanzas, Seconds, Since);
-decode_muc_history_attrs(__TopXMLNS,
-                        [{<<"maxstanzas">>, _val} | _attrs], Maxchars,
-                        _Maxstanzas, Seconds, Since) ->
-    decode_muc_history_attrs(__TopXMLNS, _attrs, Maxchars,
-                            _val, Seconds, Since);
-decode_muc_history_attrs(__TopXMLNS,
-                        [{<<"seconds">>, _val} | _attrs], Maxchars, Maxstanzas,
-                        _Seconds, Since) ->
-    decode_muc_history_attrs(__TopXMLNS, _attrs, Maxchars,
-                            Maxstanzas, _val, Since);
-decode_muc_history_attrs(__TopXMLNS,
-                        [{<<"since">>, _val} | _attrs], Maxchars, Maxstanzas,
-                        Seconds, _Since) ->
-    decode_muc_history_attrs(__TopXMLNS, _attrs, Maxchars,
-                            Maxstanzas, Seconds, _val);
-decode_muc_history_attrs(__TopXMLNS, [_ | _attrs],
-                        Maxchars, Maxstanzas, Seconds, Since) ->
-    decode_muc_history_attrs(__TopXMLNS, _attrs, Maxchars,
-                            Maxstanzas, Seconds, Since);
-decode_muc_history_attrs(__TopXMLNS, [], Maxchars,
-                        Maxstanzas, Seconds, Since) ->
-    {decode_muc_history_attr_maxchars(__TopXMLNS, Maxchars),
-     decode_muc_history_attr_maxstanzas(__TopXMLNS,
-                                       Maxstanzas),
-     decode_muc_history_attr_seconds(__TopXMLNS, Seconds),
-     decode_muc_history_attr_since(__TopXMLNS, Since)}.
-
-encode_muc_history({muc_history, Maxchars, Maxstanzas,
-                   Seconds, Since},
-                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/muc">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_muc_history_attr_since(Since,
-                                          encode_muc_history_attr_seconds(Seconds,
-                                                                          encode_muc_history_attr_maxstanzas(Maxstanzas,
-                                                                                                             encode_muc_history_attr_maxchars(Maxchars,
-                                                                                                                                              enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                              __TopXMLNS))))),
-    {xmlel, <<"history">>, _attrs, _els}.
-
-decode_muc_history_attr_maxchars(__TopXMLNS,
-                                undefined) ->
-    undefined;
-decode_muc_history_attr_maxchars(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"maxchars">>, <<"history">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_history_attr_maxchars(undefined, _acc) ->
-    _acc;
-encode_muc_history_attr_maxchars(_val, _acc) ->
-    [{<<"maxchars">>, enc_int(_val)} | _acc].
-
-decode_muc_history_attr_maxstanzas(__TopXMLNS,
-                                  undefined) ->
-    undefined;
-decode_muc_history_attr_maxstanzas(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"maxstanzas">>, <<"history">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_history_attr_maxstanzas(undefined, _acc) ->
-    _acc;
-encode_muc_history_attr_maxstanzas(_val, _acc) ->
-    [{<<"maxstanzas">>, enc_int(_val)} | _acc].
-
-decode_muc_history_attr_seconds(__TopXMLNS,
-                               undefined) ->
-    undefined;
-decode_muc_history_attr_seconds(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"seconds">>, <<"history">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_history_attr_seconds(undefined, _acc) ->
-    _acc;
-encode_muc_history_attr_seconds(_val, _acc) ->
-    [{<<"seconds">>, enc_int(_val)} | _acc].
-
-decode_muc_history_attr_since(__TopXMLNS, undefined) ->
-    undefined;
-decode_muc_history_attr_since(__TopXMLNS, _val) ->
-    case catch dec_utc(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"since">>, <<"history">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_muc_history_attr_since(undefined, _acc) -> _acc;
-encode_muc_history_attr_since(_val, _acc) ->
-    [{<<"since">>, enc_utc(_val)} | _acc].
-
-decode_bytestreams(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"query">>, _attrs, _els}) ->
-    {Hosts, Used, Activate} =
-       decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                              [], undefined, undefined),
-    {Dstaddr, Sid, Mode} =
-       decode_bytestreams_attrs(__TopXMLNS, _attrs, undefined,
-                                undefined, undefined),
-    {bytestreams, Hosts, Used, Activate, Dstaddr, Mode,
-     Sid}.
-
-decode_bytestreams_els(__TopXMLNS, __IgnoreEls, [],
-                      Hosts, Used, Activate) ->
-    {lists:reverse(Hosts), Used, Activate};
-decode_bytestreams_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"streamhost">>, _attrs, _} = _el | _els],
-                      Hosts, Used, Activate) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/bytestreams">> ->
-         decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_bytestreams_streamhost(__TopXMLNS,
-                                                               __IgnoreEls,
-                                                               _el)
-                                 | Hosts],
-                                Used, Activate);
-      <<"http://jabber.org/protocol/bytestreams">> ->
-         decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_bytestreams_streamhost(<<"http://jabber.org/protocol/bytestreams">>,
-                                                               __IgnoreEls,
-                                                               _el)
-                                 | Hosts],
-                                Used, Activate);
-      _ ->
-         decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                                Hosts, Used, Activate)
-    end;
-decode_bytestreams_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"streamhost-used">>, _attrs, _} = _el
-                       | _els],
-                      Hosts, Used, Activate) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/bytestreams">> ->
-         decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                                Hosts,
-                                decode_bytestreams_streamhost_used(__TopXMLNS,
-                                                                   __IgnoreEls,
-                                                                   _el),
-                                Activate);
-      <<"http://jabber.org/protocol/bytestreams">> ->
-         decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                                Hosts,
-                                decode_bytestreams_streamhost_used(<<"http://jabber.org/protocol/bytestreams">>,
-                                                                   __IgnoreEls,
-                                                                   _el),
-                                Activate);
-      _ ->
-         decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                                Hosts, Used, Activate)
-    end;
-decode_bytestreams_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"activate">>, _attrs, _} = _el | _els],
-                      Hosts, Used, Activate) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/bytestreams">> ->
-         decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                                Hosts, Used,
-                                decode_bytestreams_activate(__TopXMLNS,
-                                                            __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/bytestreams">> ->
-         decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                                Hosts, Used,
-                                decode_bytestreams_activate(<<"http://jabber.org/protocol/bytestreams">>,
-                                                            __IgnoreEls, _el));
-      _ ->
-         decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                                Hosts, Used, Activate)
-    end;
-decode_bytestreams_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Hosts, Used, Activate) ->
-    decode_bytestreams_els(__TopXMLNS, __IgnoreEls, _els,
-                          Hosts, Used, Activate).
-
-decode_bytestreams_attrs(__TopXMLNS,
-                        [{<<"dstaddr">>, _val} | _attrs], _Dstaddr, Sid,
-                        Mode) ->
-    decode_bytestreams_attrs(__TopXMLNS, _attrs, _val, Sid,
-                            Mode);
-decode_bytestreams_attrs(__TopXMLNS,
-                        [{<<"sid">>, _val} | _attrs], Dstaddr, _Sid, Mode) ->
-    decode_bytestreams_attrs(__TopXMLNS, _attrs, Dstaddr,
-                            _val, Mode);
-decode_bytestreams_attrs(__TopXMLNS,
-                        [{<<"mode">>, _val} | _attrs], Dstaddr, Sid, _Mode) ->
-    decode_bytestreams_attrs(__TopXMLNS, _attrs, Dstaddr,
-                            Sid, _val);
-decode_bytestreams_attrs(__TopXMLNS, [_ | _attrs],
-                        Dstaddr, Sid, Mode) ->
-    decode_bytestreams_attrs(__TopXMLNS, _attrs, Dstaddr,
-                            Sid, Mode);
-decode_bytestreams_attrs(__TopXMLNS, [], Dstaddr, Sid,
-                        Mode) ->
-    {decode_bytestreams_attr_dstaddr(__TopXMLNS, Dstaddr),
-     decode_bytestreams_attr_sid(__TopXMLNS, Sid),
-     decode_bytestreams_attr_mode(__TopXMLNS, Mode)}.
-
-encode_bytestreams({bytestreams, Hosts, Used, Activate,
-                   Dstaddr, Mode, Sid},
-                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/bytestreams">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_bytestreams_$hosts'(Hosts,
-                                                    __NewTopXMLNS,
-                                                    'encode_bytestreams_$used'(Used,
-                                                                               __NewTopXMLNS,
-                                                                               'encode_bytestreams_$activate'(Activate,
-                                                                                                              __NewTopXMLNS,
-                                                                                                              [])))),
-    _attrs = encode_bytestreams_attr_mode(Mode,
-                                         encode_bytestreams_attr_sid(Sid,
-                                                                     encode_bytestreams_attr_dstaddr(Dstaddr,
-                                                                                                     enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                     __TopXMLNS)))),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_bytestreams_$hosts'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_bytestreams_$hosts'([Hosts | _els], __TopXMLNS,
-                           _acc) ->
-    'encode_bytestreams_$hosts'(_els, __TopXMLNS,
-                               [encode_bytestreams_streamhost(Hosts,
-                                                              __TopXMLNS)
-                                | _acc]).
-
-'encode_bytestreams_$used'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_bytestreams_$used'(Used, __TopXMLNS, _acc) ->
-    [encode_bytestreams_streamhost_used(Used, __TopXMLNS)
-     | _acc].
-
-'encode_bytestreams_$activate'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_bytestreams_$activate'(Activate, __TopXMLNS,
-                              _acc) ->
-    [encode_bytestreams_activate(Activate, __TopXMLNS)
-     | _acc].
-
-decode_bytestreams_attr_dstaddr(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_bytestreams_attr_dstaddr(__TopXMLNS, _val) ->
-    _val.
-
-encode_bytestreams_attr_dstaddr(<<>>, _acc) -> _acc;
-encode_bytestreams_attr_dstaddr(_val, _acc) ->
-    [{<<"dstaddr">>, _val} | _acc].
-
-decode_bytestreams_attr_sid(__TopXMLNS, undefined) ->
-    <<>>;
-decode_bytestreams_attr_sid(__TopXMLNS, _val) -> _val.
-
-encode_bytestreams_attr_sid(<<>>, _acc) -> _acc;
-encode_bytestreams_attr_sid(_val, _acc) ->
-    [{<<"sid">>, _val} | _acc].
-
-decode_bytestreams_attr_mode(__TopXMLNS, undefined) ->
-    tcp;
-decode_bytestreams_attr_mode(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [tcp, udp]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"mode">>, <<"query">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bytestreams_attr_mode(tcp, _acc) -> _acc;
-encode_bytestreams_attr_mode(_val, _acc) ->
-    [{<<"mode">>, enc_enum(_val)} | _acc].
-
-decode_bytestreams_activate(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"activate">>, _attrs, _els}) ->
-    Cdata = decode_bytestreams_activate_els(__TopXMLNS,
-                                           __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_bytestreams_activate_els(__TopXMLNS, __IgnoreEls,
-                               [], Cdata) ->
-    decode_bytestreams_activate_cdata(__TopXMLNS, Cdata);
-decode_bytestreams_activate_els(__TopXMLNS, __IgnoreEls,
-                               [{xmlcdata, _data} | _els], Cdata) ->
-    decode_bytestreams_activate_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<Cdata/binary, _data/binary>>);
-decode_bytestreams_activate_els(__TopXMLNS, __IgnoreEls,
-                               [_ | _els], Cdata) ->
-    decode_bytestreams_activate_els(__TopXMLNS, __IgnoreEls,
-                                   _els, Cdata).
-
-encode_bytestreams_activate(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/bytestreams">>,
-                        [], __TopXMLNS),
-    _els = encode_bytestreams_activate_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"activate">>, _attrs, _els}.
-
-decode_bytestreams_activate_cdata(__TopXMLNS, <<>>) ->
-    undefined;
-decode_bytestreams_activate_cdata(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"activate">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bytestreams_activate_cdata(undefined, _acc) ->
-    _acc;
-encode_bytestreams_activate_cdata(_val, _acc) ->
-    [{xmlcdata, enc_jid(_val)} | _acc].
-
-decode_bytestreams_streamhost_used(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"streamhost-used">>, _attrs,
-                                   _els}) ->
-    Jid =
-       decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
-                                                _attrs, undefined),
-    Jid.
-
-decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
-                                        [{<<"jid">>, _val} | _attrs], _Jid) ->
-    decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
-                                            _attrs, _val);
-decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
-                                        [_ | _attrs], Jid) ->
-    decode_bytestreams_streamhost_used_attrs(__TopXMLNS,
-                                            _attrs, Jid);
-decode_bytestreams_streamhost_used_attrs(__TopXMLNS, [],
-                                        Jid) ->
-    decode_bytestreams_streamhost_used_attr_jid(__TopXMLNS,
-                                               Jid).
-
-encode_bytestreams_streamhost_used(Jid, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/bytestreams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs =
-       encode_bytestreams_streamhost_used_attr_jid(Jid,
-                                                   enc_xmlns_attrs(__NewTopXMLNS,
-                                                                   __TopXMLNS)),
-    {xmlel, <<"streamhost-used">>, _attrs, _els}.
-
-decode_bytestreams_streamhost_used_attr_jid(__TopXMLNS,
-                                           undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"streamhost-used">>,
-                  __TopXMLNS}});
-decode_bytestreams_streamhost_used_attr_jid(__TopXMLNS,
-                                           _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"streamhost-used">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bytestreams_streamhost_used_attr_jid(_val,
-                                           _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_bytestreams_streamhost(__TopXMLNS, __IgnoreEls,
-                             {xmlel, <<"streamhost">>, _attrs, _els}) ->
-    {Jid, Host, Port} =
-       decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
-                                           undefined, undefined, undefined),
-    {streamhost, Jid, Host, Port}.
-
-decode_bytestreams_streamhost_attrs(__TopXMLNS,
-                                   [{<<"jid">>, _val} | _attrs], _Jid, Host,
-                                   Port) ->
-    decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
-                                       _val, Host, Port);
-decode_bytestreams_streamhost_attrs(__TopXMLNS,
-                                   [{<<"host">>, _val} | _attrs], Jid, _Host,
-                                   Port) ->
-    decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
-                                       Jid, _val, Port);
-decode_bytestreams_streamhost_attrs(__TopXMLNS,
-                                   [{<<"port">>, _val} | _attrs], Jid, Host,
-                                   _Port) ->
-    decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
-                                       Jid, Host, _val);
-decode_bytestreams_streamhost_attrs(__TopXMLNS,
-                                   [_ | _attrs], Jid, Host, Port) ->
-    decode_bytestreams_streamhost_attrs(__TopXMLNS, _attrs,
-                                       Jid, Host, Port);
-decode_bytestreams_streamhost_attrs(__TopXMLNS, [], Jid,
-                                   Host, Port) ->
-    {decode_bytestreams_streamhost_attr_jid(__TopXMLNS,
-                                           Jid),
-     decode_bytestreams_streamhost_attr_host(__TopXMLNS,
-                                            Host),
-     decode_bytestreams_streamhost_attr_port(__TopXMLNS,
-                                            Port)}.
-
-encode_bytestreams_streamhost({streamhost, Jid, Host,
-                              Port},
-                             __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/bytestreams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_bytestreams_streamhost_attr_port(Port,
-                                                    encode_bytestreams_streamhost_attr_host(Host,
-                                                                                            encode_bytestreams_streamhost_attr_jid(Jid,
-                                                                                                                                   enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                   __TopXMLNS)))),
-    {xmlel, <<"streamhost">>, _attrs, _els}.
-
-decode_bytestreams_streamhost_attr_jid(__TopXMLNS,
-                                      undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"streamhost">>,
-                  __TopXMLNS}});
-decode_bytestreams_streamhost_attr_jid(__TopXMLNS,
-                                      _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"streamhost">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bytestreams_streamhost_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_bytestreams_streamhost_attr_host(__TopXMLNS,
-                                       undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"host">>, <<"streamhost">>,
-                  __TopXMLNS}});
-decode_bytestreams_streamhost_attr_host(__TopXMLNS,
-                                       _val) ->
-    _val.
-
-encode_bytestreams_streamhost_attr_host(_val, _acc) ->
-    [{<<"host">>, _val} | _acc].
-
-decode_bytestreams_streamhost_attr_port(__TopXMLNS,
-                                       undefined) ->
-    1080;
-decode_bytestreams_streamhost_attr_port(__TopXMLNS,
-                                       _val) ->
-    case catch dec_int(_val, 0, 65535) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"port">>, <<"streamhost">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bytestreams_streamhost_attr_port(1080, _acc) ->
-    _acc;
-encode_bytestreams_streamhost_attr_port(_val, _acc) ->
-    [{<<"port">>, enc_int(_val)} | _acc].
-
-decode_delay(__TopXMLNS, __IgnoreEls,
-            {xmlel, <<"delay">>, _attrs, _els}) ->
-    Desc = decode_delay_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<>>),
-    {Stamp, From} = decode_delay_attrs(__TopXMLNS, _attrs,
-                                      undefined, undefined),
-    {delay, Stamp, From, Desc}.
-
-decode_delay_els(__TopXMLNS, __IgnoreEls, [], Desc) ->
-    decode_delay_cdata(__TopXMLNS, Desc);
-decode_delay_els(__TopXMLNS, __IgnoreEls,
-                [{xmlcdata, _data} | _els], Desc) ->
-    decode_delay_els(__TopXMLNS, __IgnoreEls, _els,
-                    <<Desc/binary, _data/binary>>);
-decode_delay_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                Desc) ->
-    decode_delay_els(__TopXMLNS, __IgnoreEls, _els, Desc).
-
-decode_delay_attrs(__TopXMLNS,
-                  [{<<"stamp">>, _val} | _attrs], _Stamp, From) ->
-    decode_delay_attrs(__TopXMLNS, _attrs, _val, From);
-decode_delay_attrs(__TopXMLNS,
-                  [{<<"from">>, _val} | _attrs], Stamp, _From) ->
-    decode_delay_attrs(__TopXMLNS, _attrs, Stamp, _val);
-decode_delay_attrs(__TopXMLNS, [_ | _attrs], Stamp,
-                  From) ->
-    decode_delay_attrs(__TopXMLNS, _attrs, Stamp, From);
-decode_delay_attrs(__TopXMLNS, [], Stamp, From) ->
-    {decode_delay_attr_stamp(__TopXMLNS, Stamp),
-     decode_delay_attr_from(__TopXMLNS, From)}.
-
-encode_delay({delay, Stamp, From, Desc}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:delay">>,
-                                    [], __TopXMLNS),
-    _els = encode_delay_cdata(Desc, []),
-    _attrs = encode_delay_attr_from(From,
-                                   encode_delay_attr_stamp(Stamp,
-                                                           enc_xmlns_attrs(__NewTopXMLNS,
-                                                                           __TopXMLNS))),
-    {xmlel, <<"delay">>, _attrs, _els}.
-
-decode_delay_attr_stamp(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"stamp">>, <<"delay">>, __TopXMLNS}});
-decode_delay_attr_stamp(__TopXMLNS, _val) ->
-    case catch dec_utc(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"stamp">>, <<"delay">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_delay_attr_stamp(_val, _acc) ->
-    [{<<"stamp">>, enc_utc(_val)} | _acc].
-
-decode_delay_attr_from(__TopXMLNS, undefined) ->
-    undefined;
-decode_delay_attr_from(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"delay">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_delay_attr_from(undefined, _acc) -> _acc;
-encode_delay_attr_from(_val, _acc) ->
-    [{<<"from">>, enc_jid(_val)} | _acc].
-
-decode_delay_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_delay_cdata(__TopXMLNS, _val) -> _val.
-
-encode_delay_cdata(<<>>, _acc) -> _acc;
-encode_delay_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_chatstate_paused(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"paused">>, _attrs, _els}) ->
-    {chatstate, paused}.
-
-encode_chatstate_paused({chatstate, paused},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/chatstates">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"paused">>, _attrs, _els}.
-
-decode_chatstate_inactive(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"inactive">>, _attrs, _els}) ->
-    {chatstate, inactive}.
-
-encode_chatstate_inactive({chatstate, inactive},
-                         __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/chatstates">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"inactive">>, _attrs, _els}.
-
-decode_chatstate_gone(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"gone">>, _attrs, _els}) ->
-    {chatstate, gone}.
-
-encode_chatstate_gone({chatstate, gone}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/chatstates">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"gone">>, _attrs, _els}.
-
-decode_chatstate_composing(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"composing">>, _attrs, _els}) ->
-    {chatstate, composing}.
-
-encode_chatstate_composing({chatstate, composing},
-                          __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/chatstates">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"composing">>, _attrs, _els}.
-
-decode_chatstate_active(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"active">>, _attrs, _els}) ->
-    {chatstate, active}.
-
-encode_chatstate_active({chatstate, active},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/chatstates">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"active">>, _attrs, _els}.
-
-decode_shim_headers(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"headers">>, _attrs, _els}) ->
-    Headers = decode_shim_headers_els(__TopXMLNS,
-                                     __IgnoreEls, _els, []),
-    {shim, Headers}.
-
-decode_shim_headers_els(__TopXMLNS, __IgnoreEls, [],
-                       Headers) ->
-    lists:reverse(Headers);
-decode_shim_headers_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"header">>, _attrs, _} = _el | _els],
-                       Headers) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/shim">> ->
-         decode_shim_headers_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_shim_header(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                                  | Headers]);
-      <<"http://jabber.org/protocol/shim">> ->
-         decode_shim_headers_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_shim_header(<<"http://jabber.org/protocol/shim">>,
-                                                     __IgnoreEls, _el)
-                                  | Headers]);
-      _ ->
-         decode_shim_headers_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Headers)
-    end;
-decode_shim_headers_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Headers) ->
-    decode_shim_headers_els(__TopXMLNS, __IgnoreEls, _els,
-                           Headers).
-
-encode_shim_headers({shim, Headers}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/shim">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_shim_headers_$headers'(Headers,
-                                                    __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"headers">>, _attrs, _els}.
-
-'encode_shim_headers_$headers'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_shim_headers_$headers'([Headers | _els],
-                              __TopXMLNS, _acc) ->
-    'encode_shim_headers_$headers'(_els, __TopXMLNS,
-                                  [encode_shim_header(Headers, __TopXMLNS)
-                                   | _acc]).
-
-decode_shim_header(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"header">>, _attrs, _els}) ->
-    Cdata = decode_shim_header_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Name = decode_shim_header_attrs(__TopXMLNS, _attrs,
-                                   undefined),
-    {Name, Cdata}.
-
-decode_shim_header_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_shim_header_cdata(__TopXMLNS, Cdata);
-decode_shim_header_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_shim_header_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_shim_header_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_shim_header_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-decode_shim_header_attrs(__TopXMLNS,
-                        [{<<"name">>, _val} | _attrs], _Name) ->
-    decode_shim_header_attrs(__TopXMLNS, _attrs, _val);
-decode_shim_header_attrs(__TopXMLNS, [_ | _attrs],
-                        Name) ->
-    decode_shim_header_attrs(__TopXMLNS, _attrs, Name);
-decode_shim_header_attrs(__TopXMLNS, [], Name) ->
-    decode_shim_header_attr_name(__TopXMLNS, Name).
-
-encode_shim_header({Name, Cdata}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/shim">>,
-                        [], __TopXMLNS),
-    _els = encode_shim_header_cdata(Cdata, []),
-    _attrs = encode_shim_header_attr_name(Name,
-                                         enc_xmlns_attrs(__NewTopXMLNS,
-                                                         __TopXMLNS)),
-    {xmlel, <<"header">>, _attrs, _els}.
-
-decode_shim_header_attr_name(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"header">>, __TopXMLNS}});
-decode_shim_header_attr_name(__TopXMLNS, _val) -> _val.
-
-encode_shim_header_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_shim_header_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_shim_header_cdata(__TopXMLNS, _val) -> _val.
-
-encode_shim_header_cdata(<<>>, _acc) -> _acc;
-encode_shim_header_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_pubsub_error_unsupported_access_model(__TopXMLNS,
-                                            __IgnoreEls,
-                                            {xmlel,
-                                             <<"unsupported-access-model">>,
-                                             _attrs, _els}) ->
-    {ps_error, 'unsupported-access-model', undefined}.
-
-encode_pubsub_error_unsupported_access_model({ps_error,
-                                             'unsupported-access-model', _},
-                                            __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"unsupported-access-model">>, _attrs, _els}.
-
-decode_pubsub_error_unsupported(__TopXMLNS, __IgnoreEls,
-                               {xmlel, <<"unsupported">>, _attrs, _els}) ->
-    Feature =
-       decode_pubsub_error_unsupported_attrs(__TopXMLNS,
-                                             _attrs, undefined),
-    {ps_error, unsupported, Feature}.
-
-decode_pubsub_error_unsupported_attrs(__TopXMLNS,
-                                     [{<<"feature">>, _val} | _attrs],
-                                     _Feature) ->
-    decode_pubsub_error_unsupported_attrs(__TopXMLNS,
-                                         _attrs, _val);
-decode_pubsub_error_unsupported_attrs(__TopXMLNS,
-                                     [_ | _attrs], Feature) ->
-    decode_pubsub_error_unsupported_attrs(__TopXMLNS,
-                                         _attrs, Feature);
-decode_pubsub_error_unsupported_attrs(__TopXMLNS, [],
-                                     Feature) ->
-    decode_pubsub_error_unsupported_attr_feature(__TopXMLNS,
-                                                Feature).
-
-encode_pubsub_error_unsupported({ps_error, unsupported,
-                                Feature},
-                               __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs =
-       encode_pubsub_error_unsupported_attr_feature(Feature,
-                                                    enc_xmlns_attrs(__NewTopXMLNS,
-                                                                    __TopXMLNS)),
-    {xmlel, <<"unsupported">>, _attrs, _els}.
-
-decode_pubsub_error_unsupported_attr_feature(__TopXMLNS,
-                                            undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"feature">>, <<"unsupported">>,
-                  __TopXMLNS}});
-decode_pubsub_error_unsupported_attr_feature(__TopXMLNS,
-                                            _val) ->
-    case catch dec_enum(_val,
-                       ['access-authorize', 'access-open', 'access-presence',
-                        'access-roster', 'access-whitelist', 'auto-create',
-                        'auto-subscribe', collections, 'config-node',
-                        'create-and-configure', 'create-nodes', 'delete-items',
-                        'delete-nodes', 'filtered-notifications',
-                        'get-pending', 'instant-nodes', 'item-ids',
-                        'last-published', 'leased-subscription',
-                        'manage-subscriptions', 'member-affiliation',
-                        'meta-data', 'modify-affiliations', 'multi-collection',
-                        'multi-subscribe', 'outcast-affiliation',
-                        'persistent-items', 'presence-notifications',
-                        'presence-subscribe', publish, 'publish-options',
-                        'publish-only-affiliation', 'publisher-affiliation',
-                        'purge-nodes', 'retract-items',
-                        'retrieve-affiliations', 'retrieve-default',
-                        'retrieve-items', 'retrieve-subscriptions', subscribe,
-                        'subscription-options', 'subscription-notifications'])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"feature">>, <<"unsupported">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_error_unsupported_attr_feature(_val,
-                                            _acc) ->
-    [{<<"feature">>, enc_enum(_val)} | _acc].
-
-decode_pubsub_error_too_many_subscriptions(__TopXMLNS,
-                                          __IgnoreEls,
-                                          {xmlel, <<"too-many-subscriptions">>,
-                                           _attrs, _els}) ->
-    {ps_error, 'too-many-subscriptions', undefined}.
-
-encode_pubsub_error_too_many_subscriptions({ps_error,
-                                           'too-many-subscriptions', _},
-                                          __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"too-many-subscriptions">>, _attrs, _els}.
-
-decode_pubsub_error_subid_required(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"subid-required">>, _attrs,
-                                   _els}) ->
-    {ps_error, 'subid-required', undefined}.
-
-encode_pubsub_error_subid_required({ps_error,
-                                   'subid-required', _},
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"subid-required">>, _attrs, _els}.
-
-decode_pubsub_error_presence_subscription_required(__TopXMLNS,
-                                                  __IgnoreEls,
-                                                  {xmlel,
-                                                   <<"presence-subscription-required">>,
-                                                   _attrs, _els}) ->
-    {ps_error, 'presence-subscription-required', undefined}.
-
-encode_pubsub_error_presence_subscription_required({ps_error,
-                                                   'presence-subscription-required',
-                                                   _},
-                                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"presence-subscription-required">>, _attrs,
-     _els}.
-
-decode_pubsub_error_pending_subscription(__TopXMLNS,
-                                        __IgnoreEls,
-                                        {xmlel, <<"pending-subscription">>,
-                                         _attrs, _els}) ->
-    {ps_error, 'pending-subscription', undefined}.
-
-encode_pubsub_error_pending_subscription({ps_error,
-                                         'pending-subscription', _},
-                                        __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"pending-subscription">>, _attrs, _els}.
-
-decode_pubsub_error_payload_required(__TopXMLNS,
-                                    __IgnoreEls,
-                                    {xmlel, <<"payload-required">>, _attrs,
-                                     _els}) ->
-    {ps_error, 'payload-required', undefined}.
-
-encode_pubsub_error_payload_required({ps_error,
-                                     'payload-required', _},
-                                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"payload-required">>, _attrs, _els}.
-
-decode_pubsub_error_payload_too_big(__TopXMLNS,
-                                   __IgnoreEls,
-                                   {xmlel, <<"payload-too-big">>, _attrs,
-                                    _els}) ->
-    {ps_error, 'payload-too-big', undefined}.
-
-encode_pubsub_error_payload_too_big({ps_error,
-                                    'payload-too-big', _},
-                                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"payload-too-big">>, _attrs, _els}.
-
-decode_pubsub_error_not_subscribed(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"not-subscribed">>, _attrs,
-                                   _els}) ->
-    {ps_error, 'not-subscribed', undefined}.
-
-encode_pubsub_error_not_subscribed({ps_error,
-                                   'not-subscribed', _},
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"not-subscribed">>, _attrs, _els}.
-
-decode_pubsub_error_not_in_roster_group(__TopXMLNS,
-                                       __IgnoreEls,
-                                       {xmlel, <<"not-in-roster-group">>,
-                                        _attrs, _els}) ->
-    {ps_error, 'not-in-roster-group', undefined}.
-
-encode_pubsub_error_not_in_roster_group({ps_error,
-                                        'not-in-roster-group', _},
-                                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"not-in-roster-group">>, _attrs, _els}.
-
-decode_pubsub_error_nodeid_required(__TopXMLNS,
-                                   __IgnoreEls,
-                                   {xmlel, <<"nodeid-required">>, _attrs,
-                                    _els}) ->
-    {ps_error, 'nodeid-required', undefined}.
-
-encode_pubsub_error_nodeid_required({ps_error,
-                                    'nodeid-required', _},
-                                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"nodeid-required">>, _attrs, _els}.
-
-decode_pubsub_error_max_nodes_exceeded(__TopXMLNS,
-                                      __IgnoreEls,
-                                      {xmlel, <<"max-nodes-exceeded">>, _attrs,
-                                       _els}) ->
-    {ps_error, 'max-nodes-exceeded', undefined}.
-
-encode_pubsub_error_max_nodes_exceeded({ps_error,
-                                       'max-nodes-exceeded', _},
-                                      __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"max-nodes-exceeded">>, _attrs, _els}.
-
-decode_pubsub_error_max_items_exceeded(__TopXMLNS,
-                                      __IgnoreEls,
-                                      {xmlel, <<"max-items-exceeded">>, _attrs,
-                                       _els}) ->
-    {ps_error, 'max-items-exceeded', undefined}.
-
-encode_pubsub_error_max_items_exceeded({ps_error,
-                                       'max-items-exceeded', _},
-                                      __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"max-items-exceeded">>, _attrs, _els}.
-
-decode_pubsub_error_jid_required(__TopXMLNS,
-                                __IgnoreEls,
-                                {xmlel, <<"jid-required">>, _attrs, _els}) ->
-    {ps_error, 'jid-required', undefined}.
-
-encode_pubsub_error_jid_required({ps_error,
-                                 'jid-required', _},
-                                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"jid-required">>, _attrs, _els}.
-
-decode_pubsub_error_item_required(__TopXMLNS,
-                                 __IgnoreEls,
-                                 {xmlel, <<"item-required">>, _attrs, _els}) ->
-    {ps_error, 'item-required', undefined}.
-
-encode_pubsub_error_item_required({ps_error,
-                                  'item-required', _},
-                                 __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"item-required">>, _attrs, _els}.
-
-decode_pubsub_error_item_forbidden(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"item-forbidden">>, _attrs,
-                                   _els}) ->
-    {ps_error, 'item-forbidden', undefined}.
-
-encode_pubsub_error_item_forbidden({ps_error,
-                                   'item-forbidden', _},
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"item-forbidden">>, _attrs, _els}.
-
-decode_pubsub_error_invalid_subid(__TopXMLNS,
-                                 __IgnoreEls,
-                                 {xmlel, <<"invalid-subid">>, _attrs, _els}) ->
-    {ps_error, 'invalid-subid', undefined}.
-
-encode_pubsub_error_invalid_subid({ps_error,
-                                  'invalid-subid', _},
-                                 __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-subid">>, _attrs, _els}.
-
-decode_pubsub_error_invalid_payload(__TopXMLNS,
-                                   __IgnoreEls,
-                                   {xmlel, <<"invalid-payload">>, _attrs,
-                                    _els}) ->
-    {ps_error, 'invalid-payload', undefined}.
-
-encode_pubsub_error_invalid_payload({ps_error,
-                                    'invalid-payload', _},
-                                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-payload">>, _attrs, _els}.
-
-decode_pubsub_error_invalid_options(__TopXMLNS,
-                                   __IgnoreEls,
-                                   {xmlel, <<"invalid-options">>, _attrs,
-                                    _els}) ->
-    {ps_error, 'invalid-options', undefined}.
-
-encode_pubsub_error_invalid_options({ps_error,
-                                    'invalid-options', _},
-                                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-options">>, _attrs, _els}.
-
-decode_pubsub_error_invalid_jid(__TopXMLNS, __IgnoreEls,
-                               {xmlel, <<"invalid-jid">>, _attrs, _els}) ->
-    {ps_error, 'invalid-jid', undefined}.
-
-encode_pubsub_error_invalid_jid({ps_error,
-                                'invalid-jid', _},
-                               __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-jid">>, _attrs, _els}.
-
-decode_pubsub_error_configuration_required(__TopXMLNS,
-                                          __IgnoreEls,
-                                          {xmlel, <<"configuration-required">>,
-                                           _attrs, _els}) ->
-    {ps_error, 'configuration-required', undefined}.
-
-encode_pubsub_error_configuration_required({ps_error,
-                                           'configuration-required', _},
-                                          __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"configuration-required">>, _attrs, _els}.
-
-decode_pubsub_error_closed_node(__TopXMLNS, __IgnoreEls,
-                               {xmlel, <<"closed-node">>, _attrs, _els}) ->
-    {ps_error, 'closed-node', undefined}.
-
-encode_pubsub_error_closed_node({ps_error,
-                                'closed-node', _},
-                               __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#errors">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"closed-node">>, _attrs, _els}.
-
-decode_pubsub_owner(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"pubsub">>, _attrs, _els}) ->
-    {Subscriptions, Affiliations, Default, Purge, Delete,
-     Configure} =
-       decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                               undefined, undefined, undefined, undefined,
-                               undefined, undefined),
-    {pubsub_owner, Affiliations, Configure, Default, Delete,
-     Purge, Subscriptions}.
-
-decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, [],
-                       Subscriptions, Affiliations, Default, Purge, Delete,
-                       Configure) ->
-    {Subscriptions, Affiliations, Default, Purge, Delete,
-     Configure};
-decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"affiliations">>, _attrs, _} = _el | _els],
-                       Subscriptions, Affiliations, Default, Purge, Delete,
-                       Configure) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions,
-                                 decode_pubsub_owner_affiliations(__TopXMLNS,
-                                                                  __IgnoreEls,
-                                                                  _el),
-                                 Default, Purge, Delete, Configure);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions,
-                                 decode_pubsub_owner_affiliations(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                                  __IgnoreEls,
-                                                                  _el),
-                                 Default, Purge, Delete, Configure);
-      _ ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 Delete, Configure)
-    end;
-decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"configure">>, _attrs, _} = _el | _els],
-                       Subscriptions, Affiliations, Default, Purge, Delete,
-                       Configure) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 Delete,
-                                 decode_pubsub_configure(__TopXMLNS,
-                                                         __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 Delete,
-                                 decode_pubsub_configure(<<"http://jabber.org/protocol/pubsub">>,
-                                                         __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 Delete,
-                                 decode_pubsub_configure(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                         __IgnoreEls, _el));
-      _ ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 Delete, Configure)
-    end;
-decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"default">>, _attrs, _} = _el | _els],
-                       Subscriptions, Affiliations, Default, Purge, Delete,
-                       Configure) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations,
-                                 decode_pubsub_default(__TopXMLNS, __IgnoreEls,
-                                                       _el),
-                                 Purge, Delete, Configure);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations,
-                                 decode_pubsub_default(<<"http://jabber.org/protocol/pubsub">>,
-                                                       __IgnoreEls, _el),
-                                 Purge, Delete, Configure);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations,
-                                 decode_pubsub_default(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                       __IgnoreEls, _el),
-                                 Purge, Delete, Configure);
-      _ ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 Delete, Configure)
-    end;
-decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"delete">>, _attrs, _} = _el | _els],
-                       Subscriptions, Affiliations, Default, Purge, Delete,
-                       Configure) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 decode_pubsub_delete(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                                 Configure);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub">>,
-                                                      __IgnoreEls, _el),
-                                 Configure);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                      __IgnoreEls, _el),
-                                 Configure);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                      __IgnoreEls, _el),
-                                 Configure);
-      _ ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 Delete, Configure)
-    end;
-decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"purge">>, _attrs, _} = _el | _els],
-                       Subscriptions, Affiliations, Default, Purge, Delete,
-                       Configure) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default,
-                                 decode_pubsub_purge(__TopXMLNS, __IgnoreEls,
-                                                     _el),
-                                 Delete, Configure);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default,
-                                 decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub">>,
-                                                     __IgnoreEls, _el),
-                                 Delete, Configure);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default,
-                                 decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                     __IgnoreEls, _el),
-                                 Delete, Configure);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default,
-                                 decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                     __IgnoreEls, _el),
-                                 Delete, Configure);
-      _ ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 Delete, Configure)
-    end;
-decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"subscriptions">>, _attrs, _} = _el | _els],
-                       Subscriptions, Affiliations, Default, Purge, Delete,
-                       Configure) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 decode_pubsub_subscriptions(__TopXMLNS,
-                                                             __IgnoreEls, _el),
-                                 Affiliations, Default, Purge, Delete,
-                                 Configure);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 decode_pubsub_subscriptions(<<"http://jabber.org/protocol/pubsub">>,
-                                                             __IgnoreEls, _el),
-                                 Affiliations, Default, Purge, Delete,
-                                 Configure);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 decode_pubsub_subscriptions(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                             __IgnoreEls, _el),
-                                 Affiliations, Default, Purge, Delete,
-                                 Configure);
-      _ ->
-         decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Subscriptions, Affiliations, Default, Purge,
-                                 Delete, Configure)
-    end;
-decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Subscriptions, Affiliations, Default, Purge,
-                       Delete, Configure) ->
-    decode_pubsub_owner_els(__TopXMLNS, __IgnoreEls, _els,
-                           Subscriptions, Affiliations, Default, Purge, Delete,
-                           Configure).
-
-encode_pubsub_owner({pubsub_owner, Affiliations,
-                    Configure, Default, Delete, Purge, Subscriptions},
-                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#owner">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_owner_$subscriptions'(Subscriptions,
-                                                          __NewTopXMLNS,
-                                                          'encode_pubsub_owner_$affiliations'(Affiliations,
-                                                                                              __NewTopXMLNS,
-                                                                                              'encode_pubsub_owner_$default'(Default,
-                                                                                                                             __NewTopXMLNS,
-                                                                                                                             'encode_pubsub_owner_$purge'(Purge,
-                                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                                          'encode_pubsub_owner_$delete'(Delete,
-                                                                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                                                                        'encode_pubsub_owner_$configure'(Configure,
-                                                                                                                                                                                                                         __NewTopXMLNS,
-                                                                                                                                                                                                                         []))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"pubsub">>, _attrs, _els}.
-
-'encode_pubsub_owner_$subscriptions'(undefined,
-                                    __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_owner_$subscriptions'(Subscriptions,
-                                    __TopXMLNS, _acc) ->
-    [encode_pubsub_subscriptions(Subscriptions, __TopXMLNS)
-     | _acc].
-
-'encode_pubsub_owner_$affiliations'(undefined,
-                                   __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_owner_$affiliations'(Affiliations,
-                                   __TopXMLNS, _acc) ->
-    [encode_pubsub_owner_affiliations(Affiliations,
-                                     __TopXMLNS)
-     | _acc].
-
-'encode_pubsub_owner_$default'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_pubsub_owner_$default'(Default, __TopXMLNS,
-                              _acc) ->
-    [encode_pubsub_default(Default, __TopXMLNS) | _acc].
-
-'encode_pubsub_owner_$purge'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_pubsub_owner_$purge'(Purge, __TopXMLNS, _acc) ->
-    [encode_pubsub_purge(Purge, __TopXMLNS) | _acc].
-
-'encode_pubsub_owner_$delete'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_pubsub_owner_$delete'(Delete, __TopXMLNS,
-                             _acc) ->
-    [encode_pubsub_delete(Delete, __TopXMLNS) | _acc].
-
-'encode_pubsub_owner_$configure'(undefined, __TopXMLNS,
-                                _acc) ->
-    _acc;
-'encode_pubsub_owner_$configure'(Configure, __TopXMLNS,
-                                _acc) ->
-    [encode_pubsub_configure(Configure, __TopXMLNS) | _acc].
-
-decode_pubsub(__TopXMLNS, __IgnoreEls,
-             {xmlel, <<"pubsub">>, _attrs, _els}) ->
-    {Publish_options, Items, Options, Affiliations,
-     Subscriptions, Default, Retract, Purge, Delete,
-     Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-     Subscription} =
-       decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                         undefined, undefined, undefined, undefined, undefined,
-                         undefined, undefined, undefined, undefined, undefined,
-                         undefined, undefined, undefined, undefined, undefined,
-                         undefined),
-    {pubsub, Subscriptions, Subscription, Affiliations,
-     Publish, Publish_options, Subscribe, Unsubscribe,
-     Options, Items, Retract, Create, Configure, Default,
-     Delete, Purge, Rsm}.
-
-decode_pubsub_els(__TopXMLNS, __IgnoreEls, [],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    {Publish_options, Items, Options, Affiliations,
-     Subscriptions, Default, Retract, Purge, Delete,
-     Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-     Subscription};
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"subscriptions">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           decode_pubsub_subscriptions(__TopXMLNS, __IgnoreEls,
-                                                       _el),
-                           Default, Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           decode_pubsub_subscriptions(<<"http://jabber.org/protocol/pubsub">>,
-                                                       __IgnoreEls, _el),
-                           Default, Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           decode_pubsub_subscriptions(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                       __IgnoreEls, _el),
-                           Default, Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"affiliations">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options,
-                           decode_pubsub_affiliations(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options,
-                           decode_pubsub_affiliations(<<"http://jabber.org/protocol/pubsub">>,
-                                                      __IgnoreEls, _el),
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"subscribe">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe,
-                           decode_pubsub_subscribe(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                           Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe,
-                           decode_pubsub_subscribe(<<"http://jabber.org/protocol/pubsub">>,
-                                                   __IgnoreEls, _el),
-                           Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"unsubscribe">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create,
-                           decode_pubsub_unsubscribe(__TopXMLNS, __IgnoreEls,
-                                                     _el),
-                           Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create,
-                           decode_pubsub_unsubscribe(<<"http://jabber.org/protocol/pubsub">>,
-                                                     __IgnoreEls, _el),
-                           Subscribe, Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"options">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items,
-                           decode_pubsub_options(__TopXMLNS, __IgnoreEls, _el),
-                           Affiliations, Subscriptions, Default, Retract,
-                           Purge, Delete, Configure, Create, Unsubscribe,
-                           Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items,
-                           decode_pubsub_options(<<"http://jabber.org/protocol/pubsub">>,
-                                                 __IgnoreEls, _el),
-                           Affiliations, Subscriptions, Default, Retract,
-                           Purge, Delete, Configure, Create, Unsubscribe,
-                           Subscribe, Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"items">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options,
-                           decode_pubsub_items(__TopXMLNS, __IgnoreEls, _el),
-                           Options, Affiliations, Subscriptions, Default,
-                           Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options,
-                           decode_pubsub_items(<<"http://jabber.org/protocol/pubsub">>,
-                                               __IgnoreEls, _el),
-                           Options, Affiliations, Subscriptions, Default,
-                           Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options,
-                           decode_pubsub_items(<<"http://jabber.org/protocol/pubsub#event">>,
-                                               __IgnoreEls, _el),
-                           Options, Affiliations, Subscriptions, Default,
-                           Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"retract">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default,
-                           decode_pubsub_retract(__TopXMLNS, __IgnoreEls, _el),
-                           Purge, Delete, Configure, Create, Unsubscribe,
-                           Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default,
-                           decode_pubsub_retract(<<"http://jabber.org/protocol/pubsub">>,
-                                                 __IgnoreEls, _el),
-                           Purge, Delete, Configure, Create, Unsubscribe,
-                           Subscribe, Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"create">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure,
-                           decode_pubsub_create(__TopXMLNS, __IgnoreEls, _el),
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure,
-                           decode_pubsub_create(<<"http://jabber.org/protocol/pubsub">>,
-                                                __IgnoreEls, _el),
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure,
-                           decode_pubsub_create(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                __IgnoreEls, _el),
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"configure">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           decode_pubsub_configure(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                           Create, Unsubscribe, Subscribe, Publish, Rsm,
-                           Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           decode_pubsub_configure(<<"http://jabber.org/protocol/pubsub">>,
-                                                   __IgnoreEls, _el),
-                           Create, Unsubscribe, Subscribe, Publish, Rsm,
-                           Subscription);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           decode_pubsub_configure(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                   __IgnoreEls, _el),
-                           Create, Unsubscribe, Subscribe, Publish, Rsm,
-                           Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"publish-options">>, _attrs, _} = _el
-                  | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           decode_pubsub_publish_options(__TopXMLNS,
-                                                         __IgnoreEls, _el),
-                           Items, Options, Affiliations, Subscriptions,
-                           Default, Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           decode_pubsub_publish_options(<<"http://jabber.org/protocol/pubsub">>,
-                                                         __IgnoreEls, _el),
-                           Items, Options, Affiliations, Subscriptions,
-                           Default, Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"default">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions,
-                           decode_pubsub_default(__TopXMLNS, __IgnoreEls, _el),
-                           Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions,
-                           decode_pubsub_default(<<"http://jabber.org/protocol/pubsub">>,
-                                                 __IgnoreEls, _el),
-                           Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions,
-                           decode_pubsub_default(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                 __IgnoreEls, _el),
-                           Retract, Purge, Delete, Configure, Create,
-                           Unsubscribe, Subscribe, Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"delete">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge,
-                           decode_pubsub_delete(__TopXMLNS, __IgnoreEls, _el),
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge,
-                           decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub">>,
-                                                __IgnoreEls, _el),
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge,
-                           decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                __IgnoreEls, _el),
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge,
-                           decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                __IgnoreEls, _el),
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"purge">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract,
-                           decode_pubsub_purge(__TopXMLNS, __IgnoreEls, _el),
-                           Delete, Configure, Create, Unsubscribe, Subscribe,
-                           Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract,
-                           decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub">>,
-                                               __IgnoreEls, _el),
-                           Delete, Configure, Create, Unsubscribe, Subscribe,
-                           Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract,
-                           decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                               __IgnoreEls, _el),
-                           Delete, Configure, Create, Unsubscribe, Subscribe,
-                           Publish, Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract,
-                           decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#event">>,
-                                               __IgnoreEls, _el),
-                           Delete, Configure, Create, Unsubscribe, Subscribe,
-                           Publish, Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"subscription">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm,
-                           decode_pubsub_subscription(__TopXMLNS, __IgnoreEls,
-                                                      _el));
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm,
-                           decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub">>,
-                                                      __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm,
-                           decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                      __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm,
-                           decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                      __IgnoreEls, _el));
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"set">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           decode_rsm_set(<<"http://jabber.org/protocol/rsm">>,
-                                          __IgnoreEls, _el),
-                           Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls,
-                 [{xmlel, <<"publish">>, _attrs, _} = _el | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe,
-                           decode_pubsub_publish(__TopXMLNS, __IgnoreEls, _el),
-                           Rsm, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe,
-                           decode_pubsub_publish(<<"http://jabber.org/protocol/pubsub">>,
-                                                 __IgnoreEls, _el),
-                           Rsm, Subscription);
-      _ ->
-         decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                           Publish_options, Items, Options, Affiliations,
-                           Subscriptions, Default, Retract, Purge, Delete,
-                           Configure, Create, Unsubscribe, Subscribe, Publish,
-                           Rsm, Subscription)
-    end;
-decode_pubsub_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                 Publish_options, Items, Options, Affiliations,
-                 Subscriptions, Default, Retract, Purge, Delete,
-                 Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                 Subscription) ->
-    decode_pubsub_els(__TopXMLNS, __IgnoreEls, _els,
-                     Publish_options, Items, Options, Affiliations,
-                     Subscriptions, Default, Retract, Purge, Delete,
-                     Configure, Create, Unsubscribe, Subscribe, Publish, Rsm,
-                     Subscription).
-
-encode_pubsub({pubsub, Subscriptions, Subscription,
-              Affiliations, Publish, Publish_options, Subscribe,
-              Unsubscribe, Options, Items, Retract, Create, Configure,
-              Default, Delete, Purge, Rsm},
-             __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_$publish_options'(Publish_options,
-                                                      __NewTopXMLNS,
-                                                      'encode_pubsub_$items'(Items,
-                                                                             __NewTopXMLNS,
-                                                                             'encode_pubsub_$options'(Options,
-                                                                                                      __NewTopXMLNS,
-                                                                                                      'encode_pubsub_$affiliations'(Affiliations,
-                                                                                                                                    __NewTopXMLNS,
-                                                                                                                                    'encode_pubsub_$subscriptions'(Subscriptions,
-                                                                                                                                                                   __NewTopXMLNS,
-                                                                                                                                                                   'encode_pubsub_$default'(Default,
-                                                                                                                                                                                            __NewTopXMLNS,
-                                                                                                                                                                                            'encode_pubsub_$retract'(Retract,
-                                                                                                                                                                                                                     __NewTopXMLNS,
-                                                                                                                                                                                                                     'encode_pubsub_$purge'(Purge,
-                                                                                                                                                                                                                                            __NewTopXMLNS,
-                                                                                                                                                                                                                                            'encode_pubsub_$delete'(Delete,
-                                                                                                                                                                                                                                                                    __NewTopXMLNS,
-                                                                                                                                                                                                                                                                    'encode_pubsub_$configure'(Configure,
-                                                                                                                                                                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                               'encode_pubsub_$create'(Create,
-                                                                                                                                                                                                                                                                                                                       __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                       'encode_pubsub_$unsubscribe'(Unsubscribe,
-                                                                                                                                                                                                                                                                                                                                                    __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                    'encode_pubsub_$subscribe'(Subscribe,
-                                                                                                                                                                                                                                                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                               'encode_pubsub_$publish'(Publish,
-                                                                                                                                                                                                                                                                                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                        'encode_pubsub_$rsm'(Rsm,
-                                                                                                                                                                                                                                                                                                                                                                                                                             __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                             'encode_pubsub_$subscription'(Subscription,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                           __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                           []))))))))))))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"pubsub">>, _attrs, _els}.
-
-'encode_pubsub_$publish_options'(undefined, __TopXMLNS,
-                                _acc) ->
-    _acc;
-'encode_pubsub_$publish_options'(Publish_options,
-                                __TopXMLNS, _acc) ->
-    [encode_pubsub_publish_options(Publish_options,
-                                  __TopXMLNS)
-     | _acc].
-
-'encode_pubsub_$items'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_$items'(Items, __TopXMLNS, _acc) ->
-    [encode_pubsub_items(Items, __TopXMLNS) | _acc].
-
-'encode_pubsub_$options'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_$options'(Options, __TopXMLNS, _acc) ->
-    [encode_pubsub_options(Options, __TopXMLNS) | _acc].
-
-'encode_pubsub_$affiliations'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_pubsub_$affiliations'(Affiliations, __TopXMLNS,
-                             _acc) ->
-    [encode_pubsub_affiliations(Affiliations, __TopXMLNS)
-     | _acc].
-
-'encode_pubsub_$subscriptions'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_pubsub_$subscriptions'(Subscriptions,
-                              __TopXMLNS, _acc) ->
-    [encode_pubsub_subscriptions(Subscriptions, __TopXMLNS)
-     | _acc].
-
-'encode_pubsub_$default'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_$default'(Default, __TopXMLNS, _acc) ->
-    [encode_pubsub_default(Default, __TopXMLNS) | _acc].
-
-'encode_pubsub_$retract'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_$retract'(Retract, __TopXMLNS, _acc) ->
-    [encode_pubsub_retract(Retract, __TopXMLNS) | _acc].
-
-'encode_pubsub_$purge'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_$purge'(Purge, __TopXMLNS, _acc) ->
-    [encode_pubsub_purge(Purge, __TopXMLNS) | _acc].
-
-'encode_pubsub_$delete'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_$delete'(Delete, __TopXMLNS, _acc) ->
-    [encode_pubsub_delete(Delete, __TopXMLNS) | _acc].
-
-'encode_pubsub_$configure'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_pubsub_$configure'(Configure, __TopXMLNS,
-                          _acc) ->
-    [encode_pubsub_configure(Configure, __TopXMLNS) | _acc].
-
-'encode_pubsub_$create'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_$create'(Create, __TopXMLNS, _acc) ->
-    [encode_pubsub_create(Create, __TopXMLNS) | _acc].
-
-'encode_pubsub_$unsubscribe'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_pubsub_$unsubscribe'(Unsubscribe, __TopXMLNS,
-                            _acc) ->
-    [encode_pubsub_unsubscribe(Unsubscribe, __TopXMLNS)
-     | _acc].
-
-'encode_pubsub_$subscribe'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_pubsub_$subscribe'(Subscribe, __TopXMLNS,
-                          _acc) ->
-    [encode_pubsub_subscribe(Subscribe, __TopXMLNS) | _acc].
-
-'encode_pubsub_$publish'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_$publish'(Publish, __TopXMLNS, _acc) ->
-    [encode_pubsub_publish(Publish, __TopXMLNS) | _acc].
-
-'encode_pubsub_$rsm'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_$rsm'(Rsm, __TopXMLNS, _acc) ->
-    [encode_rsm_set(Rsm, __TopXMLNS) | _acc].
-
-'encode_pubsub_$subscription'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_pubsub_$subscription'(Subscription, __TopXMLNS,
-                             _acc) ->
-    [encode_pubsub_subscription(Subscription, __TopXMLNS)
-     | _acc].
-
-decode_pubsub_purge(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"purge">>, _attrs, _els}) ->
-    Node = decode_pubsub_purge_attrs(__TopXMLNS, _attrs,
-                                    undefined),
-    Node.
-
-decode_pubsub_purge_attrs(__TopXMLNS,
-                         [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_purge_attrs(__TopXMLNS, _attrs, _val);
-decode_pubsub_purge_attrs(__TopXMLNS, [_ | _attrs],
-                         Node) ->
-    decode_pubsub_purge_attrs(__TopXMLNS, _attrs, Node);
-decode_pubsub_purge_attrs(__TopXMLNS, [], Node) ->
-    decode_pubsub_purge_attr_node(__TopXMLNS, Node).
-
-encode_pubsub_purge(Node, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#owner">>,
-                                     <<"http://jabber.org/protocol/pubsub#event">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_pubsub_purge_attr_node(Node,
-                                          enc_xmlns_attrs(__NewTopXMLNS,
-                                                          __TopXMLNS)),
-    {xmlel, <<"purge">>, _attrs, _els}.
-
-decode_pubsub_purge_attr_node(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"purge">>, __TopXMLNS}});
-decode_pubsub_purge_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_pubsub_purge_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_delete(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"delete">>, _attrs, _els}) ->
-    Uri = decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Node = decode_pubsub_delete_attrs(__TopXMLNS, _attrs,
-                                     undefined),
-    {Node, Uri}.
-
-decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls, [],
-                        Uri) ->
-    Uri;
-decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlel, <<"redirect">>, _attrs, _} = _el | _els],
-                        Uri) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">>;
-              __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#owner">>;
-              __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls, _els,
-                                  decode_pubsub_redirect(__TopXMLNS,
-                                                         __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls, _els,
-                                  decode_pubsub_redirect(<<"http://jabber.org/protocol/pubsub">>,
-                                                         __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls, _els,
-                                  decode_pubsub_redirect(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                         __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls, _els,
-                                  decode_pubsub_redirect(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                         __IgnoreEls, _el));
-      _ ->
-         decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Uri)
-    end;
-decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Uri) ->
-    decode_pubsub_delete_els(__TopXMLNS, __IgnoreEls, _els,
-                            Uri).
-
-decode_pubsub_delete_attrs(__TopXMLNS,
-                          [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_delete_attrs(__TopXMLNS, _attrs, _val);
-decode_pubsub_delete_attrs(__TopXMLNS, [_ | _attrs],
-                          Node) ->
-    decode_pubsub_delete_attrs(__TopXMLNS, _attrs, Node);
-decode_pubsub_delete_attrs(__TopXMLNS, [], Node) ->
-    decode_pubsub_delete_attr_node(__TopXMLNS, Node).
-
-encode_pubsub_delete({Node, Uri}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#owner">>,
-                                     <<"http://jabber.org/protocol/pubsub#event">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_pubsub_delete_$uri'(Uri,
-                                                    __NewTopXMLNS, [])),
-    _attrs = encode_pubsub_delete_attr_node(Node,
-                                           enc_xmlns_attrs(__NewTopXMLNS,
-                                                           __TopXMLNS)),
-    {xmlel, <<"delete">>, _attrs, _els}.
-
-'encode_pubsub_delete_$uri'(<<>>, __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_delete_$uri'(Uri, __TopXMLNS, _acc) ->
-    [encode_pubsub_redirect(Uri, __TopXMLNS) | _acc].
-
-decode_pubsub_delete_attr_node(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"delete">>, __TopXMLNS}});
-decode_pubsub_delete_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_delete_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_redirect(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"redirect">>, _attrs, _els}) ->
-    Uri = decode_pubsub_redirect_attrs(__TopXMLNS, _attrs,
-                                      undefined),
-    Uri.
-
-decode_pubsub_redirect_attrs(__TopXMLNS,
-                            [{<<"uri">>, _val} | _attrs], _Uri) ->
-    decode_pubsub_redirect_attrs(__TopXMLNS, _attrs, _val);
-decode_pubsub_redirect_attrs(__TopXMLNS, [_ | _attrs],
-                            Uri) ->
-    decode_pubsub_redirect_attrs(__TopXMLNS, _attrs, Uri);
-decode_pubsub_redirect_attrs(__TopXMLNS, [], Uri) ->
-    decode_pubsub_redirect_attr_uri(__TopXMLNS, Uri).
-
-encode_pubsub_redirect(Uri, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#owner">>,
-                                     <<"http://jabber.org/protocol/pubsub#event">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_pubsub_redirect_attr_uri(Uri,
-                                            enc_xmlns_attrs(__NewTopXMLNS,
-                                                            __TopXMLNS)),
-    {xmlel, <<"redirect">>, _attrs, _els}.
-
-decode_pubsub_redirect_attr_uri(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"uri">>, <<"redirect">>, __TopXMLNS}});
-decode_pubsub_redirect_attr_uri(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_redirect_attr_uri(_val, _acc) ->
-    [{<<"uri">>, _val} | _acc].
-
-decode_pubsub_default(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"default">>, _attrs, _els}) ->
-    Xdata = decode_pubsub_default_els(__TopXMLNS,
-                                     __IgnoreEls, _els, undefined),
-    Node = decode_pubsub_default_attrs(__TopXMLNS, _attrs,
-                                      undefined),
-    {Node, Xdata}.
-
-decode_pubsub_default_els(__TopXMLNS, __IgnoreEls, [],
-                         Xdata) ->
-    Xdata;
-decode_pubsub_default_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_pubsub_default_els(__TopXMLNS, __IgnoreEls, _els,
-                                   decode_xdata(<<"jabber:x:data">>,
-                                                __IgnoreEls, _el));
-      _ ->
-         decode_pubsub_default_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Xdata)
-    end;
-decode_pubsub_default_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Xdata) ->
-    decode_pubsub_default_els(__TopXMLNS, __IgnoreEls, _els,
-                             Xdata).
-
-decode_pubsub_default_attrs(__TopXMLNS,
-                           [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_default_attrs(__TopXMLNS, _attrs, _val);
-decode_pubsub_default_attrs(__TopXMLNS, [_ | _attrs],
-                           Node) ->
-    decode_pubsub_default_attrs(__TopXMLNS, _attrs, Node);
-decode_pubsub_default_attrs(__TopXMLNS, [], Node) ->
-    decode_pubsub_default_attr_node(__TopXMLNS, Node).
-
-encode_pubsub_default({Node, Xdata}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#owner">>],
-                                    __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_default_$xdata'(Xdata,
-                                                    __NewTopXMLNS, [])),
-    _attrs = encode_pubsub_default_attr_node(Node,
-                                            enc_xmlns_attrs(__NewTopXMLNS,
-                                                            __TopXMLNS)),
-    {xmlel, <<"default">>, _attrs, _els}.
-
-'encode_pubsub_default_$xdata'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_pubsub_default_$xdata'(Xdata, __TopXMLNS,
-                              _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-decode_pubsub_default_attr_node(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_pubsub_default_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_default_attr_node(<<>>, _acc) -> _acc;
-encode_pubsub_default_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_publish_options(__TopXMLNS, __IgnoreEls,
-                             {xmlel, <<"publish-options">>, _attrs, _els}) ->
-    Xdata = decode_pubsub_publish_options_els(__TopXMLNS,
-                                             __IgnoreEls, _els, undefined),
-    Xdata.
-
-decode_pubsub_publish_options_els(__TopXMLNS,
-                                 __IgnoreEls, [], Xdata) ->
-    Xdata;
-decode_pubsub_publish_options_els(__TopXMLNS,
-                                 __IgnoreEls,
-                                 [{xmlel, <<"x">>, _attrs, _} = _el | _els],
-                                 Xdata) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_pubsub_publish_options_els(__TopXMLNS,
-                                           __IgnoreEls, _els,
-                                           decode_xdata(<<"jabber:x:data">>,
-                                                        __IgnoreEls, _el));
-      _ ->
-         decode_pubsub_publish_options_els(__TopXMLNS,
-                                           __IgnoreEls, _els, Xdata)
-    end;
-decode_pubsub_publish_options_els(__TopXMLNS,
-                                 __IgnoreEls, [_ | _els], Xdata) ->
-    decode_pubsub_publish_options_els(__TopXMLNS,
-                                     __IgnoreEls, _els, Xdata).
-
-encode_pubsub_publish_options(Xdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_publish_options_$xdata'(Xdata,
-                                                            __NewTopXMLNS,
-                                                            [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"publish-options">>, _attrs, _els}.
-
-'encode_pubsub_publish_options_$xdata'(undefined,
-                                      __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_publish_options_$xdata'(Xdata,
-                                      __TopXMLNS, _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-decode_pubsub_configure(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"configure">>, _attrs, _els}) ->
-    Xdata = decode_pubsub_configure_els(__TopXMLNS,
-                                       __IgnoreEls, _els, undefined),
-    Node = decode_pubsub_configure_attrs(__TopXMLNS, _attrs,
-                                        undefined),
-    {Node, Xdata}.
-
-decode_pubsub_configure_els(__TopXMLNS, __IgnoreEls, [],
-                           Xdata) ->
-    Xdata;
-decode_pubsub_configure_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlel, <<"x">>, _attrs, _} = _el | _els],
-                           Xdata) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_pubsub_configure_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_xdata(<<"jabber:x:data">>,
-                                                  __IgnoreEls, _el));
-      _ ->
-         decode_pubsub_configure_els(__TopXMLNS, __IgnoreEls,
-                                     _els, Xdata)
-    end;
-decode_pubsub_configure_els(__TopXMLNS, __IgnoreEls,
-                           [_ | _els], Xdata) ->
-    decode_pubsub_configure_els(__TopXMLNS, __IgnoreEls,
-                               _els, Xdata).
-
-decode_pubsub_configure_attrs(__TopXMLNS,
-                             [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_configure_attrs(__TopXMLNS, _attrs, _val);
-decode_pubsub_configure_attrs(__TopXMLNS, [_ | _attrs],
-                             Node) ->
-    decode_pubsub_configure_attrs(__TopXMLNS, _attrs, Node);
-decode_pubsub_configure_attrs(__TopXMLNS, [], Node) ->
-    decode_pubsub_configure_attr_node(__TopXMLNS, Node).
-
-encode_pubsub_configure({Node, Xdata}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#owner">>],
-                                    __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_configure_$xdata'(Xdata,
-                                                      __NewTopXMLNS, [])),
-    _attrs = encode_pubsub_configure_attr_node(Node,
-                                              enc_xmlns_attrs(__NewTopXMLNS,
-                                                              __TopXMLNS)),
-    {xmlel, <<"configure">>, _attrs, _els}.
-
-'encode_pubsub_configure_$xdata'(undefined, __TopXMLNS,
-                                _acc) ->
-    _acc;
-'encode_pubsub_configure_$xdata'(Xdata, __TopXMLNS,
-                                _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-decode_pubsub_configure_attr_node(__TopXMLNS,
-                                 undefined) ->
-    <<>>;
-decode_pubsub_configure_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_configure_attr_node(<<>>, _acc) -> _acc;
-encode_pubsub_configure_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_create(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"create">>, _attrs, _els}) ->
-    Node = decode_pubsub_create_attrs(__TopXMLNS, _attrs,
-                                     undefined),
-    Node.
-
-decode_pubsub_create_attrs(__TopXMLNS,
-                          [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_create_attrs(__TopXMLNS, _attrs, _val);
-decode_pubsub_create_attrs(__TopXMLNS, [_ | _attrs],
-                          Node) ->
-    decode_pubsub_create_attrs(__TopXMLNS, _attrs, Node);
-decode_pubsub_create_attrs(__TopXMLNS, [], Node) ->
-    decode_pubsub_create_attr_node(__TopXMLNS, Node).
-
-encode_pubsub_create(Node, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#event">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_pubsub_create_attr_node(Node,
-                                           enc_xmlns_attrs(__NewTopXMLNS,
-                                                           __TopXMLNS)),
-    {xmlel, <<"create">>, _attrs, _els}.
-
-decode_pubsub_create_attr_node(__TopXMLNS, undefined) ->
-    <<>>;
-decode_pubsub_create_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_create_attr_node(<<>>, _acc) -> _acc;
-encode_pubsub_create_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_retract(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"retract">>, _attrs, _els}) ->
-    Items = decode_pubsub_retract_els(__TopXMLNS,
-                                     __IgnoreEls, _els, []),
-    {Node, Notify} = decode_pubsub_retract_attrs(__TopXMLNS,
-                                                _attrs, undefined, undefined),
-    {ps_retract, Node, Notify, Items}.
-
-decode_pubsub_retract_els(__TopXMLNS, __IgnoreEls, [],
-                         Items) ->
-    lists:reverse(Items);
-decode_pubsub_retract_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"item">>, _attrs, _} = _el | _els],
-                         Items) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_retract_els(__TopXMLNS, __IgnoreEls, _els,
-                                   [decode_pubsub_item(__TopXMLNS, __IgnoreEls,
-                                                       _el)
-                                    | Items]);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_retract_els(__TopXMLNS, __IgnoreEls, _els,
-                                   [decode_pubsub_item(<<"http://jabber.org/protocol/pubsub">>,
-                                                       __IgnoreEls, _el)
-                                    | Items]);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_retract_els(__TopXMLNS, __IgnoreEls, _els,
-                                   [decode_pubsub_item(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                       __IgnoreEls, _el)
-                                    | Items]);
-      _ ->
-         decode_pubsub_retract_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Items)
-    end;
-decode_pubsub_retract_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Items) ->
-    decode_pubsub_retract_els(__TopXMLNS, __IgnoreEls, _els,
-                             Items).
-
-decode_pubsub_retract_attrs(__TopXMLNS,
-                           [{<<"node">>, _val} | _attrs], _Node, Notify) ->
-    decode_pubsub_retract_attrs(__TopXMLNS, _attrs, _val,
-                               Notify);
-decode_pubsub_retract_attrs(__TopXMLNS,
-                           [{<<"notify">>, _val} | _attrs], Node, _Notify) ->
-    decode_pubsub_retract_attrs(__TopXMLNS, _attrs, Node,
-                               _val);
-decode_pubsub_retract_attrs(__TopXMLNS, [_ | _attrs],
-                           Node, Notify) ->
-    decode_pubsub_retract_attrs(__TopXMLNS, _attrs, Node,
-                               Notify);
-decode_pubsub_retract_attrs(__TopXMLNS, [], Node,
-                           Notify) ->
-    {decode_pubsub_retract_attr_node(__TopXMLNS, Node),
-     decode_pubsub_retract_attr_notify(__TopXMLNS, Notify)}.
-
-encode_pubsub_retract({ps_retract, Node, Notify, Items},
-                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_retract_$items'(Items,
-                                                    __NewTopXMLNS, [])),
-    _attrs = encode_pubsub_retract_attr_notify(Notify,
-                                              encode_pubsub_retract_attr_node(Node,
-                                                                              enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                              __TopXMLNS))),
-    {xmlel, <<"retract">>, _attrs, _els}.
-
-'encode_pubsub_retract_$items'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_retract_$items'([Items | _els],
-                              __TopXMLNS, _acc) ->
-    'encode_pubsub_retract_$items'(_els, __TopXMLNS,
-                                  [encode_pubsub_item(Items, __TopXMLNS)
-                                   | _acc]).
-
-decode_pubsub_retract_attr_node(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"retract">>, __TopXMLNS}});
-decode_pubsub_retract_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_retract_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_retract_attr_notify(__TopXMLNS,
-                                 undefined) ->
-    false;
-decode_pubsub_retract_attr_notify(__TopXMLNS, _val) ->
-    case catch dec_bool(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"notify">>, <<"retract">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_retract_attr_notify(false, _acc) -> _acc;
-encode_pubsub_retract_attr_notify(_val, _acc) ->
-    [{<<"notify">>, enc_bool(_val)} | _acc].
-
-decode_pubsub_options(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"options">>, _attrs, _els}) ->
-    Xdata = decode_pubsub_options_els(__TopXMLNS,
-                                     __IgnoreEls, _els, undefined),
-    {Node, Subid, Jid} =
-       decode_pubsub_options_attrs(__TopXMLNS, _attrs,
-                                   undefined, undefined, undefined),
-    {ps_options, Node, Jid, Subid, Xdata}.
-
-decode_pubsub_options_els(__TopXMLNS, __IgnoreEls, [],
-                         Xdata) ->
-    Xdata;
-decode_pubsub_options_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_pubsub_options_els(__TopXMLNS, __IgnoreEls, _els,
-                                   decode_xdata(<<"jabber:x:data">>,
-                                                __IgnoreEls, _el));
-      _ ->
-         decode_pubsub_options_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Xdata)
-    end;
-decode_pubsub_options_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Xdata) ->
-    decode_pubsub_options_els(__TopXMLNS, __IgnoreEls, _els,
-                             Xdata).
-
-decode_pubsub_options_attrs(__TopXMLNS,
-                           [{<<"node">>, _val} | _attrs], _Node, Subid, Jid) ->
-    decode_pubsub_options_attrs(__TopXMLNS, _attrs, _val,
-                               Subid, Jid);
-decode_pubsub_options_attrs(__TopXMLNS,
-                           [{<<"subid">>, _val} | _attrs], Node, _Subid,
-                           Jid) ->
-    decode_pubsub_options_attrs(__TopXMLNS, _attrs, Node,
-                               _val, Jid);
-decode_pubsub_options_attrs(__TopXMLNS,
-                           [{<<"jid">>, _val} | _attrs], Node, Subid, _Jid) ->
-    decode_pubsub_options_attrs(__TopXMLNS, _attrs, Node,
-                               Subid, _val);
-decode_pubsub_options_attrs(__TopXMLNS, [_ | _attrs],
-                           Node, Subid, Jid) ->
-    decode_pubsub_options_attrs(__TopXMLNS, _attrs, Node,
-                               Subid, Jid);
-decode_pubsub_options_attrs(__TopXMLNS, [], Node, Subid,
-                           Jid) ->
-    {decode_pubsub_options_attr_node(__TopXMLNS, Node),
-     decode_pubsub_options_attr_subid(__TopXMLNS, Subid),
-     decode_pubsub_options_attr_jid(__TopXMLNS, Jid)}.
-
-encode_pubsub_options({ps_options, Node, Jid, Subid,
-                      Xdata},
-                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_options_$xdata'(Xdata,
-                                                    __NewTopXMLNS, [])),
-    _attrs = encode_pubsub_options_attr_jid(Jid,
-                                           encode_pubsub_options_attr_subid(Subid,
-                                                                            encode_pubsub_options_attr_node(Node,
-                                                                                                            enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                            __TopXMLNS)))),
-    {xmlel, <<"options">>, _attrs, _els}.
-
-'encode_pubsub_options_$xdata'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_pubsub_options_$xdata'(Xdata, __TopXMLNS,
-                              _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-decode_pubsub_options_attr_node(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_pubsub_options_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_options_attr_node(<<>>, _acc) -> _acc;
-encode_pubsub_options_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_options_attr_subid(__TopXMLNS,
-                                undefined) ->
-    <<>>;
-decode_pubsub_options_attr_subid(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_options_attr_subid(<<>>, _acc) -> _acc;
-encode_pubsub_options_attr_subid(_val, _acc) ->
-    [{<<"subid">>, _val} | _acc].
-
-decode_pubsub_options_attr_jid(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"options">>, __TopXMLNS}});
-decode_pubsub_options_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"options">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_options_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_pubsub_publish(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"publish">>, _attrs, _els}) ->
-    Items = decode_pubsub_publish_els(__TopXMLNS,
-                                     __IgnoreEls, _els, []),
-    Node = decode_pubsub_publish_attrs(__TopXMLNS, _attrs,
-                                      undefined),
-    {ps_publish, Node, Items}.
-
-decode_pubsub_publish_els(__TopXMLNS, __IgnoreEls, [],
-                         Items) ->
-    lists:reverse(Items);
-decode_pubsub_publish_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"item">>, _attrs, _} = _el | _els],
-                         Items) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_publish_els(__TopXMLNS, __IgnoreEls, _els,
-                                   [decode_pubsub_item(__TopXMLNS, __IgnoreEls,
-                                                       _el)
-                                    | Items]);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_publish_els(__TopXMLNS, __IgnoreEls, _els,
-                                   [decode_pubsub_item(<<"http://jabber.org/protocol/pubsub">>,
-                                                       __IgnoreEls, _el)
-                                    | Items]);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_publish_els(__TopXMLNS, __IgnoreEls, _els,
-                                   [decode_pubsub_item(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                       __IgnoreEls, _el)
-                                    | Items]);
-      _ ->
-         decode_pubsub_publish_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Items)
-    end;
-decode_pubsub_publish_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Items) ->
-    decode_pubsub_publish_els(__TopXMLNS, __IgnoreEls, _els,
-                             Items).
-
-decode_pubsub_publish_attrs(__TopXMLNS,
-                           [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_publish_attrs(__TopXMLNS, _attrs, _val);
-decode_pubsub_publish_attrs(__TopXMLNS, [_ | _attrs],
-                           Node) ->
-    decode_pubsub_publish_attrs(__TopXMLNS, _attrs, Node);
-decode_pubsub_publish_attrs(__TopXMLNS, [], Node) ->
-    decode_pubsub_publish_attr_node(__TopXMLNS, Node).
-
-encode_pubsub_publish({ps_publish, Node, Items},
-                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_publish_$items'(Items,
-                                                    __NewTopXMLNS, [])),
-    _attrs = encode_pubsub_publish_attr_node(Node,
-                                            enc_xmlns_attrs(__NewTopXMLNS,
-                                                            __TopXMLNS)),
-    {xmlel, <<"publish">>, _attrs, _els}.
-
-'encode_pubsub_publish_$items'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_publish_$items'([Items | _els],
-                              __TopXMLNS, _acc) ->
-    'encode_pubsub_publish_$items'(_els, __TopXMLNS,
-                                  [encode_pubsub_item(Items, __TopXMLNS)
-                                   | _acc]).
-
-decode_pubsub_publish_attr_node(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"publish">>, __TopXMLNS}});
-decode_pubsub_publish_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_publish_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_unsubscribe(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"unsubscribe">>, _attrs, _els}) ->
-    {Node, Subid, Jid} =
-       decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
-                                       undefined, undefined, undefined),
-    {ps_unsubscribe, Node, Jid, Subid}.
-
-decode_pubsub_unsubscribe_attrs(__TopXMLNS,
-                               [{<<"node">>, _val} | _attrs], _Node, Subid,
-                               Jid) ->
-    decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
-                                   _val, Subid, Jid);
-decode_pubsub_unsubscribe_attrs(__TopXMLNS,
-                               [{<<"subid">>, _val} | _attrs], Node, _Subid,
-                               Jid) ->
-    decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
-                                   Node, _val, Jid);
-decode_pubsub_unsubscribe_attrs(__TopXMLNS,
-                               [{<<"jid">>, _val} | _attrs], Node, Subid,
-                               _Jid) ->
-    decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
-                                   Node, Subid, _val);
-decode_pubsub_unsubscribe_attrs(__TopXMLNS,
-                               [_ | _attrs], Node, Subid, Jid) ->
-    decode_pubsub_unsubscribe_attrs(__TopXMLNS, _attrs,
-                                   Node, Subid, Jid);
-decode_pubsub_unsubscribe_attrs(__TopXMLNS, [], Node,
-                               Subid, Jid) ->
-    {decode_pubsub_unsubscribe_attr_node(__TopXMLNS, Node),
-     decode_pubsub_unsubscribe_attr_subid(__TopXMLNS, Subid),
-     decode_pubsub_unsubscribe_attr_jid(__TopXMLNS, Jid)}.
-
-encode_pubsub_unsubscribe({ps_unsubscribe, Node, Jid,
-                          Subid},
-                         __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_pubsub_unsubscribe_attr_jid(Jid,
-                                               encode_pubsub_unsubscribe_attr_subid(Subid,
-                                                                                    encode_pubsub_unsubscribe_attr_node(Node,
-                                                                                                                        enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                        __TopXMLNS)))),
-    {xmlel, <<"unsubscribe">>, _attrs, _els}.
-
-decode_pubsub_unsubscribe_attr_node(__TopXMLNS,
-                                   undefined) ->
-    <<>>;
-decode_pubsub_unsubscribe_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_unsubscribe_attr_node(<<>>, _acc) -> _acc;
-encode_pubsub_unsubscribe_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_unsubscribe_attr_subid(__TopXMLNS,
-                                    undefined) ->
-    <<>>;
-decode_pubsub_unsubscribe_attr_subid(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-encode_pubsub_unsubscribe_attr_subid(<<>>, _acc) ->
-    _acc;
-encode_pubsub_unsubscribe_attr_subid(_val, _acc) ->
-    [{<<"subid">>, _val} | _acc].
-
-decode_pubsub_unsubscribe_attr_jid(__TopXMLNS,
-                                  undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"unsubscribe">>,
-                  __TopXMLNS}});
-decode_pubsub_unsubscribe_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"unsubscribe">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_unsubscribe_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_pubsub_subscribe(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"subscribe">>, _attrs, _els}) ->
-    {Node, Jid} = decode_pubsub_subscribe_attrs(__TopXMLNS,
-                                               _attrs, undefined, undefined),
-    {ps_subscribe, Node, Jid}.
-
-decode_pubsub_subscribe_attrs(__TopXMLNS,
-                             [{<<"node">>, _val} | _attrs], _Node, Jid) ->
-    decode_pubsub_subscribe_attrs(__TopXMLNS, _attrs, _val,
-                                 Jid);
-decode_pubsub_subscribe_attrs(__TopXMLNS,
-                             [{<<"jid">>, _val} | _attrs], Node, _Jid) ->
-    decode_pubsub_subscribe_attrs(__TopXMLNS, _attrs, Node,
-                                 _val);
-decode_pubsub_subscribe_attrs(__TopXMLNS, [_ | _attrs],
-                             Node, Jid) ->
-    decode_pubsub_subscribe_attrs(__TopXMLNS, _attrs, Node,
-                                 Jid);
-decode_pubsub_subscribe_attrs(__TopXMLNS, [], Node,
-                             Jid) ->
-    {decode_pubsub_subscribe_attr_node(__TopXMLNS, Node),
-     decode_pubsub_subscribe_attr_jid(__TopXMLNS, Jid)}.
-
-encode_pubsub_subscribe({ps_subscribe, Node, Jid},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_pubsub_subscribe_attr_jid(Jid,
-                                             encode_pubsub_subscribe_attr_node(Node,
-                                                                               enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                               __TopXMLNS))),
-    {xmlel, <<"subscribe">>, _attrs, _els}.
-
-decode_pubsub_subscribe_attr_node(__TopXMLNS,
-                                 undefined) ->
-    <<>>;
-decode_pubsub_subscribe_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_subscribe_attr_node(<<>>, _acc) -> _acc;
-encode_pubsub_subscribe_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_subscribe_attr_jid(__TopXMLNS,
-                                undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"subscribe">>,
-                  __TopXMLNS}});
-decode_pubsub_subscribe_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"subscribe">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_subscribe_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_pubsub_owner_affiliations(__TopXMLNS,
-                                __IgnoreEls,
-                                {xmlel, <<"affiliations">>, _attrs, _els}) ->
-    Affiliations =
-       decode_pubsub_owner_affiliations_els(__TopXMLNS,
-                                            __IgnoreEls, _els, []),
-    Node =
-       decode_pubsub_owner_affiliations_attrs(__TopXMLNS,
-                                              _attrs, undefined),
-    {Node, Affiliations}.
-
-decode_pubsub_owner_affiliations_els(__TopXMLNS,
-                                    __IgnoreEls, [], Affiliations) ->
-    lists:reverse(Affiliations);
-decode_pubsub_owner_affiliations_els(__TopXMLNS,
-                                    __IgnoreEls,
-                                    [{xmlel, <<"affiliation">>, _attrs, _} =
-                                         _el
-                                     | _els],
-                                    Affiliations) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_affiliations_els(__TopXMLNS,
-                                              __IgnoreEls, _els,
-                                              [decode_pubsub_owner_affiliation(__TopXMLNS,
-                                                                               __IgnoreEls,
-                                                                               _el)
-                                               | Affiliations]);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_owner_affiliations_els(__TopXMLNS,
-                                              __IgnoreEls, _els,
-                                              [decode_pubsub_owner_affiliation(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                                               __IgnoreEls,
-                                                                               _el)
-                                               | Affiliations]);
-      _ ->
-         decode_pubsub_owner_affiliations_els(__TopXMLNS,
-                                              __IgnoreEls, _els, Affiliations)
-    end;
-decode_pubsub_owner_affiliations_els(__TopXMLNS,
-                                    __IgnoreEls, [_ | _els], Affiliations) ->
-    decode_pubsub_owner_affiliations_els(__TopXMLNS,
-                                        __IgnoreEls, _els, Affiliations).
-
-decode_pubsub_owner_affiliations_attrs(__TopXMLNS,
-                                      [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_owner_affiliations_attrs(__TopXMLNS,
-                                          _attrs, _val);
-decode_pubsub_owner_affiliations_attrs(__TopXMLNS,
-                                      [_ | _attrs], Node) ->
-    decode_pubsub_owner_affiliations_attrs(__TopXMLNS,
-                                          _attrs, Node);
-decode_pubsub_owner_affiliations_attrs(__TopXMLNS, [],
-                                      Node) ->
-    decode_pubsub_owner_affiliations_attr_node(__TopXMLNS,
-                                              Node).
-
-encode_pubsub_owner_affiliations({Node, Affiliations},
-                                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#owner">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_owner_affiliations_$affiliations'(Affiliations,
-                                                                      __NewTopXMLNS,
-                                                                      [])),
-    _attrs =
-       encode_pubsub_owner_affiliations_attr_node(Node,
-                                                  enc_xmlns_attrs(__NewTopXMLNS,
-                                                                  __TopXMLNS)),
-    {xmlel, <<"affiliations">>, _attrs, _els}.
-
-'encode_pubsub_owner_affiliations_$affiliations'([],
-                                                __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_owner_affiliations_$affiliations'([Affiliations
-                                                 | _els],
-                                                __TopXMLNS, _acc) ->
-    'encode_pubsub_owner_affiliations_$affiliations'(_els,
-                                                    __TopXMLNS,
-                                                    [encode_pubsub_owner_affiliation(Affiliations,
-                                                                                     __TopXMLNS)
-                                                     | _acc]).
-
-decode_pubsub_owner_affiliations_attr_node(__TopXMLNS,
-                                          undefined) ->
-    <<>>;
-decode_pubsub_owner_affiliations_attr_node(__TopXMLNS,
-                                          _val) ->
-    _val.
-
-encode_pubsub_owner_affiliations_attr_node(<<>>,
-                                          _acc) ->
-    _acc;
-encode_pubsub_owner_affiliations_attr_node(_val,
-                                          _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_affiliations(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"affiliations">>, _attrs, _els}) ->
-    Affiliations =
-       decode_pubsub_affiliations_els(__TopXMLNS, __IgnoreEls,
-                                      _els, []),
-    Node = decode_pubsub_affiliations_attrs(__TopXMLNS,
-                                           _attrs, undefined),
-    {Node, Affiliations}.
-
-decode_pubsub_affiliations_els(__TopXMLNS, __IgnoreEls,
-                              [], Affiliations) ->
-    lists:reverse(Affiliations);
-decode_pubsub_affiliations_els(__TopXMLNS, __IgnoreEls,
-                              [{xmlel, <<"affiliation">>, _attrs, _} = _el
-                               | _els],
-                              Affiliations) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_affiliations_els(__TopXMLNS, __IgnoreEls,
-                                        _els,
-                                        [decode_pubsub_affiliation(__TopXMLNS,
-                                                                   __IgnoreEls,
-                                                                   _el)
-                                         | Affiliations]);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_affiliations_els(__TopXMLNS, __IgnoreEls,
-                                        _els,
-                                        [decode_pubsub_affiliation(<<"http://jabber.org/protocol/pubsub">>,
-                                                                   __IgnoreEls,
-                                                                   _el)
-                                         | Affiliations]);
-      _ ->
-         decode_pubsub_affiliations_els(__TopXMLNS, __IgnoreEls,
-                                        _els, Affiliations)
-    end;
-decode_pubsub_affiliations_els(__TopXMLNS, __IgnoreEls,
-                              [_ | _els], Affiliations) ->
-    decode_pubsub_affiliations_els(__TopXMLNS, __IgnoreEls,
-                                  _els, Affiliations).
-
-decode_pubsub_affiliations_attrs(__TopXMLNS,
-                                [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_affiliations_attrs(__TopXMLNS, _attrs,
-                                    _val);
-decode_pubsub_affiliations_attrs(__TopXMLNS,
-                                [_ | _attrs], Node) ->
-    decode_pubsub_affiliations_attrs(__TopXMLNS, _attrs,
-                                    Node);
-decode_pubsub_affiliations_attrs(__TopXMLNS, [],
-                                Node) ->
-    decode_pubsub_affiliations_attr_node(__TopXMLNS, Node).
-
-encode_pubsub_affiliations({Node, Affiliations},
-                          __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_affiliations_$affiliations'(Affiliations,
-                                                                __NewTopXMLNS,
-                                                                [])),
-    _attrs = encode_pubsub_affiliations_attr_node(Node,
-                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                 __TopXMLNS)),
-    {xmlel, <<"affiliations">>, _attrs, _els}.
-
-'encode_pubsub_affiliations_$affiliations'([],
-                                          __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_affiliations_$affiliations'([Affiliations
-                                           | _els],
-                                          __TopXMLNS, _acc) ->
-    'encode_pubsub_affiliations_$affiliations'(_els,
-                                              __TopXMLNS,
-                                              [encode_pubsub_affiliation(Affiliations,
-                                                                         __TopXMLNS)
-                                               | _acc]).
-
-decode_pubsub_affiliations_attr_node(__TopXMLNS,
-                                    undefined) ->
-    <<>>;
-decode_pubsub_affiliations_attr_node(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-encode_pubsub_affiliations_attr_node(<<>>, _acc) ->
-    _acc;
-encode_pubsub_affiliations_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_subscriptions(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"subscriptions">>, _attrs, _els}) ->
-    Subscriptions =
-       decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                       _els, []),
-    Node = decode_pubsub_subscriptions_attrs(__TopXMLNS,
-                                            _attrs, undefined),
-    {Node, Subscriptions}.
-
-decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                               [], Subscriptions) ->
-    lists:reverse(Subscriptions);
-decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                               [{xmlel, <<"subscription">>, _attrs, _} = _el
-                                | _els],
-                               Subscriptions) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">>;
-              __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                         _els,
-                                         [decode_pubsub_subscription(__TopXMLNS,
-                                                                     __IgnoreEls,
-                                                                     _el)
-                                          | Subscriptions]);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                         _els,
-                                         [decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub">>,
-                                                                     __IgnoreEls,
-                                                                     _el)
-                                          | Subscriptions]);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                         _els,
-                                         [decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                                     __IgnoreEls,
-                                                                     _el)
-                                          | Subscriptions]);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                         _els,
-                                         [decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                                     __IgnoreEls,
-                                                                     _el)
-                                          | Subscriptions]);
-      _ ->
-         decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                         _els, Subscriptions)
-    end;
-decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                               [_ | _els], Subscriptions) ->
-    decode_pubsub_subscriptions_els(__TopXMLNS, __IgnoreEls,
-                                   _els, Subscriptions).
-
-decode_pubsub_subscriptions_attrs(__TopXMLNS,
-                                 [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_subscriptions_attrs(__TopXMLNS, _attrs,
-                                     _val);
-decode_pubsub_subscriptions_attrs(__TopXMLNS,
-                                 [_ | _attrs], Node) ->
-    decode_pubsub_subscriptions_attrs(__TopXMLNS, _attrs,
-                                     Node);
-decode_pubsub_subscriptions_attrs(__TopXMLNS, [],
-                                 Node) ->
-    decode_pubsub_subscriptions_attr_node(__TopXMLNS, Node).
-
-encode_pubsub_subscriptions({Node, Subscriptions},
-                           __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#owner">>],
-                                    __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_subscriptions_$subscriptions'(Subscriptions,
-                                                                  __NewTopXMLNS,
-                                                                  [])),
-    _attrs = encode_pubsub_subscriptions_attr_node(Node,
-                                                  enc_xmlns_attrs(__NewTopXMLNS,
-                                                                  __TopXMLNS)),
-    {xmlel, <<"subscriptions">>, _attrs, _els}.
-
-'encode_pubsub_subscriptions_$subscriptions'([],
-                                            __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_subscriptions_$subscriptions'([Subscriptions
-                                             | _els],
-                                            __TopXMLNS, _acc) ->
-    'encode_pubsub_subscriptions_$subscriptions'(_els,
-                                                __TopXMLNS,
-                                                [encode_pubsub_subscription(Subscriptions,
-                                                                            __TopXMLNS)
-                                                 | _acc]).
-
-decode_pubsub_subscriptions_attr_node(__TopXMLNS,
-                                     undefined) ->
-    <<>>;
-decode_pubsub_subscriptions_attr_node(__TopXMLNS,
-                                     _val) ->
-    _val.
-
-encode_pubsub_subscriptions_attr_node(<<>>, _acc) ->
-    _acc;
-encode_pubsub_subscriptions_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_event(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"event">>, _attrs, _els}) ->
-    {Items, Create, Delete, Purge, Configuration,
-     Subscription} =
-       decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                               undefined, undefined, undefined, undefined,
-                               undefined, undefined),
-    {ps_event, Items, Purge, Subscription, Delete, Create,
-     Configuration}.
-
-decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, [],
-                       Items, Create, Delete, Purge, Configuration,
-                       Subscription) ->
-    {Items, Create, Delete, Purge, Configuration,
-     Subscription};
-decode_pubsub_event_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"items">>, _attrs, _} = _el | _els], Items,
-                       Create, Delete, Purge, Configuration, Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 decode_pubsub_items(__TopXMLNS, __IgnoreEls,
-                                                     _el),
-                                 Create, Delete, Purge, Configuration,
-                                 Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 decode_pubsub_items(<<"http://jabber.org/protocol/pubsub">>,
-                                                     __IgnoreEls, _el),
-                                 Create, Delete, Purge, Configuration,
-                                 Subscription);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 decode_pubsub_items(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                     __IgnoreEls, _el),
-                                 Create, Delete, Purge, Configuration,
-                                 Subscription);
-      _ ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 Subscription)
-    end;
-decode_pubsub_event_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"subscription">>, _attrs, _} = _el | _els],
-                       Items, Create, Delete, Purge, Configuration,
-                       Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 decode_pubsub_subscription(__TopXMLNS,
-                                                            __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub">>,
-                                                            __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                            __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 decode_pubsub_subscription(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                            __IgnoreEls, _el));
-      _ ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 Subscription)
-    end;
-decode_pubsub_event_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"purge">>, _attrs, _} = _el | _els], Items,
-                       Create, Delete, Purge, Configuration, Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete,
-                                 decode_pubsub_purge(__TopXMLNS, __IgnoreEls,
-                                                     _el),
-                                 Configuration, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete,
-                                 decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub">>,
-                                                     __IgnoreEls, _el),
-                                 Configuration, Subscription);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete,
-                                 decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                     __IgnoreEls, _el),
-                                 Configuration, Subscription);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete,
-                                 decode_pubsub_purge(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                     __IgnoreEls, _el),
-                                 Configuration, Subscription);
-      _ ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 Subscription)
-    end;
-decode_pubsub_event_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"delete">>, _attrs, _} = _el | _els], Items,
-                       Create, Delete, Purge, Configuration, Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create,
-                                 decode_pubsub_delete(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                                 Purge, Configuration, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create,
-                                 decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub">>,
-                                                      __IgnoreEls, _el),
-                                 Purge, Configuration, Subscription);
-      <<"http://jabber.org/protocol/pubsub#owner">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create,
-                                 decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#owner">>,
-                                                      __IgnoreEls, _el),
-                                 Purge, Configuration, Subscription);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create,
-                                 decode_pubsub_delete(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                      __IgnoreEls, _el),
-                                 Purge, Configuration, Subscription);
-      _ ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 Subscription)
-    end;
-decode_pubsub_event_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"create">>, _attrs, _} = _el | _els], Items,
-                       Create, Delete, Purge, Configuration, Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items,
-                                 decode_pubsub_create(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                                 Delete, Purge, Configuration, Subscription);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items,
-                                 decode_pubsub_create(<<"http://jabber.org/protocol/pubsub">>,
-                                                      __IgnoreEls, _el),
-                                 Delete, Purge, Configuration, Subscription);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items,
-                                 decode_pubsub_create(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                      __IgnoreEls, _el),
-                                 Delete, Purge, Configuration, Subscription);
-      _ ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 Subscription)
-    end;
-decode_pubsub_event_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"configuration">>, _attrs, _} = _el | _els],
-                       Items, Create, Delete, Purge, Configuration,
-                       Subscription) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge,
-                                 decode_pubsub_event_configuration(__TopXMLNS,
-                                                                   __IgnoreEls,
-                                                                   _el),
-                                 Subscription);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge,
-                                 decode_pubsub_event_configuration(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                                   __IgnoreEls,
-                                                                   _el),
-                                 Subscription);
-      _ ->
-         decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Create, Delete, Purge, Configuration,
-                                 Subscription)
-    end;
-decode_pubsub_event_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Items, Create, Delete, Purge, Configuration,
-                       Subscription) ->
-    decode_pubsub_event_els(__TopXMLNS, __IgnoreEls, _els,
-                           Items, Create, Delete, Purge, Configuration,
-                           Subscription).
-
-encode_pubsub_event({ps_event, Items, Purge,
-                    Subscription, Delete, Create, Configuration},
-                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#event">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_pubsub_event_$items'(Items,
-                                                     __NewTopXMLNS,
-                                                     'encode_pubsub_event_$create'(Create,
-                                                                                   __NewTopXMLNS,
-                                                                                   'encode_pubsub_event_$delete'(Delete,
-                                                                                                                 __NewTopXMLNS,
-                                                                                                                 'encode_pubsub_event_$purge'(Purge,
-                                                                                                                                              __NewTopXMLNS,
-                                                                                                                                              'encode_pubsub_event_$configuration'(Configuration,
-                                                                                                                                                                                   __NewTopXMLNS,
-                                                                                                                                                                                   'encode_pubsub_event_$subscription'(Subscription,
-                                                                                                                                                                                                                       __NewTopXMLNS,
-                                                                                                                                                                                                                       []))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"event">>, _attrs, _els}.
-
-'encode_pubsub_event_$items'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_pubsub_event_$items'(Items, __TopXMLNS, _acc) ->
-    [encode_pubsub_items(Items, __TopXMLNS) | _acc].
-
-'encode_pubsub_event_$create'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_pubsub_event_$create'(Create, __TopXMLNS,
-                             _acc) ->
-    [encode_pubsub_create(Create, __TopXMLNS) | _acc].
-
-'encode_pubsub_event_$delete'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_pubsub_event_$delete'(Delete, __TopXMLNS,
-                             _acc) ->
-    [encode_pubsub_delete(Delete, __TopXMLNS) | _acc].
-
-'encode_pubsub_event_$purge'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_pubsub_event_$purge'(Purge, __TopXMLNS, _acc) ->
-    [encode_pubsub_purge(Purge, __TopXMLNS) | _acc].
-
-'encode_pubsub_event_$configuration'(undefined,
-                                    __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_event_$configuration'(Configuration,
-                                    __TopXMLNS, _acc) ->
-    [encode_pubsub_event_configuration(Configuration,
-                                      __TopXMLNS)
-     | _acc].
-
-'encode_pubsub_event_$subscription'(undefined,
-                                   __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_event_$subscription'(Subscription,
-                                   __TopXMLNS, _acc) ->
-    [encode_pubsub_subscription(Subscription, __TopXMLNS)
-     | _acc].
-
-decode_pubsub_items(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"items">>, _attrs, _els}) ->
-    {Items, Retract} = decode_pubsub_items_els(__TopXMLNS,
-                                              __IgnoreEls, _els, [],
-                                              undefined),
-    {Xmlns, Max_items, Node, Subid} =
-       decode_pubsub_items_attrs(__TopXMLNS, _attrs, undefined,
-                                 undefined, undefined, undefined),
-    {ps_items, Xmlns, Node, Items, Max_items, Subid,
-     Retract}.
-
-decode_pubsub_items_els(__TopXMLNS, __IgnoreEls, [],
-                       Items, Retract) ->
-    {lists:reverse(Items), Retract};
-decode_pubsub_items_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"retract">>, _attrs, _} = _el | _els], Items,
-                       Retract) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items,
-                                 decode_pubsub_event_retract(__TopXMLNS,
-                                                             __IgnoreEls,
-                                                             _el));
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items,
-                                 decode_pubsub_event_retract(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                             __IgnoreEls,
-                                                             _el));
-      _ ->
-         decode_pubsub_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Retract)
-    end;
-decode_pubsub_items_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items,
-                       Retract) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub">>;
-              __TopXMLNS ==
-                <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_pubsub_item(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                                  | Items],
-                                 Retract);
-      <<"http://jabber.org/protocol/pubsub">> ->
-         decode_pubsub_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_pubsub_item(<<"http://jabber.org/protocol/pubsub">>,
-                                                     __IgnoreEls, _el)
-                                  | Items],
-                                 Retract);
-      <<"http://jabber.org/protocol/pubsub#event">> ->
-         decode_pubsub_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_pubsub_item(<<"http://jabber.org/protocol/pubsub#event">>,
-                                                     __IgnoreEls, _el)
-                                  | Items],
-                                 Retract);
-      _ ->
-         decode_pubsub_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items, Retract)
-    end;
-decode_pubsub_items_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Items, Retract) ->
-    decode_pubsub_items_els(__TopXMLNS, __IgnoreEls, _els,
-                           Items, Retract).
-
-decode_pubsub_items_attrs(__TopXMLNS,
-                         [{<<"xmlns">>, _val} | _attrs], _Xmlns, Max_items,
-                         Node, Subid) ->
-    decode_pubsub_items_attrs(__TopXMLNS, _attrs, _val,
-                             Max_items, Node, Subid);
-decode_pubsub_items_attrs(__TopXMLNS,
-                         [{<<"max_items">>, _val} | _attrs], Xmlns, _Max_items,
-                         Node, Subid) ->
-    decode_pubsub_items_attrs(__TopXMLNS, _attrs, Xmlns,
-                             _val, Node, Subid);
-decode_pubsub_items_attrs(__TopXMLNS,
-                         [{<<"node">>, _val} | _attrs], Xmlns, Max_items,
-                         _Node, Subid) ->
-    decode_pubsub_items_attrs(__TopXMLNS, _attrs, Xmlns,
-                             Max_items, _val, Subid);
-decode_pubsub_items_attrs(__TopXMLNS,
-                         [{<<"subid">>, _val} | _attrs], Xmlns, Max_items,
-                         Node, _Subid) ->
-    decode_pubsub_items_attrs(__TopXMLNS, _attrs, Xmlns,
-                             Max_items, Node, _val);
-decode_pubsub_items_attrs(__TopXMLNS, [_ | _attrs],
-                         Xmlns, Max_items, Node, Subid) ->
-    decode_pubsub_items_attrs(__TopXMLNS, _attrs, Xmlns,
-                             Max_items, Node, Subid);
-decode_pubsub_items_attrs(__TopXMLNS, [], Xmlns,
-                         Max_items, Node, Subid) ->
-    {decode_pubsub_items_attr_xmlns(__TopXMLNS, Xmlns),
-     decode_pubsub_items_attr_max_items(__TopXMLNS,
-                                       Max_items),
-     decode_pubsub_items_attr_node(__TopXMLNS, Node),
-     decode_pubsub_items_attr_subid(__TopXMLNS, Subid)}.
-
-encode_pubsub_items({ps_items, Xmlns, Node, Items,
-                    Max_items, Subid, Retract},
-                   __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#event">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_pubsub_items_$items'(Items,
-                                                     __NewTopXMLNS,
-                                                     'encode_pubsub_items_$retract'(Retract,
-                                                                                    __NewTopXMLNS,
-                                                                                    []))),
-    _attrs = encode_pubsub_items_attr_subid(Subid,
-                                           encode_pubsub_items_attr_node(Node,
-                                                                         encode_pubsub_items_attr_max_items(Max_items,
-                                                                                                            enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                            __TopXMLNS)))),
-    {xmlel, <<"items">>, _attrs, _els}.
-
-'encode_pubsub_items_$items'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_items_$items'([Items | _els], __TopXMLNS,
-                            _acc) ->
-    'encode_pubsub_items_$items'(_els, __TopXMLNS,
-                                [encode_pubsub_item(Items, __TopXMLNS)
-                                 | _acc]).
-
-'encode_pubsub_items_$retract'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_pubsub_items_$retract'(Retract, __TopXMLNS,
-                              _acc) ->
-    [encode_pubsub_event_retract(Retract, __TopXMLNS)
-     | _acc].
-
-decode_pubsub_items_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_pubsub_items_attr_xmlns(__TopXMLNS, _val) ->
-    _val.
-
-decode_pubsub_items_attr_max_items(__TopXMLNS,
-                                  undefined) ->
-    undefined;
-decode_pubsub_items_attr_max_items(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"max_items">>, <<"items">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_items_attr_max_items(undefined, _acc) ->
-    _acc;
-encode_pubsub_items_attr_max_items(_val, _acc) ->
-    [{<<"max_items">>, enc_int(_val)} | _acc].
-
-decode_pubsub_items_attr_node(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"items">>, __TopXMLNS}});
-decode_pubsub_items_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_pubsub_items_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_items_attr_subid(__TopXMLNS, undefined) ->
-    <<>>;
-decode_pubsub_items_attr_subid(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_items_attr_subid(<<>>, _acc) -> _acc;
-encode_pubsub_items_attr_subid(_val, _acc) ->
-    [{<<"subid">>, _val} | _acc].
-
-decode_pubsub_item(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"item">>, _attrs, _els}) ->
-    __Xmls = decode_pubsub_item_els(__TopXMLNS, __IgnoreEls,
-                                   _els, []),
-    {Id, Xmlns, Node, Publisher} =
-       decode_pubsub_item_attrs(__TopXMLNS, _attrs, undefined,
-                                undefined, undefined, undefined),
-    {ps_item, Xmlns, Id, __Xmls, Node, Publisher}.
-
-decode_pubsub_item_els(__TopXMLNS, __IgnoreEls, [],
-                      __Xmls) ->
-    lists:reverse(__Xmls);
-decode_pubsub_item_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, _, _, _} = _el | _els], __Xmls) ->
-    decode_pubsub_item_els(__TopXMLNS, __IgnoreEls, _els,
-                          [_el | __Xmls]);
-decode_pubsub_item_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], __Xmls) ->
-    decode_pubsub_item_els(__TopXMLNS, __IgnoreEls, _els,
-                          __Xmls).
-
-decode_pubsub_item_attrs(__TopXMLNS,
-                        [{<<"id">>, _val} | _attrs], _Id, Xmlns, Node,
-                        Publisher) ->
-    decode_pubsub_item_attrs(__TopXMLNS, _attrs, _val,
-                            Xmlns, Node, Publisher);
-decode_pubsub_item_attrs(__TopXMLNS,
-                        [{<<"xmlns">>, _val} | _attrs], Id, _Xmlns, Node,
-                        Publisher) ->
-    decode_pubsub_item_attrs(__TopXMLNS, _attrs, Id, _val,
-                            Node, Publisher);
-decode_pubsub_item_attrs(__TopXMLNS,
-                        [{<<"node">>, _val} | _attrs], Id, Xmlns, _Node,
-                        Publisher) ->
-    decode_pubsub_item_attrs(__TopXMLNS, _attrs, Id, Xmlns,
-                            _val, Publisher);
-decode_pubsub_item_attrs(__TopXMLNS,
-                        [{<<"publisher">>, _val} | _attrs], Id, Xmlns, Node,
-                        _Publisher) ->
-    decode_pubsub_item_attrs(__TopXMLNS, _attrs, Id, Xmlns,
-                            Node, _val);
-decode_pubsub_item_attrs(__TopXMLNS, [_ | _attrs], Id,
-                        Xmlns, Node, Publisher) ->
-    decode_pubsub_item_attrs(__TopXMLNS, _attrs, Id, Xmlns,
-                            Node, Publisher);
-decode_pubsub_item_attrs(__TopXMLNS, [], Id, Xmlns,
-                        Node, Publisher) ->
-    {decode_pubsub_item_attr_id(__TopXMLNS, Id),
-     decode_pubsub_item_attr_xmlns(__TopXMLNS, Xmlns),
-     decode_pubsub_item_attr_node(__TopXMLNS, Node),
-     decode_pubsub_item_attr_publisher(__TopXMLNS,
-                                      Publisher)}.
-
-encode_pubsub_item({ps_item, Xmlns, Id, __Xmls, Node,
-                   Publisher},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#event">>],
-                                    __TopXMLNS),
-    _els = __Xmls,
-    _attrs = encode_pubsub_item_attr_publisher(Publisher,
-                                              encode_pubsub_item_attr_node(Node,
-                                                                           encode_pubsub_item_attr_id(Id,
-                                                                                                      enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                      __TopXMLNS)))),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-decode_pubsub_item_attr_id(__TopXMLNS, undefined) ->
-    <<>>;
-decode_pubsub_item_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_pubsub_item_attr_id(<<>>, _acc) -> _acc;
-encode_pubsub_item_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_pubsub_item_attr_xmlns(__TopXMLNS, undefined) ->
-    <<>>;
-decode_pubsub_item_attr_xmlns(__TopXMLNS, _val) -> _val.
-
-decode_pubsub_item_attr_node(__TopXMLNS, undefined) ->
-    <<>>;
-decode_pubsub_item_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_pubsub_item_attr_node(<<>>, _acc) -> _acc;
-encode_pubsub_item_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_item_attr_publisher(__TopXMLNS,
-                                 undefined) ->
-    <<>>;
-decode_pubsub_item_attr_publisher(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_item_attr_publisher(<<>>, _acc) -> _acc;
-encode_pubsub_item_attr_publisher(_val, _acc) ->
-    [{<<"publisher">>, _val} | _acc].
-
-decode_pubsub_event_retract(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"retract">>, _attrs, _els}) ->
-    Id = decode_pubsub_event_retract_attrs(__TopXMLNS,
-                                          _attrs, undefined),
-    Id.
-
-decode_pubsub_event_retract_attrs(__TopXMLNS,
-                                 [{<<"id">>, _val} | _attrs], _Id) ->
-    decode_pubsub_event_retract_attrs(__TopXMLNS, _attrs,
-                                     _val);
-decode_pubsub_event_retract_attrs(__TopXMLNS,
-                                 [_ | _attrs], Id) ->
-    decode_pubsub_event_retract_attrs(__TopXMLNS, _attrs,
-                                     Id);
-decode_pubsub_event_retract_attrs(__TopXMLNS, [], Id) ->
-    decode_pubsub_event_retract_attr_id(__TopXMLNS, Id).
-
-encode_pubsub_event_retract(Id, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#event">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_pubsub_event_retract_attr_id(Id,
-                                                enc_xmlns_attrs(__NewTopXMLNS,
-                                                                __TopXMLNS)),
-    {xmlel, <<"retract">>, _attrs, _els}.
-
-decode_pubsub_event_retract_attr_id(__TopXMLNS,
-                                   undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"id">>, <<"retract">>, __TopXMLNS}});
-decode_pubsub_event_retract_attr_id(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_event_retract_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_pubsub_event_configuration(__TopXMLNS,
-                                 __IgnoreEls,
-                                 {xmlel, <<"configuration">>, _attrs, _els}) ->
-    Xdata =
-       decode_pubsub_event_configuration_els(__TopXMLNS,
-                                             __IgnoreEls, _els, undefined),
-    Node =
-       decode_pubsub_event_configuration_attrs(__TopXMLNS,
-                                               _attrs, undefined),
-    {Node, Xdata}.
-
-decode_pubsub_event_configuration_els(__TopXMLNS,
-                                     __IgnoreEls, [], Xdata) ->
-    Xdata;
-decode_pubsub_event_configuration_els(__TopXMLNS,
-                                     __IgnoreEls,
-                                     [{xmlel, <<"x">>, _attrs, _} = _el
-                                      | _els],
-                                     Xdata) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_pubsub_event_configuration_els(__TopXMLNS,
-                                               __IgnoreEls, _els,
-                                               decode_xdata(<<"jabber:x:data">>,
-                                                            __IgnoreEls, _el));
-      _ ->
-         decode_pubsub_event_configuration_els(__TopXMLNS,
-                                               __IgnoreEls, _els, Xdata)
-    end;
-decode_pubsub_event_configuration_els(__TopXMLNS,
-                                     __IgnoreEls, [_ | _els], Xdata) ->
-    decode_pubsub_event_configuration_els(__TopXMLNS,
-                                         __IgnoreEls, _els, Xdata).
-
-decode_pubsub_event_configuration_attrs(__TopXMLNS,
-                                       [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_pubsub_event_configuration_attrs(__TopXMLNS,
-                                           _attrs, _val);
-decode_pubsub_event_configuration_attrs(__TopXMLNS,
-                                       [_ | _attrs], Node) ->
-    decode_pubsub_event_configuration_attrs(__TopXMLNS,
-                                           _attrs, Node);
-decode_pubsub_event_configuration_attrs(__TopXMLNS, [],
-                                       Node) ->
-    decode_pubsub_event_configuration_attr_node(__TopXMLNS,
-                                               Node).
-
-encode_pubsub_event_configuration({Node, Xdata},
-                                 __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/pubsub#event">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_pubsub_event_configuration_$xdata'(Xdata,
-                                                                __NewTopXMLNS,
-                                                                [])),
-    _attrs =
-       encode_pubsub_event_configuration_attr_node(Node,
-                                                   enc_xmlns_attrs(__NewTopXMLNS,
-                                                                   __TopXMLNS)),
-    {xmlel, <<"configuration">>, _attrs, _els}.
-
-'encode_pubsub_event_configuration_$xdata'(undefined,
-                                          __TopXMLNS, _acc) ->
-    _acc;
-'encode_pubsub_event_configuration_$xdata'(Xdata,
-                                          __TopXMLNS, _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-decode_pubsub_event_configuration_attr_node(__TopXMLNS,
-                                           undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"configuration">>,
-                  __TopXMLNS}});
-decode_pubsub_event_configuration_attr_node(__TopXMLNS,
-                                           _val) ->
-    _val.
-
-encode_pubsub_event_configuration_attr_node(_val,
-                                           _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_owner_affiliation(__TopXMLNS, __IgnoreEls,
-                               {xmlel, <<"affiliation">>, _attrs, _els}) ->
-    {Jid, Xmlns, Type} =
-       decode_pubsub_owner_affiliation_attrs(__TopXMLNS,
-                                             _attrs, undefined, undefined,
-                                             undefined),
-    {ps_affiliation, Xmlns, <<>>, Type, Jid}.
-
-decode_pubsub_owner_affiliation_attrs(__TopXMLNS,
-                                     [{<<"jid">>, _val} | _attrs], _Jid, Xmlns,
-                                     Type) ->
-    decode_pubsub_owner_affiliation_attrs(__TopXMLNS,
-                                         _attrs, _val, Xmlns, Type);
-decode_pubsub_owner_affiliation_attrs(__TopXMLNS,
-                                     [{<<"xmlns">>, _val} | _attrs], Jid,
-                                     _Xmlns, Type) ->
-    decode_pubsub_owner_affiliation_attrs(__TopXMLNS,
-                                         _attrs, Jid, _val, Type);
-decode_pubsub_owner_affiliation_attrs(__TopXMLNS,
-                                     [{<<"affiliation">>, _val} | _attrs], Jid,
-                                     Xmlns, _Type) ->
-    decode_pubsub_owner_affiliation_attrs(__TopXMLNS,
-                                         _attrs, Jid, Xmlns, _val);
-decode_pubsub_owner_affiliation_attrs(__TopXMLNS,
-                                     [_ | _attrs], Jid, Xmlns, Type) ->
-    decode_pubsub_owner_affiliation_attrs(__TopXMLNS,
-                                         _attrs, Jid, Xmlns, Type);
-decode_pubsub_owner_affiliation_attrs(__TopXMLNS, [],
-                                     Jid, Xmlns, Type) ->
-    {decode_pubsub_owner_affiliation_attr_jid(__TopXMLNS,
-                                             Jid),
-     decode_pubsub_owner_affiliation_attr_xmlns(__TopXMLNS,
-                                               Xmlns),
-     decode_pubsub_owner_affiliation_attr_affiliation(__TopXMLNS,
-                                                     Type)}.
-
-encode_pubsub_owner_affiliation({ps_affiliation, Xmlns,
-                                _, Type, Jid},
-                               __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"http://jabber.org/protocol/pubsub#owner">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs =
-       encode_pubsub_owner_affiliation_attr_affiliation(Type,
-                                                        encode_pubsub_owner_affiliation_attr_jid(Jid,
-                                                                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                 __TopXMLNS))),
-    {xmlel, <<"affiliation">>, _attrs, _els}.
-
-decode_pubsub_owner_affiliation_attr_jid(__TopXMLNS,
-                                        undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"affiliation">>,
-                  __TopXMLNS}});
-decode_pubsub_owner_affiliation_attr_jid(__TopXMLNS,
-                                        _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"affiliation">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_owner_affiliation_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_pubsub_owner_affiliation_attr_xmlns(__TopXMLNS,
-                                          undefined) ->
-    <<>>;
-decode_pubsub_owner_affiliation_attr_xmlns(__TopXMLNS,
-                                          _val) ->
-    _val.
-
-decode_pubsub_owner_affiliation_attr_affiliation(__TopXMLNS,
-                                                undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"affiliation">>, <<"affiliation">>,
-                  __TopXMLNS}});
-decode_pubsub_owner_affiliation_attr_affiliation(__TopXMLNS,
-                                                _val) ->
-    case catch dec_ps_aff(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"affiliation">>, <<"affiliation">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_owner_affiliation_attr_affiliation(_val,
-                                                _acc) ->
-    [{<<"affiliation">>, enc_ps_aff(_val)} | _acc].
-
-decode_pubsub_affiliation(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"affiliation">>, _attrs, _els}) ->
-    {Node, Xmlns, Type} =
-       decode_pubsub_affiliation_attrs(__TopXMLNS, _attrs,
-                                       undefined, undefined, undefined),
-    {ps_affiliation, Xmlns, Node, Type, undefined}.
-
-decode_pubsub_affiliation_attrs(__TopXMLNS,
-                               [{<<"node">>, _val} | _attrs], _Node, Xmlns,
-                               Type) ->
-    decode_pubsub_affiliation_attrs(__TopXMLNS, _attrs,
-                                   _val, Xmlns, Type);
-decode_pubsub_affiliation_attrs(__TopXMLNS,
-                               [{<<"xmlns">>, _val} | _attrs], Node, _Xmlns,
-                               Type) ->
-    decode_pubsub_affiliation_attrs(__TopXMLNS, _attrs,
-                                   Node, _val, Type);
-decode_pubsub_affiliation_attrs(__TopXMLNS,
-                               [{<<"affiliation">>, _val} | _attrs], Node,
-                               Xmlns, _Type) ->
-    decode_pubsub_affiliation_attrs(__TopXMLNS, _attrs,
-                                   Node, Xmlns, _val);
-decode_pubsub_affiliation_attrs(__TopXMLNS,
-                               [_ | _attrs], Node, Xmlns, Type) ->
-    decode_pubsub_affiliation_attrs(__TopXMLNS, _attrs,
-                                   Node, Xmlns, Type);
-decode_pubsub_affiliation_attrs(__TopXMLNS, [], Node,
-                               Xmlns, Type) ->
-    {decode_pubsub_affiliation_attr_node(__TopXMLNS, Node),
-     decode_pubsub_affiliation_attr_xmlns(__TopXMLNS, Xmlns),
-     decode_pubsub_affiliation_attr_affiliation(__TopXMLNS,
-                                               Type)}.
-
-encode_pubsub_affiliation({ps_affiliation, Xmlns, Node,
-                          Type, _},
-                         __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"http://jabber.org/protocol/pubsub">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs =
-       encode_pubsub_affiliation_attr_affiliation(Type,
-                                                  encode_pubsub_affiliation_attr_node(Node,
-                                                                                      enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                      __TopXMLNS))),
-    {xmlel, <<"affiliation">>, _attrs, _els}.
-
-decode_pubsub_affiliation_attr_node(__TopXMLNS,
-                                   undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"node">>, <<"affiliation">>,
-                  __TopXMLNS}});
-decode_pubsub_affiliation_attr_node(__TopXMLNS, _val) ->
-    _val.
-
-encode_pubsub_affiliation_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_affiliation_attr_xmlns(__TopXMLNS,
-                                    undefined) ->
-    <<>>;
-decode_pubsub_affiliation_attr_xmlns(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-decode_pubsub_affiliation_attr_affiliation(__TopXMLNS,
-                                          undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"affiliation">>, <<"affiliation">>,
-                  __TopXMLNS}});
-decode_pubsub_affiliation_attr_affiliation(__TopXMLNS,
-                                          _val) ->
-    case catch dec_ps_aff(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"affiliation">>, <<"affiliation">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_affiliation_attr_affiliation(_val,
-                                          _acc) ->
-    [{<<"affiliation">>, enc_ps_aff(_val)} | _acc].
-
-decode_pubsub_subscription(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"subscription">>, _attrs, _els}) ->
-    {Xmlns, Jid, Node, Subid, Type, Expiry} =
-       decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
-                                        undefined, undefined, undefined,
-                                        undefined, undefined, undefined),
-    {ps_subscription, Xmlns, Jid, Type, Node, Subid,
-     Expiry}.
-
-decode_pubsub_subscription_attrs(__TopXMLNS,
-                                [{<<"xmlns">>, _val} | _attrs], _Xmlns, Jid,
-                                Node, Subid, Type, Expiry) ->
-    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
-                                    _val, Jid, Node, Subid, Type, Expiry);
-decode_pubsub_subscription_attrs(__TopXMLNS,
-                                [{<<"jid">>, _val} | _attrs], Xmlns, _Jid,
-                                Node, Subid, Type, Expiry) ->
-    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
-                                    Xmlns, _val, Node, Subid, Type, Expiry);
-decode_pubsub_subscription_attrs(__TopXMLNS,
-                                [{<<"node">>, _val} | _attrs], Xmlns, Jid,
-                                _Node, Subid, Type, Expiry) ->
-    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
-                                    Xmlns, Jid, _val, Subid, Type, Expiry);
-decode_pubsub_subscription_attrs(__TopXMLNS,
-                                [{<<"subid">>, _val} | _attrs], Xmlns, Jid,
-                                Node, _Subid, Type, Expiry) ->
-    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
-                                    Xmlns, Jid, Node, _val, Type, Expiry);
-decode_pubsub_subscription_attrs(__TopXMLNS,
-                                [{<<"subscription">>, _val} | _attrs], Xmlns,
-                                Jid, Node, Subid, _Type, Expiry) ->
-    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
-                                    Xmlns, Jid, Node, Subid, _val, Expiry);
-decode_pubsub_subscription_attrs(__TopXMLNS,
-                                [{<<"expiry">>, _val} | _attrs], Xmlns, Jid,
-                                Node, Subid, Type, _Expiry) ->
-    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
-                                    Xmlns, Jid, Node, Subid, Type, _val);
-decode_pubsub_subscription_attrs(__TopXMLNS,
-                                [_ | _attrs], Xmlns, Jid, Node, Subid, Type,
-                                Expiry) ->
-    decode_pubsub_subscription_attrs(__TopXMLNS, _attrs,
-                                    Xmlns, Jid, Node, Subid, Type, Expiry);
-decode_pubsub_subscription_attrs(__TopXMLNS, [], Xmlns,
-                                Jid, Node, Subid, Type, Expiry) ->
-    {decode_pubsub_subscription_attr_xmlns(__TopXMLNS,
-                                          Xmlns),
-     decode_pubsub_subscription_attr_jid(__TopXMLNS, Jid),
-     decode_pubsub_subscription_attr_node(__TopXMLNS, Node),
-     decode_pubsub_subscription_attr_subid(__TopXMLNS,
-                                          Subid),
-     decode_pubsub_subscription_attr_subscription(__TopXMLNS,
-                                                 Type),
-     decode_pubsub_subscription_attr_expiry(__TopXMLNS,
-                                           Expiry)}.
-
-encode_pubsub_subscription({ps_subscription, Xmlns, Jid,
-                           Type, Node, Subid, Expiry},
-                          __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(Xmlns,
-                                    [<<"http://jabber.org/protocol/pubsub">>,
-                                     <<"http://jabber.org/protocol/pubsub#owner">>,
-                                     <<"http://jabber.org/protocol/pubsub#event">>],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = encode_pubsub_subscription_attr_expiry(Expiry,
-                                                   encode_pubsub_subscription_attr_subscription(Type,
-                                                                                                encode_pubsub_subscription_attr_subid(Subid,
-                                                                                                                                      encode_pubsub_subscription_attr_node(Node,
-                                                                                                                                                                           encode_pubsub_subscription_attr_jid(Jid,
-                                                                                                                                                                                                               enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                                                                                               __TopXMLNS)))))),
-    {xmlel, <<"subscription">>, _attrs, _els}.
-
-decode_pubsub_subscription_attr_xmlns(__TopXMLNS,
-                                     undefined) ->
-    <<>>;
-decode_pubsub_subscription_attr_xmlns(__TopXMLNS,
-                                     _val) ->
-    _val.
-
-decode_pubsub_subscription_attr_jid(__TopXMLNS,
-                                   undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"subscription">>,
-                  __TopXMLNS}});
-decode_pubsub_subscription_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"subscription">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_subscription_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_pubsub_subscription_attr_node(__TopXMLNS,
-                                    undefined) ->
-    <<>>;
-decode_pubsub_subscription_attr_node(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-encode_pubsub_subscription_attr_node(<<>>, _acc) ->
-    _acc;
-encode_pubsub_subscription_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_pubsub_subscription_attr_subid(__TopXMLNS,
-                                     undefined) ->
-    <<>>;
-decode_pubsub_subscription_attr_subid(__TopXMLNS,
-                                     _val) ->
-    _val.
-
-encode_pubsub_subscription_attr_subid(<<>>, _acc) ->
-    _acc;
-encode_pubsub_subscription_attr_subid(_val, _acc) ->
-    [{<<"subid">>, _val} | _acc].
-
-decode_pubsub_subscription_attr_subscription(__TopXMLNS,
-                                            undefined) ->
-    undefined;
-decode_pubsub_subscription_attr_subscription(__TopXMLNS,
-                                            _val) ->
-    case catch dec_enum(_val,
-                       [none, pending, subscribed, unconfigured])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"subscription">>, <<"subscription">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_subscription_attr_subscription(undefined,
-                                            _acc) ->
-    _acc;
-encode_pubsub_subscription_attr_subscription(_val,
-                                            _acc) ->
-    [{<<"subscription">>, enc_enum(_val)} | _acc].
-
-decode_pubsub_subscription_attr_expiry(__TopXMLNS,
-                                      undefined) ->
-    undefined;
-decode_pubsub_subscription_attr_expiry(__TopXMLNS,
-                                      _val) ->
-    case catch dec_utc(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"expiry">>, <<"subscription">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_pubsub_subscription_attr_expiry(undefined,
-                                      _acc) ->
-    _acc;
-encode_pubsub_subscription_attr_expiry(_val, _acc) ->
-    [{<<"expiry">>, enc_utc(_val)} | _acc].
-
-decode_xdata(__TopXMLNS, __IgnoreEls,
-            {xmlel, <<"x">>, _attrs, _els}) ->
-    {Fields, Items, Instructions, Reported, Title} =
-       decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, [], [],
-                        [], undefined, undefined),
-    Type = decode_xdata_attrs(__TopXMLNS, _attrs,
-                             undefined),
-    {xdata, Type, Instructions, Title, Reported, Items,
-     Fields}.
-
-decode_xdata_els(__TopXMLNS, __IgnoreEls, [], Fields,
-                Items, Instructions, Reported, Title) ->
-    {lists:reverse(Fields), lists:reverse(Items),
-     lists:reverse(Instructions), Reported, Title};
-decode_xdata_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"instructions">>, _attrs, _} = _el | _els],
-                Fields, Items, Instructions, Reported, Title) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items,
-                          [decode_xdata_instructions(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                           | Instructions],
-                          Reported, Title);
-      <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items,
-                          [decode_xdata_instructions(<<"jabber:x:data">>,
-                                                     __IgnoreEls, _el)
-                           | Instructions],
-                          Reported, Title);
-      _ ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items, Instructions, Reported, Title)
-    end;
-decode_xdata_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"title">>, _attrs, _} = _el | _els], Fields,
-                Items, Instructions, Reported, Title) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items, Instructions, Reported,
-                          decode_xdata_title(__TopXMLNS, __IgnoreEls, _el));
-      <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items, Instructions, Reported,
-                          decode_xdata_title(<<"jabber:x:data">>, __IgnoreEls,
-                                             _el));
-      _ ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items, Instructions, Reported, Title)
-    end;
-decode_xdata_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"reported">>, _attrs, _} = _el | _els],
-                Fields, Items, Instructions, Reported, Title) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items, Instructions,
-                          decode_xdata_reported(__TopXMLNS, __IgnoreEls, _el),
-                          Title);
-      <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items, Instructions,
-                          decode_xdata_reported(<<"jabber:x:data">>,
-                                                __IgnoreEls, _el),
-                          Title);
-      _ ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items, Instructions, Reported, Title)
-    end;
-decode_xdata_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"item">>, _attrs, _} = _el | _els], Fields,
-                Items, Instructions, Reported, Title) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          [decode_xdata_item(__TopXMLNS, __IgnoreEls, _el)
-                           | Items],
-                          Instructions, Reported, Title);
-      <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          [decode_xdata_item(<<"jabber:x:data">>, __IgnoreEls,
-                                             _el)
-                           | Items],
-                          Instructions, Reported, Title);
-      _ ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items, Instructions, Reported, Title)
-    end;
-decode_xdata_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"field">>, _attrs, _} = _el | _els], Fields,
-                Items, Instructions, Reported, Title) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els,
-                          [decode_xdata_field(__TopXMLNS, __IgnoreEls, _el)
-                           | Fields],
-                          Items, Instructions, Reported, Title);
-      <<"jabber:x:data">> ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els,
-                          [decode_xdata_field(<<"jabber:x:data">>, __IgnoreEls,
-                                              _el)
-                           | Fields],
-                          Items, Instructions, Reported, Title);
-      _ ->
-         decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                          Items, Instructions, Reported, Title)
-    end;
-decode_xdata_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                Fields, Items, Instructions, Reported, Title) ->
-    decode_xdata_els(__TopXMLNS, __IgnoreEls, _els, Fields,
-                    Items, Instructions, Reported, Title).
-
-decode_xdata_attrs(__TopXMLNS,
-                  [{<<"type">>, _val} | _attrs], _Type) ->
-    decode_xdata_attrs(__TopXMLNS, _attrs, _val);
-decode_xdata_attrs(__TopXMLNS, [_ | _attrs], Type) ->
-    decode_xdata_attrs(__TopXMLNS, _attrs, Type);
-decode_xdata_attrs(__TopXMLNS, [], Type) ->
-    decode_xdata_attr_type(__TopXMLNS, Type).
-
-encode_xdata({xdata, Type, Instructions, Title,
-             Reported, Items, Fields},
-            __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els = lists:reverse('encode_xdata_$fields'(Fields,
-                                               __NewTopXMLNS,
-                                               'encode_xdata_$items'(Items,
-                                                                     __NewTopXMLNS,
-                                                                     'encode_xdata_$instructions'(Instructions,
-                                                                                                  __NewTopXMLNS,
-                                                                                                  'encode_xdata_$reported'(Reported,
-                                                                                                                           __NewTopXMLNS,
-                                                                                                                           'encode_xdata_$title'(Title,
-                                                                                                                                                 __NewTopXMLNS,
-                                                                                                                                                 [])))))),
-    _attrs = encode_xdata_attr_type(Type,
-                                   enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS)),
-    {xmlel, <<"x">>, _attrs, _els}.
-
-'encode_xdata_$fields'([], __TopXMLNS, _acc) -> _acc;
-'encode_xdata_$fields'([Fields | _els], __TopXMLNS,
-                      _acc) ->
-    'encode_xdata_$fields'(_els, __TopXMLNS,
-                          [encode_xdata_field(Fields, __TopXMLNS) | _acc]).
-
-'encode_xdata_$items'([], __TopXMLNS, _acc) -> _acc;
-'encode_xdata_$items'([Items | _els], __TopXMLNS,
-                     _acc) ->
-    'encode_xdata_$items'(_els, __TopXMLNS,
-                         [encode_xdata_item(Items, __TopXMLNS) | _acc]).
-
-'encode_xdata_$instructions'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_xdata_$instructions'([Instructions | _els],
-                            __TopXMLNS, _acc) ->
-    'encode_xdata_$instructions'(_els, __TopXMLNS,
-                                [encode_xdata_instructions(Instructions,
-                                                           __TopXMLNS)
-                                 | _acc]).
-
-'encode_xdata_$reported'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_xdata_$reported'(Reported, __TopXMLNS, _acc) ->
-    [encode_xdata_reported(Reported, __TopXMLNS) | _acc].
-
-'encode_xdata_$title'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_xdata_$title'(Title, __TopXMLNS, _acc) ->
-    [encode_xdata_title(Title, __TopXMLNS) | _acc].
-
-decode_xdata_attr_type(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"x">>, __TopXMLNS}});
-decode_xdata_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [cancel, form, result, submit])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"x">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_xdata_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_xdata_item(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"item">>, _attrs, _els}) ->
-    Fields = decode_xdata_item_els(__TopXMLNS, __IgnoreEls,
-                                  _els, []),
-    Fields.
-
-decode_xdata_item_els(__TopXMLNS, __IgnoreEls, [],
-                     Fields) ->
-    lists:reverse(Fields);
-decode_xdata_item_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"field">>, _attrs, _} = _el | _els],
-                     Fields) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_item_els(__TopXMLNS, __IgnoreEls, _els,
-                               [decode_xdata_field(__TopXMLNS, __IgnoreEls,
-                                                   _el)
-                                | Fields]);
-      <<"jabber:x:data">> ->
-         decode_xdata_item_els(__TopXMLNS, __IgnoreEls, _els,
-                               [decode_xdata_field(<<"jabber:x:data">>,
-                                                   __IgnoreEls, _el)
-                                | Fields]);
-      _ ->
-         decode_xdata_item_els(__TopXMLNS, __IgnoreEls, _els,
-                               Fields)
-    end;
-decode_xdata_item_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Fields) ->
-    decode_xdata_item_els(__TopXMLNS, __IgnoreEls, _els,
-                         Fields).
-
-encode_xdata_item(Fields, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els = lists:reverse('encode_xdata_item_$fields'(Fields,
-                                                    __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-'encode_xdata_item_$fields'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_xdata_item_$fields'([Fields | _els], __TopXMLNS,
-                           _acc) ->
-    'encode_xdata_item_$fields'(_els, __TopXMLNS,
-                               [encode_xdata_field(Fields, __TopXMLNS)
-                                | _acc]).
-
-decode_xdata_reported(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"reported">>, _attrs, _els}) ->
-    Fields = decode_xdata_reported_els(__TopXMLNS,
-                                      __IgnoreEls, _els, []),
-    Fields.
-
-decode_xdata_reported_els(__TopXMLNS, __IgnoreEls, [],
-                         Fields) ->
-    lists:reverse(Fields);
-decode_xdata_reported_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlel, <<"field">>, _attrs, _} = _el | _els],
-                         Fields) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_reported_els(__TopXMLNS, __IgnoreEls, _els,
-                                   [decode_xdata_field(__TopXMLNS, __IgnoreEls,
-                                                       _el)
-                                    | Fields]);
-      <<"jabber:x:data">> ->
-         decode_xdata_reported_els(__TopXMLNS, __IgnoreEls, _els,
-                                   [decode_xdata_field(<<"jabber:x:data">>,
-                                                       __IgnoreEls, _el)
-                                    | Fields]);
-      _ ->
-         decode_xdata_reported_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Fields)
-    end;
-decode_xdata_reported_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Fields) ->
-    decode_xdata_reported_els(__TopXMLNS, __IgnoreEls, _els,
-                             Fields).
-
-encode_xdata_reported(Fields, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_xdata_reported_$fields'(Fields,
-                                                     __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"reported">>, _attrs, _els}.
-
-'encode_xdata_reported_$fields'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_xdata_reported_$fields'([Fields | _els],
-                               __TopXMLNS, _acc) ->
-    'encode_xdata_reported_$fields'(_els, __TopXMLNS,
-                                   [encode_xdata_field(Fields, __TopXMLNS)
-                                    | _acc]).
-
-decode_xdata_title(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"title">>, _attrs, _els}) ->
-    Cdata = decode_xdata_title_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Cdata.
-
-decode_xdata_title_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_xdata_title_cdata(__TopXMLNS, Cdata);
-decode_xdata_title_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_xdata_title_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_xdata_title_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_xdata_title_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-encode_xdata_title(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els = encode_xdata_title_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"title">>, _attrs, _els}.
-
-decode_xdata_title_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_xdata_title_cdata(__TopXMLNS, _val) -> _val.
-
-encode_xdata_title_cdata(<<>>, _acc) -> _acc;
-encode_xdata_title_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_xdata_instructions(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"instructions">>, _attrs, _els}) ->
-    Cdata = decode_xdata_instructions_els(__TopXMLNS,
-                                         __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_xdata_instructions_els(__TopXMLNS, __IgnoreEls,
-                             [], Cdata) ->
-    decode_xdata_instructions_cdata(__TopXMLNS, Cdata);
-decode_xdata_instructions_els(__TopXMLNS, __IgnoreEls,
-                             [{xmlcdata, _data} | _els], Cdata) ->
-    decode_xdata_instructions_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<Cdata/binary, _data/binary>>);
-decode_xdata_instructions_els(__TopXMLNS, __IgnoreEls,
-                             [_ | _els], Cdata) ->
-    decode_xdata_instructions_els(__TopXMLNS, __IgnoreEls,
-                                 _els, Cdata).
-
-encode_xdata_instructions(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els = encode_xdata_instructions_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"instructions">>, _attrs, _els}.
-
-decode_xdata_instructions_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_xdata_instructions_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_xdata_instructions_cdata(<<>>, _acc) -> _acc;
-encode_xdata_instructions_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_xdata_field(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"field">>, _attrs, _els}) ->
-    {Options, Values, Desc, Required, __Els} =
-       decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                              [], [], <<>>, false, []),
-    {Label, Type, Var} =
-       decode_xdata_field_attrs(__TopXMLNS, _attrs, undefined,
-                                undefined, undefined),
-    {xdata_field, Label, Type, Var, Required, Desc, Values,
-     Options, __Els}.
-
-decode_xdata_field_els(__TopXMLNS, __IgnoreEls, [],
-                      Options, Values, Desc, Required, __Els) ->
-    {lists:reverse(Options), lists:reverse(Values), Desc,
-     Required, lists:reverse(__Els)};
-decode_xdata_field_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"required">>, _attrs, _} = _el | _els],
-                      Options, Values, Desc, Required, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options, Values, Desc,
-                                decode_xdata_field_required(__TopXMLNS,
-                                                            __IgnoreEls, _el),
-                                __Els);
-      <<"jabber:x:data">> ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options, Values, Desc,
-                                decode_xdata_field_required(<<"jabber:x:data">>,
-                                                            __IgnoreEls, _el),
-                                __Els);
-      _ ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options, Values, Desc, Required, __Els)
-    end;
-decode_xdata_field_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"desc">>, _attrs, _} = _el | _els], Options,
-                      Values, Desc, Required, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options, Values,
-                                decode_xdata_field_desc(__TopXMLNS,
-                                                        __IgnoreEls, _el),
-                                Required, __Els);
-      <<"jabber:x:data">> ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options, Values,
-                                decode_xdata_field_desc(<<"jabber:x:data">>,
-                                                        __IgnoreEls, _el),
-                                Required, __Els);
-      _ ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options, Values, Desc, Required, __Els)
-    end;
-decode_xdata_field_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"value">>, _attrs, _} = _el | _els], Options,
-                      Values, Desc, Required, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options,
-                                [decode_xdata_field_value(__TopXMLNS,
-                                                          __IgnoreEls, _el)
-                                 | Values],
-                                Desc, Required, __Els);
-      <<"jabber:x:data">> ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options,
-                                [decode_xdata_field_value(<<"jabber:x:data">>,
-                                                          __IgnoreEls, _el)
-                                 | Values],
-                                Desc, Required, __Els);
-      _ ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options, Values, Desc, Required, __Els)
-    end;
-decode_xdata_field_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"option">>, _attrs, _} = _el | _els],
-                      Options, Values, Desc, Required, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_xdata_field_option(__TopXMLNS,
-                                                           __IgnoreEls, _el)
-                                 | Options],
-                                Values, Desc, Required, __Els);
-      <<"jabber:x:data">> ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_xdata_field_option(<<"jabber:x:data">>,
-                                                           __IgnoreEls, _el)
-                                 | Options],
-                                Values, Desc, Required, __Els);
-      _ ->
-         decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                Options, Values, Desc, Required, __Els)
-    end;
-decode_xdata_field_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, _, _, _} = _el | _els], Options, Values, Desc,
-                      Required, __Els) ->
-    if __IgnoreEls ->
-          decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Options, Values, Desc, Required,
-                                 [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                       Options, Values, Desc, Required,
-                                       [decode(_el, __TopXMLNS, []) | __Els]);
-            false ->
-                decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                                       Options, Values, Desc, Required, __Els)
-          end
-    end;
-decode_xdata_field_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Options, Values, Desc, Required, __Els) ->
-    decode_xdata_field_els(__TopXMLNS, __IgnoreEls, _els,
-                          Options, Values, Desc, Required, __Els).
-
-decode_xdata_field_attrs(__TopXMLNS,
-                        [{<<"label">>, _val} | _attrs], _Label, Type, Var) ->
-    decode_xdata_field_attrs(__TopXMLNS, _attrs, _val, Type,
-                            Var);
-decode_xdata_field_attrs(__TopXMLNS,
-                        [{<<"type">>, _val} | _attrs], Label, _Type, Var) ->
-    decode_xdata_field_attrs(__TopXMLNS, _attrs, Label,
-                            _val, Var);
-decode_xdata_field_attrs(__TopXMLNS,
-                        [{<<"var">>, _val} | _attrs], Label, Type, _Var) ->
-    decode_xdata_field_attrs(__TopXMLNS, _attrs, Label,
-                            Type, _val);
-decode_xdata_field_attrs(__TopXMLNS, [_ | _attrs],
-                        Label, Type, Var) ->
-    decode_xdata_field_attrs(__TopXMLNS, _attrs, Label,
-                            Type, Var);
-decode_xdata_field_attrs(__TopXMLNS, [], Label, Type,
-                        Var) ->
-    {decode_xdata_field_attr_label(__TopXMLNS, Label),
-     decode_xdata_field_attr_type(__TopXMLNS, Type),
-     decode_xdata_field_attr_var(__TopXMLNS, Var)}.
-
-encode_xdata_field({xdata_field, Label, Type, Var,
-                   Required, Desc, Values, Options, __Els},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els] ++
-            lists:reverse('encode_xdata_field_$options'(Options,
-                                                        __NewTopXMLNS,
-                                                        'encode_xdata_field_$values'(Values,
-                                                                                     __NewTopXMLNS,
-                                                                                     'encode_xdata_field_$desc'(Desc,
-                                                                                                                __NewTopXMLNS,
-                                                                                                                'encode_xdata_field_$required'(Required,
-                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                               []))))),
-    _attrs = encode_xdata_field_attr_var(Var,
-                                        encode_xdata_field_attr_type(Type,
-                                                                     encode_xdata_field_attr_label(Label,
-                                                                                                   enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                   __TopXMLNS)))),
-    {xmlel, <<"field">>, _attrs, _els}.
-
-'encode_xdata_field_$options'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_xdata_field_$options'([Options | _els],
-                             __TopXMLNS, _acc) ->
-    'encode_xdata_field_$options'(_els, __TopXMLNS,
-                                 [encode_xdata_field_option(Options,
-                                                            __TopXMLNS)
-                                  | _acc]).
-
-'encode_xdata_field_$values'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_xdata_field_$values'([Values | _els],
-                            __TopXMLNS, _acc) ->
-    'encode_xdata_field_$values'(_els, __TopXMLNS,
-                                [encode_xdata_field_value(Values, __TopXMLNS)
-                                 | _acc]).
-
-'encode_xdata_field_$desc'(<<>>, __TopXMLNS, _acc) ->
-    _acc;
-'encode_xdata_field_$desc'(Desc, __TopXMLNS, _acc) ->
-    [encode_xdata_field_desc(Desc, __TopXMLNS) | _acc].
-
-'encode_xdata_field_$required'(false, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_xdata_field_$required'(Required, __TopXMLNS,
-                              _acc) ->
-    [encode_xdata_field_required(Required, __TopXMLNS)
-     | _acc].
-
-decode_xdata_field_attr_label(__TopXMLNS, undefined) ->
-    <<>>;
-decode_xdata_field_attr_label(__TopXMLNS, _val) -> _val.
-
-encode_xdata_field_attr_label(<<>>, _acc) -> _acc;
-encode_xdata_field_attr_label(_val, _acc) ->
-    [{<<"label">>, _val} | _acc].
-
-decode_xdata_field_attr_type(__TopXMLNS, undefined) ->
-    undefined;
-decode_xdata_field_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [boolean, fixed, hidden, 'jid-multi', 'jid-single',
-                        'list-multi', 'list-single', 'text-multi',
-                        'text-private', 'text-single'])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"field">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_xdata_field_attr_type(undefined, _acc) -> _acc;
-encode_xdata_field_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_xdata_field_attr_var(__TopXMLNS, undefined) ->
-    <<>>;
-decode_xdata_field_attr_var(__TopXMLNS, _val) -> _val.
-
-encode_xdata_field_attr_var(<<>>, _acc) -> _acc;
-encode_xdata_field_attr_var(_val, _acc) ->
-    [{<<"var">>, _val} | _acc].
-
-decode_xdata_field_option(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"option">>, _attrs, _els}) ->
-    Value = decode_xdata_field_option_els(__TopXMLNS,
-                                         __IgnoreEls, _els, error),
-    Label = decode_xdata_field_option_attrs(__TopXMLNS,
-                                           _attrs, undefined),
-    {xdata_option, Label, Value}.
-
-decode_xdata_field_option_els(__TopXMLNS, __IgnoreEls,
-                             [], Value) ->
-    case Value of
-      error ->
-         erlang:error({xmpp_codec,
-                       {missing_tag, <<"value">>, __TopXMLNS}});
-      {value, Value1} -> Value1
-    end;
-decode_xdata_field_option_els(__TopXMLNS, __IgnoreEls,
-                             [{xmlel, <<"value">>, _attrs, _} = _el | _els],
-                             Value) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:x:data">> ->
-         decode_xdata_field_option_els(__TopXMLNS, __IgnoreEls,
-                                       _els,
-                                       {value,
-                                        decode_xdata_field_value(__TopXMLNS,
-                                                                 __IgnoreEls,
-                                                                 _el)});
-      <<"jabber:x:data">> ->
-         decode_xdata_field_option_els(__TopXMLNS, __IgnoreEls,
-                                       _els,
-                                       {value,
-                                        decode_xdata_field_value(<<"jabber:x:data">>,
-                                                                 __IgnoreEls,
-                                                                 _el)});
-      _ ->
-         decode_xdata_field_option_els(__TopXMLNS, __IgnoreEls,
-                                       _els, Value)
-    end;
-decode_xdata_field_option_els(__TopXMLNS, __IgnoreEls,
-                             [_ | _els], Value) ->
-    decode_xdata_field_option_els(__TopXMLNS, __IgnoreEls,
-                                 _els, Value).
-
-decode_xdata_field_option_attrs(__TopXMLNS,
-                               [{<<"label">>, _val} | _attrs], _Label) ->
-    decode_xdata_field_option_attrs(__TopXMLNS, _attrs,
-                                   _val);
-decode_xdata_field_option_attrs(__TopXMLNS,
-                               [_ | _attrs], Label) ->
-    decode_xdata_field_option_attrs(__TopXMLNS, _attrs,
-                                   Label);
-decode_xdata_field_option_attrs(__TopXMLNS, [],
-                               Label) ->
-    decode_xdata_field_option_attr_label(__TopXMLNS, Label).
-
-encode_xdata_field_option({xdata_option, Label, Value},
-                         __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_xdata_field_option_$value'(Value,
-                                                        __NewTopXMLNS, [])),
-    _attrs = encode_xdata_field_option_attr_label(Label,
-                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                 __TopXMLNS)),
-    {xmlel, <<"option">>, _attrs, _els}.
-
-'encode_xdata_field_option_$value'(Value, __TopXMLNS,
-                                  _acc) ->
-    [encode_xdata_field_value(Value, __TopXMLNS) | _acc].
-
-decode_xdata_field_option_attr_label(__TopXMLNS,
-                                    undefined) ->
-    <<>>;
-decode_xdata_field_option_attr_label(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-encode_xdata_field_option_attr_label(<<>>, _acc) ->
-    _acc;
-encode_xdata_field_option_attr_label(_val, _acc) ->
-    [{<<"label">>, _val} | _acc].
-
-decode_xdata_field_value(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"value">>, _attrs, _els}) ->
-    Cdata = decode_xdata_field_value_els(__TopXMLNS,
-                                        __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_xdata_field_value_els(__TopXMLNS, __IgnoreEls,
-                            [], Cdata) ->
-    decode_xdata_field_value_cdata(__TopXMLNS, Cdata);
-decode_xdata_field_value_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlcdata, _data} | _els], Cdata) ->
-    decode_xdata_field_value_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<Cdata/binary, _data/binary>>);
-decode_xdata_field_value_els(__TopXMLNS, __IgnoreEls,
-                            [_ | _els], Cdata) ->
-    decode_xdata_field_value_els(__TopXMLNS, __IgnoreEls,
-                                _els, Cdata).
-
-encode_xdata_field_value(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els = encode_xdata_field_value_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"value">>, _attrs, _els}.
-
-decode_xdata_field_value_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_xdata_field_value_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_xdata_field_value_cdata(<<>>, _acc) -> _acc;
-encode_xdata_field_value_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_xdata_field_desc(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"desc">>, _attrs, _els}) ->
-    Cdata = decode_xdata_field_desc_els(__TopXMLNS,
-                                       __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_xdata_field_desc_els(__TopXMLNS, __IgnoreEls, [],
-                           Cdata) ->
-    decode_xdata_field_desc_cdata(__TopXMLNS, Cdata);
-decode_xdata_field_desc_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlcdata, _data} | _els], Cdata) ->
-    decode_xdata_field_desc_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<Cdata/binary, _data/binary>>);
-decode_xdata_field_desc_els(__TopXMLNS, __IgnoreEls,
-                           [_ | _els], Cdata) ->
-    decode_xdata_field_desc_els(__TopXMLNS, __IgnoreEls,
-                               _els, Cdata).
-
-encode_xdata_field_desc(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els = encode_xdata_field_desc_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"desc">>, _attrs, _els}.
-
-decode_xdata_field_desc_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_xdata_field_desc_cdata(__TopXMLNS, _val) -> _val.
-
-encode_xdata_field_desc_cdata(<<>>, _acc) -> _acc;
-encode_xdata_field_desc_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_xdata_field_required(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"required">>, _attrs, _els}) ->
-    true.
-
-encode_xdata_field_required(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:x:data">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"required">>, _attrs, _els}.
-
-decode_vcard_xupdate(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"x">>, _attrs, _els}) ->
-    Hash = decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls,
-                                   _els, undefined),
-    {vcard_xupdate, {<<>>, <<>>}, Hash}.
-
-decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, [],
-                        Hash) ->
-    Hash;
-decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlel, <<"photo">>, _attrs, _} = _el | _els],
-                        Hash) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp:x:update">> ->
-         decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, _els,
-                                  decode_vcard_xupdate_photo(__TopXMLNS,
-                                                             __IgnoreEls,
-                                                             _el));
-      <<"vcard-temp:x:update">> ->
-         decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, _els,
-                                  decode_vcard_xupdate_photo(<<"vcard-temp:x:update">>,
-                                                             __IgnoreEls,
-                                                             _el));
-      _ ->
-         decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, _els,
-                                  Hash)
-    end;
-decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Hash) ->
-    decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, _els,
-                            Hash).
-
-encode_vcard_xupdate({vcard_xupdate, _, Hash},
-                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"vcard-temp:x:update">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_vcard_xupdate_$hash'(Hash,
-                                                     __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"x">>, _attrs, _els}.
-
-'encode_vcard_xupdate_$hash'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_vcard_xupdate_$hash'(Hash, __TopXMLNS, _acc) ->
-    [encode_vcard_xupdate_photo(Hash, __TopXMLNS) | _acc].
-
-decode_vcard_xupdate_photo(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"photo">>, _attrs, _els}) ->
-    Cdata = decode_vcard_xupdate_photo_els(__TopXMLNS,
-                                          __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
-                              [], Cdata) ->
-    decode_vcard_xupdate_photo_cdata(__TopXMLNS, Cdata);
-decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
-                              [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<Cdata/binary, _data/binary>>);
-decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
-                              [_ | _els], Cdata) ->
-    decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
-                                  _els, Cdata).
-
-encode_vcard_xupdate_photo(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"vcard-temp:x:update">>, [],
-                        __TopXMLNS),
-    _els = encode_vcard_xupdate_photo_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"photo">>, _attrs, _els}.
-
-decode_vcard_xupdate_photo_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_vcard_xupdate_photo_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_vcard_xupdate_photo_cdata(<<>>, _acc) -> _acc;
-encode_vcard_xupdate_photo_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_temp(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"vCard">>, _attrs, _els}) ->
-    {Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-     Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-     Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-     Fn, Version, N, Photo, Logo, Geo} =
-       decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                             undefined, [], undefined, [], undefined,
-                             undefined, undefined, undefined, undefined,
-                             undefined, undefined, undefined, undefined,
-                             undefined, undefined, undefined, undefined,
-                             undefined, undefined, undefined, [], [], [],
-                             undefined, undefined, undefined, undefined,
-                             undefined, undefined),
-    {vcard_temp, Version, Fn, N, Nickname, Photo, Bday, Adr,
-     Label, Tel, Email, Jabberid, Mailer, Tz, Geo, Title,
-     Role, Logo, Org, Categories, Note, Prodid, Rev,
-     Sort_string, Sound, Uid, Url, Class, Key, Desc}.
-
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, [],
-                     Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                     Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                     Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                     Fn, Version, N, Photo, Logo, Geo) ->
-    {Mailer, lists:reverse(Adr), Class, Categories, Desc,
-     Uid, Prodid, Jabberid, Sound, Note, Role, Title,
-     Nickname, Rev, Sort_string, Org, Bday, Key, Tz, Url,
-     lists:reverse(Email), lists:reverse(Tel),
-     lists:reverse(Label), Fn, Version, N, Photo, Logo, Geo};
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"N">>, _attrs, _} = _el | _els], Mailer, Adr,
-                     Class, Categories, Desc, Uid, Prodid, Jabberid, Sound,
-                     Note, Role, Title, Nickname, Rev, Sort_string, Org,
-                     Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
-                     Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version,
-                               decode_vcard_N(__TopXMLNS, __IgnoreEls, _el),
-                               Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version,
-                               decode_vcard_N(<<"vcard-temp">>, __IgnoreEls,
-                                              _el),
-                               Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"ADR">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer,
-                               [decode_vcard_ADR(__TopXMLNS, __IgnoreEls, _el)
-                                | Adr],
-                               Class, Categories, Desc, Uid, Prodid, Jabberid,
-                               Sound, Note, Role, Title, Nickname, Rev,
-                               Sort_string, Org, Bday, Key, Tz, Url, Email,
-                               Tel, Label, Fn, Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer,
-                               [decode_vcard_ADR(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el)
-                                | Adr],
-                               Class, Categories, Desc, Uid, Prodid, Jabberid,
-                               Sound, Note, Role, Title, Nickname, Rev,
-                               Sort_string, Org, Bday, Key, Tz, Url, Email,
-                               Tel, Label, Fn, Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"LABEL">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel,
-                               [decode_vcard_LABEL(__TopXMLNS, __IgnoreEls,
-                                                   _el)
-                                | Label],
-                               Fn, Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel,
-                               [decode_vcard_LABEL(<<"vcard-temp">>,
-                                                   __IgnoreEls, _el)
-                                | Label],
-                               Fn, Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"TEL">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email,
-                               [decode_vcard_TEL(__TopXMLNS, __IgnoreEls, _el)
-                                | Tel],
-                               Label, Fn, Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email,
-                               [decode_vcard_TEL(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el)
-                                | Tel],
-                               Label, Fn, Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"EMAIL">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url,
-                               [decode_vcard_EMAIL(__TopXMLNS, __IgnoreEls,
-                                                   _el)
-                                | Email],
-                               Tel, Label, Fn, Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url,
-                               [decode_vcard_EMAIL(<<"vcard-temp">>,
-                                                   __IgnoreEls, _el)
-                                | Email],
-                               Tel, Label, Fn, Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"GEO">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo,
-                               decode_vcard_GEO(__TopXMLNS, __IgnoreEls, _el));
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo,
-                               decode_vcard_GEO(<<"vcard-temp">>, __IgnoreEls,
-                                                _el));
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"LOGO">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               decode_vcard_LOGO(__TopXMLNS, __IgnoreEls, _el),
-                               Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               decode_vcard_LOGO(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                               Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"PHOTO">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N,
-                               decode_vcard_PHOTO(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                               Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N,
-                               decode_vcard_PHOTO(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                               Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"ORG">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string,
-                               decode_vcard_ORG(__TopXMLNS, __IgnoreEls, _el),
-                               Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string,
-                               decode_vcard_ORG(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                               Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"SOUND">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid,
-                               decode_vcard_SOUND(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                               Note, Role, Title, Nickname, Rev, Sort_string,
-                               Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid,
-                               decode_vcard_SOUND(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                               Note, Role, Title, Nickname, Rev, Sort_string,
-                               Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"KEY">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday,
-                               decode_vcard_KEY(__TopXMLNS, __IgnoreEls, _el),
-                               Tz, Url, Email, Tel, Label, Fn, Version, N,
-                               Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday,
-                               decode_vcard_KEY(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                               Tz, Url, Email, Tel, Label, Fn, Version, N,
-                               Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"VERSION">>, _attrs, _} = _el | _els],
-                     Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                     Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                     Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                     Fn, Version, N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn,
-                               decode_vcard_VERSION(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                               N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn,
-                               decode_vcard_VERSION(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el),
-                               N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"FN">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label,
-                               decode_vcard_FN(__TopXMLNS, __IgnoreEls, _el),
-                               Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label,
-                               decode_vcard_FN(<<"vcard-temp">>, __IgnoreEls,
-                                               _el),
-                               Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"NICKNAME">>, _attrs, _} = _el | _els],
-                     Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                     Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                     Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                     Fn, Version, N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               decode_vcard_NICKNAME(__TopXMLNS, __IgnoreEls,
-                                                     _el),
-                               Rev, Sort_string, Org, Bday, Key, Tz, Url,
-                               Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                               Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               decode_vcard_NICKNAME(<<"vcard-temp">>,
-                                                     __IgnoreEls, _el),
-                               Rev, Sort_string, Org, Bday, Key, Tz, Url,
-                               Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                               Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"BDAY">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org,
-                               decode_vcard_BDAY(__TopXMLNS, __IgnoreEls, _el),
-                               Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
-                               Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org,
-                               decode_vcard_BDAY(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                               Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
-                               Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"JABBERID">>, _attrs, _} = _el | _els],
-                     Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                     Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                     Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                     Fn, Version, N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid,
-                               decode_vcard_JABBERID(__TopXMLNS, __IgnoreEls,
-                                                     _el),
-                               Sound, Note, Role, Title, Nickname, Rev,
-                               Sort_string, Org, Bday, Key, Tz, Url, Email,
-                               Tel, Label, Fn, Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid,
-                               decode_vcard_JABBERID(<<"vcard-temp">>,
-                                                     __IgnoreEls, _el),
-                               Sound, Note, Role, Title, Nickname, Rev,
-                               Sort_string, Org, Bday, Key, Tz, Url, Email,
-                               Tel, Label, Fn, Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"MAILER">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               decode_vcard_MAILER(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                               Adr, Class, Categories, Desc, Uid, Prodid,
-                               Jabberid, Sound, Note, Role, Title, Nickname,
-                               Rev, Sort_string, Org, Bday, Key, Tz, Url,
-                               Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                               Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               decode_vcard_MAILER(<<"vcard-temp">>,
-                                                   __IgnoreEls, _el),
-                               Adr, Class, Categories, Desc, Uid, Prodid,
-                               Jabberid, Sound, Note, Role, Title, Nickname,
-                               Rev, Sort_string, Org, Bday, Key, Tz, Url,
-                               Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                               Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"TZ">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key,
-                               decode_vcard_TZ(__TopXMLNS, __IgnoreEls, _el),
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key,
-                               decode_vcard_TZ(<<"vcard-temp">>, __IgnoreEls,
-                                               _el),
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"TITLE">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role,
-                               decode_vcard_TITLE(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role,
-                               decode_vcard_TITLE(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"ROLE">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note,
-                               decode_vcard_ROLE(__TopXMLNS, __IgnoreEls, _el),
-                               Title, Nickname, Rev, Sort_string, Org, Bday,
-                               Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
-                               Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note,
-                               decode_vcard_ROLE(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                               Title, Nickname, Rev, Sort_string, Org, Bday,
-                               Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
-                               Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"NOTE">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound,
-                               decode_vcard_NOTE(__TopXMLNS, __IgnoreEls, _el),
-                               Role, Title, Nickname, Rev, Sort_string, Org,
-                               Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound,
-                               decode_vcard_NOTE(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                               Role, Title, Nickname, Rev, Sort_string, Org,
-                               Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"PRODID">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               decode_vcard_PRODID(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                               Jabberid, Sound, Note, Role, Title, Nickname,
-                               Rev, Sort_string, Org, Bday, Key, Tz, Url,
-                               Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                               Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               decode_vcard_PRODID(<<"vcard-temp">>,
-                                                   __IgnoreEls, _el),
-                               Jabberid, Sound, Note, Role, Title, Nickname,
-                               Rev, Sort_string, Org, Bday, Key, Tz, Url,
-                               Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                               Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"REV">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname,
-                               decode_vcard_REV(__TopXMLNS, __IgnoreEls, _el),
-                               Sort_string, Org, Bday, Key, Tz, Url, Email,
-                               Tel, Label, Fn, Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname,
-                               decode_vcard_REV(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                               Sort_string, Org, Bday, Key, Tz, Url, Email,
-                               Tel, Label, Fn, Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"SORT-STRING">>, _attrs, _} = _el | _els],
-                     Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                     Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                     Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                     Fn, Version, N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev,
-                               decode_vcard_SORT_STRING(__TopXMLNS,
-                                                        __IgnoreEls, _el),
-                               Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev,
-                               decode_vcard_SORT_STRING(<<"vcard-temp">>,
-                                                        __IgnoreEls, _el),
-                               Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"UID">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc,
-                               decode_vcard_UID(__TopXMLNS, __IgnoreEls, _el),
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc,
-                               decode_vcard_UID(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"URL">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               decode_vcard_URL(__TopXMLNS, __IgnoreEls, _el),
-                               Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                               Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               decode_vcard_URL(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                               Email, Tel, Label, Fn, Version, N, Photo, Logo,
-                               Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"DESC">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories,
-                               decode_vcard_DESC(__TopXMLNS, __IgnoreEls, _el),
-                               Uid, Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories,
-                               decode_vcard_DESC(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                               Uid, Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"CATEGORIES">>, _attrs, _} = _el | _els],
-                     Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                     Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                     Sort_string, Org, Bday, Key, Tz, Url, Email, Tel, Label,
-                     Fn, Version, N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class,
-                               decode_vcard_CATEGORIES(__TopXMLNS, __IgnoreEls,
-                                                       _el),
-                               Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                               Title, Nickname, Rev, Sort_string, Org, Bday,
-                               Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
-                               Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class,
-                               decode_vcard_CATEGORIES(<<"vcard-temp">>,
-                                                       __IgnoreEls, _el),
-                               Desc, Uid, Prodid, Jabberid, Sound, Note, Role,
-                               Title, Nickname, Rev, Sort_string, Org, Bday,
-                               Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
-                               Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"CLASS">>, _attrs, _} = _el | _els], Mailer,
-                     Adr, Class, Categories, Desc, Uid, Prodid, Jabberid,
-                     Sound, Note, Role, Title, Nickname, Rev, Sort_string,
-                     Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn, Version,
-                     N, Photo, Logo, Geo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr,
-                               decode_vcard_CLASS(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                               Categories, Desc, Uid, Prodid, Jabberid, Sound,
-                               Note, Role, Title, Nickname, Rev, Sort_string,
-                               Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      <<"vcard-temp">> ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr,
-                               decode_vcard_CLASS(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                               Categories, Desc, Uid, Prodid, Jabberid, Sound,
-                               Note, Role, Title, Nickname, Rev, Sort_string,
-                               Org, Bday, Key, Tz, Url, Email, Tel, Label, Fn,
-                               Version, N, Photo, Logo, Geo);
-      _ ->
-         decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                               Mailer, Adr, Class, Categories, Desc, Uid,
-                               Prodid, Jabberid, Sound, Note, Role, Title,
-                               Nickname, Rev, Sort_string, Org, Bday, Key, Tz,
-                               Url, Email, Tel, Label, Fn, Version, N, Photo,
-                               Logo, Geo)
-    end;
-decode_vcard_temp_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Mailer, Adr, Class, Categories, Desc, Uid,
-                     Prodid, Jabberid, Sound, Note, Role, Title, Nickname,
-                     Rev, Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
-                     Label, Fn, Version, N, Photo, Logo, Geo) ->
-    decode_vcard_temp_els(__TopXMLNS, __IgnoreEls, _els,
-                         Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
-                         Jabberid, Sound, Note, Role, Title, Nickname, Rev,
-                         Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
-                         Label, Fn, Version, N, Photo, Logo, Geo).
-
-encode_vcard_temp({vcard_temp, Version, Fn, N, Nickname,
-                  Photo, Bday, Adr, Label, Tel, Email, Jabberid, Mailer,
-                  Tz, Geo, Title, Role, Logo, Org, Categories, Note,
-                  Prodid, Rev, Sort_string, Sound, Uid, Url, Class, Key,
-                  Desc},
-                 __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_temp_$mailer'(Mailer,
-                                                    __NewTopXMLNS,
-                                                    'encode_vcard_temp_$adr'(Adr,
-                                                                             __NewTopXMLNS,
-                                                                             'encode_vcard_temp_$class'(Class,
-                                                                                                        __NewTopXMLNS,
-                                                                                                        'encode_vcard_temp_$categories'(Categories,
-                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                        'encode_vcard_temp_$desc'(Desc,
-                                                                                                                                                                  __NewTopXMLNS,
-                                                                                                                                                                  'encode_vcard_temp_$uid'(Uid,
-                                                                                                                                                                                           __NewTopXMLNS,
-                                                                                                                                                                                           'encode_vcard_temp_$prodid'(Prodid,
-                                                                                                                                                                                                                       __NewTopXMLNS,
-                                                                                                                                                                                                                       'encode_vcard_temp_$jabberid'(Jabberid,
-                                                                                                                                                                                                                                                     __NewTopXMLNS,
-                                                                                                                                                                                                                                                     'encode_vcard_temp_$sound'(Sound,
-                                                                                                                                                                                                                                                                                __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                'encode_vcard_temp_$note'(Note,
-                                                                                                                                                                                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                          'encode_vcard_temp_$role'(Role,
-                                                                                                                                                                                                                                                                                                                                    __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                    'encode_vcard_temp_$title'(Title,
-                                                                                                                                                                                                                                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                               'encode_vcard_temp_$nickname'(Nickname,
-                                                                                                                                                                                                                                                                                                                                                                                             __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                             'encode_vcard_temp_$rev'(Rev,
-                                                                                                                                                                                                                                                                                                                                                                                                                      __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                      'encode_vcard_temp_$sort_string'(Sort_string,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                       __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                       'encode_vcard_temp_$org'(Org,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'encode_vcard_temp_$bday'(Bday,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          'encode_vcard_temp_$key'(Key,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   'encode_vcard_temp_$tz'(Tz,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           'encode_vcard_temp_$url'(Url,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    'encode_vcard_temp_$email'(Email,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               'encode_vcard_temp_$tel'(Tel,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        'encode_vcard_temp_$label'(Label,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   'encode_vcard_temp_$fn'(Fn,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           'encode_vcard_temp_$version'(Version,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        'encode_vcard_temp_$n'(N,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               'encode_vcard_temp_$photo'(Photo,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          'encode_vcard_temp_$logo'(Logo,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    'encode_vcard_temp_$geo'(Geo,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             [])))))))))))))))))))))))))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"vCard">>, _attrs, _els}.
-
-'encode_vcard_temp_$mailer'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_vcard_temp_$mailer'(Mailer, __TopXMLNS, _acc) ->
-    [encode_vcard_MAILER(Mailer, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$adr'([], __TopXMLNS, _acc) -> _acc;
-'encode_vcard_temp_$adr'([Adr | _els], __TopXMLNS,
-                        _acc) ->
-    'encode_vcard_temp_$adr'(_els, __TopXMLNS,
-                            [encode_vcard_ADR(Adr, __TopXMLNS) | _acc]).
-
-'encode_vcard_temp_$class'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_vcard_temp_$class'(Class, __TopXMLNS, _acc) ->
-    [encode_vcard_CLASS(Class, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$categories'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$categories'(Categories, __TopXMLNS,
-                               _acc) ->
-    [encode_vcard_CATEGORIES(Categories, __TopXMLNS)
-     | _acc].
-
-'encode_vcard_temp_$desc'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_vcard_temp_$desc'(Desc, __TopXMLNS, _acc) ->
-    [encode_vcard_DESC(Desc, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$uid'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$uid'(Uid, __TopXMLNS, _acc) ->
-    [encode_vcard_UID(Uid, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$prodid'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_vcard_temp_$prodid'(Prodid, __TopXMLNS, _acc) ->
-    [encode_vcard_PRODID(Prodid, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$jabberid'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_vcard_temp_$jabberid'(Jabberid, __TopXMLNS,
-                             _acc) ->
-    [encode_vcard_JABBERID(Jabberid, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$sound'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_vcard_temp_$sound'(Sound, __TopXMLNS, _acc) ->
-    [encode_vcard_SOUND(Sound, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$note'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_vcard_temp_$note'(Note, __TopXMLNS, _acc) ->
-    [encode_vcard_NOTE(Note, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$role'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_vcard_temp_$role'(Role, __TopXMLNS, _acc) ->
-    [encode_vcard_ROLE(Role, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$title'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_vcard_temp_$title'(Title, __TopXMLNS, _acc) ->
-    [encode_vcard_TITLE(Title, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$nickname'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_vcard_temp_$nickname'(Nickname, __TopXMLNS,
-                             _acc) ->
-    [encode_vcard_NICKNAME(Nickname, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$rev'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$rev'(Rev, __TopXMLNS, _acc) ->
-    [encode_vcard_REV(Rev, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$sort_string'(undefined, __TopXMLNS,
-                                _acc) ->
-    _acc;
-'encode_vcard_temp_$sort_string'(Sort_string,
-                                __TopXMLNS, _acc) ->
-    [encode_vcard_SORT_STRING(Sort_string, __TopXMLNS)
-     | _acc].
-
-'encode_vcard_temp_$org'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$org'(Org, __TopXMLNS, _acc) ->
-    [encode_vcard_ORG(Org, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$bday'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_vcard_temp_$bday'(Bday, __TopXMLNS, _acc) ->
-    [encode_vcard_BDAY(Bday, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$key'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$key'(Key, __TopXMLNS, _acc) ->
-    [encode_vcard_KEY(Key, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$tz'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$tz'(Tz, __TopXMLNS, _acc) ->
-    [encode_vcard_TZ(Tz, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$url'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$url'(Url, __TopXMLNS, _acc) ->
-    [encode_vcard_URL(Url, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$email'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$email'([Email | _els], __TopXMLNS,
-                          _acc) ->
-    'encode_vcard_temp_$email'(_els, __TopXMLNS,
-                              [encode_vcard_EMAIL(Email, __TopXMLNS) | _acc]).
-
-'encode_vcard_temp_$tel'([], __TopXMLNS, _acc) -> _acc;
-'encode_vcard_temp_$tel'([Tel | _els], __TopXMLNS,
-                        _acc) ->
-    'encode_vcard_temp_$tel'(_els, __TopXMLNS,
-                            [encode_vcard_TEL(Tel, __TopXMLNS) | _acc]).
-
-'encode_vcard_temp_$label'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$label'([Label | _els], __TopXMLNS,
-                          _acc) ->
-    'encode_vcard_temp_$label'(_els, __TopXMLNS,
-                              [encode_vcard_LABEL(Label, __TopXMLNS) | _acc]).
-
-'encode_vcard_temp_$fn'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$fn'(Fn, __TopXMLNS, _acc) ->
-    [encode_vcard_FN(Fn, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$version'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_vcard_temp_$version'(Version, __TopXMLNS,
-                            _acc) ->
-    [encode_vcard_VERSION(Version, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$n'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$n'(N, __TopXMLNS, _acc) ->
-    [encode_vcard_N(N, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$photo'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_vcard_temp_$photo'(Photo, __TopXMLNS, _acc) ->
-    [encode_vcard_PHOTO(Photo, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$logo'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_vcard_temp_$logo'(Logo, __TopXMLNS, _acc) ->
-    [encode_vcard_LOGO(Logo, __TopXMLNS) | _acc].
-
-'encode_vcard_temp_$geo'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_temp_$geo'(Geo, __TopXMLNS, _acc) ->
-    [encode_vcard_GEO(Geo, __TopXMLNS) | _acc].
-
-decode_vcard_CLASS(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"CLASS">>, _attrs, _els}) ->
-    Class = decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls,
-                                  _els, undefined),
-    Class.
-
-decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, [],
-                      Class) ->
-    Class;
-decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"PUBLIC">>, _attrs, _} = _el | _els],
-                      Class) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_PUBLIC(__TopXMLNS, __IgnoreEls,
-                                                    _el));
-      <<"vcard-temp">> ->
-         decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_PUBLIC(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el));
-      _ ->
-         decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                                Class)
-    end;
-decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"PRIVATE">>, _attrs, _} = _el | _els],
-                      Class) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_PRIVATE(__TopXMLNS, __IgnoreEls,
-                                                     _el));
-      <<"vcard-temp">> ->
-         decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_PRIVATE(<<"vcard-temp">>,
-                                                     __IgnoreEls, _el));
-      _ ->
-         decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                                Class)
-    end;
-decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"CONFIDENTIAL">>, _attrs, _} = _el | _els],
-                      Class) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_CONFIDENTIAL(__TopXMLNS,
-                                                          __IgnoreEls, _el));
-      <<"vcard-temp">> ->
-         decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_CONFIDENTIAL(<<"vcard-temp">>,
-                                                          __IgnoreEls, _el));
-      _ ->
-         decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                                Class)
-    end;
-decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Class) ->
-    decode_vcard_CLASS_els(__TopXMLNS, __IgnoreEls, _els,
-                          Class).
-
-encode_vcard_CLASS(Class, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_CLASS_$class'(Class,
-                                                    __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"CLASS">>, _attrs, _els}.
-
-'encode_vcard_CLASS_$class'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_vcard_CLASS_$class'(public = Class, __TopXMLNS,
-                           _acc) ->
-    [encode_vcard_PUBLIC(Class, __TopXMLNS) | _acc];
-'encode_vcard_CLASS_$class'(private = Class, __TopXMLNS,
-                           _acc) ->
-    [encode_vcard_PRIVATE(Class, __TopXMLNS) | _acc];
-'encode_vcard_CLASS_$class'(confidential = Class,
-                           __TopXMLNS, _acc) ->
-    [encode_vcard_CONFIDENTIAL(Class, __TopXMLNS) | _acc].
-
-decode_vcard_CATEGORIES(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"CATEGORIES">>, _attrs, _els}) ->
-    Keywords = decode_vcard_CATEGORIES_els(__TopXMLNS,
-                                          __IgnoreEls, _els, []),
-    Keywords.
-
-decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls, [],
-                           Keywords) ->
-    lists:reverse(Keywords);
-decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlel, <<"KEYWORD">>, _attrs, _} = _el | _els],
-                           Keywords) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     [decode_vcard_KEYWORD(__TopXMLNS,
-                                                           __IgnoreEls, _el)
-                                      | Keywords]);
-      <<"vcard-temp">> ->
-         decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     [decode_vcard_KEYWORD(<<"vcard-temp">>,
-                                                           __IgnoreEls, _el)
-                                      | Keywords]);
-      _ ->
-         decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
-                                     _els, Keywords)
-    end;
-decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
-                           [_ | _els], Keywords) ->
-    decode_vcard_CATEGORIES_els(__TopXMLNS, __IgnoreEls,
-                               _els, Keywords).
-
-encode_vcard_CATEGORIES(Keywords, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els =
-       lists:reverse('encode_vcard_CATEGORIES_$keywords'(Keywords,
-                                                         __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"CATEGORIES">>, _attrs, _els}.
-
-'encode_vcard_CATEGORIES_$keywords'([], __TopXMLNS,
-                                   _acc) ->
-    _acc;
-'encode_vcard_CATEGORIES_$keywords'([Keywords | _els],
-                                   __TopXMLNS, _acc) ->
-    'encode_vcard_CATEGORIES_$keywords'(_els, __TopXMLNS,
-                                       [encode_vcard_KEYWORD(Keywords,
-                                                             __TopXMLNS)
-                                        | _acc]).
-
-decode_vcard_KEY(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"KEY">>, _attrs, _els}) ->
-    {Cred, Type} = decode_vcard_KEY_els(__TopXMLNS,
-                                       __IgnoreEls, _els, undefined,
-                                       undefined),
-    {vcard_key, Type, Cred}.
-
-decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls, [], Cred,
-                    Type) ->
-    {Cred, Type};
-decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"TYPE">>, _attrs, _} = _el | _els], Cred,
-                    Type) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls, _els,
-                              Cred,
-                              decode_vcard_TYPE(__TopXMLNS, __IgnoreEls, _el));
-      <<"vcard-temp">> ->
-         decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls, _els,
-                              Cred,
-                              decode_vcard_TYPE(<<"vcard-temp">>, __IgnoreEls,
-                                                _el));
-      _ ->
-         decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls, _els,
-                              Cred, Type)
-    end;
-decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"CRED">>, _attrs, _} = _el | _els], Cred,
-                    Type) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_vcard_CRED(__TopXMLNS, __IgnoreEls, _el),
-                              Type);
-      <<"vcard-temp">> ->
-         decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_vcard_CRED(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Type);
-      _ ->
-         decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls, _els,
-                              Cred, Type)
-    end;
-decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cred, Type) ->
-    decode_vcard_KEY_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cred, Type).
-
-encode_vcard_KEY({vcard_key, Type, Cred}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_KEY_$cred'(Cred,
-                                                 __NewTopXMLNS,
-                                                 'encode_vcard_KEY_$type'(Type,
-                                                                          __NewTopXMLNS,
-                                                                          []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"KEY">>, _attrs, _els}.
-
-'encode_vcard_KEY_$cred'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_KEY_$cred'(Cred, __TopXMLNS, _acc) ->
-    [encode_vcard_CRED(Cred, __TopXMLNS) | _acc].
-
-'encode_vcard_KEY_$type'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_KEY_$type'(Type, __TopXMLNS, _acc) ->
-    [encode_vcard_TYPE(Type, __TopXMLNS) | _acc].
-
-decode_vcard_SOUND(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"SOUND">>, _attrs, _els}) ->
-    {Phonetic, Extval, Binval} =
-       decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                              undefined, undefined, undefined),
-    {vcard_sound, Phonetic, Binval, Extval}.
-
-decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, [],
-                      Phonetic, Extval, Binval) ->
-    {Phonetic, Extval, Binval};
-decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"BINVAL">>, _attrs, _} = _el | _els],
-                      Phonetic, Extval, Binval) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                                Phonetic, Extval,
-                                decode_vcard_BINVAL(__TopXMLNS, __IgnoreEls,
-                                                    _el));
-      <<"vcard-temp">> ->
-         decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                                Phonetic, Extval,
-                                decode_vcard_BINVAL(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el));
-      _ ->
-         decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                                Phonetic, Extval, Binval)
-    end;
-decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"EXTVAL">>, _attrs, _} = _el | _els],
-                      Phonetic, Extval, Binval) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                                Phonetic,
-                                decode_vcard_EXTVAL(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                                Binval);
-      <<"vcard-temp">> ->
-         decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                                Phonetic,
-                                decode_vcard_EXTVAL(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el),
-                                Binval);
-      _ ->
-         decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                                Phonetic, Extval, Binval)
-    end;
-decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"PHONETIC">>, _attrs, _} = _el | _els],
-                      Phonetic, Extval, Binval) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_PHONETIC(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                                Extval, Binval);
-      <<"vcard-temp">> ->
-         decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_PHONETIC(<<"vcard-temp">>,
-                                                      __IgnoreEls, _el),
-                                Extval, Binval);
-      _ ->
-         decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                                Phonetic, Extval, Binval)
-    end;
-decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Phonetic, Extval, Binval) ->
-    decode_vcard_SOUND_els(__TopXMLNS, __IgnoreEls, _els,
-                          Phonetic, Extval, Binval).
-
-encode_vcard_SOUND({vcard_sound, Phonetic, Binval,
-                   Extval},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els =
-       lists:reverse('encode_vcard_SOUND_$phonetic'(Phonetic,
-                                                    __NewTopXMLNS,
-                                                    'encode_vcard_SOUND_$extval'(Extval,
-                                                                                 __NewTopXMLNS,
-                                                                                 'encode_vcard_SOUND_$binval'(Binval,
-                                                                                                              __NewTopXMLNS,
-                                                                                                              [])))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"SOUND">>, _attrs, _els}.
-
-'encode_vcard_SOUND_$phonetic'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_vcard_SOUND_$phonetic'(Phonetic, __TopXMLNS,
-                              _acc) ->
-    [encode_vcard_PHONETIC(Phonetic, __TopXMLNS) | _acc].
-
-'encode_vcard_SOUND_$extval'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_vcard_SOUND_$extval'(Extval, __TopXMLNS,
-                            _acc) ->
-    [encode_vcard_EXTVAL(Extval, __TopXMLNS) | _acc].
-
-'encode_vcard_SOUND_$binval'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_vcard_SOUND_$binval'(Binval, __TopXMLNS,
-                            _acc) ->
-    [encode_vcard_BINVAL(Binval, __TopXMLNS) | _acc].
-
-decode_vcard_ORG(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"ORG">>, _attrs, _els}) ->
-    {Units, Name} = decode_vcard_ORG_els(__TopXMLNS,
-                                        __IgnoreEls, _els, [], undefined),
-    {vcard_org, Name, Units}.
-
-decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, [], Units,
-                    Name) ->
-    {lists:reverse(Units), Name};
-decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"ORGNAME">>, _attrs, _} = _el | _els], Units,
-                    Name) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
-                              Units,
-                              decode_vcard_ORGNAME(__TopXMLNS, __IgnoreEls,
-                                                   _el));
-      <<"vcard-temp">> ->
-         decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
-                              Units,
-                              decode_vcard_ORGNAME(<<"vcard-temp">>,
-                                                   __IgnoreEls, _el));
-      _ ->
-         decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
-                              Units, Name)
-    end;
-decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"ORGUNIT">>, _attrs, _} = _el | _els], Units,
-                    Name) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_vcard_ORGUNIT(__TopXMLNS, __IgnoreEls,
-                                                    _el)
-                               | Units],
-                              Name);
-      <<"vcard-temp">> ->
-         decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode_vcard_ORGUNIT(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el)
-                               | Units],
-                              Name);
-      _ ->
-         decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
-                              Units, Name)
-    end;
-decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Units, Name) ->
-    decode_vcard_ORG_els(__TopXMLNS, __IgnoreEls, _els,
-                        Units, Name).
-
-encode_vcard_ORG({vcard_org, Name, Units},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_ORG_$units'(Units,
-                                                  __NewTopXMLNS,
-                                                  'encode_vcard_ORG_$name'(Name,
-                                                                           __NewTopXMLNS,
-                                                                           []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ORG">>, _attrs, _els}.
-
-'encode_vcard_ORG_$units'([], __TopXMLNS, _acc) -> _acc;
-'encode_vcard_ORG_$units'([Units | _els], __TopXMLNS,
-                         _acc) ->
-    'encode_vcard_ORG_$units'(_els, __TopXMLNS,
-                             [encode_vcard_ORGUNIT(Units, __TopXMLNS) | _acc]).
-
-'encode_vcard_ORG_$name'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_ORG_$name'(Name, __TopXMLNS, _acc) ->
-    [encode_vcard_ORGNAME(Name, __TopXMLNS) | _acc].
-
-decode_vcard_PHOTO(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"PHOTO">>, _attrs, _els}) ->
-    {Type, Extval, Binval} =
-       decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                              undefined, undefined, undefined),
-    {vcard_photo, Type, Binval, Extval}.
-
-decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, [],
-                      Type, Extval, Binval) ->
-    {Type, Extval, Binval};
-decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"TYPE">>, _attrs, _} = _el | _els], Type,
-                      Extval, Binval) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_TYPE(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                                Extval, Binval);
-      <<"vcard-temp">> ->
-         decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_TYPE(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                                Extval, Binval);
-      _ ->
-         decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                                Type, Extval, Binval)
-    end;
-decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"BINVAL">>, _attrs, _} = _el | _els], Type,
-                      Extval, Binval) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                                Type, Extval,
-                                decode_vcard_BINVAL(__TopXMLNS, __IgnoreEls,
-                                                    _el));
-      <<"vcard-temp">> ->
-         decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                                Type, Extval,
-                                decode_vcard_BINVAL(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el));
-      _ ->
-         decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                                Type, Extval, Binval)
-    end;
-decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"EXTVAL">>, _attrs, _} = _el | _els], Type,
-                      Extval, Binval) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                                Type,
-                                decode_vcard_EXTVAL(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                                Binval);
-      <<"vcard-temp">> ->
-         decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                                Type,
-                                decode_vcard_EXTVAL(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el),
-                                Binval);
-      _ ->
-         decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                                Type, Extval, Binval)
-    end;
-decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Type, Extval, Binval) ->
-    decode_vcard_PHOTO_els(__TopXMLNS, __IgnoreEls, _els,
-                          Type, Extval, Binval).
-
-encode_vcard_PHOTO({vcard_photo, Type, Binval, Extval},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_PHOTO_$type'(Type,
-                                                   __NewTopXMLNS,
-                                                   'encode_vcard_PHOTO_$extval'(Extval,
-                                                                                __NewTopXMLNS,
-                                                                                'encode_vcard_PHOTO_$binval'(Binval,
-                                                                                                             __NewTopXMLNS,
-                                                                                                             [])))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PHOTO">>, _attrs, _els}.
-
-'encode_vcard_PHOTO_$type'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_vcard_PHOTO_$type'(Type, __TopXMLNS, _acc) ->
-    [encode_vcard_TYPE(Type, __TopXMLNS) | _acc].
-
-'encode_vcard_PHOTO_$extval'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_vcard_PHOTO_$extval'(Extval, __TopXMLNS,
-                            _acc) ->
-    [encode_vcard_EXTVAL(Extval, __TopXMLNS) | _acc].
-
-'encode_vcard_PHOTO_$binval'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_vcard_PHOTO_$binval'(Binval, __TopXMLNS,
-                            _acc) ->
-    [encode_vcard_BINVAL(Binval, __TopXMLNS) | _acc].
-
-decode_vcard_LOGO(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"LOGO">>, _attrs, _els}) ->
-    {Type, Extval, Binval} =
-       decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                             undefined, undefined, undefined),
-    {vcard_logo, Type, Binval, Extval}.
-
-decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, [], Type,
-                     Extval, Binval) ->
-    {Type, Extval, Binval};
-decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"TYPE">>, _attrs, _} = _el | _els], Type,
-                     Extval, Binval) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                               decode_vcard_TYPE(__TopXMLNS, __IgnoreEls, _el),
-                               Extval, Binval);
-      <<"vcard-temp">> ->
-         decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                               decode_vcard_TYPE(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                               Extval, Binval);
-      _ ->
-         decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                               Type, Extval, Binval)
-    end;
-decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"BINVAL">>, _attrs, _} = _el | _els], Type,
-                     Extval, Binval) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                               Type, Extval,
-                               decode_vcard_BINVAL(__TopXMLNS, __IgnoreEls,
-                                                   _el));
-      <<"vcard-temp">> ->
-         decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                               Type, Extval,
-                               decode_vcard_BINVAL(<<"vcard-temp">>,
-                                                   __IgnoreEls, _el));
-      _ ->
-         decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                               Type, Extval, Binval)
-    end;
-decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"EXTVAL">>, _attrs, _} = _el | _els], Type,
-                     Extval, Binval) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                               Type,
-                               decode_vcard_EXTVAL(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                               Binval);
-      <<"vcard-temp">> ->
-         decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                               Type,
-                               decode_vcard_EXTVAL(<<"vcard-temp">>,
-                                                   __IgnoreEls, _el),
-                               Binval);
-      _ ->
-         decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                               Type, Extval, Binval)
-    end;
-decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Type, Extval, Binval) ->
-    decode_vcard_LOGO_els(__TopXMLNS, __IgnoreEls, _els,
-                         Type, Extval, Binval).
-
-encode_vcard_LOGO({vcard_logo, Type, Binval, Extval},
-                 __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_LOGO_$type'(Type,
-                                                  __NewTopXMLNS,
-                                                  'encode_vcard_LOGO_$extval'(Extval,
-                                                                              __NewTopXMLNS,
-                                                                              'encode_vcard_LOGO_$binval'(Binval,
-                                                                                                          __NewTopXMLNS,
-                                                                                                          [])))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"LOGO">>, _attrs, _els}.
-
-'encode_vcard_LOGO_$type'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_vcard_LOGO_$type'(Type, __TopXMLNS, _acc) ->
-    [encode_vcard_TYPE(Type, __TopXMLNS) | _acc].
-
-'encode_vcard_LOGO_$extval'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_vcard_LOGO_$extval'(Extval, __TopXMLNS, _acc) ->
-    [encode_vcard_EXTVAL(Extval, __TopXMLNS) | _acc].
-
-'encode_vcard_LOGO_$binval'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_vcard_LOGO_$binval'(Binval, __TopXMLNS, _acc) ->
-    [encode_vcard_BINVAL(Binval, __TopXMLNS) | _acc].
-
-decode_vcard_BINVAL(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"BINVAL">>, _attrs, _els}) ->
-    Cdata = decode_vcard_BINVAL_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_BINVAL_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_BINVAL_cdata(__TopXMLNS, Cdata);
-decode_vcard_BINVAL_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_BINVAL_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_BINVAL_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_BINVAL_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_BINVAL(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_BINVAL_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"BINVAL">>, _attrs, _els}.
-
-decode_vcard_BINVAL_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_BINVAL_cdata(__TopXMLNS, _val) ->
-    case catch base64:decode(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"BINVAL">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_vcard_BINVAL_cdata(<<>>, _acc) -> _acc;
-encode_vcard_BINVAL_cdata(_val, _acc) ->
-    [{xmlcdata, base64:encode(_val)} | _acc].
-
-decode_vcard_GEO(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"GEO">>, _attrs, _els}) ->
-    {Lat, Lon} = decode_vcard_GEO_els(__TopXMLNS,
-                                     __IgnoreEls, _els, undefined, undefined),
-    {vcard_geo, Lat, Lon}.
-
-decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls, [], Lat,
-                    Lon) ->
-    {Lat, Lon};
-decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"LAT">>, _attrs, _} = _el | _els], Lat,
-                    Lon) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_vcard_LAT(__TopXMLNS, __IgnoreEls, _el),
-                              Lon);
-      <<"vcard-temp">> ->
-         decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_vcard_LAT(<<"vcard-temp">>, __IgnoreEls,
-                                               _el),
-                              Lon);
-      _ ->
-         decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls, _els, Lat,
-                              Lon)
-    end;
-decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"LON">>, _attrs, _} = _el | _els], Lat,
-                    Lon) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls, _els, Lat,
-                              decode_vcard_LON(__TopXMLNS, __IgnoreEls, _el));
-      <<"vcard-temp">> ->
-         decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls, _els, Lat,
-                              decode_vcard_LON(<<"vcard-temp">>, __IgnoreEls,
-                                               _el));
-      _ ->
-         decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls, _els, Lat,
-                              Lon)
-    end;
-decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Lat, Lon) ->
-    decode_vcard_GEO_els(__TopXMLNS, __IgnoreEls, _els, Lat,
-                        Lon).
-
-encode_vcard_GEO({vcard_geo, Lat, Lon}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_GEO_$lat'(Lat,
-                                                __NewTopXMLNS,
-                                                'encode_vcard_GEO_$lon'(Lon,
-                                                                        __NewTopXMLNS,
-                                                                        []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"GEO">>, _attrs, _els}.
-
-'encode_vcard_GEO_$lat'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_GEO_$lat'(Lat, __TopXMLNS, _acc) ->
-    [encode_vcard_LAT(Lat, __TopXMLNS) | _acc].
-
-'encode_vcard_GEO_$lon'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_GEO_$lon'(Lon, __TopXMLNS, _acc) ->
-    [encode_vcard_LON(Lon, __TopXMLNS) | _acc].
-
-decode_vcard_EMAIL(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"EMAIL">>, _attrs, _els}) ->
-    {X400, Userid, Internet, Home, Pref, Work} =
-       decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                              false, undefined, false, false, false, false),
-    {vcard_email, Home, Work, Internet, Pref, X400, Userid}.
-
-decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, [],
-                      X400, Userid, Internet, Home, Pref, Work) ->
-    {X400, Userid, Internet, Home, Pref, Work};
-decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"HOME">>, _attrs, _} = _el | _els], X400,
-                      Userid, Internet, Home, Pref, Work) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet,
-                                decode_vcard_HOME(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                                Pref, Work);
-      <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet,
-                                decode_vcard_HOME(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                                Pref, Work);
-      _ ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home, Pref, Work)
-    end;
-decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"WORK">>, _attrs, _} = _el | _els], X400,
-                      Userid, Internet, Home, Pref, Work) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home, Pref,
-                                decode_vcard_WORK(__TopXMLNS, __IgnoreEls,
-                                                  _el));
-      <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home, Pref,
-                                decode_vcard_WORK(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el));
-      _ ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home, Pref, Work)
-    end;
-decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"INTERNET">>, _attrs, _} = _el | _els], X400,
-                      Userid, Internet, Home, Pref, Work) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid,
-                                decode_vcard_INTERNET(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                                Home, Pref, Work);
-      <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid,
-                                decode_vcard_INTERNET(<<"vcard-temp">>,
-                                                      __IgnoreEls, _el),
-                                Home, Pref, Work);
-      _ ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home, Pref, Work)
-    end;
-decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"PREF">>, _attrs, _} = _el | _els], X400,
-                      Userid, Internet, Home, Pref, Work) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home,
-                                decode_vcard_PREF(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                                Work);
-      <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home,
-                                decode_vcard_PREF(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                                Work);
-      _ ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home, Pref, Work)
-    end;
-decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"X400">>, _attrs, _} = _el | _els], X400,
-                      Userid, Internet, Home, Pref, Work) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_X400(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                                Userid, Internet, Home, Pref, Work);
-      <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_vcard_X400(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                                Userid, Internet, Home, Pref, Work);
-      _ ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home, Pref, Work)
-    end;
-decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"USERID">>, _attrs, _} = _el | _els], X400,
-                      Userid, Internet, Home, Pref, Work) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400,
-                                decode_vcard_USERID(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                                Internet, Home, Pref, Work);
-      <<"vcard-temp">> ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400,
-                                decode_vcard_USERID(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el),
-                                Internet, Home, Pref, Work);
-      _ ->
-         decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                                X400, Userid, Internet, Home, Pref, Work)
-    end;
-decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], X400, Userid, Internet, Home, Pref, Work) ->
-    decode_vcard_EMAIL_els(__TopXMLNS, __IgnoreEls, _els,
-                          X400, Userid, Internet, Home, Pref, Work).
-
-encode_vcard_EMAIL({vcard_email, Home, Work, Internet,
-                   Pref, X400, Userid},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_EMAIL_$x400'(X400,
-                                                   __NewTopXMLNS,
-                                                   'encode_vcard_EMAIL_$userid'(Userid,
-                                                                                __NewTopXMLNS,
-                                                                                'encode_vcard_EMAIL_$internet'(Internet,
-                                                                                                               __NewTopXMLNS,
-                                                                                                               'encode_vcard_EMAIL_$home'(Home,
-                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                          'encode_vcard_EMAIL_$pref'(Pref,
-                                                                                                                                                                     __NewTopXMLNS,
-                                                                                                                                                                     'encode_vcard_EMAIL_$work'(Work,
-                                                                                                                                                                                                __NewTopXMLNS,
-                                                                                                                                                                                                []))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"EMAIL">>, _attrs, _els}.
-
-'encode_vcard_EMAIL_$x400'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_EMAIL_$x400'(X400, __TopXMLNS, _acc) ->
-    [encode_vcard_X400(X400, __TopXMLNS) | _acc].
-
-'encode_vcard_EMAIL_$userid'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_vcard_EMAIL_$userid'(Userid, __TopXMLNS,
-                            _acc) ->
-    [encode_vcard_USERID(Userid, __TopXMLNS) | _acc].
-
-'encode_vcard_EMAIL_$internet'(false, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_vcard_EMAIL_$internet'(Internet, __TopXMLNS,
-                              _acc) ->
-    [encode_vcard_INTERNET(Internet, __TopXMLNS) | _acc].
-
-'encode_vcard_EMAIL_$home'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_EMAIL_$home'(Home, __TopXMLNS, _acc) ->
-    [encode_vcard_HOME(Home, __TopXMLNS) | _acc].
-
-'encode_vcard_EMAIL_$pref'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_EMAIL_$pref'(Pref, __TopXMLNS, _acc) ->
-    [encode_vcard_PREF(Pref, __TopXMLNS) | _acc].
-
-'encode_vcard_EMAIL_$work'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_EMAIL_$work'(Work, __TopXMLNS, _acc) ->
-    [encode_vcard_WORK(Work, __TopXMLNS) | _acc].
-
-decode_vcard_TEL(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"TEL">>, _attrs, _els}) ->
-    {Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-     Work, Cell, Modem, Isdn, Video} =
-       decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                            undefined, false, false, false, false, false,
-                            false, false, false, false, false, false, false,
-                            false),
-    {vcard_tel, Home, Work, Voice, Fax, Pager, Msg, Cell,
-     Video, Bbs, Modem, Isdn, Pcs, Pref, Number}.
-
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, [],
-                    Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                    Work, Cell, Modem, Isdn, Video) ->
-    {Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-     Work, Cell, Modem, Isdn, Video};
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"HOME">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice,
-                              decode_vcard_HOME(__TopXMLNS, __IgnoreEls, _el),
-                              Pref, Msg, Fax, Work, Cell, Modem, Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice,
-                              decode_vcard_HOME(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Pref, Msg, Fax, Work, Cell, Modem, Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"WORK">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax,
-                              decode_vcard_WORK(__TopXMLNS, __IgnoreEls, _el),
-                              Cell, Modem, Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax,
-                              decode_vcard_WORK(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Cell, Modem, Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"VOICE">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs,
-                              decode_vcard_VOICE(__TopXMLNS, __IgnoreEls, _el),
-                              Home, Pref, Msg, Fax, Work, Cell, Modem, Isdn,
-                              Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs,
-                              decode_vcard_VOICE(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                              Home, Pref, Msg, Fax, Work, Cell, Modem, Isdn,
-                              Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"FAX">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              decode_vcard_FAX(__TopXMLNS, __IgnoreEls, _el),
-                              Work, Cell, Modem, Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              decode_vcard_FAX(<<"vcard-temp">>, __IgnoreEls,
-                                               _el),
-                              Work, Cell, Modem, Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"PAGER">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number,
-                              decode_vcard_PAGER(__TopXMLNS, __IgnoreEls, _el),
-                              Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                              Cell, Modem, Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number,
-                              decode_vcard_PAGER(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                              Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                              Cell, Modem, Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"MSG">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref,
-                              decode_vcard_MSG(__TopXMLNS, __IgnoreEls, _el),
-                              Fax, Work, Cell, Modem, Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref,
-                              decode_vcard_MSG(<<"vcard-temp">>, __IgnoreEls,
-                                               _el),
-                              Fax, Work, Cell, Modem, Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"CELL">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work,
-                              decode_vcard_CELL(__TopXMLNS, __IgnoreEls, _el),
-                              Modem, Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work,
-                              decode_vcard_CELL(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Modem, Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"VIDEO">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn,
-                              decode_vcard_VIDEO(__TopXMLNS, __IgnoreEls,
-                                                 _el));
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn,
-                              decode_vcard_VIDEO(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el));
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"BBS">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs,
-                              decode_vcard_BBS(__TopXMLNS, __IgnoreEls, _el),
-                              Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                              Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs,
-                              decode_vcard_BBS(<<"vcard-temp">>, __IgnoreEls,
-                                               _el),
-                              Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
-                              Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"MODEM">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell,
-                              decode_vcard_MODEM(__TopXMLNS, __IgnoreEls, _el),
-                              Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell,
-                              decode_vcard_MODEM(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                              Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"ISDN">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem,
-                              decode_vcard_ISDN(__TopXMLNS, __IgnoreEls, _el),
-                              Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem,
-                              decode_vcard_ISDN(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"PCS">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager,
-                              decode_vcard_PCS(__TopXMLNS, __IgnoreEls, _el),
-                              Bbs, Voice, Home, Pref, Msg, Fax, Work, Cell,
-                              Modem, Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager,
-                              decode_vcard_PCS(<<"vcard-temp">>, __IgnoreEls,
-                                               _el),
-                              Bbs, Voice, Home, Pref, Msg, Fax, Work, Cell,
-                              Modem, Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"PREF">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home,
-                              decode_vcard_PREF(__TopXMLNS, __IgnoreEls, _el),
-                              Msg, Fax, Work, Cell, Modem, Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home,
-                              decode_vcard_PREF(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Msg, Fax, Work, Cell, Modem, Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"NUMBER">>, _attrs, _} = _el | _els], Number,
-                    Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax, Work,
-                    Cell, Modem, Isdn, Video) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_vcard_NUMBER(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                              Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                              Work, Cell, Modem, Isdn, Video);
-      <<"vcard-temp">> ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_vcard_NUMBER(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                              Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                              Work, Cell, Modem, Isdn, Video);
-      _ ->
-         decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg,
-                              Fax, Work, Cell, Modem, Isdn, Video)
-    end;
-decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Number, Pager, Pcs, Bbs, Voice, Home, Pref,
-                    Msg, Fax, Work, Cell, Modem, Isdn, Video) ->
-    decode_vcard_TEL_els(__TopXMLNS, __IgnoreEls, _els,
-                        Number, Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
-                        Work, Cell, Modem, Isdn, Video).
-
-encode_vcard_TEL({vcard_tel, Home, Work, Voice, Fax,
-                 Pager, Msg, Cell, Video, Bbs, Modem, Isdn, Pcs, Pref,
-                 Number},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_TEL_$number'(Number,
-                                                   __NewTopXMLNS,
-                                                   'encode_vcard_TEL_$pager'(Pager,
-                                                                             __NewTopXMLNS,
-                                                                             'encode_vcard_TEL_$pcs'(Pcs,
-                                                                                                     __NewTopXMLNS,
-                                                                                                     'encode_vcard_TEL_$bbs'(Bbs,
-                                                                                                                             __NewTopXMLNS,
-                                                                                                                             'encode_vcard_TEL_$voice'(Voice,
-                                                                                                                                                       __NewTopXMLNS,
-                                                                                                                                                       'encode_vcard_TEL_$home'(Home,
-                                                                                                                                                                                __NewTopXMLNS,
-                                                                                                                                                                                'encode_vcard_TEL_$pref'(Pref,
-                                                                                                                                                                                                         __NewTopXMLNS,
-                                                                                                                                                                                                         'encode_vcard_TEL_$msg'(Msg,
-                                                                                                                                                                                                                                 __NewTopXMLNS,
-                                                                                                                                                                                                                                 'encode_vcard_TEL_$fax'(Fax,
-                                                                                                                                                                                                                                                         __NewTopXMLNS,
-                                                                                                                                                                                                                                                         'encode_vcard_TEL_$work'(Work,
-                                                                                                                                                                                                                                                                                  __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                  'encode_vcard_TEL_$cell'(Cell,
-                                                                                                                                                                                                                                                                                                           __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                           'encode_vcard_TEL_$modem'(Modem,
-                                                                                                                                                                                                                                                                                                                                     __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                     'encode_vcard_TEL_$isdn'(Isdn,
-                                                                                                                                                                                                                                                                                                                                                              __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                              'encode_vcard_TEL_$video'(Video,
-                                                                                                                                                                                                                                                                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                        []))))))))))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"TEL">>, _attrs, _els}.
-
-'encode_vcard_TEL_$number'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_vcard_TEL_$number'(Number, __TopXMLNS, _acc) ->
-    [encode_vcard_NUMBER(Number, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$pager'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$pager'(Pager, __TopXMLNS, _acc) ->
-    [encode_vcard_PAGER(Pager, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$pcs'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$pcs'(Pcs, __TopXMLNS, _acc) ->
-    [encode_vcard_PCS(Pcs, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$bbs'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$bbs'(Bbs, __TopXMLNS, _acc) ->
-    [encode_vcard_BBS(Bbs, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$voice'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$voice'(Voice, __TopXMLNS, _acc) ->
-    [encode_vcard_VOICE(Voice, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$home'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$home'(Home, __TopXMLNS, _acc) ->
-    [encode_vcard_HOME(Home, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$pref'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$pref'(Pref, __TopXMLNS, _acc) ->
-    [encode_vcard_PREF(Pref, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$msg'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$msg'(Msg, __TopXMLNS, _acc) ->
-    [encode_vcard_MSG(Msg, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$fax'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$fax'(Fax, __TopXMLNS, _acc) ->
-    [encode_vcard_FAX(Fax, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$work'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$work'(Work, __TopXMLNS, _acc) ->
-    [encode_vcard_WORK(Work, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$cell'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$cell'(Cell, __TopXMLNS, _acc) ->
-    [encode_vcard_CELL(Cell, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$modem'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$modem'(Modem, __TopXMLNS, _acc) ->
-    [encode_vcard_MODEM(Modem, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$isdn'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$isdn'(Isdn, __TopXMLNS, _acc) ->
-    [encode_vcard_ISDN(Isdn, __TopXMLNS) | _acc].
-
-'encode_vcard_TEL_$video'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_TEL_$video'(Video, __TopXMLNS, _acc) ->
-    [encode_vcard_VIDEO(Video, __TopXMLNS) | _acc].
-
-decode_vcard_LABEL(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"LABEL">>, _attrs, _els}) ->
-    {Line, Home, Pref, Work, Intl, Parcel, Postal, Dom} =
-       decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                              [], false, false, false, false, false, false,
-                              false),
-    {vcard_label, Home, Work, Postal, Parcel, Dom, Intl,
-     Pref, Line}.
-
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, [],
-                      Line, Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    {lists:reverse(Line), Home, Pref, Work, Intl, Parcel,
-     Postal, Dom};
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"HOME">>, _attrs, _} = _el | _els], Line,
-                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line,
-                                decode_vcard_HOME(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                                Pref, Work, Intl, Parcel, Postal, Dom);
-      <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line,
-                                decode_vcard_HOME(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                                Pref, Work, Intl, Parcel, Postal, Dom);
-      _ ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                Dom)
-    end;
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"WORK">>, _attrs, _} = _el | _els], Line,
-                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref,
-                                decode_vcard_WORK(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                                Intl, Parcel, Postal, Dom);
-      <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref,
-                                decode_vcard_WORK(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                                Intl, Parcel, Postal, Dom);
-      _ ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                Dom)
-    end;
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"POSTAL">>, _attrs, _} = _el | _els], Line,
-                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel,
-                                decode_vcard_POSTAL(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                                Dom);
-      <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel,
-                                decode_vcard_POSTAL(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el),
-                                Dom);
-      _ ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                Dom)
-    end;
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"PARCEL">>, _attrs, _} = _el | _els], Line,
-                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl,
-                                decode_vcard_PARCEL(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                                Postal, Dom);
-      <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl,
-                                decode_vcard_PARCEL(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el),
-                                Postal, Dom);
-      _ ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                Dom)
-    end;
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"DOM">>, _attrs, _} = _el | _els], Line,
-                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                decode_vcard_DOM(__TopXMLNS, __IgnoreEls,
-                                                 _el));
-      <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                decode_vcard_DOM(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el));
-      _ ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                Dom)
-    end;
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"INTL">>, _attrs, _} = _el | _els], Line,
-                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work,
-                                decode_vcard_INTL(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                                Parcel, Postal, Dom);
-      <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work,
-                                decode_vcard_INTL(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                                Parcel, Postal, Dom);
-      _ ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                Dom)
-    end;
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"PREF">>, _attrs, _} = _el | _els], Line,
-                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home,
-                                decode_vcard_PREF(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                                Work, Intl, Parcel, Postal, Dom);
-      <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home,
-                                decode_vcard_PREF(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                                Work, Intl, Parcel, Postal, Dom);
-      _ ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                Dom)
-    end;
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"LINE">>, _attrs, _} = _el | _els], Line,
-                      Home, Pref, Work, Intl, Parcel, Postal, Dom) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_vcard_LINE(__TopXMLNS, __IgnoreEls,
-                                                   _el)
-                                 | Line],
-                                Home, Pref, Work, Intl, Parcel, Postal, Dom);
-      <<"vcard-temp">> ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_vcard_LINE(<<"vcard-temp">>,
-                                                   __IgnoreEls, _el)
-                                 | Line],
-                                Home, Pref, Work, Intl, Parcel, Postal, Dom);
-      _ ->
-         decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                                Line, Home, Pref, Work, Intl, Parcel, Postal,
-                                Dom)
-    end;
-decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Line, Home, Pref, Work, Intl, Parcel,
-                      Postal, Dom) ->
-    decode_vcard_LABEL_els(__TopXMLNS, __IgnoreEls, _els,
-                          Line, Home, Pref, Work, Intl, Parcel, Postal, Dom).
-
-encode_vcard_LABEL({vcard_label, Home, Work, Postal,
-                   Parcel, Dom, Intl, Pref, Line},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_LABEL_$line'(Line,
-                                                   __NewTopXMLNS,
-                                                   'encode_vcard_LABEL_$home'(Home,
-                                                                              __NewTopXMLNS,
-                                                                              'encode_vcard_LABEL_$pref'(Pref,
-                                                                                                         __NewTopXMLNS,
-                                                                                                         'encode_vcard_LABEL_$work'(Work,
-                                                                                                                                    __NewTopXMLNS,
-                                                                                                                                    'encode_vcard_LABEL_$intl'(Intl,
-                                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                                               'encode_vcard_LABEL_$parcel'(Parcel,
-                                                                                                                                                                                            __NewTopXMLNS,
-                                                                                                                                                                                            'encode_vcard_LABEL_$postal'(Postal,
-                                                                                                                                                                                                                         __NewTopXMLNS,
-                                                                                                                                                                                                                         'encode_vcard_LABEL_$dom'(Dom,
-                                                                                                                                                                                                                                                   __NewTopXMLNS,
-                                                                                                                                                                                                                                                   []))))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"LABEL">>, _attrs, _els}.
-
-'encode_vcard_LABEL_$line'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_LABEL_$line'([Line | _els], __TopXMLNS,
-                          _acc) ->
-    'encode_vcard_LABEL_$line'(_els, __TopXMLNS,
-                              [encode_vcard_LINE(Line, __TopXMLNS) | _acc]).
-
-'encode_vcard_LABEL_$home'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_LABEL_$home'(Home, __TopXMLNS, _acc) ->
-    [encode_vcard_HOME(Home, __TopXMLNS) | _acc].
-
-'encode_vcard_LABEL_$pref'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_LABEL_$pref'(Pref, __TopXMLNS, _acc) ->
-    [encode_vcard_PREF(Pref, __TopXMLNS) | _acc].
-
-'encode_vcard_LABEL_$work'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_LABEL_$work'(Work, __TopXMLNS, _acc) ->
-    [encode_vcard_WORK(Work, __TopXMLNS) | _acc].
-
-'encode_vcard_LABEL_$intl'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_LABEL_$intl'(Intl, __TopXMLNS, _acc) ->
-    [encode_vcard_INTL(Intl, __TopXMLNS) | _acc].
-
-'encode_vcard_LABEL_$parcel'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_LABEL_$parcel'(Parcel, __TopXMLNS,
-                            _acc) ->
-    [encode_vcard_PARCEL(Parcel, __TopXMLNS) | _acc].
-
-'encode_vcard_LABEL_$postal'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_LABEL_$postal'(Postal, __TopXMLNS,
-                            _acc) ->
-    [encode_vcard_POSTAL(Postal, __TopXMLNS) | _acc].
-
-'encode_vcard_LABEL_$dom'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_LABEL_$dom'(Dom, __TopXMLNS, _acc) ->
-    [encode_vcard_DOM(Dom, __TopXMLNS) | _acc].
-
-decode_vcard_ADR(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"ADR">>, _attrs, _els}) ->
-    {Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-     Locality, Work, Intl, Parcel, Postal, Dom, Region} =
-       decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                            undefined, undefined, undefined, false, false,
-                            undefined, undefined, undefined, false, false,
-                            false, false, false, undefined),
-    {vcard_adr, Home, Work, Postal, Parcel, Dom, Intl, Pref,
-     Pobox, Extadd, Street, Locality, Region, Pcode, Ctry}.
-
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, [],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    {Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-     Locality, Work, Intl, Parcel, Postal, Dom, Region};
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"HOME">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode,
-                              decode_vcard_HOME(__TopXMLNS, __IgnoreEls, _el),
-                              Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                              Postal, Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode,
-                              decode_vcard_HOME(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Pref, Pobox, Ctry, Locality, Work, Intl, Parcel,
-                              Postal, Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"WORK">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality,
-                              decode_vcard_WORK(__TopXMLNS, __IgnoreEls, _el),
-                              Intl, Parcel, Postal, Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality,
-                              decode_vcard_WORK(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Intl, Parcel, Postal, Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"POSTAL">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel,
-                              decode_vcard_POSTAL(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                              Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel,
-                              decode_vcard_POSTAL(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                              Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"PARCEL">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl,
-                              decode_vcard_PARCEL(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                              Postal, Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl,
-                              decode_vcard_PARCEL(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                              Postal, Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"DOM">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal,
-                              decode_vcard_DOM(__TopXMLNS, __IgnoreEls, _el),
-                              Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal,
-                              decode_vcard_DOM(<<"vcard-temp">>, __IgnoreEls,
-                                               _el),
-                              Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"INTL">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work,
-                              decode_vcard_INTL(__TopXMLNS, __IgnoreEls, _el),
-                              Parcel, Postal, Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work,
-                              decode_vcard_INTL(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Parcel, Postal, Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"PREF">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home,
-                              decode_vcard_PREF(__TopXMLNS, __IgnoreEls, _el),
-                              Pobox, Ctry, Locality, Work, Intl, Parcel,
-                              Postal, Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home,
-                              decode_vcard_PREF(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Pobox, Ctry, Locality, Work, Intl, Parcel,
-                              Postal, Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"POBOX">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref,
-                              decode_vcard_POBOX(__TopXMLNS, __IgnoreEls, _el),
-                              Ctry, Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref,
-                              decode_vcard_POBOX(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                              Ctry, Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"EXTADD">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street,
-                              decode_vcard_EXTADD(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                              Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                              Intl, Parcel, Postal, Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street,
-                              decode_vcard_EXTADD(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                              Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                              Intl, Parcel, Postal, Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"STREET">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_vcard_STREET(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                              Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality,
-                              Work, Intl, Parcel, Postal, Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              decode_vcard_STREET(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el),
-                              Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality,
-                              Work, Intl, Parcel, Postal, Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"LOCALITY">>, _attrs, _} = _el | _els],
-                    Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                    Locality, Work, Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              decode_vcard_LOCALITY(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                              Work, Intl, Parcel, Postal, Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              decode_vcard_LOCALITY(<<"vcard-temp">>,
-                                                    __IgnoreEls, _el),
-                              Work, Intl, Parcel, Postal, Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"REGION">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              decode_vcard_REGION(__TopXMLNS, __IgnoreEls,
-                                                  _el));
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              decode_vcard_REGION(<<"vcard-temp">>,
-                                                  __IgnoreEls, _el));
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"PCODE">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd,
-                              decode_vcard_PCODE(__TopXMLNS, __IgnoreEls, _el),
-                              Home, Pref, Pobox, Ctry, Locality, Work, Intl,
-                              Parcel, Postal, Dom, Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd,
-                              decode_vcard_PCODE(<<"vcard-temp">>, __IgnoreEls,
-                                                 _el),
-                              Home, Pref, Pobox, Ctry, Locality, Work, Intl,
-                              Parcel, Postal, Dom, Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlel, <<"CTRY">>, _attrs, _} = _el | _els], Street,
-                    Extadd, Pcode, Home, Pref, Pobox, Ctry, Locality, Work,
-                    Intl, Parcel, Postal, Dom, Region) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox,
-                              decode_vcard_CTRY(__TopXMLNS, __IgnoreEls, _el),
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region);
-      <<"vcard-temp">> ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox,
-                              decode_vcard_CTRY(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region);
-      _ ->
-         decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                              Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                              Locality, Work, Intl, Parcel, Postal, Dom,
-                              Region)
-    end;
-decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Street, Extadd, Pcode, Home, Pref, Pobox,
-                    Ctry, Locality, Work, Intl, Parcel, Postal, Dom,
-                    Region) ->
-    decode_vcard_ADR_els(__TopXMLNS, __IgnoreEls, _els,
-                        Street, Extadd, Pcode, Home, Pref, Pobox, Ctry,
-                        Locality, Work, Intl, Parcel, Postal, Dom, Region).
-
-encode_vcard_ADR({vcard_adr, Home, Work, Postal, Parcel,
-                 Dom, Intl, Pref, Pobox, Extadd, Street, Locality,
-                 Region, Pcode, Ctry},
-                __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_ADR_$street'(Street,
-                                                   __NewTopXMLNS,
-                                                   'encode_vcard_ADR_$extadd'(Extadd,
-                                                                              __NewTopXMLNS,
-                                                                              'encode_vcard_ADR_$pcode'(Pcode,
-                                                                                                        __NewTopXMLNS,
-                                                                                                        'encode_vcard_ADR_$home'(Home,
-                                                                                                                                 __NewTopXMLNS,
-                                                                                                                                 'encode_vcard_ADR_$pref'(Pref,
-                                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                                          'encode_vcard_ADR_$pobox'(Pobox,
-                                                                                                                                                                                    __NewTopXMLNS,
-                                                                                                                                                                                    'encode_vcard_ADR_$ctry'(Ctry,
-                                                                                                                                                                                                             __NewTopXMLNS,
-                                                                                                                                                                                                             'encode_vcard_ADR_$locality'(Locality,
-                                                                                                                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                                                                                                                          'encode_vcard_ADR_$work'(Work,
-                                                                                                                                                                                                                                                                   __NewTopXMLNS,
-                                                                                                                                                                                                                                                                   'encode_vcard_ADR_$intl'(Intl,
-                                                                                                                                                                                                                                                                                            __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                            'encode_vcard_ADR_$parcel'(Parcel,
-                                                                                                                                                                                                                                                                                                                       __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                       'encode_vcard_ADR_$postal'(Postal,
-                                                                                                                                                                                                                                                                                                                                                  __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                  'encode_vcard_ADR_$dom'(Dom,
-                                                                                                                                                                                                                                                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                          'encode_vcard_ADR_$region'(Region,
-                                                                                                                                                                                                                                                                                                                                                                                                     __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                     []))))))))))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ADR">>, _attrs, _els}.
-
-'encode_vcard_ADR_$street'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_vcard_ADR_$street'(Street, __TopXMLNS, _acc) ->
-    [encode_vcard_STREET(Street, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$extadd'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_vcard_ADR_$extadd'(Extadd, __TopXMLNS, _acc) ->
-    [encode_vcard_EXTADD(Extadd, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$pcode'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_vcard_ADR_$pcode'(Pcode, __TopXMLNS, _acc) ->
-    [encode_vcard_PCODE(Pcode, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$home'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_ADR_$home'(Home, __TopXMLNS, _acc) ->
-    [encode_vcard_HOME(Home, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$pref'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_ADR_$pref'(Pref, __TopXMLNS, _acc) ->
-    [encode_vcard_PREF(Pref, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$pobox'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_vcard_ADR_$pobox'(Pobox, __TopXMLNS, _acc) ->
-    [encode_vcard_POBOX(Pobox, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$ctry'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_ADR_$ctry'(Ctry, __TopXMLNS, _acc) ->
-    [encode_vcard_CTRY(Ctry, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$locality'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_vcard_ADR_$locality'(Locality, __TopXMLNS,
-                            _acc) ->
-    [encode_vcard_LOCALITY(Locality, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$work'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_ADR_$work'(Work, __TopXMLNS, _acc) ->
-    [encode_vcard_WORK(Work, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$intl'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_ADR_$intl'(Intl, __TopXMLNS, _acc) ->
-    [encode_vcard_INTL(Intl, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$parcel'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_ADR_$parcel'(Parcel, __TopXMLNS, _acc) ->
-    [encode_vcard_PARCEL(Parcel, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$postal'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_ADR_$postal'(Postal, __TopXMLNS, _acc) ->
-    [encode_vcard_POSTAL(Postal, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$dom'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_ADR_$dom'(Dom, __TopXMLNS, _acc) ->
-    [encode_vcard_DOM(Dom, __TopXMLNS) | _acc].
-
-'encode_vcard_ADR_$region'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_vcard_ADR_$region'(Region, __TopXMLNS, _acc) ->
-    [encode_vcard_REGION(Region, __TopXMLNS) | _acc].
-
-decode_vcard_N(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"N">>, _attrs, _els}) ->
-    {Middle, Suffix, Prefix, Family, Given} =
-       decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                          undefined, undefined, undefined, undefined,
-                          undefined),
-    {vcard_name, Family, Given, Middle, Prefix, Suffix}.
-
-decode_vcard_N_els(__TopXMLNS, __IgnoreEls, [], Middle,
-                  Suffix, Prefix, Family, Given) ->
-    {Middle, Suffix, Prefix, Family, Given};
-decode_vcard_N_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"FAMILY">>, _attrs, _} = _el | _els], Middle,
-                  Suffix, Prefix, Family, Given) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix, Prefix,
-                            decode_vcard_FAMILY(__TopXMLNS, __IgnoreEls, _el),
-                            Given);
-      <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix, Prefix,
-                            decode_vcard_FAMILY(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                            Given);
-      _ ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix, Prefix, Family, Given)
-    end;
-decode_vcard_N_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"GIVEN">>, _attrs, _} = _el | _els], Middle,
-                  Suffix, Prefix, Family, Given) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix, Prefix, Family,
-                            decode_vcard_GIVEN(__TopXMLNS, __IgnoreEls, _el));
-      <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix, Prefix, Family,
-                            decode_vcard_GIVEN(<<"vcard-temp">>, __IgnoreEls,
-                                               _el));
-      _ ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix, Prefix, Family, Given)
-    end;
-decode_vcard_N_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"MIDDLE">>, _attrs, _} = _el | _els], Middle,
-                  Suffix, Prefix, Family, Given) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_vcard_MIDDLE(__TopXMLNS, __IgnoreEls, _el),
-                            Suffix, Prefix, Family, Given);
-      <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_vcard_MIDDLE(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                            Suffix, Prefix, Family, Given);
-      _ ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix, Prefix, Family, Given)
-    end;
-decode_vcard_N_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"PREFIX">>, _attrs, _} = _el | _els], Middle,
-                  Suffix, Prefix, Family, Given) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix,
-                            decode_vcard_PREFIX(__TopXMLNS, __IgnoreEls, _el),
-                            Family, Given);
-      <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix,
-                            decode_vcard_PREFIX(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                            Family, Given);
-      _ ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix, Prefix, Family, Given)
-    end;
-decode_vcard_N_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"SUFFIX">>, _attrs, _} = _el | _els], Middle,
-                  Suffix, Prefix, Family, Given) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle,
-                            decode_vcard_SUFFIX(__TopXMLNS, __IgnoreEls, _el),
-                            Prefix, Family, Given);
-      <<"vcard-temp">> ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle,
-                            decode_vcard_SUFFIX(<<"vcard-temp">>, __IgnoreEls,
-                                                _el),
-                            Prefix, Family, Given);
-      _ ->
-         decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                            Middle, Suffix, Prefix, Family, Given)
-    end;
-decode_vcard_N_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Middle, Suffix, Prefix, Family, Given) ->
-    decode_vcard_N_els(__TopXMLNS, __IgnoreEls, _els,
-                      Middle, Suffix, Prefix, Family, Given).
-
-encode_vcard_N({vcard_name, Family, Given, Middle,
-               Prefix, Suffix},
-              __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_vcard_N_$middle'(Middle,
-                                                 __NewTopXMLNS,
-                                                 'encode_vcard_N_$suffix'(Suffix,
-                                                                          __NewTopXMLNS,
-                                                                          'encode_vcard_N_$prefix'(Prefix,
-                                                                                                   __NewTopXMLNS,
-                                                                                                   'encode_vcard_N_$family'(Family,
-                                                                                                                            __NewTopXMLNS,
-                                                                                                                            'encode_vcard_N_$given'(Given,
-                                                                                                                                                    __NewTopXMLNS,
-                                                                                                                                                    [])))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"N">>, _attrs, _els}.
-
-'encode_vcard_N_$middle'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_N_$middle'(Middle, __TopXMLNS, _acc) ->
-    [encode_vcard_MIDDLE(Middle, __TopXMLNS) | _acc].
-
-'encode_vcard_N_$suffix'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_N_$suffix'(Suffix, __TopXMLNS, _acc) ->
-    [encode_vcard_SUFFIX(Suffix, __TopXMLNS) | _acc].
-
-'encode_vcard_N_$prefix'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_N_$prefix'(Prefix, __TopXMLNS, _acc) ->
-    [encode_vcard_PREFIX(Prefix, __TopXMLNS) | _acc].
-
-'encode_vcard_N_$family'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_N_$family'(Family, __TopXMLNS, _acc) ->
-    [encode_vcard_FAMILY(Family, __TopXMLNS) | _acc].
-
-'encode_vcard_N_$given'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_vcard_N_$given'(Given, __TopXMLNS, _acc) ->
-    [encode_vcard_GIVEN(Given, __TopXMLNS) | _acc].
-
-decode_vcard_CONFIDENTIAL(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"CONFIDENTIAL">>, _attrs, _els}) ->
-    confidential.
-
-encode_vcard_CONFIDENTIAL(confidential, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"CONFIDENTIAL">>, _attrs, _els}.
-
-decode_vcard_PRIVATE(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"PRIVATE">>, _attrs, _els}) ->
-    private.
-
-encode_vcard_PRIVATE(private, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PRIVATE">>, _attrs, _els}.
-
-decode_vcard_PUBLIC(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"PUBLIC">>, _attrs, _els}) ->
-    public.
-
-encode_vcard_PUBLIC(public, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PUBLIC">>, _attrs, _els}.
-
-decode_vcard_EXTVAL(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"EXTVAL">>, _attrs, _els}) ->
-    Cdata = decode_vcard_EXTVAL_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_EXTVAL_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_EXTVAL_cdata(__TopXMLNS, Cdata);
-decode_vcard_EXTVAL_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_EXTVAL_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_EXTVAL_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_EXTVAL_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_EXTVAL(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_EXTVAL_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"EXTVAL">>, _attrs, _els}.
-
-decode_vcard_EXTVAL_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_EXTVAL_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_EXTVAL_cdata(<<>>, _acc) -> _acc;
-encode_vcard_EXTVAL_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_TYPE(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"TYPE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_TYPE_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_vcard_TYPE_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_vcard_TYPE_cdata(__TopXMLNS, Cdata);
-decode_vcard_TYPE_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_TYPE_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_vcard_TYPE_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_vcard_TYPE_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_vcard_TYPE(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_TYPE_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"TYPE">>, _attrs, _els}.
-
-decode_vcard_TYPE_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_TYPE_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_TYPE_cdata(<<>>, _acc) -> _acc;
-encode_vcard_TYPE_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_DESC(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"DESC">>, _attrs, _els}) ->
-    Cdata = decode_vcard_DESC_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_vcard_DESC_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_vcard_DESC_cdata(__TopXMLNS, Cdata);
-decode_vcard_DESC_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_DESC_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_vcard_DESC_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_vcard_DESC_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_vcard_DESC(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_DESC_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"DESC">>, _attrs, _els}.
-
-decode_vcard_DESC_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_DESC_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_DESC_cdata(<<>>, _acc) -> _acc;
-encode_vcard_DESC_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_URL(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"URL">>, _attrs, _els}) ->
-    Cdata = decode_vcard_URL_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_vcard_URL_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_vcard_URL_cdata(__TopXMLNS, Cdata);
-decode_vcard_URL_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_URL_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_vcard_URL_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_vcard_URL_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_vcard_URL(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_URL_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"URL">>, _attrs, _els}.
-
-decode_vcard_URL_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_URL_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_URL_cdata(<<>>, _acc) -> _acc;
-encode_vcard_URL_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_UID(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"UID">>, _attrs, _els}) ->
-    Cdata = decode_vcard_UID_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_vcard_UID_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_vcard_UID_cdata(__TopXMLNS, Cdata);
-decode_vcard_UID_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_UID_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_vcard_UID_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_vcard_UID_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_vcard_UID(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_UID_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"UID">>, _attrs, _els}.
-
-decode_vcard_UID_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_UID_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_UID_cdata(<<>>, _acc) -> _acc;
-encode_vcard_UID_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_SORT_STRING(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"SORT-STRING">>, _attrs, _els}) ->
-    Cdata = decode_vcard_SORT_STRING_els(__TopXMLNS,
-                                        __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_SORT_STRING_els(__TopXMLNS, __IgnoreEls,
-                            [], Cdata) ->
-    decode_vcard_SORT_STRING_cdata(__TopXMLNS, Cdata);
-decode_vcard_SORT_STRING_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_SORT_STRING_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<Cdata/binary, _data/binary>>);
-decode_vcard_SORT_STRING_els(__TopXMLNS, __IgnoreEls,
-                            [_ | _els], Cdata) ->
-    decode_vcard_SORT_STRING_els(__TopXMLNS, __IgnoreEls,
-                                _els, Cdata).
-
-encode_vcard_SORT_STRING(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_SORT_STRING_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"SORT-STRING">>, _attrs, _els}.
-
-decode_vcard_SORT_STRING_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_vcard_SORT_STRING_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_vcard_SORT_STRING_cdata(<<>>, _acc) -> _acc;
-encode_vcard_SORT_STRING_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_REV(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"REV">>, _attrs, _els}) ->
-    Cdata = decode_vcard_REV_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_vcard_REV_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_vcard_REV_cdata(__TopXMLNS, Cdata);
-decode_vcard_REV_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_REV_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_vcard_REV_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_vcard_REV_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_vcard_REV(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_REV_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"REV">>, _attrs, _els}.
-
-decode_vcard_REV_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_REV_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_REV_cdata(<<>>, _acc) -> _acc;
-encode_vcard_REV_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_PRODID(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"PRODID">>, _attrs, _els}) ->
-    Cdata = decode_vcard_PRODID_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_PRODID_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_PRODID_cdata(__TopXMLNS, Cdata);
-decode_vcard_PRODID_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_PRODID_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_PRODID_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_PRODID_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_PRODID(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_PRODID_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PRODID">>, _attrs, _els}.
-
-decode_vcard_PRODID_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_PRODID_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_PRODID_cdata(<<>>, _acc) -> _acc;
-encode_vcard_PRODID_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_NOTE(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"NOTE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_NOTE_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_vcard_NOTE_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_vcard_NOTE_cdata(__TopXMLNS, Cdata);
-decode_vcard_NOTE_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_NOTE_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_vcard_NOTE_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_vcard_NOTE_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_vcard_NOTE(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_NOTE_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"NOTE">>, _attrs, _els}.
-
-decode_vcard_NOTE_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_NOTE_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_NOTE_cdata(<<>>, _acc) -> _acc;
-encode_vcard_NOTE_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_KEYWORD(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"KEYWORD">>, _attrs, _els}) ->
-    Cdata = decode_vcard_KEYWORD_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_KEYWORD_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_vcard_KEYWORD_cdata(__TopXMLNS, Cdata);
-decode_vcard_KEYWORD_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_KEYWORD_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_vcard_KEYWORD_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_vcard_KEYWORD_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_vcard_KEYWORD(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_KEYWORD_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"KEYWORD">>, _attrs, _els}.
-
-decode_vcard_KEYWORD_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_KEYWORD_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_KEYWORD_cdata(<<>>, _acc) -> _acc;
-encode_vcard_KEYWORD_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_ROLE(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"ROLE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_ROLE_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_vcard_ROLE_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_vcard_ROLE_cdata(__TopXMLNS, Cdata);
-decode_vcard_ROLE_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_ROLE_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_vcard_ROLE_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_vcard_ROLE_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_vcard_ROLE(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_ROLE_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ROLE">>, _attrs, _els}.
-
-decode_vcard_ROLE_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_ROLE_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_ROLE_cdata(<<>>, _acc) -> _acc;
-encode_vcard_ROLE_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_TITLE(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"TITLE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_TITLE_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Cdata.
-
-decode_vcard_TITLE_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_vcard_TITLE_cdata(__TopXMLNS, Cdata);
-decode_vcard_TITLE_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_TITLE_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_vcard_TITLE_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_vcard_TITLE_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-encode_vcard_TITLE(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_TITLE_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"TITLE">>, _attrs, _els}.
-
-decode_vcard_TITLE_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_TITLE_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_TITLE_cdata(<<>>, _acc) -> _acc;
-encode_vcard_TITLE_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_TZ(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"TZ">>, _attrs, _els}) ->
-    Cdata = decode_vcard_TZ_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Cdata.
-
-decode_vcard_TZ_els(__TopXMLNS, __IgnoreEls, [],
-                   Cdata) ->
-    decode_vcard_TZ_cdata(__TopXMLNS, Cdata);
-decode_vcard_TZ_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_TZ_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Cdata/binary, _data/binary>>);
-decode_vcard_TZ_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Cdata) ->
-    decode_vcard_TZ_els(__TopXMLNS, __IgnoreEls, _els,
-                       Cdata).
-
-encode_vcard_TZ(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_TZ_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"TZ">>, _attrs, _els}.
-
-decode_vcard_TZ_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_TZ_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_TZ_cdata(<<>>, _acc) -> _acc;
-encode_vcard_TZ_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_MAILER(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"MAILER">>, _attrs, _els}) ->
-    Cdata = decode_vcard_MAILER_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_MAILER_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_MAILER_cdata(__TopXMLNS, Cdata);
-decode_vcard_MAILER_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_MAILER_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_MAILER_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_MAILER_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_MAILER(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_MAILER_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"MAILER">>, _attrs, _els}.
-
-decode_vcard_MAILER_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_MAILER_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_MAILER_cdata(<<>>, _acc) -> _acc;
-encode_vcard_MAILER_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_JABBERID(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"JABBERID">>, _attrs, _els}) ->
-    Cdata = decode_vcard_JABBERID_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_JABBERID_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_vcard_JABBERID_cdata(__TopXMLNS, Cdata);
-decode_vcard_JABBERID_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_JABBERID_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_vcard_JABBERID_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_vcard_JABBERID_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_vcard_JABBERID(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_JABBERID_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"JABBERID">>, _attrs, _els}.
-
-decode_vcard_JABBERID_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_JABBERID_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_JABBERID_cdata(<<>>, _acc) -> _acc;
-encode_vcard_JABBERID_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_BDAY(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"BDAY">>, _attrs, _els}) ->
-    Cdata = decode_vcard_BDAY_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_vcard_BDAY_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_vcard_BDAY_cdata(__TopXMLNS, Cdata);
-decode_vcard_BDAY_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_BDAY_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_vcard_BDAY_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_vcard_BDAY_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_vcard_BDAY(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_BDAY_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"BDAY">>, _attrs, _els}.
-
-decode_vcard_BDAY_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_BDAY_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_BDAY_cdata(<<>>, _acc) -> _acc;
-encode_vcard_BDAY_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_NICKNAME(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"NICKNAME">>, _attrs, _els}) ->
-    Cdata = decode_vcard_NICKNAME_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_NICKNAME_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_vcard_NICKNAME_cdata(__TopXMLNS, Cdata);
-decode_vcard_NICKNAME_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_NICKNAME_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_vcard_NICKNAME_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_vcard_NICKNAME_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_vcard_NICKNAME(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_NICKNAME_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"NICKNAME">>, _attrs, _els}.
-
-decode_vcard_NICKNAME_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_NICKNAME_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_NICKNAME_cdata(<<>>, _acc) -> _acc;
-encode_vcard_NICKNAME_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_FN(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"FN">>, _attrs, _els}) ->
-    Cdata = decode_vcard_FN_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Cdata.
-
-decode_vcard_FN_els(__TopXMLNS, __IgnoreEls, [],
-                   Cdata) ->
-    decode_vcard_FN_cdata(__TopXMLNS, Cdata);
-decode_vcard_FN_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_FN_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Cdata/binary, _data/binary>>);
-decode_vcard_FN_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Cdata) ->
-    decode_vcard_FN_els(__TopXMLNS, __IgnoreEls, _els,
-                       Cdata).
-
-encode_vcard_FN(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_FN_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"FN">>, _attrs, _els}.
-
-decode_vcard_FN_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_FN_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_FN_cdata(<<>>, _acc) -> _acc;
-encode_vcard_FN_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_VERSION(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"VERSION">>, _attrs, _els}) ->
-    Cdata = decode_vcard_VERSION_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_VERSION_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_vcard_VERSION_cdata(__TopXMLNS, Cdata);
-decode_vcard_VERSION_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_VERSION_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_vcard_VERSION_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_vcard_VERSION_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_vcard_VERSION(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_VERSION_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"VERSION">>, _attrs, _els}.
-
-decode_vcard_VERSION_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_VERSION_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_VERSION_cdata(<<>>, _acc) -> _acc;
-encode_vcard_VERSION_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_CRED(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"CRED">>, _attrs, _els}) ->
-    Cdata = decode_vcard_CRED_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_vcard_CRED_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_vcard_CRED_cdata(__TopXMLNS, Cdata);
-decode_vcard_CRED_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_CRED_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_vcard_CRED_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_vcard_CRED_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_vcard_CRED(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_CRED_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"CRED">>, _attrs, _els}.
-
-decode_vcard_CRED_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_CRED_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_CRED_cdata(<<>>, _acc) -> _acc;
-encode_vcard_CRED_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_PHONETIC(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"PHONETIC">>, _attrs, _els}) ->
-    Cdata = decode_vcard_PHONETIC_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_PHONETIC_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_vcard_PHONETIC_cdata(__TopXMLNS, Cdata);
-decode_vcard_PHONETIC_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_PHONETIC_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_vcard_PHONETIC_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_vcard_PHONETIC_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_vcard_PHONETIC(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_PHONETIC_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PHONETIC">>, _attrs, _els}.
-
-decode_vcard_PHONETIC_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_PHONETIC_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_PHONETIC_cdata(<<>>, _acc) -> _acc;
-encode_vcard_PHONETIC_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_ORGUNIT(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"ORGUNIT">>, _attrs, _els}) ->
-    Cdata = decode_vcard_ORGUNIT_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_ORGUNIT_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_vcard_ORGUNIT_cdata(__TopXMLNS, Cdata);
-decode_vcard_ORGUNIT_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_ORGUNIT_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_vcard_ORGUNIT_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_vcard_ORGUNIT_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_vcard_ORGUNIT(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_ORGUNIT_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ORGUNIT">>, _attrs, _els}.
-
-decode_vcard_ORGUNIT_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_ORGUNIT_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_ORGUNIT_cdata(<<>>, _acc) -> _acc;
-encode_vcard_ORGUNIT_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_ORGNAME(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"ORGNAME">>, _attrs, _els}) ->
-    Cdata = decode_vcard_ORGNAME_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_ORGNAME_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_vcard_ORGNAME_cdata(__TopXMLNS, Cdata);
-decode_vcard_ORGNAME_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_ORGNAME_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_vcard_ORGNAME_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_vcard_ORGNAME_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_vcard_ORGNAME(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_ORGNAME_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ORGNAME">>, _attrs, _els}.
-
-decode_vcard_ORGNAME_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_ORGNAME_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_ORGNAME_cdata(<<>>, _acc) -> _acc;
-encode_vcard_ORGNAME_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_LON(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"LON">>, _attrs, _els}) ->
-    Cdata = decode_vcard_LON_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_vcard_LON_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_vcard_LON_cdata(__TopXMLNS, Cdata);
-decode_vcard_LON_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_LON_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_vcard_LON_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_vcard_LON_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_vcard_LON(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_LON_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"LON">>, _attrs, _els}.
-
-decode_vcard_LON_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_LON_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_LON_cdata(<<>>, _acc) -> _acc;
-encode_vcard_LON_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_LAT(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"LAT">>, _attrs, _els}) ->
-    Cdata = decode_vcard_LAT_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Cdata.
-
-decode_vcard_LAT_els(__TopXMLNS, __IgnoreEls, [],
-                    Cdata) ->
-    decode_vcard_LAT_cdata(__TopXMLNS, Cdata);
-decode_vcard_LAT_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_LAT_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Cdata/binary, _data/binary>>);
-decode_vcard_LAT_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Cdata) ->
-    decode_vcard_LAT_els(__TopXMLNS, __IgnoreEls, _els,
-                        Cdata).
-
-encode_vcard_LAT(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_LAT_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"LAT">>, _attrs, _els}.
-
-decode_vcard_LAT_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_LAT_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_LAT_cdata(<<>>, _acc) -> _acc;
-encode_vcard_LAT_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_USERID(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"USERID">>, _attrs, _els}) ->
-    Cdata = decode_vcard_USERID_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_USERID_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_USERID_cdata(__TopXMLNS, Cdata);
-decode_vcard_USERID_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_USERID_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_USERID_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_USERID_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_USERID(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_USERID_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"USERID">>, _attrs, _els}.
-
-decode_vcard_USERID_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_USERID_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_USERID_cdata(<<>>, _acc) -> _acc;
-encode_vcard_USERID_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_NUMBER(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"NUMBER">>, _attrs, _els}) ->
-    Cdata = decode_vcard_NUMBER_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_NUMBER_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_NUMBER_cdata(__TopXMLNS, Cdata);
-decode_vcard_NUMBER_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_NUMBER_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_NUMBER_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_NUMBER_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_NUMBER(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_NUMBER_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"NUMBER">>, _attrs, _els}.
-
-decode_vcard_NUMBER_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_NUMBER_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_NUMBER_cdata(<<>>, _acc) -> _acc;
-encode_vcard_NUMBER_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_LINE(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"LINE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_LINE_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_vcard_LINE_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_vcard_LINE_cdata(__TopXMLNS, Cdata);
-decode_vcard_LINE_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_LINE_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_vcard_LINE_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_vcard_LINE_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_vcard_LINE(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_LINE_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"LINE">>, _attrs, _els}.
-
-decode_vcard_LINE_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_LINE_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_LINE_cdata(<<>>, _acc) -> _acc;
-encode_vcard_LINE_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_CTRY(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"CTRY">>, _attrs, _els}) ->
-    Cdata = decode_vcard_CTRY_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_vcard_CTRY_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_vcard_CTRY_cdata(__TopXMLNS, Cdata);
-decode_vcard_CTRY_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_CTRY_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_vcard_CTRY_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_vcard_CTRY_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_vcard_CTRY(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_CTRY_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"CTRY">>, _attrs, _els}.
-
-decode_vcard_CTRY_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_CTRY_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_CTRY_cdata(<<>>, _acc) -> _acc;
-encode_vcard_CTRY_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_PCODE(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"PCODE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_PCODE_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Cdata.
-
-decode_vcard_PCODE_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_vcard_PCODE_cdata(__TopXMLNS, Cdata);
-decode_vcard_PCODE_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_PCODE_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_vcard_PCODE_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_vcard_PCODE_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-encode_vcard_PCODE(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_PCODE_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PCODE">>, _attrs, _els}.
-
-decode_vcard_PCODE_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_PCODE_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_PCODE_cdata(<<>>, _acc) -> _acc;
-encode_vcard_PCODE_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_REGION(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"REGION">>, _attrs, _els}) ->
-    Cdata = decode_vcard_REGION_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_REGION_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_REGION_cdata(__TopXMLNS, Cdata);
-decode_vcard_REGION_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_REGION_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_REGION_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_REGION_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_REGION(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_REGION_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"REGION">>, _attrs, _els}.
-
-decode_vcard_REGION_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_REGION_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_REGION_cdata(<<>>, _acc) -> _acc;
-encode_vcard_REGION_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_LOCALITY(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"LOCALITY">>, _attrs, _els}) ->
-    Cdata = decode_vcard_LOCALITY_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_vcard_LOCALITY_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_vcard_LOCALITY_cdata(__TopXMLNS, Cdata);
-decode_vcard_LOCALITY_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_LOCALITY_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_vcard_LOCALITY_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_vcard_LOCALITY_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_vcard_LOCALITY(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_LOCALITY_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"LOCALITY">>, _attrs, _els}.
-
-decode_vcard_LOCALITY_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_LOCALITY_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_LOCALITY_cdata(<<>>, _acc) -> _acc;
-encode_vcard_LOCALITY_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_STREET(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"STREET">>, _attrs, _els}) ->
-    Cdata = decode_vcard_STREET_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_STREET_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_STREET_cdata(__TopXMLNS, Cdata);
-decode_vcard_STREET_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_STREET_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_STREET_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_STREET_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_STREET(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_STREET_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"STREET">>, _attrs, _els}.
-
-decode_vcard_STREET_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_STREET_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_STREET_cdata(<<>>, _acc) -> _acc;
-encode_vcard_STREET_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_EXTADD(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"EXTADD">>, _attrs, _els}) ->
-    Cdata = decode_vcard_EXTADD_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_EXTADD_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_EXTADD_cdata(__TopXMLNS, Cdata);
-decode_vcard_EXTADD_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_EXTADD_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_EXTADD_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_EXTADD_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_EXTADD(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_EXTADD_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"EXTADD">>, _attrs, _els}.
-
-decode_vcard_EXTADD_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_EXTADD_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_EXTADD_cdata(<<>>, _acc) -> _acc;
-encode_vcard_EXTADD_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_POBOX(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"POBOX">>, _attrs, _els}) ->
-    Cdata = decode_vcard_POBOX_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Cdata.
-
-decode_vcard_POBOX_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_vcard_POBOX_cdata(__TopXMLNS, Cdata);
-decode_vcard_POBOX_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_POBOX_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_vcard_POBOX_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_vcard_POBOX_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-encode_vcard_POBOX(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_POBOX_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"POBOX">>, _attrs, _els}.
-
-decode_vcard_POBOX_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_POBOX_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_POBOX_cdata(<<>>, _acc) -> _acc;
-encode_vcard_POBOX_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_SUFFIX(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"SUFFIX">>, _attrs, _els}) ->
-    Cdata = decode_vcard_SUFFIX_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_SUFFIX_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_SUFFIX_cdata(__TopXMLNS, Cdata);
-decode_vcard_SUFFIX_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_SUFFIX_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_SUFFIX_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_SUFFIX_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_SUFFIX(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_SUFFIX_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"SUFFIX">>, _attrs, _els}.
-
-decode_vcard_SUFFIX_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_SUFFIX_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_SUFFIX_cdata(<<>>, _acc) -> _acc;
-encode_vcard_SUFFIX_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_PREFIX(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"PREFIX">>, _attrs, _els}) ->
-    Cdata = decode_vcard_PREFIX_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_PREFIX_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_PREFIX_cdata(__TopXMLNS, Cdata);
-decode_vcard_PREFIX_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_PREFIX_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_PREFIX_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_PREFIX_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_PREFIX(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_PREFIX_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PREFIX">>, _attrs, _els}.
-
-decode_vcard_PREFIX_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_PREFIX_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_PREFIX_cdata(<<>>, _acc) -> _acc;
-encode_vcard_PREFIX_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_MIDDLE(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"MIDDLE">>, _attrs, _els}) ->
-    Cdata = decode_vcard_MIDDLE_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_MIDDLE_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_MIDDLE_cdata(__TopXMLNS, Cdata);
-decode_vcard_MIDDLE_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_MIDDLE_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_MIDDLE_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_MIDDLE_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_MIDDLE(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_MIDDLE_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"MIDDLE">>, _attrs, _els}.
-
-decode_vcard_MIDDLE_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_MIDDLE_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_MIDDLE_cdata(<<>>, _acc) -> _acc;
-encode_vcard_MIDDLE_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_GIVEN(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"GIVEN">>, _attrs, _els}) ->
-    Cdata = decode_vcard_GIVEN_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Cdata.
-
-decode_vcard_GIVEN_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_vcard_GIVEN_cdata(__TopXMLNS, Cdata);
-decode_vcard_GIVEN_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_GIVEN_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_vcard_GIVEN_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_vcard_GIVEN_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-encode_vcard_GIVEN(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_GIVEN_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"GIVEN">>, _attrs, _els}.
-
-decode_vcard_GIVEN_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_GIVEN_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_GIVEN_cdata(<<>>, _acc) -> _acc;
-encode_vcard_GIVEN_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_FAMILY(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"FAMILY">>, _attrs, _els}) ->
-    Cdata = decode_vcard_FAMILY_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_vcard_FAMILY_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_vcard_FAMILY_cdata(__TopXMLNS, Cdata);
-decode_vcard_FAMILY_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_vcard_FAMILY_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_vcard_FAMILY_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_vcard_FAMILY_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_vcard_FAMILY(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = encode_vcard_FAMILY_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"FAMILY">>, _attrs, _els}.
-
-decode_vcard_FAMILY_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_vcard_FAMILY_cdata(__TopXMLNS, _val) -> _val.
-
-encode_vcard_FAMILY_cdata(<<>>, _acc) -> _acc;
-encode_vcard_FAMILY_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_vcard_X400(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"X400">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_X400(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"X400">>, _attrs, _els}.
-
-decode_vcard_INTERNET(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"INTERNET">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_INTERNET(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"INTERNET">>, _attrs, _els}.
-
-decode_vcard_PREF(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"PREF">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_PREF(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PREF">>, _attrs, _els}.
-
-decode_vcard_INTL(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"INTL">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_INTL(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"INTL">>, _attrs, _els}.
-
-decode_vcard_DOM(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"DOM">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_DOM(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"DOM">>, _attrs, _els}.
-
-decode_vcard_PARCEL(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"PARCEL">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_PARCEL(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PARCEL">>, _attrs, _els}.
-
-decode_vcard_POSTAL(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"POSTAL">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_POSTAL(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"POSTAL">>, _attrs, _els}.
-
-decode_vcard_PCS(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"PCS">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_PCS(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PCS">>, _attrs, _els}.
-
-decode_vcard_ISDN(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"ISDN">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_ISDN(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ISDN">>, _attrs, _els}.
-
-decode_vcard_MODEM(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"MODEM">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_MODEM(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"MODEM">>, _attrs, _els}.
-
-decode_vcard_BBS(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"BBS">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_BBS(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"BBS">>, _attrs, _els}.
-
-decode_vcard_VIDEO(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"VIDEO">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_VIDEO(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"VIDEO">>, _attrs, _els}.
-
-decode_vcard_CELL(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"CELL">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_CELL(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"CELL">>, _attrs, _els}.
-
-decode_vcard_MSG(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"MSG">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_MSG(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"MSG">>, _attrs, _els}.
-
-decode_vcard_PAGER(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"PAGER">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_PAGER(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"PAGER">>, _attrs, _els}.
-
-decode_vcard_FAX(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"FAX">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_FAX(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"FAX">>, _attrs, _els}.
-
-decode_vcard_VOICE(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"VOICE">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_VOICE(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"VOICE">>, _attrs, _els}.
-
-decode_vcard_WORK(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"WORK">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_WORK(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"WORK">>, _attrs, _els}.
-
-decode_vcard_HOME(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"HOME">>, _attrs, _els}) ->
-    true.
-
-encode_vcard_HOME(true, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"vcard-temp">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"HOME">>, _attrs, _els}.
-
-decode_stream_error(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"stream:error">>, _attrs, _els}) ->
-    {Text, Reason} = decode_stream_error_els(__TopXMLNS,
-                                            __IgnoreEls, _els, undefined,
-                                            undefined),
-    {stream_error, Reason, Text}.
-
-decode_stream_error_els(__TopXMLNS, __IgnoreEls, [],
-                       Text, Reason) ->
-    {Text, Reason};
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"text">>, _attrs, _} = _el | _els], Text,
-                       Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 decode_stream_error_text(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                          __IgnoreEls, _el),
-                                 Reason);
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"bad-format">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_bad_format(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                __IgnoreEls,
-                                                                _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"bad-namespace-prefix">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_bad_namespace_prefix(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                          __IgnoreEls,
-                                                                          _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"conflict">>, _attrs, _} = _el | _els], Text,
-                       Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_conflict(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                              __IgnoreEls,
-                                                              _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"connection-timeout">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_connection_timeout(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                        __IgnoreEls,
-                                                                        _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"host-gone">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_host_gone(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                               __IgnoreEls,
-                                                               _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"host-unknown">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_host_unknown(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                  __IgnoreEls,
-                                                                  _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"improper-addressing">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_improper_addressing(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                         __IgnoreEls,
-                                                                         _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"internal-server-error">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_internal_server_error(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                           __IgnoreEls,
-                                                                           _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"invalid-from">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_invalid_from(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                  __IgnoreEls,
-                                                                  _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"invalid-id">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_invalid_id(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                __IgnoreEls,
-                                                                _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"invalid-namespace">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_invalid_namespace(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                       __IgnoreEls,
-                                                                       _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"invalid-xml">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_invalid_xml(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                 __IgnoreEls,
-                                                                 _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"not-authorized">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                    __IgnoreEls,
-                                                                    _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"not-well-formed">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_not_well_formed(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                     __IgnoreEls,
-                                                                     _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"policy-violation">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_policy_violation(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                      __IgnoreEls,
-                                                                      _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"remote-connection-failed">>, _attrs, _} =
-                            _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_remote_connection_failed(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                              __IgnoreEls,
-                                                                              _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"reset">>, _attrs, _} = _el | _els], Text,
-                       Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_reset(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                           __IgnoreEls, _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"resource-constraint">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_resource_constraint(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                         __IgnoreEls,
-                                                                         _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"restricted-xml">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_restricted_xml(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                    __IgnoreEls,
-                                                                    _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"see-other-host">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_see_other_host(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                    __IgnoreEls,
-                                                                    _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"system-shutdown">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_system_shutdown(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                     __IgnoreEls,
-                                                                     _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"undefined-condition">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_undefined_condition(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                         __IgnoreEls,
-                                                                         _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"unsupported-encoding">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_unsupported_encoding(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                          __IgnoreEls,
-                                                                          _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"unsupported-stanza-type">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_unsupported_stanza_type(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                             __IgnoreEls,
-                                                                             _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"unsupported-version">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-streams">> ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_stream_error_unsupported_version(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                                                                         __IgnoreEls,
-                                                                         _el));
-      _ ->
-         decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_stream_error_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Text, Reason) ->
-    decode_stream_error_els(__TopXMLNS, __IgnoreEls, _els,
-                           Text, Reason).
-
-encode_stream_error({stream_error, Reason, Text},
-                   __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = lists:reverse('encode_stream_error_$text'(Text,
-                                                    __NewTopXMLNS,
-                                                    'encode_stream_error_$reason'(Reason,
-                                                                                  __NewTopXMLNS,
-                                                                                  []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"stream:error">>, _attrs, _els}.
-
-'encode_stream_error_$text'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_stream_error_$text'(Text, __TopXMLNS, _acc) ->
-    [encode_stream_error_text(Text, __TopXMLNS) | _acc].
-
-'encode_stream_error_$reason'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_stream_error_$reason'('bad-format' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_bad_format(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('bad-namespace-prefix' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_bad_namespace_prefix(Reason,
-                                             __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'(conflict = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_conflict(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('connection-timeout' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_connection_timeout(Reason,
-                                           __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('host-gone' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_host_gone(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('host-unknown' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_host_unknown(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('improper-addressing' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_improper_addressing(Reason,
-                                            __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('internal-server-error' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_internal_server_error(Reason,
-                                              __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('invalid-from' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_invalid_from(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('invalid-id' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_invalid_id(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('invalid-namespace' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_invalid_namespace(Reason,
-                                          __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('invalid-xml' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_invalid_xml(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('not-authorized' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_not_authorized(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('not-well-formed' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_not_well_formed(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('policy-violation' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_policy_violation(Reason,
-                                         __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('remote-connection-failed' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_remote_connection_failed(Reason,
-                                                 __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'(reset = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_reset(Reason, __TopXMLNS) | _acc];
-'encode_stream_error_$reason'('resource-constraint' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_resource_constraint(Reason,
-                                            __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('restricted-xml' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_restricted_xml(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'({'see-other-host', _} =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_see_other_host(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('system-shutdown' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_system_shutdown(Reason, __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('undefined-condition' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_undefined_condition(Reason,
-                                            __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('unsupported-encoding' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_unsupported_encoding(Reason,
-                                             __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('unsupported-stanza-type' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_unsupported_stanza_type(Reason,
-                                                __TopXMLNS)
-     | _acc];
-'encode_stream_error_$reason'('unsupported-version' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_stream_error_unsupported_version(Reason,
-                                            __TopXMLNS)
-     | _acc].
-
-decode_stream_error_unsupported_version(__TopXMLNS,
-                                       __IgnoreEls,
-                                       {xmlel, <<"unsupported-version">>,
-                                        _attrs, _els}) ->
-    'unsupported-version'.
-
-encode_stream_error_unsupported_version('unsupported-version',
-                                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"unsupported-version">>, _attrs, _els}.
-
-decode_stream_error_unsupported_stanza_type(__TopXMLNS,
-                                           __IgnoreEls,
-                                           {xmlel,
-                                            <<"unsupported-stanza-type">>,
-                                            _attrs, _els}) ->
-    'unsupported-stanza-type'.
-
-encode_stream_error_unsupported_stanza_type('unsupported-stanza-type',
-                                           __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"unsupported-stanza-type">>, _attrs, _els}.
-
-decode_stream_error_unsupported_encoding(__TopXMLNS,
-                                        __IgnoreEls,
-                                        {xmlel, <<"unsupported-encoding">>,
-                                         _attrs, _els}) ->
-    'unsupported-encoding'.
-
-encode_stream_error_unsupported_encoding('unsupported-encoding',
-                                        __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"unsupported-encoding">>, _attrs, _els}.
-
-decode_stream_error_undefined_condition(__TopXMLNS,
-                                       __IgnoreEls,
-                                       {xmlel, <<"undefined-condition">>,
-                                        _attrs, _els}) ->
-    'undefined-condition'.
-
-encode_stream_error_undefined_condition('undefined-condition',
-                                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"undefined-condition">>, _attrs, _els}.
-
-decode_stream_error_system_shutdown(__TopXMLNS,
-                                   __IgnoreEls,
-                                   {xmlel, <<"system-shutdown">>, _attrs,
-                                    _els}) ->
-    'system-shutdown'.
-
-encode_stream_error_system_shutdown('system-shutdown',
-                                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"system-shutdown">>, _attrs, _els}.
-
-decode_stream_error_see_other_host(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"see-other-host">>, _attrs,
-                                   _els}) ->
-    Host =
-       decode_stream_error_see_other_host_els(__TopXMLNS,
-                                              __IgnoreEls, _els, <<>>),
-    {'see-other-host', Host}.
-
-decode_stream_error_see_other_host_els(__TopXMLNS,
-                                      __IgnoreEls, [], Host) ->
-    decode_stream_error_see_other_host_cdata(__TopXMLNS,
-                                            Host);
-decode_stream_error_see_other_host_els(__TopXMLNS,
-                                      __IgnoreEls, [{xmlcdata, _data} | _els],
-                                      Host) ->
-    decode_stream_error_see_other_host_els(__TopXMLNS,
-                                          __IgnoreEls, _els,
-                                          <<Host/binary, _data/binary>>);
-decode_stream_error_see_other_host_els(__TopXMLNS,
-                                      __IgnoreEls, [_ | _els], Host) ->
-    decode_stream_error_see_other_host_els(__TopXMLNS,
-                                          __IgnoreEls, _els, Host).
-
-encode_stream_error_see_other_host({'see-other-host',
-                                   Host},
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = encode_stream_error_see_other_host_cdata(Host,
-                                                   []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"see-other-host">>, _attrs, _els}.
-
-decode_stream_error_see_other_host_cdata(__TopXMLNS,
-                                        <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"see-other-host">>,
-                  __TopXMLNS}});
-decode_stream_error_see_other_host_cdata(__TopXMLNS,
-                                        _val) ->
-    case catch dec_host_port(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"see-other-host">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_stream_error_see_other_host_cdata(_val, _acc) ->
-    [{xmlcdata, enc_host_port(_val)} | _acc].
-
-decode_stream_error_restricted_xml(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"restricted-xml">>, _attrs,
-                                   _els}) ->
-    'restricted-xml'.
-
-encode_stream_error_restricted_xml('restricted-xml',
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"restricted-xml">>, _attrs, _els}.
-
-decode_stream_error_resource_constraint(__TopXMLNS,
-                                       __IgnoreEls,
-                                       {xmlel, <<"resource-constraint">>,
-                                        _attrs, _els}) ->
-    'resource-constraint'.
-
-encode_stream_error_resource_constraint('resource-constraint',
-                                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"resource-constraint">>, _attrs, _els}.
-
-decode_stream_error_reset(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"reset">>, _attrs, _els}) ->
-    reset.
-
-encode_stream_error_reset(reset, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"reset">>, _attrs, _els}.
-
-decode_stream_error_remote_connection_failed(__TopXMLNS,
-                                            __IgnoreEls,
-                                            {xmlel,
-                                             <<"remote-connection-failed">>,
-                                             _attrs, _els}) ->
-    'remote-connection-failed'.
-
-encode_stream_error_remote_connection_failed('remote-connection-failed',
-                                            __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"remote-connection-failed">>, _attrs, _els}.
-
-decode_stream_error_policy_violation(__TopXMLNS,
-                                    __IgnoreEls,
-                                    {xmlel, <<"policy-violation">>, _attrs,
-                                     _els}) ->
-    'policy-violation'.
-
-encode_stream_error_policy_violation('policy-violation',
-                                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"policy-violation">>, _attrs, _els}.
-
-decode_stream_error_not_well_formed(__TopXMLNS,
-                                   __IgnoreEls,
-                                   {xmlel, <<"not-well-formed">>, _attrs,
-                                    _els}) ->
-    'not-well-formed'.
-
-encode_stream_error_not_well_formed('not-well-formed',
-                                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"not-well-formed">>, _attrs, _els}.
-
-decode_stream_error_not_authorized(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"not-authorized">>, _attrs,
-                                   _els}) ->
-    'not-authorized'.
-
-encode_stream_error_not_authorized('not-authorized',
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"not-authorized">>, _attrs, _els}.
-
-decode_stream_error_invalid_xml(__TopXMLNS, __IgnoreEls,
-                               {xmlel, <<"invalid-xml">>, _attrs, _els}) ->
-    'invalid-xml'.
-
-encode_stream_error_invalid_xml('invalid-xml',
-                               __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-xml">>, _attrs, _els}.
-
-decode_stream_error_invalid_namespace(__TopXMLNS,
-                                     __IgnoreEls,
-                                     {xmlel, <<"invalid-namespace">>, _attrs,
-                                      _els}) ->
-    'invalid-namespace'.
-
-encode_stream_error_invalid_namespace('invalid-namespace',
-                                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-namespace">>, _attrs, _els}.
-
-decode_stream_error_invalid_id(__TopXMLNS, __IgnoreEls,
-                              {xmlel, <<"invalid-id">>, _attrs, _els}) ->
-    'invalid-id'.
-
-encode_stream_error_invalid_id('invalid-id',
-                              __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-id">>, _attrs, _els}.
-
-decode_stream_error_invalid_from(__TopXMLNS,
-                                __IgnoreEls,
-                                {xmlel, <<"invalid-from">>, _attrs, _els}) ->
-    'invalid-from'.
-
-encode_stream_error_invalid_from('invalid-from',
-                                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-from">>, _attrs, _els}.
-
-decode_stream_error_internal_server_error(__TopXMLNS,
-                                         __IgnoreEls,
-                                         {xmlel, <<"internal-server-error">>,
-                                          _attrs, _els}) ->
-    'internal-server-error'.
-
-encode_stream_error_internal_server_error('internal-server-error',
-                                         __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"internal-server-error">>, _attrs, _els}.
-
-decode_stream_error_improper_addressing(__TopXMLNS,
-                                       __IgnoreEls,
-                                       {xmlel, <<"improper-addressing">>,
-                                        _attrs, _els}) ->
-    'improper-addressing'.
-
-encode_stream_error_improper_addressing('improper-addressing',
-                                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"improper-addressing">>, _attrs, _els}.
-
-decode_stream_error_host_unknown(__TopXMLNS,
-                                __IgnoreEls,
-                                {xmlel, <<"host-unknown">>, _attrs, _els}) ->
-    'host-unknown'.
-
-encode_stream_error_host_unknown('host-unknown',
-                                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"host-unknown">>, _attrs, _els}.
-
-decode_stream_error_host_gone(__TopXMLNS, __IgnoreEls,
-                             {xmlel, <<"host-gone">>, _attrs, _els}) ->
-    'host-gone'.
-
-encode_stream_error_host_gone('host-gone',
-                             __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"host-gone">>, _attrs, _els}.
-
-decode_stream_error_connection_timeout(__TopXMLNS,
-                                      __IgnoreEls,
-                                      {xmlel, <<"connection-timeout">>, _attrs,
-                                       _els}) ->
-    'connection-timeout'.
-
-encode_stream_error_connection_timeout('connection-timeout',
-                                      __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"connection-timeout">>, _attrs, _els}.
-
-decode_stream_error_conflict(__TopXMLNS, __IgnoreEls,
-                            {xmlel, <<"conflict">>, _attrs, _els}) ->
-    conflict.
-
-encode_stream_error_conflict(conflict, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"conflict">>, _attrs, _els}.
-
-decode_stream_error_bad_namespace_prefix(__TopXMLNS,
-                                        __IgnoreEls,
-                                        {xmlel, <<"bad-namespace-prefix">>,
-                                         _attrs, _els}) ->
-    'bad-namespace-prefix'.
-
-encode_stream_error_bad_namespace_prefix('bad-namespace-prefix',
-                                        __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"bad-namespace-prefix">>, _attrs, _els}.
-
-decode_stream_error_bad_format(__TopXMLNS, __IgnoreEls,
-                              {xmlel, <<"bad-format">>, _attrs, _els}) ->
-    'bad-format'.
-
-encode_stream_error_bad_format('bad-format',
-                              __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"bad-format">>, _attrs, _els}.
-
-decode_stream_error_text(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"text">>, _attrs, _els}) ->
-    Data = decode_stream_error_text_els(__TopXMLNS,
-                                       __IgnoreEls, _els, <<>>),
-    Lang = decode_stream_error_text_attrs(__TopXMLNS,
-                                         _attrs, undefined),
-    {text, Lang, Data}.
-
-decode_stream_error_text_els(__TopXMLNS, __IgnoreEls,
-                            [], Data) ->
-    decode_stream_error_text_cdata(__TopXMLNS, Data);
-decode_stream_error_text_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlcdata, _data} | _els], Data) ->
-    decode_stream_error_text_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<Data/binary, _data/binary>>);
-decode_stream_error_text_els(__TopXMLNS, __IgnoreEls,
-                            [_ | _els], Data) ->
-    decode_stream_error_text_els(__TopXMLNS, __IgnoreEls,
-                                _els, Data).
-
-decode_stream_error_text_attrs(__TopXMLNS,
-                              [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
-    decode_stream_error_text_attrs(__TopXMLNS, _attrs,
-                                  _val);
-decode_stream_error_text_attrs(__TopXMLNS, [_ | _attrs],
-                              Lang) ->
-    decode_stream_error_text_attrs(__TopXMLNS, _attrs,
-                                  Lang);
-decode_stream_error_text_attrs(__TopXMLNS, [], Lang) ->
-    'decode_stream_error_text_attr_xml:lang'(__TopXMLNS,
-                                            Lang).
-
-encode_stream_error_text({text, Lang, Data},
-                        __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-streams">>,
-                        [], __TopXMLNS),
-    _els = encode_stream_error_text_cdata(Data, []),
-    _attrs = 'encode_stream_error_text_attr_xml:lang'(Lang,
-                                                     enc_xmlns_attrs(__NewTopXMLNS,
-                                                                     __TopXMLNS)),
-    {xmlel, <<"text">>, _attrs, _els}.
-
-'decode_stream_error_text_attr_xml:lang'(__TopXMLNS,
-                                        undefined) ->
-    <<>>;
-'decode_stream_error_text_attr_xml:lang'(__TopXMLNS,
-                                        _val) ->
-    _val.
-
-'encode_stream_error_text_attr_xml:lang'(<<>>, _acc) ->
-    _acc;
-'encode_stream_error_text_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_stream_error_text_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_stream_error_text_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_stream_error_text_cdata(<<>>, _acc) -> _acc;
-encode_stream_error_text_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_time(__TopXMLNS, __IgnoreEls,
-           {xmlel, <<"time">>, _attrs, _els}) ->
-    {Utc, Tzo} = decode_time_els(__TopXMLNS, __IgnoreEls,
-                                _els, undefined, undefined),
-    {time, Tzo, Utc}.
-
-decode_time_els(__TopXMLNS, __IgnoreEls, [], Utc,
-               Tzo) ->
-    {Utc, Tzo};
-decode_time_els(__TopXMLNS, __IgnoreEls,
-               [{xmlel, <<"tzo">>, _attrs, _} = _el | _els], Utc,
-               Tzo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:time">> ->
-         decode_time_els(__TopXMLNS, __IgnoreEls, _els, Utc,
-                         decode_time_tzo(__TopXMLNS, __IgnoreEls, _el));
-      <<"urn:xmpp:time">> ->
-         decode_time_els(__TopXMLNS, __IgnoreEls, _els, Utc,
-                         decode_time_tzo(<<"urn:xmpp:time">>, __IgnoreEls,
-                                         _el));
-      _ ->
-         decode_time_els(__TopXMLNS, __IgnoreEls, _els, Utc, Tzo)
-    end;
-decode_time_els(__TopXMLNS, __IgnoreEls,
-               [{xmlel, <<"utc">>, _attrs, _} = _el | _els], Utc,
-               Tzo) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:time">> ->
-         decode_time_els(__TopXMLNS, __IgnoreEls, _els,
-                         decode_time_utc(__TopXMLNS, __IgnoreEls, _el), Tzo);
-      <<"urn:xmpp:time">> ->
-         decode_time_els(__TopXMLNS, __IgnoreEls, _els,
-                         decode_time_utc(<<"urn:xmpp:time">>, __IgnoreEls,
-                                         _el),
-                         Tzo);
-      _ ->
-         decode_time_els(__TopXMLNS, __IgnoreEls, _els, Utc, Tzo)
-    end;
-decode_time_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-               Utc, Tzo) ->
-    decode_time_els(__TopXMLNS, __IgnoreEls, _els, Utc,
-                   Tzo).
-
-encode_time({time, Tzo, Utc}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:time">>,
-                                    [], __TopXMLNS),
-    _els = lists:reverse('encode_time_$utc'(Utc,
-                                           __NewTopXMLNS,
-                                           'encode_time_$tzo'(Tzo,
-                                                              __NewTopXMLNS,
-                                                              []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"time">>, _attrs, _els}.
-
-'encode_time_$utc'(undefined, __TopXMLNS, _acc) -> _acc;
-'encode_time_$utc'(Utc, __TopXMLNS, _acc) ->
-    [encode_time_utc(Utc, __TopXMLNS) | _acc].
-
-'encode_time_$tzo'(undefined, __TopXMLNS, _acc) -> _acc;
-'encode_time_$tzo'(Tzo, __TopXMLNS, _acc) ->
-    [encode_time_tzo(Tzo, __TopXMLNS) | _acc].
-
-decode_time_tzo(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"tzo">>, _attrs, _els}) ->
-    Cdata = decode_time_tzo_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Cdata.
-
-decode_time_tzo_els(__TopXMLNS, __IgnoreEls, [],
-                   Cdata) ->
-    decode_time_tzo_cdata(__TopXMLNS, Cdata);
-decode_time_tzo_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Cdata) ->
-    decode_time_tzo_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Cdata/binary, _data/binary>>);
-decode_time_tzo_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Cdata) ->
-    decode_time_tzo_els(__TopXMLNS, __IgnoreEls, _els,
-                       Cdata).
-
-encode_time_tzo(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:time">>,
-                                    [], __TopXMLNS),
-    _els = encode_time_tzo_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"tzo">>, _attrs, _els}.
-
-decode_time_tzo_cdata(__TopXMLNS, <<>>) -> undefined;
-decode_time_tzo_cdata(__TopXMLNS, _val) ->
-    case catch dec_tzo(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"tzo">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_time_tzo_cdata(undefined, _acc) -> _acc;
-encode_time_tzo_cdata(_val, _acc) ->
-    [{xmlcdata, enc_tzo(_val)} | _acc].
-
-decode_time_utc(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"utc">>, _attrs, _els}) ->
-    Cdata = decode_time_utc_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Cdata.
-
-decode_time_utc_els(__TopXMLNS, __IgnoreEls, [],
-                   Cdata) ->
-    decode_time_utc_cdata(__TopXMLNS, Cdata);
-decode_time_utc_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Cdata) ->
-    decode_time_utc_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Cdata/binary, _data/binary>>);
-decode_time_utc_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Cdata) ->
-    decode_time_utc_els(__TopXMLNS, __IgnoreEls, _els,
-                       Cdata).
-
-encode_time_utc(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:time">>,
-                                    [], __TopXMLNS),
-    _els = encode_time_utc_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"utc">>, _attrs, _els}.
-
-decode_time_utc_cdata(__TopXMLNS, <<>>) -> undefined;
-decode_time_utc_cdata(__TopXMLNS, _val) ->
-    case catch dec_utc(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"utc">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_time_utc_cdata(undefined, _acc) -> _acc;
-encode_time_utc_cdata(_val, _acc) ->
-    [{xmlcdata, enc_utc(_val)} | _acc].
-
-decode_ping(__TopXMLNS, __IgnoreEls,
-           {xmlel, <<"ping">>, _attrs, _els}) ->
-    {ping}.
-
-encode_ping({ping}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"urn:xmpp:ping">>,
-                                    [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ping">>, _attrs, _els}.
-
-decode_session(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"session">>, _attrs, _els}) ->
-    Optional = decode_session_els(__TopXMLNS, __IgnoreEls,
-                                 _els, false),
-    {xmpp_session, Optional}.
-
-decode_session_els(__TopXMLNS, __IgnoreEls, [],
-                  Optional) ->
-    Optional;
-decode_session_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"optional">>, _attrs, _} = _el | _els],
-                  Optional) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-session">> ->
-         decode_session_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_session_optional(__TopXMLNS, __IgnoreEls,
-                                                    _el));
-      <<"urn:ietf:params:xml:ns:xmpp-session">> ->
-         decode_session_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_session_optional(<<"urn:ietf:params:xml:ns:xmpp-session">>,
-                                                    __IgnoreEls, _el));
-      _ ->
-         decode_session_els(__TopXMLNS, __IgnoreEls, _els,
-                            Optional)
-    end;
-decode_session_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Optional) ->
-    decode_session_els(__TopXMLNS, __IgnoreEls, _els,
-                      Optional).
-
-encode_session({xmpp_session, Optional}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-session">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_session_$optional'(Optional,
-                                                __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"session">>, _attrs, _els}.
-
-'encode_session_$optional'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_session_$optional'(Optional, __TopXMLNS,
-                          _acc) ->
-    [encode_session_optional(Optional, __TopXMLNS) | _acc].
-
-decode_session_optional(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"optional">>, _attrs, _els}) ->
-    true.
-
-encode_session_optional(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-session">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"optional">>, _attrs, _els}.
-
-decode_register(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"query">>, _attrs, _els}) ->
-    {Zip, Xdata, Misc, Address, Instructions, Text, Last,
-     First, Password, Registered, Date, Phone, State, Name,
-     Username, Remove, Key, City, Nick, Url, Email, __Els} =
-       decode_register_els(__TopXMLNS, __IgnoreEls, _els,
-                           undefined, undefined, undefined, undefined,
-                           undefined, undefined, undefined, undefined,
-                           undefined, false, undefined, undefined, undefined,
-                           undefined, undefined, false, undefined, undefined,
-                           undefined, undefined, undefined, []),
-    {register, Registered, Remove, Instructions, Username,
-     Nick, Password, Name, First, Last, Email, Address, City,
-     State, Zip, Phone, Url, Date, Misc, Text, Key, Xdata,
-     __Els}.
-
-decode_register_els(__TopXMLNS, __IgnoreEls, [], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    {Zip, Xdata, Misc, Address, Instructions, Text, Last,
-     First, Password, Registered, Date, Phone, State, Name,
-     Username, Remove, Key, City, Nick, Url, Email,
-     lists:reverse(__Els)};
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"x">>, _attrs, _} = _el | _els], Zip, Xdata,
-                   Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             decode_xdata(<<"jabber:x:data">>, __IgnoreEls,
-                                          _el),
-                             Misc, Address, Instructions, Text, Last, First,
-                             Password, Registered, Date, Phone, State, Name,
-                             Username, Remove, Key, City, Nick, Url, Email,
-                             __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"registered">>, _attrs, _} = _el | _els],
-                   Zip, Xdata, Misc, Address, Instructions, Text, Last,
-                   First, Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password,
-                             decode_register_registered(__TopXMLNS,
-                                                        __IgnoreEls, _el),
-                             Date, Phone, State, Name, Username, Remove, Key,
-                             City, Nick, Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password,
-                             decode_register_registered(<<"jabber:iq:register">>,
-                                                        __IgnoreEls, _el),
-                             Date, Phone, State, Name, Username, Remove, Key,
-                             City, Nick, Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"remove">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username,
-                             decode_register_remove(__TopXMLNS, __IgnoreEls,
-                                                    _el),
-                             Key, City, Nick, Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username,
-                             decode_register_remove(<<"jabber:iq:register">>,
-                                                    __IgnoreEls, _el),
-                             Key, City, Nick, Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"instructions">>, _attrs, _} = _el | _els],
-                   Zip, Xdata, Misc, Address, Instructions, Text, Last,
-                   First, Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address,
-                             decode_register_instructions(__TopXMLNS,
-                                                          __IgnoreEls, _el),
-                             Text, Last, First, Password, Registered, Date,
-                             Phone, State, Name, Username, Remove, Key, City,
-                             Nick, Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address,
-                             decode_register_instructions(<<"jabber:iq:register">>,
-                                                          __IgnoreEls, _el),
-                             Text, Last, First, Password, Registered, Date,
-                             Phone, State, Name, Username, Remove, Key, City,
-                             Nick, Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"username">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name,
-                             decode_register_username(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                             Remove, Key, City, Nick, Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name,
-                             decode_register_username(<<"jabber:iq:register">>,
-                                                      __IgnoreEls, _el),
-                             Remove, Key, City, Nick, Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"nick">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City,
-                             decode_register_nick(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                             Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City,
-                             decode_register_nick(<<"jabber:iq:register">>,
-                                                  __IgnoreEls, _el),
-                             Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"password">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First,
-                             decode_register_password(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                             Registered, Date, Phone, State, Name, Username,
-                             Remove, Key, City, Nick, Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First,
-                             decode_register_password(<<"jabber:iq:register">>,
-                                                      __IgnoreEls, _el),
-                             Registered, Date, Phone, State, Name, Username,
-                             Remove, Key, City, Nick, Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"name">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             decode_register_name(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                             Username, Remove, Key, City, Nick, Url, Email,
-                             __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             decode_register_name(<<"jabber:iq:register">>,
-                                                  __IgnoreEls, _el),
-                             Username, Remove, Key, City, Nick, Url, Email,
-                             __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"first">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             decode_register_first(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                             Password, Registered, Date, Phone, State, Name,
-                             Username, Remove, Key, City, Nick, Url, Email,
-                             __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             decode_register_first(<<"jabber:iq:register">>,
-                                                   __IgnoreEls, _el),
-                             Password, Registered, Date, Phone, State, Name,
-                             Username, Remove, Key, City, Nick, Url, Email,
-                             __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"last">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text,
-                             decode_register_last(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text,
-                             decode_register_last(<<"jabber:iq:register">>,
-                                                  __IgnoreEls, _el),
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"email">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             decode_register_email(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                             __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             decode_register_email(<<"jabber:iq:register">>,
-                                                   __IgnoreEls, _el),
-                             __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"address">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc,
-                             decode_register_address(__TopXMLNS, __IgnoreEls,
-                                                     _el),
-                             Instructions, Text, Last, First, Password,
-                             Registered, Date, Phone, State, Name, Username,
-                             Remove, Key, City, Nick, Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc,
-                             decode_register_address(<<"jabber:iq:register">>,
-                                                     __IgnoreEls, _el),
-                             Instructions, Text, Last, First, Password,
-                             Registered, Date, Phone, State, Name, Username,
-                             Remove, Key, City, Nick, Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"city">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key,
-                             decode_register_city(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                             Nick, Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key,
-                             decode_register_city(<<"jabber:iq:register">>,
-                                                  __IgnoreEls, _el),
-                             Nick, Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"state">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone,
-                             decode_register_state(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone,
-                             decode_register_state(<<"jabber:iq:register">>,
-                                                   __IgnoreEls, _el),
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"zip">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els,
-                             decode_register_zip(__TopXMLNS, __IgnoreEls, _el),
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els,
-                             decode_register_zip(<<"jabber:iq:register">>,
-                                                 __IgnoreEls, _el),
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"phone">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date,
-                             decode_register_phone(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                             State, Name, Username, Remove, Key, City, Nick,
-                             Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date,
-                             decode_register_phone(<<"jabber:iq:register">>,
-                                                   __IgnoreEls, _el),
-                             State, Name, Username, Remove, Key, City, Nick,
-                             Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"url">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick,
-                             decode_register_url(__TopXMLNS, __IgnoreEls, _el),
-                             Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick,
-                             decode_register_url(<<"jabber:iq:register">>,
-                                                 __IgnoreEls, _el),
-                             Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"date">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered,
-                             decode_register_date(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                             Phone, State, Name, Username, Remove, Key, City,
-                             Nick, Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered,
-                             decode_register_date(<<"jabber:iq:register">>,
-                                                  __IgnoreEls, _el),
-                             Phone, State, Name, Username, Remove, Key, City,
-                             Nick, Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"misc">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata,
-                             decode_register_misc(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                             Address, Instructions, Text, Last, First,
-                             Password, Registered, Date, Phone, State, Name,
-                             Username, Remove, Key, City, Nick, Url, Email,
-                             __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata,
-                             decode_register_misc(<<"jabber:iq:register">>,
-                                                  __IgnoreEls, _el),
-                             Address, Instructions, Text, Last, First,
-                             Password, Registered, Date, Phone, State, Name,
-                             Username, Remove, Key, City, Nick, Url, Email,
-                             __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"text">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions,
-                             decode_register_text(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                             Last, First, Password, Registered, Date, Phone,
-                             State, Name, Username, Remove, Key, City, Nick,
-                             Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions,
-                             decode_register_text(<<"jabber:iq:register">>,
-                                                  __IgnoreEls, _el),
-                             Last, First, Password, Registered, Date, Phone,
-                             State, Name, Username, Remove, Key, City, Nick,
-                             Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"key">>, _attrs, _} = _el | _els], Zip,
-                   Xdata, Misc, Address, Instructions, Text, Last, First,
-                   Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove,
-                             decode_register_key(__TopXMLNS, __IgnoreEls, _el),
-                             City, Nick, Url, Email, __Els);
-      <<"jabber:iq:register">> ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove,
-                             decode_register_key(<<"jabber:iq:register">>,
-                                                 __IgnoreEls, _el),
-                             City, Nick, Url, Email, __Els);
-      _ ->
-         decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                             Xdata, Misc, Address, Instructions, Text, Last,
-                             First, Password, Registered, Date, Phone, State,
-                             Name, Username, Remove, Key, City, Nick, Url,
-                             Email, __Els)
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, _, _, _} = _el | _els], Zip, Xdata, Misc,
-                   Address, Instructions, Text, Last, First, Password,
-                   Registered, Date, Phone, State, Name, Username, Remove,
-                   Key, City, Nick, Url, Email, __Els) ->
-    if __IgnoreEls ->
-          decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                              Xdata, Misc, Address, Instructions, Text, Last,
-                              First, Password, Registered, Date, Phone, State,
-                              Name, Username, Remove, Key, City, Nick, Url,
-                              Email, [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                                    Xdata, Misc, Address, Instructions, Text,
-                                    Last, First, Password, Registered, Date,
-                                    Phone, State, Name, Username, Remove, Key,
-                                    City, Nick, Url, Email,
-                                    [decode(_el, __TopXMLNS, []) | __Els]);
-            false ->
-                decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                                    Xdata, Misc, Address, Instructions, Text,
-                                    Last, First, Password, Registered, Date,
-                                    Phone, State, Name, Username, Remove, Key,
-                                    City, Nick, Url, Email, __Els)
-          end
-    end;
-decode_register_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Zip, Xdata, Misc, Address, Instructions, Text, Last,
-                   First, Password, Registered, Date, Phone, State, Name,
-                   Username, Remove, Key, City, Nick, Url, Email, __Els) ->
-    decode_register_els(__TopXMLNS, __IgnoreEls, _els, Zip,
-                       Xdata, Misc, Address, Instructions, Text, Last, First,
-                       Password, Registered, Date, Phone, State, Name,
-                       Username, Remove, Key, City, Nick, Url, Email, __Els).
-
-encode_register({register, Registered, Remove,
-                Instructions, Username, Nick, Password, Name, First,
-                Last, Email, Address, City, State, Zip, Phone, Url,
-                Date, Misc, Text, Key, Xdata, __Els},
-               __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els] ++
-            lists:reverse('encode_register_$zip'(Zip, __NewTopXMLNS,
-                                                 'encode_register_$xdata'(Xdata,
-                                                                          __NewTopXMLNS,
-                                                                          'encode_register_$misc'(Misc,
-                                                                                                  __NewTopXMLNS,
-                                                                                                  'encode_register_$address'(Address,
-                                                                                                                             __NewTopXMLNS,
-                                                                                                                             'encode_register_$instructions'(Instructions,
-                                                                                                                                                             __NewTopXMLNS,
-                                                                                                                                                             'encode_register_$text'(Text,
-                                                                                                                                                                                     __NewTopXMLNS,
-                                                                                                                                                                                     'encode_register_$last'(Last,
-                                                                                                                                                                                                             __NewTopXMLNS,
-                                                                                                                                                                                                             'encode_register_$first'(First,
-                                                                                                                                                                                                                                      __NewTopXMLNS,
-                                                                                                                                                                                                                                      'encode_register_$password'(Password,
-                                                                                                                                                                                                                                                                  __NewTopXMLNS,
-                                                                                                                                                                                                                                                                  'encode_register_$registered'(Registered,
-                                                                                                                                                                                                                                                                                                __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                'encode_register_$date'(Date,
-                                                                                                                                                                                                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                        'encode_register_$phone'(Phone,
-                                                                                                                                                                                                                                                                                                                                                 __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                 'encode_register_$state'(State,
-                                                                                                                                                                                                                                                                                                                                                                          __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                          'encode_register_$name'(Name,
-                                                                                                                                                                                                                                                                                                                                                                                                  __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                  'encode_register_$username'(Username,
-                                                                                                                                                                                                                                                                                                                                                                                                                              __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                              'encode_register_$remove'(Remove,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                        'encode_register_$key'(Key,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                               'encode_register_$city'(City,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       'encode_register_$nick'(Nick,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               'encode_register_$url'(Url,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      'encode_register_$email'(Email,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               [])))))))))))))))))))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_register_$zip'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$zip'(Zip, __TopXMLNS, _acc) ->
-    [encode_register_zip(Zip, __TopXMLNS) | _acc].
-
-'encode_register_$xdata'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$xdata'(Xdata, __TopXMLNS, _acc) ->
-    [encode_xdata(Xdata, __TopXMLNS) | _acc].
-
-'encode_register_$misc'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$misc'(Misc, __TopXMLNS, _acc) ->
-    [encode_register_misc(Misc, __TopXMLNS) | _acc].
-
-'encode_register_$address'(undefined, __TopXMLNS,
-                          _acc) ->
-    _acc;
-'encode_register_$address'(Address, __TopXMLNS, _acc) ->
-    [encode_register_address(Address, __TopXMLNS) | _acc].
-
-'encode_register_$instructions'(undefined, __TopXMLNS,
-                               _acc) ->
-    _acc;
-'encode_register_$instructions'(Instructions,
-                               __TopXMLNS, _acc) ->
-    [encode_register_instructions(Instructions, __TopXMLNS)
-     | _acc].
-
-'encode_register_$text'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$text'(Text, __TopXMLNS, _acc) ->
-    [encode_register_text(Text, __TopXMLNS) | _acc].
-
-'encode_register_$last'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$last'(Last, __TopXMLNS, _acc) ->
-    [encode_register_last(Last, __TopXMLNS) | _acc].
-
-'encode_register_$first'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$first'(First, __TopXMLNS, _acc) ->
-    [encode_register_first(First, __TopXMLNS) | _acc].
-
-'encode_register_$password'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_register_$password'(Password, __TopXMLNS,
-                           _acc) ->
-    [encode_register_password(Password, __TopXMLNS) | _acc].
-
-'encode_register_$registered'(false, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_register_$registered'(Registered, __TopXMLNS,
-                             _acc) ->
-    [encode_register_registered(Registered, __TopXMLNS)
-     | _acc].
-
-'encode_register_$date'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$date'(Date, __TopXMLNS, _acc) ->
-    [encode_register_date(Date, __TopXMLNS) | _acc].
-
-'encode_register_$phone'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$phone'(Phone, __TopXMLNS, _acc) ->
-    [encode_register_phone(Phone, __TopXMLNS) | _acc].
-
-'encode_register_$state'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$state'(State, __TopXMLNS, _acc) ->
-    [encode_register_state(State, __TopXMLNS) | _acc].
-
-'encode_register_$name'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$name'(Name, __TopXMLNS, _acc) ->
-    [encode_register_name(Name, __TopXMLNS) | _acc].
-
-'encode_register_$username'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_register_$username'(Username, __TopXMLNS,
-                           _acc) ->
-    [encode_register_username(Username, __TopXMLNS) | _acc].
-
-'encode_register_$remove'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$remove'(Remove, __TopXMLNS, _acc) ->
-    [encode_register_remove(Remove, __TopXMLNS) | _acc].
-
-'encode_register_$key'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$key'(Key, __TopXMLNS, _acc) ->
-    [encode_register_key(Key, __TopXMLNS) | _acc].
-
-'encode_register_$city'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$city'(City, __TopXMLNS, _acc) ->
-    [encode_register_city(City, __TopXMLNS) | _acc].
-
-'encode_register_$nick'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$nick'(Nick, __TopXMLNS, _acc) ->
-    [encode_register_nick(Nick, __TopXMLNS) | _acc].
-
-'encode_register_$url'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$url'(Url, __TopXMLNS, _acc) ->
-    [encode_register_url(Url, __TopXMLNS) | _acc].
-
-'encode_register_$email'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_register_$email'(Email, __TopXMLNS, _acc) ->
-    [encode_register_email(Email, __TopXMLNS) | _acc].
-
-decode_register_key(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"key">>, _attrs, _els}) ->
-    Cdata = decode_register_key_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_register_key_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_register_key_cdata(__TopXMLNS, Cdata);
-decode_register_key_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_key_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_register_key_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_register_key_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_register_key(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_key_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"key">>, _attrs, _els}.
-
-decode_register_key_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_key_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_key_cdata(<<>>, _acc) -> _acc;
-encode_register_key_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_text(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"text">>, _attrs, _els}) ->
-    Cdata = decode_register_text_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_text_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_register_text_cdata(__TopXMLNS, Cdata);
-decode_register_text_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_text_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_register_text_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_register_text_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_register_text(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_text_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"text">>, _attrs, _els}.
-
-decode_register_text_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_text_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_text_cdata(<<>>, _acc) -> _acc;
-encode_register_text_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_misc(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"misc">>, _attrs, _els}) ->
-    Cdata = decode_register_misc_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_misc_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_register_misc_cdata(__TopXMLNS, Cdata);
-decode_register_misc_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_misc_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_register_misc_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_register_misc_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_register_misc(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_misc_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"misc">>, _attrs, _els}.
-
-decode_register_misc_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_misc_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_misc_cdata(<<>>, _acc) -> _acc;
-encode_register_misc_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_date(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"date">>, _attrs, _els}) ->
-    Cdata = decode_register_date_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_date_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_register_date_cdata(__TopXMLNS, Cdata);
-decode_register_date_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_date_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_register_date_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_register_date_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_register_date(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_date_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"date">>, _attrs, _els}.
-
-decode_register_date_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_date_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_date_cdata(<<>>, _acc) -> _acc;
-encode_register_date_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_url(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"url">>, _attrs, _els}) ->
-    Cdata = decode_register_url_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_register_url_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_register_url_cdata(__TopXMLNS, Cdata);
-decode_register_url_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_url_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_register_url_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_register_url_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_register_url(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_url_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"url">>, _attrs, _els}.
-
-decode_register_url_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_url_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_url_cdata(<<>>, _acc) -> _acc;
-encode_register_url_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_phone(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"phone">>, _attrs, _els}) ->
-    Cdata = decode_register_phone_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_phone_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_register_phone_cdata(__TopXMLNS, Cdata);
-decode_register_phone_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_phone_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_register_phone_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_register_phone_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_register_phone(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_phone_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"phone">>, _attrs, _els}.
-
-decode_register_phone_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_phone_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_phone_cdata(<<>>, _acc) -> _acc;
-encode_register_phone_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_zip(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"zip">>, _attrs, _els}) ->
-    Cdata = decode_register_zip_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_register_zip_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_register_zip_cdata(__TopXMLNS, Cdata);
-decode_register_zip_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_zip_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_register_zip_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_register_zip_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_register_zip(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_zip_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"zip">>, _attrs, _els}.
-
-decode_register_zip_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_zip_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_zip_cdata(<<>>, _acc) -> _acc;
-encode_register_zip_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_state(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"state">>, _attrs, _els}) ->
-    Cdata = decode_register_state_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_state_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_register_state_cdata(__TopXMLNS, Cdata);
-decode_register_state_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_state_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_register_state_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_register_state_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_register_state(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_state_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"state">>, _attrs, _els}.
-
-decode_register_state_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_state_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_state_cdata(<<>>, _acc) -> _acc;
-encode_register_state_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_city(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"city">>, _attrs, _els}) ->
-    Cdata = decode_register_city_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_city_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_register_city_cdata(__TopXMLNS, Cdata);
-decode_register_city_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_city_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_register_city_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_register_city_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_register_city(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_city_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"city">>, _attrs, _els}.
-
-decode_register_city_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_city_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_city_cdata(<<>>, _acc) -> _acc;
-encode_register_city_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_address(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"address">>, _attrs, _els}) ->
-    Cdata = decode_register_address_els(__TopXMLNS,
-                                       __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_address_els(__TopXMLNS, __IgnoreEls, [],
-                           Cdata) ->
-    decode_register_address_cdata(__TopXMLNS, Cdata);
-decode_register_address_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_address_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<Cdata/binary, _data/binary>>);
-decode_register_address_els(__TopXMLNS, __IgnoreEls,
-                           [_ | _els], Cdata) ->
-    decode_register_address_els(__TopXMLNS, __IgnoreEls,
-                               _els, Cdata).
-
-encode_register_address(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_address_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"address">>, _attrs, _els}.
-
-decode_register_address_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_address_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_address_cdata(<<>>, _acc) -> _acc;
-encode_register_address_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_email(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"email">>, _attrs, _els}) ->
-    Cdata = decode_register_email_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_email_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_register_email_cdata(__TopXMLNS, Cdata);
-decode_register_email_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_email_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_register_email_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_register_email_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_register_email(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_email_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"email">>, _attrs, _els}.
-
-decode_register_email_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_email_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_email_cdata(<<>>, _acc) -> _acc;
-encode_register_email_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_last(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"last">>, _attrs, _els}) ->
-    Cdata = decode_register_last_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_last_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_register_last_cdata(__TopXMLNS, Cdata);
-decode_register_last_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_last_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_register_last_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_register_last_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_register_last(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_last_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"last">>, _attrs, _els}.
-
-decode_register_last_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_last_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_last_cdata(<<>>, _acc) -> _acc;
-encode_register_last_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_first(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"first">>, _attrs, _els}) ->
-    Cdata = decode_register_first_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_first_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_register_first_cdata(__TopXMLNS, Cdata);
-decode_register_first_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_first_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_register_first_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_register_first_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_register_first(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_first_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"first">>, _attrs, _els}.
-
-decode_register_first_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_first_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_first_cdata(<<>>, _acc) -> _acc;
-encode_register_first_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_name(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"name">>, _attrs, _els}) ->
-    Cdata = decode_register_name_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_name_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_register_name_cdata(__TopXMLNS, Cdata);
-decode_register_name_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_name_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_register_name_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_register_name_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_register_name(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_name_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"name">>, _attrs, _els}.
-
-decode_register_name_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_name_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_name_cdata(<<>>, _acc) -> _acc;
-encode_register_name_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_password(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"password">>, _attrs, _els}) ->
-    Cdata = decode_register_password_els(__TopXMLNS,
-                                        __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_password_els(__TopXMLNS, __IgnoreEls,
-                            [], Cdata) ->
-    decode_register_password_cdata(__TopXMLNS, Cdata);
-decode_register_password_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_password_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<Cdata/binary, _data/binary>>);
-decode_register_password_els(__TopXMLNS, __IgnoreEls,
-                            [_ | _els], Cdata) ->
-    decode_register_password_els(__TopXMLNS, __IgnoreEls,
-                                _els, Cdata).
-
-encode_register_password(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_password_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"password">>, _attrs, _els}.
-
-decode_register_password_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_register_password_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_register_password_cdata(<<>>, _acc) -> _acc;
-encode_register_password_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_nick(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"nick">>, _attrs, _els}) ->
-    Cdata = decode_register_nick_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_nick_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_register_nick_cdata(__TopXMLNS, Cdata);
-decode_register_nick_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_nick_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_register_nick_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_register_nick_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_register_nick(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_nick_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"nick">>, _attrs, _els}.
-
-decode_register_nick_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_register_nick_cdata(__TopXMLNS, _val) -> _val.
-
-encode_register_nick_cdata(<<>>, _acc) -> _acc;
-encode_register_nick_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_username(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"username">>, _attrs, _els}) ->
-    Cdata = decode_register_username_els(__TopXMLNS,
-                                        __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_username_els(__TopXMLNS, __IgnoreEls,
-                            [], Cdata) ->
-    decode_register_username_cdata(__TopXMLNS, Cdata);
-decode_register_username_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlcdata, _data} | _els], Cdata) ->
-    decode_register_username_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<Cdata/binary, _data/binary>>);
-decode_register_username_els(__TopXMLNS, __IgnoreEls,
-                            [_ | _els], Cdata) ->
-    decode_register_username_els(__TopXMLNS, __IgnoreEls,
-                                _els, Cdata).
-
-encode_register_username(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_username_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"username">>, _attrs, _els}.
-
-decode_register_username_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_register_username_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_register_username_cdata(<<>>, _acc) -> _acc;
-encode_register_username_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_instructions(__TopXMLNS, __IgnoreEls,
-                            {xmlel, <<"instructions">>, _attrs, _els}) ->
-    Cdata = decode_register_instructions_els(__TopXMLNS,
-                                            __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_register_instructions_els(__TopXMLNS,
-                                __IgnoreEls, [], Cdata) ->
-    decode_register_instructions_cdata(__TopXMLNS, Cdata);
-decode_register_instructions_els(__TopXMLNS,
-                                __IgnoreEls, [{xmlcdata, _data} | _els],
-                                Cdata) ->
-    decode_register_instructions_els(__TopXMLNS,
-                                    __IgnoreEls, _els,
-                                    <<Cdata/binary, _data/binary>>);
-decode_register_instructions_els(__TopXMLNS,
-                                __IgnoreEls, [_ | _els], Cdata) ->
-    decode_register_instructions_els(__TopXMLNS,
-                                    __IgnoreEls, _els, Cdata).
-
-encode_register_instructions(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = encode_register_instructions_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"instructions">>, _attrs, _els}.
-
-decode_register_instructions_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_register_instructions_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_register_instructions_cdata(<<>>, _acc) -> _acc;
-encode_register_instructions_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_register_remove(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"remove">>, _attrs, _els}) ->
-    true.
-
-encode_register_remove(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"remove">>, _attrs, _els}.
-
-decode_register_registered(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"registered">>, _attrs, _els}) ->
-    true.
-
-encode_register_registered(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:register">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"registered">>, _attrs, _els}.
-
-decode_feature_register(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"register">>, _attrs, _els}) ->
-    {feature_register}.
-
-encode_feature_register({feature_register},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/features/iq-register">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"register">>, _attrs, _els}.
-
-decode_caps(__TopXMLNS, __IgnoreEls,
-           {xmlel, <<"c">>, _attrs, _els}) ->
-    {Hash, Node, Exts, Version} =
-       decode_caps_attrs(__TopXMLNS, _attrs, undefined,
-                         undefined, undefined, undefined),
-    {caps, Node, Version, Hash, Exts}.
-
-decode_caps_attrs(__TopXMLNS,
-                 [{<<"hash">>, _val} | _attrs], _Hash, Node, Exts,
-                 Version) ->
-    decode_caps_attrs(__TopXMLNS, _attrs, _val, Node, Exts,
-                     Version);
-decode_caps_attrs(__TopXMLNS,
-                 [{<<"node">>, _val} | _attrs], Hash, _Node, Exts,
-                 Version) ->
-    decode_caps_attrs(__TopXMLNS, _attrs, Hash, _val, Exts,
-                     Version);
-decode_caps_attrs(__TopXMLNS,
-                 [{<<"ext">>, _val} | _attrs], Hash, Node, _Exts,
-                 Version) ->
-    decode_caps_attrs(__TopXMLNS, _attrs, Hash, Node, _val,
-                     Version);
-decode_caps_attrs(__TopXMLNS,
-                 [{<<"ver">>, _val} | _attrs], Hash, Node, Exts,
-                 _Version) ->
-    decode_caps_attrs(__TopXMLNS, _attrs, Hash, Node, Exts,
-                     _val);
-decode_caps_attrs(__TopXMLNS, [_ | _attrs], Hash, Node,
-                 Exts, Version) ->
-    decode_caps_attrs(__TopXMLNS, _attrs, Hash, Node, Exts,
-                     Version);
-decode_caps_attrs(__TopXMLNS, [], Hash, Node, Exts,
-                 Version) ->
-    {decode_caps_attr_hash(__TopXMLNS, Hash),
-     decode_caps_attr_node(__TopXMLNS, Node),
-     decode_caps_attr_ext(__TopXMLNS, Exts),
-     decode_caps_attr_ver(__TopXMLNS, Version)}.
-
-encode_caps({caps, Node, Version, Hash, Exts},
-           __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/caps">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_caps_attr_ver(Version,
-                                 encode_caps_attr_ext(Exts,
-                                                      encode_caps_attr_node(Node,
-                                                                            encode_caps_attr_hash(Hash,
-                                                                                                  enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                  __TopXMLNS))))),
-    {xmlel, <<"c">>, _attrs, _els}.
-
-decode_caps_attr_hash(__TopXMLNS, undefined) -> <<>>;
-decode_caps_attr_hash(__TopXMLNS, _val) -> _val.
-
-encode_caps_attr_hash(<<>>, _acc) -> _acc;
-encode_caps_attr_hash(_val, _acc) ->
-    [{<<"hash">>, _val} | _acc].
-
-decode_caps_attr_node(__TopXMLNS, undefined) -> <<>>;
-decode_caps_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_caps_attr_node(<<>>, _acc) -> _acc;
-encode_caps_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_caps_attr_ext(__TopXMLNS, undefined) -> [];
-decode_caps_attr_ext(__TopXMLNS, _val) ->
-    case catch re:split(_val, "\\h+") of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"ext">>, <<"c">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_caps_attr_ext([], _acc) -> _acc;
-encode_caps_attr_ext(_val, _acc) ->
-    [{<<"ext">>, join(_val, 32)} | _acc].
-
-decode_caps_attr_ver(__TopXMLNS, undefined) -> <<>>;
-decode_caps_attr_ver(__TopXMLNS, _val) -> _val.
-
-encode_caps_attr_ver(<<>>, _acc) -> _acc;
-encode_caps_attr_ver(_val, _acc) ->
-    [{<<"ver">>, _val} | _acc].
-
-decode_p1_ack(__TopXMLNS, __IgnoreEls,
-             {xmlel, <<"ack">>, _attrs, _els}) ->
-    {p1_ack}.
-
-encode_p1_ack({p1_ack}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"p1:ack">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ack">>, _attrs, _els}.
-
-decode_p1_rebind(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"rebind">>, _attrs, _els}) ->
-    {p1_rebind}.
-
-encode_p1_rebind({p1_rebind}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"p1:rebind">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"rebind">>, _attrs, _els}.
-
-decode_p1_push(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"push">>, _attrs, _els}) ->
-    {p1_push}.
-
-encode_p1_push({p1_push}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"p1:push">>, [],
-                                    __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"push">>, _attrs, _els}.
-
-decode_stream_features(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"stream:features">>, _attrs, _els}) ->
-    __Els = decode_stream_features_els(__TopXMLNS,
-                                      __IgnoreEls, _els, []),
-    {stream_features, __Els}.
-
-decode_stream_features_els(__TopXMLNS, __IgnoreEls, [],
-                          __Els) ->
-    lists:reverse(__Els);
-decode_stream_features_els(__TopXMLNS, __IgnoreEls,
-                          [{xmlel, _, _, _} = _el | _els], __Els) ->
-    if __IgnoreEls ->
-          decode_stream_features_els(__TopXMLNS, __IgnoreEls,
-                                     _els, [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_stream_features_els(__TopXMLNS, __IgnoreEls,
-                                           _els,
-                                           [decode(_el, __TopXMLNS, [])
-                                            | __Els]);
-            false ->
-                decode_stream_features_els(__TopXMLNS, __IgnoreEls,
-                                           _els, __Els)
-          end
-    end;
-decode_stream_features_els(__TopXMLNS, __IgnoreEls,
-                          [_ | _els], __Els) ->
-    decode_stream_features_els(__TopXMLNS, __IgnoreEls,
-                              _els, __Els).
-
-encode_stream_features({stream_features, __Els},
-                      __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>],
-                                    __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"stream:features">>, _attrs, _els}.
-
-decode_compression(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"compression">>, _attrs, _els}) ->
-    Methods = decode_compression_els(__TopXMLNS,
-                                    __IgnoreEls, _els, []),
-    {compression, Methods}.
-
-decode_compression_els(__TopXMLNS, __IgnoreEls, [],
-                      Methods) ->
-    lists:reverse(Methods);
-decode_compression_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"method">>, _attrs, _} = _el | _els],
-                      Methods) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/features/compress">> ->
-         decode_compression_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_compression_method(__TopXMLNS,
-                                                           __IgnoreEls, _el)
-                                 | Methods]);
-      <<"http://jabber.org/features/compress">> ->
-         decode_compression_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_compression_method(<<"http://jabber.org/features/compress">>,
-                                                           __IgnoreEls, _el)
-                                 | Methods]);
-      _ ->
-         decode_compression_els(__TopXMLNS, __IgnoreEls, _els,
-                                Methods)
-    end;
-decode_compression_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Methods) ->
-    decode_compression_els(__TopXMLNS, __IgnoreEls, _els,
-                          Methods).
-
-encode_compression({compression, Methods},
-                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/features/compress">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_compression_$methods'(Methods,
-                                                   __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"compression">>, _attrs, _els}.
-
-'encode_compression_$methods'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_compression_$methods'([Methods | _els],
-                             __TopXMLNS, _acc) ->
-    'encode_compression_$methods'(_els, __TopXMLNS,
-                                 [encode_compression_method(Methods,
-                                                            __TopXMLNS)
-                                  | _acc]).
-
-decode_compression_method(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"method">>, _attrs, _els}) ->
-    Cdata = decode_compression_method_els(__TopXMLNS,
-                                         __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_compression_method_els(__TopXMLNS, __IgnoreEls,
-                             [], Cdata) ->
-    decode_compression_method_cdata(__TopXMLNS, Cdata);
-decode_compression_method_els(__TopXMLNS, __IgnoreEls,
-                             [{xmlcdata, _data} | _els], Cdata) ->
-    decode_compression_method_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<Cdata/binary, _data/binary>>);
-decode_compression_method_els(__TopXMLNS, __IgnoreEls,
-                             [_ | _els], Cdata) ->
-    decode_compression_method_els(__TopXMLNS, __IgnoreEls,
-                                 _els, Cdata).
-
-encode_compression_method(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/features/compress">>,
-                        [], __TopXMLNS),
-    _els = encode_compression_method_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"method">>, _attrs, _els}.
-
-decode_compression_method_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_compression_method_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_compression_method_cdata(<<>>, _acc) -> _acc;
-encode_compression_method_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_compressed(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"compressed">>, _attrs, _els}) ->
-    {compressed}.
-
-encode_compressed({compressed}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/compress">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"compressed">>, _attrs, _els}.
-
-decode_compress(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"compress">>, _attrs, _els}) ->
-    Methods = decode_compress_els(__TopXMLNS, __IgnoreEls,
-                                 _els, []),
-    {compress, Methods}.
-
-decode_compress_els(__TopXMLNS, __IgnoreEls, [],
-                   Methods) ->
-    lists:reverse(Methods);
-decode_compress_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"method">>, _attrs, _} = _el | _els],
-                   Methods) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/compress">> ->
-         decode_compress_els(__TopXMLNS, __IgnoreEls, _els,
-                             [decode_compress_method(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                              | Methods]);
-      <<"http://jabber.org/protocol/compress">> ->
-         decode_compress_els(__TopXMLNS, __IgnoreEls, _els,
-                             [decode_compress_method(<<"http://jabber.org/protocol/compress">>,
-                                                     __IgnoreEls, _el)
-                              | Methods]);
-      _ ->
-         decode_compress_els(__TopXMLNS, __IgnoreEls, _els,
-                             Methods)
-    end;
-decode_compress_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Methods) ->
-    decode_compress_els(__TopXMLNS, __IgnoreEls, _els,
-                       Methods).
-
-encode_compress({compress, Methods}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/compress">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_compress_$methods'(Methods,
-                                                   __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"compress">>, _attrs, _els}.
-
-'encode_compress_$methods'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_compress_$methods'([Methods | _els], __TopXMLNS,
-                          _acc) ->
-    'encode_compress_$methods'(_els, __TopXMLNS,
-                              [encode_compress_method(Methods, __TopXMLNS)
-                               | _acc]).
-
-decode_compress_method(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"method">>, _attrs, _els}) ->
-    Cdata = decode_compress_method_els(__TopXMLNS,
-                                      __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_compress_method_els(__TopXMLNS, __IgnoreEls, [],
-                          Cdata) ->
-    decode_compress_method_cdata(__TopXMLNS, Cdata);
-decode_compress_method_els(__TopXMLNS, __IgnoreEls,
-                          [{xmlcdata, _data} | _els], Cdata) ->
-    decode_compress_method_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<Cdata/binary, _data/binary>>);
-decode_compress_method_els(__TopXMLNS, __IgnoreEls,
-                          [_ | _els], Cdata) ->
-    decode_compress_method_els(__TopXMLNS, __IgnoreEls,
-                              _els, Cdata).
-
-encode_compress_method(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/compress">>,
-                        [], __TopXMLNS),
-    _els = encode_compress_method_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"method">>, _attrs, _els}.
-
-decode_compress_method_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_compress_method_cdata(__TopXMLNS, _val) -> _val.
-
-encode_compress_method_cdata(<<>>, _acc) -> _acc;
-encode_compress_method_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_compress_failure(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"failure">>, _attrs, _els}) ->
-    Reason = decode_compress_failure_els(__TopXMLNS,
-                                        __IgnoreEls, _els, undefined),
-    {compress_failure, Reason}.
-
-decode_compress_failure_els(__TopXMLNS, __IgnoreEls, [],
-                           Reason) ->
-    Reason;
-decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlel, <<"setup-failed">>, _attrs, _} = _el
-                            | _els],
-                           Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/compress">> ->
-         decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_compress_failure_setup_failed(__TopXMLNS,
-                                                                          __IgnoreEls,
-                                                                          _el));
-      <<"http://jabber.org/protocol/compress">> ->
-         decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_compress_failure_setup_failed(<<"http://jabber.org/protocol/compress">>,
-                                                                          __IgnoreEls,
-                                                                          _el));
-      _ ->
-         decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                                     _els, Reason)
-    end;
-decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlel, <<"processing-failed">>, _attrs, _} = _el
-                            | _els],
-                           Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/compress">> ->
-         decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_compress_failure_processing_failed(__TopXMLNS,
-                                                                               __IgnoreEls,
-                                                                               _el));
-      <<"http://jabber.org/protocol/compress">> ->
-         decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_compress_failure_processing_failed(<<"http://jabber.org/protocol/compress">>,
-                                                                               __IgnoreEls,
-                                                                               _el));
-      _ ->
-         decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                                     _els, Reason)
-    end;
-decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                           [{xmlel, <<"unsupported-method">>, _attrs, _} = _el
-                            | _els],
-                           Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/compress">> ->
-         decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_compress_failure_unsupported_method(__TopXMLNS,
-                                                                                __IgnoreEls,
-                                                                                _el));
-      <<"http://jabber.org/protocol/compress">> ->
-         decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                                     _els,
-                                     decode_compress_failure_unsupported_method(<<"http://jabber.org/protocol/compress">>,
-                                                                                __IgnoreEls,
-                                                                                _el));
-      _ ->
-         decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                                     _els, Reason)
-    end;
-decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                           [_ | _els], Reason) ->
-    decode_compress_failure_els(__TopXMLNS, __IgnoreEls,
-                               _els, Reason).
-
-encode_compress_failure({compress_failure, Reason},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/compress">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_compress_failure_$reason'(Reason,
-                                                       __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"failure">>, _attrs, _els}.
-
-'encode_compress_failure_$reason'(undefined, __TopXMLNS,
-                                 _acc) ->
-    _acc;
-'encode_compress_failure_$reason'('setup-failed' =
-                                     Reason,
-                                 __TopXMLNS, _acc) ->
-    [encode_compress_failure_setup_failed(Reason,
-                                         __TopXMLNS)
-     | _acc];
-'encode_compress_failure_$reason'('processing-failed' =
-                                     Reason,
-                                 __TopXMLNS, _acc) ->
-    [encode_compress_failure_processing_failed(Reason,
-                                              __TopXMLNS)
-     | _acc];
-'encode_compress_failure_$reason'('unsupported-method' =
-                                     Reason,
-                                 __TopXMLNS, _acc) ->
-    [encode_compress_failure_unsupported_method(Reason,
-                                               __TopXMLNS)
-     | _acc].
-
-decode_compress_failure_unsupported_method(__TopXMLNS,
-                                          __IgnoreEls,
-                                          {xmlel, <<"unsupported-method">>,
-                                           _attrs, _els}) ->
-    'unsupported-method'.
-
-encode_compress_failure_unsupported_method('unsupported-method',
-                                          __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/compress">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"unsupported-method">>, _attrs, _els}.
-
-decode_compress_failure_processing_failed(__TopXMLNS,
-                                         __IgnoreEls,
-                                         {xmlel, <<"processing-failed">>,
-                                          _attrs, _els}) ->
-    'processing-failed'.
-
-encode_compress_failure_processing_failed('processing-failed',
-                                         __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/compress">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"processing-failed">>, _attrs, _els}.
-
-decode_compress_failure_setup_failed(__TopXMLNS,
-                                    __IgnoreEls,
-                                    {xmlel, <<"setup-failed">>, _attrs,
-                                     _els}) ->
-    'setup-failed'.
-
-encode_compress_failure_setup_failed('setup-failed',
-                                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/compress">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"setup-failed">>, _attrs, _els}.
-
-decode_starttls_failure(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"failure">>, _attrs, _els}) ->
-    {starttls_failure}.
-
-encode_starttls_failure({starttls_failure},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"failure">>, _attrs, _els}.
-
-decode_starttls_proceed(__TopXMLNS, __IgnoreEls,
-                       {xmlel, <<"proceed">>, _attrs, _els}) ->
-    {starttls_proceed}.
-
-encode_starttls_proceed({starttls_proceed},
-                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"proceed">>, _attrs, _els}.
-
-decode_starttls(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"starttls">>, _attrs, _els}) ->
-    Required = decode_starttls_els(__TopXMLNS, __IgnoreEls,
-                                  _els, false),
-    {starttls, Required}.
-
-decode_starttls_els(__TopXMLNS, __IgnoreEls, [],
-                   Required) ->
-    Required;
-decode_starttls_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"required">>, _attrs, _} = _el | _els],
-                   Required) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-tls">> ->
-         decode_starttls_els(__TopXMLNS, __IgnoreEls, _els,
-                             decode_starttls_required(__TopXMLNS, __IgnoreEls,
-                                                      _el));
-      <<"urn:ietf:params:xml:ns:xmpp-tls">> ->
-         decode_starttls_els(__TopXMLNS, __IgnoreEls, _els,
-                             decode_starttls_required(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                                                      __IgnoreEls, _el));
-      _ ->
-         decode_starttls_els(__TopXMLNS, __IgnoreEls, _els,
-                             Required)
-    end;
-decode_starttls_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Required) ->
-    decode_starttls_els(__TopXMLNS, __IgnoreEls, _els,
-                       Required).
-
-encode_starttls({starttls, Required}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_starttls_$required'(Required,
-                                                 __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"starttls">>, _attrs, _els}.
-
-'encode_starttls_$required'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_starttls_$required'(Required, __TopXMLNS,
-                           _acc) ->
-    [encode_starttls_required(Required, __TopXMLNS) | _acc].
-
-decode_starttls_required(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"required">>, _attrs, _els}) ->
-    true.
-
-encode_starttls_required(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-tls">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"required">>, _attrs, _els}.
-
-decode_sasl_mechanisms(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"mechanisms">>, _attrs, _els}) ->
-    List = decode_sasl_mechanisms_els(__TopXMLNS,
-                                     __IgnoreEls, _els, []),
-    {sasl_mechanisms, List}.
-
-decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls, [],
-                          List) ->
-    lists:reverse(List);
-decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
-                          [{xmlel, <<"mechanism">>, _attrs, _} = _el | _els],
-                          List) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
-                                    _els,
-                                    [decode_sasl_mechanism(__TopXMLNS,
-                                                           __IgnoreEls, _el)
-                                     | List]);
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
-                                    _els,
-                                    [decode_sasl_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                           __IgnoreEls, _el)
-                                     | List]);
-      _ ->
-         decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
-                                    _els, List)
-    end;
-decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
-                          [_ | _els], List) ->
-    decode_sasl_mechanisms_els(__TopXMLNS, __IgnoreEls,
-                              _els, List).
-
-encode_sasl_mechanisms({sasl_mechanisms, List},
-                      __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_sasl_mechanisms_$list'(List,
-                                                    __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"mechanisms">>, _attrs, _els}.
-
-'encode_sasl_mechanisms_$list'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_sasl_mechanisms_$list'([List | _els],
-                              __TopXMLNS, _acc) ->
-    'encode_sasl_mechanisms_$list'(_els, __TopXMLNS,
-                                  [encode_sasl_mechanism(List, __TopXMLNS)
-                                   | _acc]).
-
-decode_sasl_mechanism(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"mechanism">>, _attrs, _els}) ->
-    Cdata = decode_sasl_mechanism_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_sasl_mechanism_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_sasl_mechanism_cdata(__TopXMLNS, Cdata);
-decode_sasl_mechanism_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_sasl_mechanism_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_sasl_mechanism_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_sasl_mechanism_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_sasl_mechanism(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = encode_sasl_mechanism_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"mechanism">>, _attrs, _els}.
-
-decode_sasl_mechanism_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_sasl_mechanism_cdata(__TopXMLNS, _val) -> _val.
-
-encode_sasl_mechanism_cdata(<<>>, _acc) -> _acc;
-encode_sasl_mechanism_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_sasl_failure(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"failure">>, _attrs, _els}) ->
-    {Text, Reason} = decode_sasl_failure_els(__TopXMLNS,
-                                            __IgnoreEls, _els, [], undefined),
-    {sasl_failure, Reason, Text}.
-
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, [],
-                       Text, Reason) ->
-    {lists:reverse(Text), Reason};
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"text">>, _attrs, _} = _el | _els], Text,
-                       Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_sasl_failure_text(__TopXMLNS,
-                                                           __IgnoreEls, _el)
-                                  | Text],
-                                 Reason);
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_sasl_failure_text(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                           __IgnoreEls, _el)
-                                  | Text],
-                                 Reason);
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"aborted">>, _attrs, _} = _el | _els], Text,
-                       Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_aborted(__TopXMLNS,
-                                                             __IgnoreEls,
-                                                             _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_aborted(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                             __IgnoreEls,
-                                                             _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"account-disabled">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_account_disabled(__TopXMLNS,
-                                                                      __IgnoreEls,
-                                                                      _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_account_disabled(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                      __IgnoreEls,
-                                                                      _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"credentials-expired">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_credentials_expired(__TopXMLNS,
-                                                                         __IgnoreEls,
-                                                                         _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_credentials_expired(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                         __IgnoreEls,
-                                                                         _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"encryption-required">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_encryption_required(__TopXMLNS,
-                                                                         __IgnoreEls,
-                                                                         _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_encryption_required(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                         __IgnoreEls,
-                                                                         _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"incorrect-encoding">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_incorrect_encoding(__TopXMLNS,
-                                                                        __IgnoreEls,
-                                                                        _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_incorrect_encoding(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                        __IgnoreEls,
-                                                                        _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"invalid-authzid">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_invalid_authzid(__TopXMLNS,
-                                                                     __IgnoreEls,
-                                                                     _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_invalid_authzid(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                     __IgnoreEls,
-                                                                     _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"invalid-mechanism">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_invalid_mechanism(__TopXMLNS,
-                                                                       __IgnoreEls,
-                                                                       _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_invalid_mechanism(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                       __IgnoreEls,
-                                                                       _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"malformed-request">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_malformed_request(__TopXMLNS,
-                                                                       __IgnoreEls,
-                                                                       _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_malformed_request(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                       __IgnoreEls,
-                                                                       _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"mechanism-too-weak">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_mechanism_too_weak(__TopXMLNS,
-                                                                        __IgnoreEls,
-                                                                        _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_mechanism_too_weak(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                        __IgnoreEls,
-                                                                        _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"not-authorized">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_not_authorized(__TopXMLNS,
-                                                                    __IgnoreEls,
-                                                                    _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                    __IgnoreEls,
-                                                                    _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"bad-protocol">>, _attrs, _} = _el | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_bad_protocol(__TopXMLNS,
-                                                                  __IgnoreEls,
-                                                                  _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_bad_protocol(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                  __IgnoreEls,
-                                                                  _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"temporary-auth-failure">>, _attrs, _} = _el
-                        | _els],
-                       Text, Reason) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_temporary_auth_failure(__TopXMLNS,
-                                                                            __IgnoreEls,
-                                                                            _el));
-      <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text,
-                                 decode_sasl_failure_temporary_auth_failure(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                                                                            __IgnoreEls,
-                                                                            _el));
-      _ ->
-         decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Text, Reason)
-    end;
-decode_sasl_failure_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Text, Reason) ->
-    decode_sasl_failure_els(__TopXMLNS, __IgnoreEls, _els,
-                           Text, Reason).
-
-encode_sasl_failure({sasl_failure, Reason, Text},
-                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_sasl_failure_$text'(Text,
-                                                    __NewTopXMLNS,
-                                                    'encode_sasl_failure_$reason'(Reason,
-                                                                                  __NewTopXMLNS,
-                                                                                  []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"failure">>, _attrs, _els}.
-
-'encode_sasl_failure_$text'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_sasl_failure_$text'([Text | _els], __TopXMLNS,
-                           _acc) ->
-    'encode_sasl_failure_$text'(_els, __TopXMLNS,
-                               [encode_sasl_failure_text(Text, __TopXMLNS)
-                                | _acc]).
-
-'encode_sasl_failure_$reason'(undefined, __TopXMLNS,
-                             _acc) ->
-    _acc;
-'encode_sasl_failure_$reason'(aborted = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_aborted(Reason, __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('account-disabled' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_account_disabled(Reason,
-                                         __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('credentials-expired' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_credentials_expired(Reason,
-                                            __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('encryption-required' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_encryption_required(Reason,
-                                            __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('incorrect-encoding' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_incorrect_encoding(Reason,
-                                           __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('invalid-authzid' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_invalid_authzid(Reason, __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('invalid-mechanism' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_invalid_mechanism(Reason,
-                                          __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('malformed-request' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_malformed_request(Reason,
-                                          __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('mechanism-too-weak' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_mechanism_too_weak(Reason,
-                                           __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('not-authorized' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_not_authorized(Reason, __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('bad-protocol' = Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_bad_protocol(Reason, __TopXMLNS)
-     | _acc];
-'encode_sasl_failure_$reason'('temporary-auth-failure' =
-                                 Reason,
-                             __TopXMLNS, _acc) ->
-    [encode_sasl_failure_temporary_auth_failure(Reason,
-                                               __TopXMLNS)
-     | _acc].
-
-decode_sasl_failure_temporary_auth_failure(__TopXMLNS,
-                                          __IgnoreEls,
-                                          {xmlel, <<"temporary-auth-failure">>,
-                                           _attrs, _els}) ->
-    'temporary-auth-failure'.
-
-encode_sasl_failure_temporary_auth_failure('temporary-auth-failure',
-                                          __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"temporary-auth-failure">>, _attrs, _els}.
-
-decode_sasl_failure_bad_protocol(__TopXMLNS,
-                                __IgnoreEls,
-                                {xmlel, <<"bad-protocol">>, _attrs, _els}) ->
-    'bad-protocol'.
-
-encode_sasl_failure_bad_protocol('bad-protocol',
-                                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"bad-protocol">>, _attrs, _els}.
-
-decode_sasl_failure_not_authorized(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"not-authorized">>, _attrs,
-                                   _els}) ->
-    'not-authorized'.
-
-encode_sasl_failure_not_authorized('not-authorized',
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"not-authorized">>, _attrs, _els}.
-
-decode_sasl_failure_mechanism_too_weak(__TopXMLNS,
-                                      __IgnoreEls,
-                                      {xmlel, <<"mechanism-too-weak">>, _attrs,
-                                       _els}) ->
-    'mechanism-too-weak'.
-
-encode_sasl_failure_mechanism_too_weak('mechanism-too-weak',
-                                      __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"mechanism-too-weak">>, _attrs, _els}.
-
-decode_sasl_failure_malformed_request(__TopXMLNS,
-                                     __IgnoreEls,
-                                     {xmlel, <<"malformed-request">>, _attrs,
-                                      _els}) ->
-    'malformed-request'.
-
-encode_sasl_failure_malformed_request('malformed-request',
-                                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"malformed-request">>, _attrs, _els}.
-
-decode_sasl_failure_invalid_mechanism(__TopXMLNS,
-                                     __IgnoreEls,
-                                     {xmlel, <<"invalid-mechanism">>, _attrs,
-                                      _els}) ->
-    'invalid-mechanism'.
-
-encode_sasl_failure_invalid_mechanism('invalid-mechanism',
-                                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-mechanism">>, _attrs, _els}.
-
-decode_sasl_failure_invalid_authzid(__TopXMLNS,
-                                   __IgnoreEls,
-                                   {xmlel, <<"invalid-authzid">>, _attrs,
-                                    _els}) ->
-    'invalid-authzid'.
-
-encode_sasl_failure_invalid_authzid('invalid-authzid',
-                                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"invalid-authzid">>, _attrs, _els}.
-
-decode_sasl_failure_incorrect_encoding(__TopXMLNS,
-                                      __IgnoreEls,
-                                      {xmlel, <<"incorrect-encoding">>, _attrs,
-                                       _els}) ->
-    'incorrect-encoding'.
-
-encode_sasl_failure_incorrect_encoding('incorrect-encoding',
-                                      __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"incorrect-encoding">>, _attrs, _els}.
-
-decode_sasl_failure_encryption_required(__TopXMLNS,
-                                       __IgnoreEls,
-                                       {xmlel, <<"encryption-required">>,
-                                        _attrs, _els}) ->
-    'encryption-required'.
-
-encode_sasl_failure_encryption_required('encryption-required',
-                                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"encryption-required">>, _attrs, _els}.
-
-decode_sasl_failure_credentials_expired(__TopXMLNS,
-                                       __IgnoreEls,
-                                       {xmlel, <<"credentials-expired">>,
-                                        _attrs, _els}) ->
-    'credentials-expired'.
-
-encode_sasl_failure_credentials_expired('credentials-expired',
-                                       __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"credentials-expired">>, _attrs, _els}.
-
-decode_sasl_failure_account_disabled(__TopXMLNS,
-                                    __IgnoreEls,
-                                    {xmlel, <<"account-disabled">>, _attrs,
-                                     _els}) ->
-    'account-disabled'.
-
-encode_sasl_failure_account_disabled('account-disabled',
-                                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"account-disabled">>, _attrs, _els}.
-
-decode_sasl_failure_aborted(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"aborted">>, _attrs, _els}) ->
-    aborted.
-
-encode_sasl_failure_aborted(aborted, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"aborted">>, _attrs, _els}.
-
-decode_sasl_failure_text(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"text">>, _attrs, _els}) ->
-    Data = decode_sasl_failure_text_els(__TopXMLNS,
-                                       __IgnoreEls, _els, <<>>),
-    Lang = decode_sasl_failure_text_attrs(__TopXMLNS,
-                                         _attrs, undefined),
-    {text, Lang, Data}.
-
-decode_sasl_failure_text_els(__TopXMLNS, __IgnoreEls,
-                            [], Data) ->
-    decode_sasl_failure_text_cdata(__TopXMLNS, Data);
-decode_sasl_failure_text_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlcdata, _data} | _els], Data) ->
-    decode_sasl_failure_text_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<Data/binary, _data/binary>>);
-decode_sasl_failure_text_els(__TopXMLNS, __IgnoreEls,
-                            [_ | _els], Data) ->
-    decode_sasl_failure_text_els(__TopXMLNS, __IgnoreEls,
-                                _els, Data).
-
-decode_sasl_failure_text_attrs(__TopXMLNS,
-                              [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
-    decode_sasl_failure_text_attrs(__TopXMLNS, _attrs,
-                                  _val);
-decode_sasl_failure_text_attrs(__TopXMLNS, [_ | _attrs],
-                              Lang) ->
-    decode_sasl_failure_text_attrs(__TopXMLNS, _attrs,
-                                  Lang);
-decode_sasl_failure_text_attrs(__TopXMLNS, [], Lang) ->
-    'decode_sasl_failure_text_attr_xml:lang'(__TopXMLNS,
-                                            Lang).
-
-encode_sasl_failure_text({text, Lang, Data},
-                        __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = encode_sasl_failure_text_cdata(Data, []),
-    _attrs = 'encode_sasl_failure_text_attr_xml:lang'(Lang,
-                                                     enc_xmlns_attrs(__NewTopXMLNS,
-                                                                     __TopXMLNS)),
-    {xmlel, <<"text">>, _attrs, _els}.
-
-'decode_sasl_failure_text_attr_xml:lang'(__TopXMLNS,
-                                        undefined) ->
-    <<>>;
-'decode_sasl_failure_text_attr_xml:lang'(__TopXMLNS,
-                                        _val) ->
-    _val.
-
-'encode_sasl_failure_text_attr_xml:lang'(<<>>, _acc) ->
-    _acc;
-'encode_sasl_failure_text_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_sasl_failure_text_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_sasl_failure_text_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_sasl_failure_text_cdata(<<>>, _acc) -> _acc;
-encode_sasl_failure_text_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_sasl_success(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"success">>, _attrs, _els}) ->
-    Text = decode_sasl_success_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    {sasl_success, Text}.
-
-decode_sasl_success_els(__TopXMLNS, __IgnoreEls, [],
-                       Text) ->
-    decode_sasl_success_cdata(__TopXMLNS, Text);
-decode_sasl_success_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Text) ->
-    decode_sasl_success_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Text/binary, _data/binary>>);
-decode_sasl_success_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Text) ->
-    decode_sasl_success_els(__TopXMLNS, __IgnoreEls, _els,
-                           Text).
-
-encode_sasl_success({sasl_success, Text}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = encode_sasl_success_cdata(Text, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"success">>, _attrs, _els}.
-
-decode_sasl_success_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_sasl_success_cdata(__TopXMLNS, _val) ->
-    case catch base64:mime_decode(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"success">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sasl_success_cdata(<<>>, _acc) -> _acc;
-encode_sasl_success_cdata(_val, _acc) ->
-    [{xmlcdata, base64:encode(_val)} | _acc].
-
-decode_sasl_response(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"response">>, _attrs, _els}) ->
-    Text = decode_sasl_response_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    {sasl_response, Text}.
-
-decode_sasl_response_els(__TopXMLNS, __IgnoreEls, [],
-                        Text) ->
-    decode_sasl_response_cdata(__TopXMLNS, Text);
-decode_sasl_response_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Text) ->
-    decode_sasl_response_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Text/binary, _data/binary>>);
-decode_sasl_response_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Text) ->
-    decode_sasl_response_els(__TopXMLNS, __IgnoreEls, _els,
-                            Text).
-
-encode_sasl_response({sasl_response, Text},
-                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = encode_sasl_response_cdata(Text, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"response">>, _attrs, _els}.
-
-decode_sasl_response_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_sasl_response_cdata(__TopXMLNS, _val) ->
-    case catch base64:mime_decode(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"response">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sasl_response_cdata(<<>>, _acc) -> _acc;
-encode_sasl_response_cdata(_val, _acc) ->
-    [{xmlcdata, base64:encode(_val)} | _acc].
-
-decode_sasl_challenge(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"challenge">>, _attrs, _els}) ->
-    Text = decode_sasl_challenge_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    {sasl_challenge, Text}.
-
-decode_sasl_challenge_els(__TopXMLNS, __IgnoreEls, [],
-                         Text) ->
-    decode_sasl_challenge_cdata(__TopXMLNS, Text);
-decode_sasl_challenge_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Text) ->
-    decode_sasl_challenge_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Text/binary, _data/binary>>);
-decode_sasl_challenge_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Text) ->
-    decode_sasl_challenge_els(__TopXMLNS, __IgnoreEls, _els,
-                             Text).
-
-encode_sasl_challenge({sasl_challenge, Text},
-                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = encode_sasl_challenge_cdata(Text, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"challenge">>, _attrs, _els}.
-
-decode_sasl_challenge_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_sasl_challenge_cdata(__TopXMLNS, _val) ->
-    case catch base64:mime_decode(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"challenge">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sasl_challenge_cdata(<<>>, _acc) -> _acc;
-encode_sasl_challenge_cdata(_val, _acc) ->
-    [{xmlcdata, base64:encode(_val)} | _acc].
-
-decode_sasl_abort(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"abort">>, _attrs, _els}) ->
-    {sasl_abort}.
-
-encode_sasl_abort({sasl_abort}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"abort">>, _attrs, _els}.
-
-decode_sasl_auth(__TopXMLNS, __IgnoreEls,
-                {xmlel, <<"auth">>, _attrs, _els}) ->
-    Text = decode_sasl_auth_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Mechanism = decode_sasl_auth_attrs(__TopXMLNS, _attrs,
-                                      undefined),
-    {sasl_auth, Mechanism, Text}.
-
-decode_sasl_auth_els(__TopXMLNS, __IgnoreEls, [],
-                    Text) ->
-    decode_sasl_auth_cdata(__TopXMLNS, Text);
-decode_sasl_auth_els(__TopXMLNS, __IgnoreEls,
-                    [{xmlcdata, _data} | _els], Text) ->
-    decode_sasl_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                        <<Text/binary, _data/binary>>);
-decode_sasl_auth_els(__TopXMLNS, __IgnoreEls,
-                    [_ | _els], Text) ->
-    decode_sasl_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                        Text).
-
-decode_sasl_auth_attrs(__TopXMLNS,
-                      [{<<"mechanism">>, _val} | _attrs], _Mechanism) ->
-    decode_sasl_auth_attrs(__TopXMLNS, _attrs, _val);
-decode_sasl_auth_attrs(__TopXMLNS, [_ | _attrs],
-                      Mechanism) ->
-    decode_sasl_auth_attrs(__TopXMLNS, _attrs, Mechanism);
-decode_sasl_auth_attrs(__TopXMLNS, [], Mechanism) ->
-    decode_sasl_auth_attr_mechanism(__TopXMLNS, Mechanism).
-
-encode_sasl_auth({sasl_auth, Mechanism, Text},
-                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-sasl">>,
-                        [], __TopXMLNS),
-    _els = encode_sasl_auth_cdata(Text, []),
-    _attrs = encode_sasl_auth_attr_mechanism(Mechanism,
-                                            enc_xmlns_attrs(__NewTopXMLNS,
-                                                            __TopXMLNS)),
-    {xmlel, <<"auth">>, _attrs, _els}.
-
-decode_sasl_auth_attr_mechanism(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"mechanism">>, <<"auth">>,
-                  __TopXMLNS}});
-decode_sasl_auth_attr_mechanism(__TopXMLNS, _val) ->
-    _val.
-
-encode_sasl_auth_attr_mechanism(_val, _acc) ->
-    [{<<"mechanism">>, _val} | _acc].
-
-decode_sasl_auth_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_sasl_auth_cdata(__TopXMLNS, _val) ->
-    case catch base64:mime_decode(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"auth">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_sasl_auth_cdata(<<>>, _acc) -> _acc;
-encode_sasl_auth_cdata(_val, _acc) ->
-    [{xmlcdata, base64:encode(_val)} | _acc].
-
-decode_legacy_auth(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"query">>, _attrs, _els}) ->
-    {Digest, Password, Resource, Username} =
-       decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                              undefined, undefined, undefined, undefined),
-    {legacy_auth, Username, Password, Digest, Resource}.
-
-decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, [],
-                      Digest, Password, Resource, Username) ->
-    {Digest, Password, Resource, Username};
-decode_legacy_auth_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"username">>, _attrs, _} = _el | _els],
-                      Digest, Password, Resource, Username) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:auth">> ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest, Password, Resource,
-                                decode_legacy_auth_username(__TopXMLNS,
-                                                            __IgnoreEls, _el));
-      <<"jabber:iq:auth">> ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest, Password, Resource,
-                                decode_legacy_auth_username(<<"jabber:iq:auth">>,
-                                                            __IgnoreEls, _el));
-      _ ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest, Password, Resource, Username)
-    end;
-decode_legacy_auth_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"password">>, _attrs, _} = _el | _els],
-                      Digest, Password, Resource, Username) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:auth">> ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest,
-                                decode_legacy_auth_password(__TopXMLNS,
-                                                            __IgnoreEls, _el),
-                                Resource, Username);
-      <<"jabber:iq:auth">> ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest,
-                                decode_legacy_auth_password(<<"jabber:iq:auth">>,
-                                                            __IgnoreEls, _el),
-                                Resource, Username);
-      _ ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest, Password, Resource, Username)
-    end;
-decode_legacy_auth_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"digest">>, _attrs, _} = _el | _els], Digest,
-                      Password, Resource, Username) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:auth">> ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_legacy_auth_digest(__TopXMLNS,
-                                                          __IgnoreEls, _el),
-                                Password, Resource, Username);
-      <<"jabber:iq:auth">> ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                decode_legacy_auth_digest(<<"jabber:iq:auth">>,
-                                                          __IgnoreEls, _el),
-                                Password, Resource, Username);
-      _ ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest, Password, Resource, Username)
-    end;
-decode_legacy_auth_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"resource">>, _attrs, _} = _el | _els],
-                      Digest, Password, Resource, Username) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:auth">> ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest, Password,
-                                decode_legacy_auth_resource(__TopXMLNS,
-                                                            __IgnoreEls, _el),
-                                Username);
-      <<"jabber:iq:auth">> ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest, Password,
-                                decode_legacy_auth_resource(<<"jabber:iq:auth">>,
-                                                            __IgnoreEls, _el),
-                                Username);
-      _ ->
-         decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                                Digest, Password, Resource, Username)
-    end;
-decode_legacy_auth_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Digest, Password, Resource, Username) ->
-    decode_legacy_auth_els(__TopXMLNS, __IgnoreEls, _els,
-                          Digest, Password, Resource, Username).
-
-encode_legacy_auth({legacy_auth, Username, Password,
-                   Digest, Resource},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:auth">>,
-                                    [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_legacy_auth_$digest'(Digest,
-                                                  __NewTopXMLNS,
-                                                  'encode_legacy_auth_$password'(Password,
-                                                                                 __NewTopXMLNS,
-                                                                                 'encode_legacy_auth_$resource'(Resource,
-                                                                                                                __NewTopXMLNS,
-                                                                                                                'encode_legacy_auth_$username'(Username,
-                                                                                                                                               __NewTopXMLNS,
-                                                                                                                                               []))))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_legacy_auth_$digest'(undefined, __TopXMLNS,
-                            _acc) ->
-    _acc;
-'encode_legacy_auth_$digest'(Digest, __TopXMLNS,
-                            _acc) ->
-    [encode_legacy_auth_digest(Digest, __TopXMLNS) | _acc].
-
-'encode_legacy_auth_$password'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_legacy_auth_$password'(Password, __TopXMLNS,
-                              _acc) ->
-    [encode_legacy_auth_password(Password, __TopXMLNS)
-     | _acc].
-
-'encode_legacy_auth_$resource'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_legacy_auth_$resource'(Resource, __TopXMLNS,
-                              _acc) ->
-    [encode_legacy_auth_resource(Resource, __TopXMLNS)
-     | _acc].
-
-'encode_legacy_auth_$username'(undefined, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_legacy_auth_$username'(Username, __TopXMLNS,
-                              _acc) ->
-    [encode_legacy_auth_username(Username, __TopXMLNS)
-     | _acc].
-
-decode_legacy_auth_resource(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"resource">>, _attrs, _els}) ->
-    Cdata = decode_legacy_auth_resource_els(__TopXMLNS,
-                                           __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_legacy_auth_resource_els(__TopXMLNS, __IgnoreEls,
-                               [], Cdata) ->
-    decode_legacy_auth_resource_cdata(__TopXMLNS, Cdata);
-decode_legacy_auth_resource_els(__TopXMLNS, __IgnoreEls,
-                               [{xmlcdata, _data} | _els], Cdata) ->
-    decode_legacy_auth_resource_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<Cdata/binary, _data/binary>>);
-decode_legacy_auth_resource_els(__TopXMLNS, __IgnoreEls,
-                               [_ | _els], Cdata) ->
-    decode_legacy_auth_resource_els(__TopXMLNS, __IgnoreEls,
-                                   _els, Cdata).
-
-encode_legacy_auth_resource(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:auth">>,
-                                    [], __TopXMLNS),
-    _els = encode_legacy_auth_resource_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"resource">>, _attrs, _els}.
-
-decode_legacy_auth_resource_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_legacy_auth_resource_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_legacy_auth_resource_cdata(<<>>, _acc) -> _acc;
-encode_legacy_auth_resource_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_legacy_auth_digest(__TopXMLNS, __IgnoreEls,
-                         {xmlel, <<"digest">>, _attrs, _els}) ->
-    Cdata = decode_legacy_auth_digest_els(__TopXMLNS,
-                                         __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_legacy_auth_digest_els(__TopXMLNS, __IgnoreEls,
-                             [], Cdata) ->
-    decode_legacy_auth_digest_cdata(__TopXMLNS, Cdata);
-decode_legacy_auth_digest_els(__TopXMLNS, __IgnoreEls,
-                             [{xmlcdata, _data} | _els], Cdata) ->
-    decode_legacy_auth_digest_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<Cdata/binary, _data/binary>>);
-decode_legacy_auth_digest_els(__TopXMLNS, __IgnoreEls,
-                             [_ | _els], Cdata) ->
-    decode_legacy_auth_digest_els(__TopXMLNS, __IgnoreEls,
-                                 _els, Cdata).
-
-encode_legacy_auth_digest(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:auth">>,
-                                    [], __TopXMLNS),
-    _els = encode_legacy_auth_digest_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"digest">>, _attrs, _els}.
-
-decode_legacy_auth_digest_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_legacy_auth_digest_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_legacy_auth_digest_cdata(<<>>, _acc) -> _acc;
-encode_legacy_auth_digest_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_legacy_auth_password(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"password">>, _attrs, _els}) ->
-    Cdata = decode_legacy_auth_password_els(__TopXMLNS,
-                                           __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_legacy_auth_password_els(__TopXMLNS, __IgnoreEls,
-                               [], Cdata) ->
-    decode_legacy_auth_password_cdata(__TopXMLNS, Cdata);
-decode_legacy_auth_password_els(__TopXMLNS, __IgnoreEls,
-                               [{xmlcdata, _data} | _els], Cdata) ->
-    decode_legacy_auth_password_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<Cdata/binary, _data/binary>>);
-decode_legacy_auth_password_els(__TopXMLNS, __IgnoreEls,
-                               [_ | _els], Cdata) ->
-    decode_legacy_auth_password_els(__TopXMLNS, __IgnoreEls,
-                                   _els, Cdata).
-
-encode_legacy_auth_password(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:auth">>,
-                                    [], __TopXMLNS),
-    _els = encode_legacy_auth_password_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"password">>, _attrs, _els}.
-
-decode_legacy_auth_password_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_legacy_auth_password_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_legacy_auth_password_cdata(<<>>, _acc) -> _acc;
-encode_legacy_auth_password_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_legacy_auth_username(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"username">>, _attrs, _els}) ->
-    Cdata = decode_legacy_auth_username_els(__TopXMLNS,
-                                           __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_legacy_auth_username_els(__TopXMLNS, __IgnoreEls,
-                               [], Cdata) ->
-    decode_legacy_auth_username_cdata(__TopXMLNS, Cdata);
-decode_legacy_auth_username_els(__TopXMLNS, __IgnoreEls,
-                               [{xmlcdata, _data} | _els], Cdata) ->
-    decode_legacy_auth_username_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<Cdata/binary, _data/binary>>);
-decode_legacy_auth_username_els(__TopXMLNS, __IgnoreEls,
-                               [_ | _els], Cdata) ->
-    decode_legacy_auth_username_els(__TopXMLNS, __IgnoreEls,
-                                   _els, Cdata).
-
-encode_legacy_auth_username(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:auth">>,
-                                    [], __TopXMLNS),
-    _els = encode_legacy_auth_username_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"username">>, _attrs, _els}.
-
-decode_legacy_auth_username_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_legacy_auth_username_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_legacy_auth_username_cdata(<<>>, _acc) -> _acc;
-encode_legacy_auth_username_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_bind(__TopXMLNS, __IgnoreEls,
-           {xmlel, <<"bind">>, _attrs, _els}) ->
-    {Jid, Resource} = decode_bind_els(__TopXMLNS,
-                                     __IgnoreEls, _els, undefined, <<>>),
-    {bind, Jid, Resource}.
-
-decode_bind_els(__TopXMLNS, __IgnoreEls, [], Jid,
-               Resource) ->
-    {Jid, Resource};
-decode_bind_els(__TopXMLNS, __IgnoreEls,
-               [{xmlel, <<"jid">>, _attrs, _} = _el | _els], Jid,
-               Resource) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-bind">> ->
-         decode_bind_els(__TopXMLNS, __IgnoreEls, _els,
-                         decode_bind_jid(__TopXMLNS, __IgnoreEls, _el),
-                         Resource);
-      <<"urn:ietf:params:xml:ns:xmpp-bind">> ->
-         decode_bind_els(__TopXMLNS, __IgnoreEls, _els,
-                         decode_bind_jid(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                                         __IgnoreEls, _el),
-                         Resource);
-      _ ->
-         decode_bind_els(__TopXMLNS, __IgnoreEls, _els, Jid,
-                         Resource)
-    end;
-decode_bind_els(__TopXMLNS, __IgnoreEls,
-               [{xmlel, <<"resource">>, _attrs, _} = _el | _els], Jid,
-               Resource) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"urn:ietf:params:xml:ns:xmpp-bind">> ->
-         decode_bind_els(__TopXMLNS, __IgnoreEls, _els, Jid,
-                         decode_bind_resource(__TopXMLNS, __IgnoreEls, _el));
-      <<"urn:ietf:params:xml:ns:xmpp-bind">> ->
-         decode_bind_els(__TopXMLNS, __IgnoreEls, _els, Jid,
-                         decode_bind_resource(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                                              __IgnoreEls, _el));
-      _ ->
-         decode_bind_els(__TopXMLNS, __IgnoreEls, _els, Jid,
-                         Resource)
-    end;
-decode_bind_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-               Jid, Resource) ->
-    decode_bind_els(__TopXMLNS, __IgnoreEls, _els, Jid,
-                   Resource).
-
-encode_bind({bind, Jid, Resource}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_bind_$jid'(Jid,
-                                           __NewTopXMLNS,
-                                           'encode_bind_$resource'(Resource,
-                                                                   __NewTopXMLNS,
-                                                                   []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"bind">>, _attrs, _els}.
-
-'encode_bind_$jid'(undefined, __TopXMLNS, _acc) -> _acc;
-'encode_bind_$jid'(Jid, __TopXMLNS, _acc) ->
-    [encode_bind_jid(Jid, __TopXMLNS) | _acc].
-
-'encode_bind_$resource'(<<>>, __TopXMLNS, _acc) -> _acc;
-'encode_bind_$resource'(Resource, __TopXMLNS, _acc) ->
-    [encode_bind_resource(Resource, __TopXMLNS) | _acc].
-
-decode_bind_resource(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"resource">>, _attrs, _els}) ->
-    Cdata = decode_bind_resource_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_bind_resource_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_bind_resource_cdata(__TopXMLNS, Cdata);
-decode_bind_resource_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_bind_resource_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_bind_resource_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_bind_resource_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_bind_resource(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                        [], __TopXMLNS),
-    _els = encode_bind_resource_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"resource">>, _attrs, _els}.
-
-decode_bind_resource_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_bind_resource_cdata(__TopXMLNS, _val) ->
-    case catch resourceprep(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"resource">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bind_resource_cdata(<<>>, _acc) -> _acc;
-encode_bind_resource_cdata(_val, _acc) ->
-    [{xmlcdata, resourceprep(_val)} | _acc].
-
-decode_bind_jid(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"jid">>, _attrs, _els}) ->
-    Cdata = decode_bind_jid_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    Cdata.
-
-decode_bind_jid_els(__TopXMLNS, __IgnoreEls, [],
-                   Cdata) ->
-    decode_bind_jid_cdata(__TopXMLNS, Cdata);
-decode_bind_jid_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlcdata, _data} | _els], Cdata) ->
-    decode_bind_jid_els(__TopXMLNS, __IgnoreEls, _els,
-                       <<Cdata/binary, _data/binary>>);
-decode_bind_jid_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Cdata) ->
-    decode_bind_jid_els(__TopXMLNS, __IgnoreEls, _els,
-                       Cdata).
-
-encode_bind_jid(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-bind">>,
-                        [], __TopXMLNS),
-    _els = encode_bind_jid_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"jid">>, _attrs, _els}.
-
-decode_bind_jid_cdata(__TopXMLNS, <<>>) -> undefined;
-decode_bind_jid_cdata(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"jid">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bind_jid_cdata(undefined, _acc) -> _acc;
-encode_bind_jid_cdata(_val, _acc) ->
-    [{xmlcdata, enc_jid(_val)} | _acc].
-
-decode_error(__TopXMLNS, __IgnoreEls,
-            {xmlel, <<"error">>, _attrs, _els}) ->
-    {Text, Reason, __Els} = decode_error_els(__TopXMLNS,
-                                            __IgnoreEls, _els, undefined,
-                                            undefined, []),
-    {Type, Code, By} = decode_error_attrs(__TopXMLNS,
-                                         _attrs, undefined, undefined,
-                                         undefined),
-    {stanza_error, Type, Code, By, Reason, Text, __Els}.
-
-decode_error_els(__TopXMLNS, __IgnoreEls, [], Text,
-                Reason, __Els) ->
-    {Text, Reason, lists:reverse(__Els)};
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"text">>, _attrs, _} = _el | _els], Text,
-                Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els,
-                          decode_error_text(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            __IgnoreEls, _el),
-                          Reason, __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"bad-request">>, _attrs, _} = _el | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_bad_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                   __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"conflict">>, _attrs, _} = _el | _els], Text,
-                Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_conflict(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"feature-not-implemented">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_feature_not_implemented(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                               __IgnoreEls,
-                                                               _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"forbidden">>, _attrs, _} = _el | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_forbidden(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                 __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"gone">>, _attrs, _} = _el | _els], Text,
-                Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_gone(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                            __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"internal-server-error">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_internal_server_error(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                             __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"item-not-found">>, _attrs, _} = _el | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_item_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                      __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"jid-malformed">>, _attrs, _} = _el | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_jid_malformed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                     __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"not-acceptable">>, _attrs, _} = _el | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_not_acceptable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                      __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"not-allowed">>, _attrs, _} = _el | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_not_allowed(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                   __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"not-authorized">>, _attrs, _} = _el | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_not_authorized(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                      __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"payment-required">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_payment_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                        __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"policy-violation">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_policy_violation(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                        __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"recipient-unavailable">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_recipient_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                             __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"redirect">>, _attrs, _} = _el | _els], Text,
-                Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_redirect(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"registration-required">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_registration_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                             __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"remote-server-not-found">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_remote_server_not_found(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                               __IgnoreEls,
-                                                               _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"remote-server-timeout">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_remote_server_timeout(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                             __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"resource-constraint">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_resource_constraint(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                           __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"service-unavailable">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_service_unavailable(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                           __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"subscription-required">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_subscription_required(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                             __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"undefined-condition">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_undefined_condition(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                           __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"unexpected-request">>, _attrs, _} = _el
-                 | _els],
-                Text, Reason, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"urn:ietf:params:xml:ns:xmpp-stanzas">> ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          decode_error_unexpected_request(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                                                          __IgnoreEls, _el),
-                          __Els);
-      _ ->
-         decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                          Reason, __Els)
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, _, _, _} = _el | _els], Text, Reason, __Els) ->
-    if __IgnoreEls ->
-          decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                           Reason, [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                                 Reason,
-                                 [decode(_el, __TopXMLNS, []) | __Els]);
-            false ->
-                decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                                 Reason, __Els)
-          end
-    end;
-decode_error_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                Text, Reason, __Els) ->
-    decode_error_els(__TopXMLNS, __IgnoreEls, _els, Text,
-                    Reason, __Els).
-
-decode_error_attrs(__TopXMLNS,
-                  [{<<"type">>, _val} | _attrs], _Type, Code, By) ->
-    decode_error_attrs(__TopXMLNS, _attrs, _val, Code, By);
-decode_error_attrs(__TopXMLNS,
-                  [{<<"code">>, _val} | _attrs], Type, _Code, By) ->
-    decode_error_attrs(__TopXMLNS, _attrs, Type, _val, By);
-decode_error_attrs(__TopXMLNS,
-                  [{<<"by">>, _val} | _attrs], Type, Code, _By) ->
-    decode_error_attrs(__TopXMLNS, _attrs, Type, Code,
-                      _val);
-decode_error_attrs(__TopXMLNS, [_ | _attrs], Type, Code,
-                  By) ->
-    decode_error_attrs(__TopXMLNS, _attrs, Type, Code, By);
-decode_error_attrs(__TopXMLNS, [], Type, Code, By) ->
-    {decode_error_attr_type(__TopXMLNS, Type),
-     decode_error_attr_code(__TopXMLNS, Code),
-     decode_error_attr_by(__TopXMLNS, By)}.
-
-encode_error({stanza_error, Type, Code, By, Reason,
-             Text, __Els},
-            __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els] ++
-            lists:reverse('encode_error_$text'(Text, __NewTopXMLNS,
-                                               'encode_error_$reason'(Reason,
-                                                                      __NewTopXMLNS,
-                                                                      []))),
-    _attrs = encode_error_attr_by(By,
-                                 encode_error_attr_code(Code,
-                                                        encode_error_attr_type(Type,
-                                                                               enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                               __TopXMLNS)))),
-    {xmlel, <<"error">>, _attrs, _els}.
-
-'encode_error_$text'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_error_$text'(Text, __TopXMLNS, _acc) ->
-    [encode_error_text(Text, __TopXMLNS) | _acc].
-
-'encode_error_$reason'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_error_$reason'('bad-request' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_bad_request(Reason, __TopXMLNS) | _acc];
-'encode_error_$reason'(conflict = Reason, __TopXMLNS,
-                      _acc) ->
-    [encode_error_conflict(Reason, __TopXMLNS) | _acc];
-'encode_error_$reason'('feature-not-implemented' =
-                          Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_feature_not_implemented(Reason,
-                                         __TopXMLNS)
-     | _acc];
-'encode_error_$reason'(forbidden = Reason, __TopXMLNS,
-                      _acc) ->
-    [encode_error_forbidden(Reason, __TopXMLNS) | _acc];
-'encode_error_$reason'({gone, _} = Reason, __TopXMLNS,
-                      _acc) ->
-    [encode_error_gone(Reason, __TopXMLNS) | _acc];
-'encode_error_$reason'('internal-server-error' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_internal_server_error(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('item-not-found' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_item_not_found(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('jid-malformed' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_jid_malformed(Reason, __TopXMLNS) | _acc];
-'encode_error_$reason'('not-acceptable' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_not_acceptable(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('not-allowed' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_not_allowed(Reason, __TopXMLNS) | _acc];
-'encode_error_$reason'('not-authorized' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_not_authorized(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('payment-required' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_payment_required(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('policy-violation' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_policy_violation(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('recipient-unavailable' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_recipient_unavailable(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'({redirect, _} = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_redirect(Reason, __TopXMLNS) | _acc];
-'encode_error_$reason'('registration-required' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_registration_required(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('remote-server-not-found' =
-                          Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_remote_server_not_found(Reason,
-                                         __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('remote-server-timeout' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_remote_server_timeout(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('resource-constraint' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_resource_constraint(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('service-unavailable' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_service_unavailable(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('subscription-required' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_subscription_required(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('undefined-condition' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_undefined_condition(Reason, __TopXMLNS)
-     | _acc];
-'encode_error_$reason'('unexpected-request' = Reason,
-                      __TopXMLNS, _acc) ->
-    [encode_error_unexpected_request(Reason, __TopXMLNS)
-     | _acc].
-
-decode_error_attr_type(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"error">>, __TopXMLNS}});
-decode_error_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [auth, cancel, continue, modify, wait])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"error">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_error_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_error_attr_code(__TopXMLNS, undefined) ->
-    undefined;
-decode_error_attr_code(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"code">>, <<"error">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_error_attr_code(undefined, _acc) -> _acc;
-encode_error_attr_code(_val, _acc) ->
-    [{<<"code">>, enc_int(_val)} | _acc].
-
-decode_error_attr_by(__TopXMLNS, undefined) -> <<>>;
-decode_error_attr_by(__TopXMLNS, _val) -> _val.
-
-encode_error_attr_by(<<>>, _acc) -> _acc;
-encode_error_attr_by(_val, _acc) ->
-    [{<<"by">>, _val} | _acc].
-
-decode_error_text(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"text">>, _attrs, _els}) ->
-    Data = decode_error_text_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<>>),
-    Lang = decode_error_text_attrs(__TopXMLNS, _attrs,
-                                  undefined),
-    {text, Lang, Data}.
-
-decode_error_text_els(__TopXMLNS, __IgnoreEls, [],
-                     Data) ->
-    decode_error_text_cdata(__TopXMLNS, Data);
-decode_error_text_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Data) ->
-    decode_error_text_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Data/binary, _data/binary>>);
-decode_error_text_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Data) ->
-    decode_error_text_els(__TopXMLNS, __IgnoreEls, _els,
-                         Data).
-
-decode_error_text_attrs(__TopXMLNS,
-                       [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
-    decode_error_text_attrs(__TopXMLNS, _attrs, _val);
-decode_error_text_attrs(__TopXMLNS, [_ | _attrs],
-                       Lang) ->
-    decode_error_text_attrs(__TopXMLNS, _attrs, Lang);
-decode_error_text_attrs(__TopXMLNS, [], Lang) ->
-    'decode_error_text_attr_xml:lang'(__TopXMLNS, Lang).
-
-encode_error_text({text, Lang, Data}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = encode_error_text_cdata(Data, []),
-    _attrs = 'encode_error_text_attr_xml:lang'(Lang,
-                                              enc_xmlns_attrs(__NewTopXMLNS,
-                                                              __TopXMLNS)),
-    {xmlel, <<"text">>, _attrs, _els}.
-
-'decode_error_text_attr_xml:lang'(__TopXMLNS,
-                                 undefined) ->
-    <<>>;
-'decode_error_text_attr_xml:lang'(__TopXMLNS, _val) ->
-    _val.
-
-'encode_error_text_attr_xml:lang'(<<>>, _acc) -> _acc;
-'encode_error_text_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_error_text_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_error_text_cdata(__TopXMLNS, _val) -> _val.
-
-encode_error_text_cdata(<<>>, _acc) -> _acc;
-encode_error_text_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_error_unexpected_request(__TopXMLNS, __IgnoreEls,
-                               {xmlel, <<"unexpected-request">>, _attrs,
-                                _els}) ->
-    'unexpected-request'.
-
-encode_error_unexpected_request('unexpected-request',
-                               __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"unexpected-request">>, _attrs, _els}.
-
-decode_error_undefined_condition(__TopXMLNS,
-                                __IgnoreEls,
-                                {xmlel, <<"undefined-condition">>, _attrs,
-                                 _els}) ->
-    'undefined-condition'.
-
-encode_error_undefined_condition('undefined-condition',
-                                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"undefined-condition">>, _attrs, _els}.
-
-decode_error_subscription_required(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"subscription-required">>, _attrs,
-                                   _els}) ->
-    'subscription-required'.
-
-encode_error_subscription_required('subscription-required',
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"subscription-required">>, _attrs, _els}.
-
-decode_error_service_unavailable(__TopXMLNS,
-                                __IgnoreEls,
-                                {xmlel, <<"service-unavailable">>, _attrs,
-                                 _els}) ->
-    'service-unavailable'.
-
-encode_error_service_unavailable('service-unavailable',
-                                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"service-unavailable">>, _attrs, _els}.
-
-decode_error_resource_constraint(__TopXMLNS,
-                                __IgnoreEls,
-                                {xmlel, <<"resource-constraint">>, _attrs,
-                                 _els}) ->
-    'resource-constraint'.
-
-encode_error_resource_constraint('resource-constraint',
-                                __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"resource-constraint">>, _attrs, _els}.
-
-decode_error_remote_server_timeout(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"remote-server-timeout">>, _attrs,
-                                   _els}) ->
-    'remote-server-timeout'.
-
-encode_error_remote_server_timeout('remote-server-timeout',
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"remote-server-timeout">>, _attrs, _els}.
-
-decode_error_remote_server_not_found(__TopXMLNS,
-                                    __IgnoreEls,
-                                    {xmlel, <<"remote-server-not-found">>,
-                                     _attrs, _els}) ->
-    'remote-server-not-found'.
-
-encode_error_remote_server_not_found('remote-server-not-found',
-                                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"remote-server-not-found">>, _attrs, _els}.
-
-decode_error_registration_required(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"registration-required">>, _attrs,
-                                   _els}) ->
-    'registration-required'.
-
-encode_error_registration_required('registration-required',
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"registration-required">>, _attrs, _els}.
-
-decode_error_redirect(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"redirect">>, _attrs, _els}) ->
-    Uri = decode_error_redirect_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    {redirect, Uri}.
-
-decode_error_redirect_els(__TopXMLNS, __IgnoreEls, [],
-                         Uri) ->
-    decode_error_redirect_cdata(__TopXMLNS, Uri);
-decode_error_redirect_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Uri) ->
-    decode_error_redirect_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Uri/binary, _data/binary>>);
-decode_error_redirect_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Uri) ->
-    decode_error_redirect_els(__TopXMLNS, __IgnoreEls, _els,
-                             Uri).
-
-encode_error_redirect({redirect, Uri}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = encode_error_redirect_cdata(Uri, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"redirect">>, _attrs, _els}.
-
-decode_error_redirect_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_error_redirect_cdata(__TopXMLNS, _val) -> _val.
-
-encode_error_redirect_cdata(<<>>, _acc) -> _acc;
-encode_error_redirect_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_error_recipient_unavailable(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"recipient-unavailable">>, _attrs,
-                                   _els}) ->
-    'recipient-unavailable'.
-
-encode_error_recipient_unavailable('recipient-unavailable',
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"recipient-unavailable">>, _attrs, _els}.
-
-decode_error_policy_violation(__TopXMLNS, __IgnoreEls,
-                             {xmlel, <<"policy-violation">>, _attrs, _els}) ->
-    'policy-violation'.
-
-encode_error_policy_violation('policy-violation',
-                             __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"policy-violation">>, _attrs, _els}.
-
-decode_error_payment_required(__TopXMLNS, __IgnoreEls,
-                             {xmlel, <<"payment-required">>, _attrs, _els}) ->
-    'payment-required'.
-
-encode_error_payment_required('payment-required',
-                             __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"payment-required">>, _attrs, _els}.
-
-decode_error_not_authorized(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"not-authorized">>, _attrs, _els}) ->
-    'not-authorized'.
-
-encode_error_not_authorized('not-authorized',
-                           __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"not-authorized">>, _attrs, _els}.
-
-decode_error_not_allowed(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"not-allowed">>, _attrs, _els}) ->
-    'not-allowed'.
-
-encode_error_not_allowed('not-allowed', __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"not-allowed">>, _attrs, _els}.
-
-decode_error_not_acceptable(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"not-acceptable">>, _attrs, _els}) ->
-    'not-acceptable'.
-
-encode_error_not_acceptable('not-acceptable',
-                           __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"not-acceptable">>, _attrs, _els}.
-
-decode_error_jid_malformed(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"jid-malformed">>, _attrs, _els}) ->
-    'jid-malformed'.
-
-encode_error_jid_malformed('jid-malformed',
-                          __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"jid-malformed">>, _attrs, _els}.
-
-decode_error_item_not_found(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"item-not-found">>, _attrs, _els}) ->
-    'item-not-found'.
-
-encode_error_item_not_found('item-not-found',
-                           __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"item-not-found">>, _attrs, _els}.
-
-decode_error_internal_server_error(__TopXMLNS,
-                                  __IgnoreEls,
-                                  {xmlel, <<"internal-server-error">>, _attrs,
-                                   _els}) ->
-    'internal-server-error'.
-
-encode_error_internal_server_error('internal-server-error',
-                                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"internal-server-error">>, _attrs, _els}.
-
-decode_error_gone(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"gone">>, _attrs, _els}) ->
-    Uri = decode_error_gone_els(__TopXMLNS, __IgnoreEls,
-                               _els, <<>>),
-    {gone, Uri}.
-
-decode_error_gone_els(__TopXMLNS, __IgnoreEls, [],
-                     Uri) ->
-    decode_error_gone_cdata(__TopXMLNS, Uri);
-decode_error_gone_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Uri) ->
-    decode_error_gone_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Uri/binary, _data/binary>>);
-decode_error_gone_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Uri) ->
-    decode_error_gone_els(__TopXMLNS, __IgnoreEls, _els,
-                         Uri).
-
-encode_error_gone({gone, Uri}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = encode_error_gone_cdata(Uri, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"gone">>, _attrs, _els}.
-
-decode_error_gone_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_error_gone_cdata(__TopXMLNS, _val) -> _val.
-
-encode_error_gone_cdata(<<>>, _acc) -> _acc;
-encode_error_gone_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_error_forbidden(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"forbidden">>, _attrs, _els}) ->
-    forbidden.
-
-encode_error_forbidden(forbidden, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"forbidden">>, _attrs, _els}.
-
-decode_error_feature_not_implemented(__TopXMLNS,
-                                    __IgnoreEls,
-                                    {xmlel, <<"feature-not-implemented">>,
-                                     _attrs, _els}) ->
-    'feature-not-implemented'.
-
-encode_error_feature_not_implemented('feature-not-implemented',
-                                    __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"feature-not-implemented">>, _attrs, _els}.
-
-decode_error_conflict(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"conflict">>, _attrs, _els}) ->
-    conflict.
-
-encode_error_conflict(conflict, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"conflict">>, _attrs, _els}.
-
-decode_error_bad_request(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"bad-request">>, _attrs, _els}) ->
-    'bad-request'.
-
-encode_error_bad_request('bad-request', __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"bad-request">>, _attrs, _els}.
-
-decode_presence(__TopXMLNS, __IgnoreEls,
-               {xmlel, <<"presence">>, _attrs, _els}) ->
-    {Status, Show, Priority, __Els} =
-       decode_presence_els(__TopXMLNS, __IgnoreEls, _els, [],
-                           undefined, undefined, []),
-    {Id, Type, From, To, Lang} =
-       decode_presence_attrs(__TopXMLNS, _attrs, undefined,
-                             undefined, undefined, undefined, undefined),
-    {presence, Id, Type, Lang, From, To, Show, Status,
-     Priority, __Els}.
-
-decode_presence_els(__TopXMLNS, __IgnoreEls, [], Status,
-                   Show, Priority, __Els) ->
-    {lists:reverse(Status), Show, Priority,
-     lists:reverse(__Els)};
-decode_presence_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"show">>, _attrs, _} = _el | _els], Status,
-                   Show, Priority, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"jabber:server">>;
-              __TopXMLNS == <<"jabber:component:accept">>;
-              __TopXMLNS == <<"jabber:client">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status,
-                             decode_presence_show(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                             Priority, __Els);
-      <<"jabber:client">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status,
-                             decode_presence_show(<<"jabber:client">>,
-                                                  __IgnoreEls, _el),
-                             Priority, __Els);
-      <<"jabber:server">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status,
-                             decode_presence_show(<<"jabber:server">>,
-                                                  __IgnoreEls, _el),
-                             Priority, __Els);
-      <<"jabber:component:accept">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status,
-                             decode_presence_show(<<"jabber:component:accept">>,
-                                                  __IgnoreEls, _el),
-                             Priority, __Els);
-      _ ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status, Show, Priority, __Els)
-    end;
-decode_presence_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"status">>, _attrs, _} = _el | _els], Status,
-                   Show, Priority, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"jabber:server">>;
-              __TopXMLNS == <<"jabber:component:accept">>;
-              __TopXMLNS == <<"jabber:client">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             [decode_presence_status(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                              | Status],
-                             Show, Priority, __Els);
-      <<"jabber:client">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             [decode_presence_status(<<"jabber:client">>,
-                                                     __IgnoreEls, _el)
-                              | Status],
-                             Show, Priority, __Els);
-      <<"jabber:server">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             [decode_presence_status(<<"jabber:server">>,
-                                                     __IgnoreEls, _el)
-                              | Status],
-                             Show, Priority, __Els);
-      <<"jabber:component:accept">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             [decode_presence_status(<<"jabber:component:accept">>,
-                                                     __IgnoreEls, _el)
-                              | Status],
-                             Show, Priority, __Els);
-      _ ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status, Show, Priority, __Els)
-    end;
-decode_presence_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, <<"priority">>, _attrs, _} = _el | _els],
-                   Status, Show, Priority, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"jabber:server">>;
-              __TopXMLNS == <<"jabber:component:accept">>;
-              __TopXMLNS == <<"jabber:client">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status, Show,
-                             decode_presence_priority(__TopXMLNS, __IgnoreEls,
-                                                      _el),
-                             __Els);
-      <<"jabber:client">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status, Show,
-                             decode_presence_priority(<<"jabber:client">>,
-                                                      __IgnoreEls, _el),
-                             __Els);
-      <<"jabber:server">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status, Show,
-                             decode_presence_priority(<<"jabber:server">>,
-                                                      __IgnoreEls, _el),
-                             __Els);
-      <<"jabber:component:accept">> ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status, Show,
-                             decode_presence_priority(<<"jabber:component:accept">>,
-                                                      __IgnoreEls, _el),
-                             __Els);
-      _ ->
-         decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                             Status, Show, Priority, __Els)
-    end;
-decode_presence_els(__TopXMLNS, __IgnoreEls,
-                   [{xmlel, _, _, _} = _el | _els], Status, Show, Priority,
-                   __Els) ->
-    if __IgnoreEls ->
-          decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                              Status, Show, Priority, [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                                    Status, Show, Priority,
-                                    [decode(_el, __TopXMLNS, []) | __Els]);
-            false ->
-                decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                                    Status, Show, Priority, __Els)
-          end
-    end;
-decode_presence_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                   Status, Show, Priority, __Els) ->
-    decode_presence_els(__TopXMLNS, __IgnoreEls, _els,
-                       Status, Show, Priority, __Els).
-
-decode_presence_attrs(__TopXMLNS,
-                     [{<<"id">>, _val} | _attrs], _Id, Type, From, To,
-                     Lang) ->
-    decode_presence_attrs(__TopXMLNS, _attrs, _val, Type,
-                         From, To, Lang);
-decode_presence_attrs(__TopXMLNS,
-                     [{<<"type">>, _val} | _attrs], Id, _Type, From, To,
-                     Lang) ->
-    decode_presence_attrs(__TopXMLNS, _attrs, Id, _val,
-                         From, To, Lang);
-decode_presence_attrs(__TopXMLNS,
-                     [{<<"from">>, _val} | _attrs], Id, Type, _From, To,
-                     Lang) ->
-    decode_presence_attrs(__TopXMLNS, _attrs, Id, Type,
-                         _val, To, Lang);
-decode_presence_attrs(__TopXMLNS,
-                     [{<<"to">>, _val} | _attrs], Id, Type, From, _To,
-                     Lang) ->
-    decode_presence_attrs(__TopXMLNS, _attrs, Id, Type,
-                         From, _val, Lang);
-decode_presence_attrs(__TopXMLNS,
-                     [{<<"xml:lang">>, _val} | _attrs], Id, Type, From, To,
-                     _Lang) ->
-    decode_presence_attrs(__TopXMLNS, _attrs, Id, Type,
-                         From, To, _val);
-decode_presence_attrs(__TopXMLNS, [_ | _attrs], Id,
-                     Type, From, To, Lang) ->
-    decode_presence_attrs(__TopXMLNS, _attrs, Id, Type,
-                         From, To, Lang);
-decode_presence_attrs(__TopXMLNS, [], Id, Type, From,
-                     To, Lang) ->
-    {decode_presence_attr_id(__TopXMLNS, Id),
-     decode_presence_attr_type(__TopXMLNS, Type),
-     decode_presence_attr_from(__TopXMLNS, From),
-     decode_presence_attr_to(__TopXMLNS, To),
-     'decode_presence_attr_xml:lang'(__TopXMLNS, Lang)}.
-
-encode_presence({presence, Id, Type, Lang, From, To,
-                Show, Status, Priority, __Els},
-               __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els] ++
-            lists:reverse('encode_presence_$status'(Status,
-                                                    __NewTopXMLNS,
-                                                    'encode_presence_$show'(Show,
-                                                                            __NewTopXMLNS,
-                                                                            'encode_presence_$priority'(Priority,
-                                                                                                        __NewTopXMLNS,
-                                                                                                        [])))),
-    _attrs = 'encode_presence_attr_xml:lang'(Lang,
-                                            encode_presence_attr_to(To,
-                                                                    encode_presence_attr_from(From,
-                                                                                              encode_presence_attr_type(Type,
-                                                                                                                        encode_presence_attr_id(Id,
-                                                                                                                                                enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                                __TopXMLNS)))))),
-    {xmlel, <<"presence">>, _attrs, _els}.
-
-'encode_presence_$status'([], __TopXMLNS, _acc) -> _acc;
-'encode_presence_$status'([Status | _els], __TopXMLNS,
-                         _acc) ->
-    'encode_presence_$status'(_els, __TopXMLNS,
-                             [encode_presence_status(Status, __TopXMLNS)
-                              | _acc]).
-
-'encode_presence_$show'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_presence_$show'(Show, __TopXMLNS, _acc) ->
-    [encode_presence_show(Show, __TopXMLNS) | _acc].
-
-'encode_presence_$priority'(undefined, __TopXMLNS,
-                           _acc) ->
-    _acc;
-'encode_presence_$priority'(Priority, __TopXMLNS,
-                           _acc) ->
-    [encode_presence_priority(Priority, __TopXMLNS) | _acc].
-
-decode_presence_attr_id(__TopXMLNS, undefined) -> <<>>;
-decode_presence_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_presence_attr_id(<<>>, _acc) -> _acc;
-encode_presence_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_presence_attr_type(__TopXMLNS, undefined) ->
-    available;
-decode_presence_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [unavailable, subscribe, subscribed, unsubscribe,
-                        unsubscribed, available, probe, error])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"presence">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_presence_attr_type(available, _acc) -> _acc;
-encode_presence_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_presence_attr_from(__TopXMLNS, undefined) ->
-    undefined;
-decode_presence_attr_from(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"presence">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_presence_attr_from(undefined, _acc) -> _acc;
-encode_presence_attr_from(_val, _acc) ->
-    [{<<"from">>, enc_jid(_val)} | _acc].
-
-decode_presence_attr_to(__TopXMLNS, undefined) ->
-    undefined;
-decode_presence_attr_to(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"presence">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_presence_attr_to(undefined, _acc) -> _acc;
-encode_presence_attr_to(_val, _acc) ->
-    [{<<"to">>, enc_jid(_val)} | _acc].
-
-'decode_presence_attr_xml:lang'(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-'decode_presence_attr_xml:lang'(__TopXMLNS, _val) ->
-    _val.
-
-'encode_presence_attr_xml:lang'(<<>>, _acc) -> _acc;
-'encode_presence_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_presence_priority(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"priority">>, _attrs, _els}) ->
-    Cdata = decode_presence_priority_els(__TopXMLNS,
-                                        __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_presence_priority_els(__TopXMLNS, __IgnoreEls,
-                            [], Cdata) ->
-    decode_presence_priority_cdata(__TopXMLNS, Cdata);
-decode_presence_priority_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlcdata, _data} | _els], Cdata) ->
-    decode_presence_priority_els(__TopXMLNS, __IgnoreEls,
-                                _els, <<Cdata/binary, _data/binary>>);
-decode_presence_priority_els(__TopXMLNS, __IgnoreEls,
-                            [_ | _els], Cdata) ->
-    decode_presence_priority_els(__TopXMLNS, __IgnoreEls,
-                                _els, Cdata).
-
-encode_presence_priority(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = encode_presence_priority_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"priority">>, _attrs, _els}.
-
-decode_presence_priority_cdata(__TopXMLNS, <<>>) ->
-    undefined;
-decode_presence_priority_cdata(__TopXMLNS, _val) ->
-    case catch dec_int(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"priority">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_presence_priority_cdata(undefined, _acc) -> _acc;
-encode_presence_priority_cdata(_val, _acc) ->
-    [{xmlcdata, enc_int(_val)} | _acc].
-
-decode_presence_status(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"status">>, _attrs, _els}) ->
-    Data = decode_presence_status_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Lang = decode_presence_status_attrs(__TopXMLNS, _attrs,
-                                       undefined),
-    {text, Lang, Data}.
-
-decode_presence_status_els(__TopXMLNS, __IgnoreEls, [],
-                          Data) ->
-    decode_presence_status_cdata(__TopXMLNS, Data);
-decode_presence_status_els(__TopXMLNS, __IgnoreEls,
-                          [{xmlcdata, _data} | _els], Data) ->
-    decode_presence_status_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<Data/binary, _data/binary>>);
-decode_presence_status_els(__TopXMLNS, __IgnoreEls,
-                          [_ | _els], Data) ->
-    decode_presence_status_els(__TopXMLNS, __IgnoreEls,
-                              _els, Data).
-
-decode_presence_status_attrs(__TopXMLNS,
-                            [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
-    decode_presence_status_attrs(__TopXMLNS, _attrs, _val);
-decode_presence_status_attrs(__TopXMLNS, [_ | _attrs],
-                            Lang) ->
-    decode_presence_status_attrs(__TopXMLNS, _attrs, Lang);
-decode_presence_status_attrs(__TopXMLNS, [], Lang) ->
-    'decode_presence_status_attr_xml:lang'(__TopXMLNS,
-                                          Lang).
-
-encode_presence_status({text, Lang, Data},
-                      __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = encode_presence_status_cdata(Data, []),
-    _attrs = 'encode_presence_status_attr_xml:lang'(Lang,
-                                                   enc_xmlns_attrs(__NewTopXMLNS,
-                                                                   __TopXMLNS)),
-    {xmlel, <<"status">>, _attrs, _els}.
-
-'decode_presence_status_attr_xml:lang'(__TopXMLNS,
-                                      undefined) ->
-    <<>>;
-'decode_presence_status_attr_xml:lang'(__TopXMLNS,
-                                      _val) ->
-    _val.
-
-'encode_presence_status_attr_xml:lang'(<<>>, _acc) ->
-    _acc;
-'encode_presence_status_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_presence_status_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_presence_status_cdata(__TopXMLNS, _val) -> _val.
-
-encode_presence_status_cdata(<<>>, _acc) -> _acc;
-encode_presence_status_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_presence_show(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"show">>, _attrs, _els}) ->
-    Cdata = decode_presence_show_els(__TopXMLNS,
-                                    __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_presence_show_els(__TopXMLNS, __IgnoreEls, [],
-                        Cdata) ->
-    decode_presence_show_cdata(__TopXMLNS, Cdata);
-decode_presence_show_els(__TopXMLNS, __IgnoreEls,
-                        [{xmlcdata, _data} | _els], Cdata) ->
-    decode_presence_show_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<Cdata/binary, _data/binary>>);
-decode_presence_show_els(__TopXMLNS, __IgnoreEls,
-                        [_ | _els], Cdata) ->
-    decode_presence_show_els(__TopXMLNS, __IgnoreEls, _els,
-                            Cdata).
-
-encode_presence_show(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = encode_presence_show_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"show">>, _attrs, _els}.
-
-decode_presence_show_cdata(__TopXMLNS, <<>>) ->
-    undefined;
-decode_presence_show_cdata(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [away, chat, dnd, xa]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_cdata_value, <<>>, <<"show">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_presence_show_cdata(undefined, _acc) -> _acc;
-encode_presence_show_cdata(_val, _acc) ->
-    [{xmlcdata, enc_enum(_val)} | _acc].
-
-decode_message(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"message">>, _attrs, _els}) ->
-    {Thread, Subject, Body, __Els} =
-       decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                          undefined, [], [], []),
-    {Id, Type, From, To, Lang} =
-       decode_message_attrs(__TopXMLNS, _attrs, undefined,
-                            undefined, undefined, undefined, undefined),
-    {message, Id, Type, Lang, From, To, Subject, Body,
-     Thread, __Els}.
-
-decode_message_els(__TopXMLNS, __IgnoreEls, [], Thread,
-                  Subject, Body, __Els) ->
-    {Thread, lists:reverse(Subject), lists:reverse(Body),
-     lists:reverse(__Els)};
-decode_message_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"subject">>, _attrs, _} = _el | _els],
-                  Thread, Subject, Body, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"jabber:server">>;
-              __TopXMLNS == <<"jabber:component:accept">>;
-              __TopXMLNS == <<"jabber:client">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread,
-                            [decode_message_subject(__TopXMLNS, __IgnoreEls,
-                                                    _el)
-                             | Subject],
-                            Body, __Els);
-      <<"jabber:client">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread,
-                            [decode_message_subject(<<"jabber:client">>,
-                                                    __IgnoreEls, _el)
-                             | Subject],
-                            Body, __Els);
-      <<"jabber:server">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread,
-                            [decode_message_subject(<<"jabber:server">>,
-                                                    __IgnoreEls, _el)
-                             | Subject],
-                            Body, __Els);
-      <<"jabber:component:accept">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread,
-                            [decode_message_subject(<<"jabber:component:accept">>,
-                                                    __IgnoreEls, _el)
-                             | Subject],
-                            Body, __Els);
-      _ ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread, Subject, Body, __Els)
-    end;
-decode_message_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"thread">>, _attrs, _} = _el | _els], Thread,
-                  Subject, Body, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"jabber:server">>;
-              __TopXMLNS == <<"jabber:component:accept">>;
-              __TopXMLNS == <<"jabber:client">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_message_thread(__TopXMLNS, __IgnoreEls,
-                                                  _el),
-                            Subject, Body, __Els);
-      <<"jabber:client">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_message_thread(<<"jabber:client">>,
-                                                  __IgnoreEls, _el),
-                            Subject, Body, __Els);
-      <<"jabber:server">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_message_thread(<<"jabber:server">>,
-                                                  __IgnoreEls, _el),
-                            Subject, Body, __Els);
-      <<"jabber:component:accept">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_message_thread(<<"jabber:component:accept">>,
-                                                  __IgnoreEls, _el),
-                            Subject, Body, __Els);
-      _ ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread, Subject, Body, __Els)
-    end;
-decode_message_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"body">>, _attrs, _} = _el | _els], Thread,
-                  Subject, Body, __Els) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS == <<"jabber:server">>;
-              __TopXMLNS == <<"jabber:component:accept">>;
-              __TopXMLNS == <<"jabber:client">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread, Subject,
-                            [decode_message_body(__TopXMLNS, __IgnoreEls, _el)
-                             | Body],
-                            __Els);
-      <<"jabber:client">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread, Subject,
-                            [decode_message_body(<<"jabber:client">>,
-                                                 __IgnoreEls, _el)
-                             | Body],
-                            __Els);
-      <<"jabber:server">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread, Subject,
-                            [decode_message_body(<<"jabber:server">>,
-                                                 __IgnoreEls, _el)
-                             | Body],
-                            __Els);
-      <<"jabber:component:accept">> ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread, Subject,
-                            [decode_message_body(<<"jabber:component:accept">>,
-                                                 __IgnoreEls, _el)
-                             | Body],
-                            __Els);
-      _ ->
-         decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                            Thread, Subject, Body, __Els)
-    end;
-decode_message_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, _, _, _} = _el | _els], Thread, Subject, Body,
-                  __Els) ->
-    if __IgnoreEls ->
-          decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                             Thread, Subject, Body, [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Thread, Subject, Body,
-                                   [decode(_el, __TopXMLNS, []) | __Els]);
-            false ->
-                decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                                   Thread, Subject, Body, __Els)
-          end
-    end;
-decode_message_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Thread, Subject, Body, __Els) ->
-    decode_message_els(__TopXMLNS, __IgnoreEls, _els,
-                      Thread, Subject, Body, __Els).
-
-decode_message_attrs(__TopXMLNS,
-                    [{<<"id">>, _val} | _attrs], _Id, Type, From, To,
-                    Lang) ->
-    decode_message_attrs(__TopXMLNS, _attrs, _val, Type,
-                        From, To, Lang);
-decode_message_attrs(__TopXMLNS,
-                    [{<<"type">>, _val} | _attrs], Id, _Type, From, To,
-                    Lang) ->
-    decode_message_attrs(__TopXMLNS, _attrs, Id, _val, From,
-                        To, Lang);
-decode_message_attrs(__TopXMLNS,
-                    [{<<"from">>, _val} | _attrs], Id, Type, _From, To,
-                    Lang) ->
-    decode_message_attrs(__TopXMLNS, _attrs, Id, Type, _val,
-                        To, Lang);
-decode_message_attrs(__TopXMLNS,
-                    [{<<"to">>, _val} | _attrs], Id, Type, From, _To,
-                    Lang) ->
-    decode_message_attrs(__TopXMLNS, _attrs, Id, Type, From,
-                        _val, Lang);
-decode_message_attrs(__TopXMLNS,
-                    [{<<"xml:lang">>, _val} | _attrs], Id, Type, From, To,
-                    _Lang) ->
-    decode_message_attrs(__TopXMLNS, _attrs, Id, Type, From,
-                        To, _val);
-decode_message_attrs(__TopXMLNS, [_ | _attrs], Id, Type,
-                    From, To, Lang) ->
-    decode_message_attrs(__TopXMLNS, _attrs, Id, Type, From,
-                        To, Lang);
-decode_message_attrs(__TopXMLNS, [], Id, Type, From, To,
-                    Lang) ->
-    {decode_message_attr_id(__TopXMLNS, Id),
-     decode_message_attr_type(__TopXMLNS, Type),
-     decode_message_attr_from(__TopXMLNS, From),
-     decode_message_attr_to(__TopXMLNS, To),
-     'decode_message_attr_xml:lang'(__TopXMLNS, Lang)}.
-
-encode_message({message, Id, Type, Lang, From, To,
-               Subject, Body, Thread, __Els},
-              __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els] ++
-            lists:reverse('encode_message_$thread'(Thread,
-                                                   __NewTopXMLNS,
-                                                   'encode_message_$subject'(Subject,
-                                                                             __NewTopXMLNS,
-                                                                             'encode_message_$body'(Body,
-                                                                                                    __NewTopXMLNS,
-                                                                                                    [])))),
-    _attrs = 'encode_message_attr_xml:lang'(Lang,
-                                           encode_message_attr_to(To,
-                                                                  encode_message_attr_from(From,
-                                                                                           encode_message_attr_type(Type,
-                                                                                                                    encode_message_attr_id(Id,
-                                                                                                                                           enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                           __TopXMLNS)))))),
-    {xmlel, <<"message">>, _attrs, _els}.
-
-'encode_message_$thread'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_message_$thread'(Thread, __TopXMLNS, _acc) ->
-    [encode_message_thread(Thread, __TopXMLNS) | _acc].
-
-'encode_message_$subject'([], __TopXMLNS, _acc) -> _acc;
-'encode_message_$subject'([Subject | _els], __TopXMLNS,
-                         _acc) ->
-    'encode_message_$subject'(_els, __TopXMLNS,
-                             [encode_message_subject(Subject, __TopXMLNS)
-                              | _acc]).
-
-'encode_message_$body'([], __TopXMLNS, _acc) -> _acc;
-'encode_message_$body'([Body | _els], __TopXMLNS,
-                      _acc) ->
-    'encode_message_$body'(_els, __TopXMLNS,
-                          [encode_message_body(Body, __TopXMLNS) | _acc]).
-
-decode_message_attr_id(__TopXMLNS, undefined) -> <<>>;
-decode_message_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_message_attr_id(<<>>, _acc) -> _acc;
-encode_message_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_message_attr_type(__TopXMLNS, undefined) ->
-    normal;
-decode_message_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val,
-                       [chat, normal, groupchat, headline, error])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"message">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_message_attr_type(normal, _acc) -> _acc;
-encode_message_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_message_attr_from(__TopXMLNS, undefined) ->
-    undefined;
-decode_message_attr_from(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"message">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_message_attr_from(undefined, _acc) -> _acc;
-encode_message_attr_from(_val, _acc) ->
-    [{<<"from">>, enc_jid(_val)} | _acc].
-
-decode_message_attr_to(__TopXMLNS, undefined) ->
-    undefined;
-decode_message_attr_to(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"message">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_message_attr_to(undefined, _acc) -> _acc;
-encode_message_attr_to(_val, _acc) ->
-    [{<<"to">>, enc_jid(_val)} | _acc].
-
-'decode_message_attr_xml:lang'(__TopXMLNS, undefined) ->
-    <<>>;
-'decode_message_attr_xml:lang'(__TopXMLNS, _val) ->
-    _val.
-
-'encode_message_attr_xml:lang'(<<>>, _acc) -> _acc;
-'encode_message_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_message_thread(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"thread">>, _attrs, _els}) ->
-    Cdata = decode_message_thread_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_message_thread_els(__TopXMLNS, __IgnoreEls, [],
-                         Cdata) ->
-    decode_message_thread_cdata(__TopXMLNS, Cdata);
-decode_message_thread_els(__TopXMLNS, __IgnoreEls,
-                         [{xmlcdata, _data} | _els], Cdata) ->
-    decode_message_thread_els(__TopXMLNS, __IgnoreEls, _els,
-                             <<Cdata/binary, _data/binary>>);
-decode_message_thread_els(__TopXMLNS, __IgnoreEls,
-                         [_ | _els], Cdata) ->
-    decode_message_thread_els(__TopXMLNS, __IgnoreEls, _els,
-                             Cdata).
-
-encode_message_thread(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = encode_message_thread_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"thread">>, _attrs, _els}.
-
-decode_message_thread_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_message_thread_cdata(__TopXMLNS, _val) -> _val.
-
-encode_message_thread_cdata(<<>>, _acc) -> _acc;
-encode_message_thread_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_message_body(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"body">>, _attrs, _els}) ->
-    Data = decode_message_body_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Lang = decode_message_body_attrs(__TopXMLNS, _attrs,
-                                    undefined),
-    {text, Lang, Data}.
-
-decode_message_body_els(__TopXMLNS, __IgnoreEls, [],
-                       Data) ->
-    decode_message_body_cdata(__TopXMLNS, Data);
-decode_message_body_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Data) ->
-    decode_message_body_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Data/binary, _data/binary>>);
-decode_message_body_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Data) ->
-    decode_message_body_els(__TopXMLNS, __IgnoreEls, _els,
-                           Data).
-
-decode_message_body_attrs(__TopXMLNS,
-                         [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
-    decode_message_body_attrs(__TopXMLNS, _attrs, _val);
-decode_message_body_attrs(__TopXMLNS, [_ | _attrs],
-                         Lang) ->
-    decode_message_body_attrs(__TopXMLNS, _attrs, Lang);
-decode_message_body_attrs(__TopXMLNS, [], Lang) ->
-    'decode_message_body_attr_xml:lang'(__TopXMLNS, Lang).
-
-encode_message_body({text, Lang, Data}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = encode_message_body_cdata(Data, []),
-    _attrs = 'encode_message_body_attr_xml:lang'(Lang,
-                                                enc_xmlns_attrs(__NewTopXMLNS,
-                                                                __TopXMLNS)),
-    {xmlel, <<"body">>, _attrs, _els}.
-
-'decode_message_body_attr_xml:lang'(__TopXMLNS,
-                                   undefined) ->
-    <<>>;
-'decode_message_body_attr_xml:lang'(__TopXMLNS, _val) ->
-    _val.
-
-'encode_message_body_attr_xml:lang'(<<>>, _acc) -> _acc;
-'encode_message_body_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_message_body_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_message_body_cdata(__TopXMLNS, _val) -> _val.
-
-encode_message_body_cdata(<<>>, _acc) -> _acc;
-encode_message_body_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_message_subject(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"subject">>, _attrs, _els}) ->
-    Data = decode_message_subject_els(__TopXMLNS,
-                                     __IgnoreEls, _els, <<>>),
-    Lang = decode_message_subject_attrs(__TopXMLNS, _attrs,
-                                       undefined),
-    {text, Lang, Data}.
-
-decode_message_subject_els(__TopXMLNS, __IgnoreEls, [],
-                          Data) ->
-    decode_message_subject_cdata(__TopXMLNS, Data);
-decode_message_subject_els(__TopXMLNS, __IgnoreEls,
-                          [{xmlcdata, _data} | _els], Data) ->
-    decode_message_subject_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<Data/binary, _data/binary>>);
-decode_message_subject_els(__TopXMLNS, __IgnoreEls,
-                          [_ | _els], Data) ->
-    decode_message_subject_els(__TopXMLNS, __IgnoreEls,
-                              _els, Data).
-
-decode_message_subject_attrs(__TopXMLNS,
-                            [{<<"xml:lang">>, _val} | _attrs], _Lang) ->
-    decode_message_subject_attrs(__TopXMLNS, _attrs, _val);
-decode_message_subject_attrs(__TopXMLNS, [_ | _attrs],
-                            Lang) ->
-    decode_message_subject_attrs(__TopXMLNS, _attrs, Lang);
-decode_message_subject_attrs(__TopXMLNS, [], Lang) ->
-    'decode_message_subject_attr_xml:lang'(__TopXMLNS,
-                                          Lang).
-
-encode_message_subject({text, Lang, Data},
-                      __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = encode_message_subject_cdata(Data, []),
-    _attrs = 'encode_message_subject_attr_xml:lang'(Lang,
-                                                   enc_xmlns_attrs(__NewTopXMLNS,
-                                                                   __TopXMLNS)),
-    {xmlel, <<"subject">>, _attrs, _els}.
-
-'decode_message_subject_attr_xml:lang'(__TopXMLNS,
-                                      undefined) ->
-    <<>>;
-'decode_message_subject_attr_xml:lang'(__TopXMLNS,
-                                      _val) ->
-    _val.
-
-'encode_message_subject_attr_xml:lang'(<<>>, _acc) ->
-    _acc;
-'encode_message_subject_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_message_subject_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_message_subject_cdata(__TopXMLNS, _val) -> _val.
-
-encode_message_subject_cdata(<<>>, _acc) -> _acc;
-encode_message_subject_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_iq(__TopXMLNS, __IgnoreEls,
-         {xmlel, <<"iq">>, _attrs, _els}) ->
-    __Els = decode_iq_els(__TopXMLNS, __IgnoreEls, _els,
-                         []),
-    {Id, Type, From, To, Lang} = decode_iq_attrs(__TopXMLNS,
-                                                _attrs, undefined, undefined,
-                                                undefined, undefined,
-                                                undefined),
-    {iq, Id, Type, Lang, From, To, __Els}.
-
-decode_iq_els(__TopXMLNS, __IgnoreEls, [], __Els) ->
-    lists:reverse(__Els);
-decode_iq_els(__TopXMLNS, __IgnoreEls,
-             [{xmlel, _, _, _} = _el | _els], __Els) ->
-    if __IgnoreEls ->
-          decode_iq_els(__TopXMLNS, __IgnoreEls, _els,
-                        [_el | __Els]);
-       true ->
-          case is_known_tag(_el, __TopXMLNS) of
-            true ->
-                decode_iq_els(__TopXMLNS, __IgnoreEls, _els,
-                              [decode(_el, __TopXMLNS, []) | __Els]);
-            false ->
-                decode_iq_els(__TopXMLNS, __IgnoreEls, _els, __Els)
-          end
-    end;
-decode_iq_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-             __Els) ->
-    decode_iq_els(__TopXMLNS, __IgnoreEls, _els, __Els).
-
-decode_iq_attrs(__TopXMLNS, [{<<"id">>, _val} | _attrs],
-               _Id, Type, From, To, Lang) ->
-    decode_iq_attrs(__TopXMLNS, _attrs, _val, Type, From,
-                   To, Lang);
-decode_iq_attrs(__TopXMLNS,
-               [{<<"type">>, _val} | _attrs], Id, _Type, From, To,
-               Lang) ->
-    decode_iq_attrs(__TopXMLNS, _attrs, Id, _val, From, To,
-                   Lang);
-decode_iq_attrs(__TopXMLNS,
-               [{<<"from">>, _val} | _attrs], Id, Type, _From, To,
-               Lang) ->
-    decode_iq_attrs(__TopXMLNS, _attrs, Id, Type, _val, To,
-                   Lang);
-decode_iq_attrs(__TopXMLNS, [{<<"to">>, _val} | _attrs],
-               Id, Type, From, _To, Lang) ->
-    decode_iq_attrs(__TopXMLNS, _attrs, Id, Type, From,
-                   _val, Lang);
-decode_iq_attrs(__TopXMLNS,
-               [{<<"xml:lang">>, _val} | _attrs], Id, Type, From, To,
-               _Lang) ->
-    decode_iq_attrs(__TopXMLNS, _attrs, Id, Type, From, To,
-                   _val);
-decode_iq_attrs(__TopXMLNS, [_ | _attrs], Id, Type,
-               From, To, Lang) ->
-    decode_iq_attrs(__TopXMLNS, _attrs, Id, Type, From, To,
-                   Lang);
-decode_iq_attrs(__TopXMLNS, [], Id, Type, From, To,
-               Lang) ->
-    {decode_iq_attr_id(__TopXMLNS, Id),
-     decode_iq_attr_type(__TopXMLNS, Type),
-     decode_iq_attr_from(__TopXMLNS, From),
-     decode_iq_attr_to(__TopXMLNS, To),
-     'decode_iq_attr_xml:lang'(__TopXMLNS, Lang)}.
-
-encode_iq({iq, Id, Type, Lang, From, To, __Els},
-         __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<>>,
-                                    [<<"jabber:client">>, <<"jabber:server">>,
-                                     <<"jabber:component:accept">>],
-                                    __TopXMLNS),
-    _els = [encode(_el, __NewTopXMLNS) || _el <- __Els],
-    _attrs = 'encode_iq_attr_xml:lang'(Lang,
-                                      encode_iq_attr_to(To,
-                                                        encode_iq_attr_from(From,
-                                                                            encode_iq_attr_type(Type,
-                                                                                                encode_iq_attr_id(Id,
-                                                                                                                  enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                  __TopXMLNS)))))),
-    {xmlel, <<"iq">>, _attrs, _els}.
-
-decode_iq_attr_id(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"id">>, <<"iq">>, __TopXMLNS}});
-decode_iq_attr_id(__TopXMLNS, _val) -> _val.
-
-encode_iq_attr_id(_val, _acc) ->
-    [{<<"id">>, _val} | _acc].
-
-decode_iq_attr_type(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"iq">>, __TopXMLNS}});
-decode_iq_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [get, set, result, error]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"iq">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_iq_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_iq_attr_from(__TopXMLNS, undefined) -> undefined;
-decode_iq_attr_from(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"from">>, <<"iq">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_iq_attr_from(undefined, _acc) -> _acc;
-encode_iq_attr_from(_val, _acc) ->
-    [{<<"from">>, enc_jid(_val)} | _acc].
-
-decode_iq_attr_to(__TopXMLNS, undefined) -> undefined;
-decode_iq_attr_to(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"to">>, <<"iq">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_iq_attr_to(undefined, _acc) -> _acc;
-encode_iq_attr_to(_val, _acc) ->
-    [{<<"to">>, enc_jid(_val)} | _acc].
-
-'decode_iq_attr_xml:lang'(__TopXMLNS, undefined) ->
-    <<>>;
-'decode_iq_attr_xml:lang'(__TopXMLNS, _val) -> _val.
-
-'encode_iq_attr_xml:lang'(<<>>, _acc) -> _acc;
-'encode_iq_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_stats(__TopXMLNS, __IgnoreEls,
-            {xmlel, <<"query">>, _attrs, _els}) ->
-    List = decode_stats_els(__TopXMLNS, __IgnoreEls, _els,
-                           []),
-    Node = decode_stats_attrs(__TopXMLNS, _attrs,
-                             undefined),
-    {stats, List, Node}.
-
-decode_stats_els(__TopXMLNS, __IgnoreEls, [], List) ->
-    lists:reverse(List);
-decode_stats_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"stat">>, _attrs, _} = _el | _els], List) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/stats">> ->
-         decode_stats_els(__TopXMLNS, __IgnoreEls, _els,
-                          [decode_stat(__TopXMLNS, __IgnoreEls, _el) | List]);
-      <<"http://jabber.org/protocol/stats">> ->
-         decode_stats_els(__TopXMLNS, __IgnoreEls, _els,
-                          [decode_stat(<<"http://jabber.org/protocol/stats">>,
-                                       __IgnoreEls, _el)
-                           | List]);
-      _ ->
-         decode_stats_els(__TopXMLNS, __IgnoreEls, _els, List)
-    end;
-decode_stats_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                List) ->
-    decode_stats_els(__TopXMLNS, __IgnoreEls, _els, List).
-
-decode_stats_attrs(__TopXMLNS,
-                  [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_stats_attrs(__TopXMLNS, _attrs, _val);
-decode_stats_attrs(__TopXMLNS, [_ | _attrs], Node) ->
-    decode_stats_attrs(__TopXMLNS, _attrs, Node);
-decode_stats_attrs(__TopXMLNS, [], Node) ->
-    decode_stats_attr_node(__TopXMLNS, Node).
-
-encode_stats({stats, List, Node}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/stats">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_stats_$list'(List,
-                                             __NewTopXMLNS, [])),
-    _attrs = encode_stats_attr_node(Node,
-                                   enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS)),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_stats_$list'([], __TopXMLNS, _acc) -> _acc;
-'encode_stats_$list'([List | _els], __TopXMLNS, _acc) ->
-    'encode_stats_$list'(_els, __TopXMLNS,
-                        [encode_stat(List, __TopXMLNS) | _acc]).
-
-decode_stats_attr_node(__TopXMLNS, undefined) -> <<>>;
-decode_stats_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_stats_attr_node(<<>>, _acc) -> _acc;
-encode_stats_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_stat(__TopXMLNS, __IgnoreEls,
-           {xmlel, <<"stat">>, _attrs, _els}) ->
-    Error = decode_stat_els(__TopXMLNS, __IgnoreEls, _els,
-                           undefined),
-    {Name, Units, Value} = decode_stat_attrs(__TopXMLNS,
-                                            _attrs, undefined, undefined,
-                                            undefined),
-    {stat, Name, Units, Value, Error}.
-
-decode_stat_els(__TopXMLNS, __IgnoreEls, [], Error) ->
-    Error;
-decode_stat_els(__TopXMLNS, __IgnoreEls,
-               [{xmlel, <<"error">>, _attrs, _} = _el | _els],
-               Error) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/stats">> ->
-         decode_stat_els(__TopXMLNS, __IgnoreEls, _els,
-                         decode_stat_error(__TopXMLNS, __IgnoreEls, _el));
-      <<"http://jabber.org/protocol/stats">> ->
-         decode_stat_els(__TopXMLNS, __IgnoreEls, _els,
-                         decode_stat_error(<<"http://jabber.org/protocol/stats">>,
-                                           __IgnoreEls, _el));
-      _ ->
-         decode_stat_els(__TopXMLNS, __IgnoreEls, _els, Error)
-    end;
-decode_stat_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-               Error) ->
-    decode_stat_els(__TopXMLNS, __IgnoreEls, _els, Error).
-
-decode_stat_attrs(__TopXMLNS,
-                 [{<<"name">>, _val} | _attrs], _Name, Units, Value) ->
-    decode_stat_attrs(__TopXMLNS, _attrs, _val, Units,
-                     Value);
-decode_stat_attrs(__TopXMLNS,
-                 [{<<"units">>, _val} | _attrs], Name, _Units, Value) ->
-    decode_stat_attrs(__TopXMLNS, _attrs, Name, _val,
-                     Value);
-decode_stat_attrs(__TopXMLNS,
-                 [{<<"value">>, _val} | _attrs], Name, Units, _Value) ->
-    decode_stat_attrs(__TopXMLNS, _attrs, Name, Units,
-                     _val);
-decode_stat_attrs(__TopXMLNS, [_ | _attrs], Name, Units,
-                 Value) ->
-    decode_stat_attrs(__TopXMLNS, _attrs, Name, Units,
-                     Value);
-decode_stat_attrs(__TopXMLNS, [], Name, Units, Value) ->
-    {decode_stat_attr_name(__TopXMLNS, Name),
-     decode_stat_attr_units(__TopXMLNS, Units),
-     decode_stat_attr_value(__TopXMLNS, Value)}.
-
-encode_stat({stat, Name, Units, Value, Error},
-           __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/stats">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_stat_$error'(Error,
-                                             __NewTopXMLNS, [])),
-    _attrs = encode_stat_attr_value(Value,
-                                   encode_stat_attr_units(Units,
-                                                          encode_stat_attr_name(Name,
-                                                                                enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                __TopXMLNS)))),
-    {xmlel, <<"stat">>, _attrs, _els}.
-
-'encode_stat_$error'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_stat_$error'(Error, __TopXMLNS, _acc) ->
-    [encode_stat_error(Error, __TopXMLNS) | _acc].
-
-decode_stat_attr_name(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"stat">>, __TopXMLNS}});
-decode_stat_attr_name(__TopXMLNS, _val) -> _val.
-
-encode_stat_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_stat_attr_units(__TopXMLNS, undefined) -> <<>>;
-decode_stat_attr_units(__TopXMLNS, _val) -> _val.
-
-encode_stat_attr_units(<<>>, _acc) -> _acc;
-encode_stat_attr_units(_val, _acc) ->
-    [{<<"units">>, _val} | _acc].
-
-decode_stat_attr_value(__TopXMLNS, undefined) -> <<>>;
-decode_stat_attr_value(__TopXMLNS, _val) -> _val.
-
-encode_stat_attr_value(<<>>, _acc) -> _acc;
-encode_stat_attr_value(_val, _acc) ->
-    [{<<"value">>, _val} | _acc].
-
-decode_stat_error(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"error">>, _attrs, _els}) ->
-    Reason = decode_stat_error_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Code = decode_stat_error_attrs(__TopXMLNS, _attrs,
-                                  undefined),
-    {stat_error, Code, Reason}.
-
-decode_stat_error_els(__TopXMLNS, __IgnoreEls, [],
-                     Reason) ->
-    decode_stat_error_cdata(__TopXMLNS, Reason);
-decode_stat_error_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Reason) ->
-    decode_stat_error_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Reason/binary, _data/binary>>);
-decode_stat_error_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Reason) ->
-    decode_stat_error_els(__TopXMLNS, __IgnoreEls, _els,
-                         Reason).
-
-decode_stat_error_attrs(__TopXMLNS,
-                       [{<<"code">>, _val} | _attrs], _Code) ->
-    decode_stat_error_attrs(__TopXMLNS, _attrs, _val);
-decode_stat_error_attrs(__TopXMLNS, [_ | _attrs],
-                       Code) ->
-    decode_stat_error_attrs(__TopXMLNS, _attrs, Code);
-decode_stat_error_attrs(__TopXMLNS, [], Code) ->
-    decode_stat_error_attr_code(__TopXMLNS, Code).
-
-encode_stat_error({stat_error, Code, Reason},
-                 __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/stats">>,
-                        [], __TopXMLNS),
-    _els = encode_stat_error_cdata(Reason, []),
-    _attrs = encode_stat_error_attr_code(Code,
-                                        enc_xmlns_attrs(__NewTopXMLNS,
-                                                        __TopXMLNS)),
-    {xmlel, <<"error">>, _attrs, _els}.
-
-decode_stat_error_attr_code(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"code">>, <<"error">>, __TopXMLNS}});
-decode_stat_error_attr_code(__TopXMLNS, _val) ->
-    case catch dec_int(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"code">>, <<"error">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_stat_error_attr_code(_val, _acc) ->
-    [{<<"code">>, enc_int(_val)} | _acc].
-
-decode_stat_error_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_stat_error_cdata(__TopXMLNS, _val) -> _val.
-
-encode_stat_error_cdata(<<>>, _acc) -> _acc;
-encode_stat_error_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_bookmarks_storage(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"storage">>, _attrs, _els}) ->
-    {Conference, Url} =
-       decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                                    _els, [], []),
-    {bookmark_storage, Conference, Url}.
-
-decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                            [], Conference, Url) ->
-    {lists:reverse(Conference), lists:reverse(Url)};
-decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlel, <<"conference">>, _attrs, _} = _el
-                             | _els],
-                            Conference, Url) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"storage:bookmarks">> ->
-         decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                                      _els,
-                                      [decode_bookmark_conference(__TopXMLNS,
-                                                                  __IgnoreEls,
-                                                                  _el)
-                                       | Conference],
-                                      Url);
-      <<"storage:bookmarks">> ->
-         decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                                      _els,
-                                      [decode_bookmark_conference(<<"storage:bookmarks">>,
-                                                                  __IgnoreEls,
-                                                                  _el)
-                                       | Conference],
-                                      Url);
-      _ ->
-         decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                                      _els, Conference, Url)
-    end;
-decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                            [{xmlel, <<"url">>, _attrs, _} = _el | _els],
-                            Conference, Url) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"storage:bookmarks">> ->
-         decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                                      _els, Conference,
-                                      [decode_bookmark_url(__TopXMLNS,
-                                                           __IgnoreEls, _el)
-                                       | Url]);
-      <<"storage:bookmarks">> ->
-         decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                                      _els, Conference,
-                                      [decode_bookmark_url(<<"storage:bookmarks">>,
-                                                           __IgnoreEls, _el)
-                                       | Url]);
-      _ ->
-         decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                                      _els, Conference, Url)
-    end;
-decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                            [_ | _els], Conference, Url) ->
-    decode_bookmarks_storage_els(__TopXMLNS, __IgnoreEls,
-                                _els, Conference, Url).
-
-encode_bookmarks_storage({bookmark_storage, Conference,
-                         Url},
-                        __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"storage:bookmarks">>, [],
-                        __TopXMLNS),
-    _els =
-       lists:reverse('encode_bookmarks_storage_$conference'(Conference,
-                                                            __NewTopXMLNS,
-                                                            'encode_bookmarks_storage_$url'(Url,
-                                                                                            __NewTopXMLNS,
-                                                                                            []))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"storage">>, _attrs, _els}.
-
-'encode_bookmarks_storage_$conference'([], __TopXMLNS,
-                                      _acc) ->
-    _acc;
-'encode_bookmarks_storage_$conference'([Conference
-                                       | _els],
-                                      __TopXMLNS, _acc) ->
-    'encode_bookmarks_storage_$conference'(_els, __TopXMLNS,
-                                          [encode_bookmark_conference(Conference,
-                                                                      __TopXMLNS)
-                                           | _acc]).
-
-'encode_bookmarks_storage_$url'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_bookmarks_storage_$url'([Url | _els],
-                               __TopXMLNS, _acc) ->
-    'encode_bookmarks_storage_$url'(_els, __TopXMLNS,
-                                   [encode_bookmark_url(Url, __TopXMLNS)
-                                    | _acc]).
-
-decode_bookmark_url(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"url">>, _attrs, _els}) ->
-    {Name, Url} = decode_bookmark_url_attrs(__TopXMLNS,
-                                           _attrs, undefined, undefined),
-    {bookmark_url, Name, Url}.
-
-decode_bookmark_url_attrs(__TopXMLNS,
-                         [{<<"name">>, _val} | _attrs], _Name, Url) ->
-    decode_bookmark_url_attrs(__TopXMLNS, _attrs, _val,
-                             Url);
-decode_bookmark_url_attrs(__TopXMLNS,
-                         [{<<"url">>, _val} | _attrs], Name, _Url) ->
-    decode_bookmark_url_attrs(__TopXMLNS, _attrs, Name,
-                             _val);
-decode_bookmark_url_attrs(__TopXMLNS, [_ | _attrs],
-                         Name, Url) ->
-    decode_bookmark_url_attrs(__TopXMLNS, _attrs, Name,
-                             Url);
-decode_bookmark_url_attrs(__TopXMLNS, [], Name, Url) ->
-    {decode_bookmark_url_attr_name(__TopXMLNS, Name),
-     decode_bookmark_url_attr_url(__TopXMLNS, Url)}.
-
-encode_bookmark_url({bookmark_url, Name, Url},
-                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"storage:bookmarks">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_bookmark_url_attr_url(Url,
-                                         encode_bookmark_url_attr_name(Name,
-                                                                       enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                       __TopXMLNS))),
-    {xmlel, <<"url">>, _attrs, _els}.
-
-decode_bookmark_url_attr_name(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"url">>, __TopXMLNS}});
-decode_bookmark_url_attr_name(__TopXMLNS, _val) -> _val.
-
-encode_bookmark_url_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_bookmark_url_attr_url(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"url">>, <<"url">>, __TopXMLNS}});
-decode_bookmark_url_attr_url(__TopXMLNS, _val) -> _val.
-
-encode_bookmark_url_attr_url(_val, _acc) ->
-    [{<<"url">>, _val} | _acc].
-
-decode_bookmark_conference(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"conference">>, _attrs, _els}) ->
-    {Password, Nick} =
-       decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                                      _els, undefined, undefined),
-    {Name, Jid, Autojoin} =
-       decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
-                                        undefined, undefined, undefined),
-    {bookmark_conference, Name, Jid, Autojoin, Nick,
-     Password}.
-
-decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                              [], Password, Nick) ->
-    {Password, Nick};
-decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                              [{xmlel, <<"nick">>, _attrs, _} = _el | _els],
-                              Password, Nick) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"storage:bookmarks">> ->
-         decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                                        _els, Password,
-                                        decode_conference_nick(__TopXMLNS,
-                                                               __IgnoreEls,
-                                                               _el));
-      <<"storage:bookmarks">> ->
-         decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                                        _els, Password,
-                                        decode_conference_nick(<<"storage:bookmarks">>,
-                                                               __IgnoreEls,
-                                                               _el));
-      _ ->
-         decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                                        _els, Password, Nick)
-    end;
-decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                              [{xmlel, <<"password">>, _attrs, _} = _el
-                               | _els],
-                              Password, Nick) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"storage:bookmarks">> ->
-         decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                                        _els,
-                                        decode_conference_password(__TopXMLNS,
-                                                                   __IgnoreEls,
-                                                                   _el),
-                                        Nick);
-      <<"storage:bookmarks">> ->
-         decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                                        _els,
-                                        decode_conference_password(<<"storage:bookmarks">>,
-                                                                   __IgnoreEls,
-                                                                   _el),
-                                        Nick);
-      _ ->
-         decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                                        _els, Password, Nick)
-    end;
-decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                              [_ | _els], Password, Nick) ->
-    decode_bookmark_conference_els(__TopXMLNS, __IgnoreEls,
-                                  _els, Password, Nick).
-
-decode_bookmark_conference_attrs(__TopXMLNS,
-                                [{<<"name">>, _val} | _attrs], _Name, Jid,
-                                Autojoin) ->
-    decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
-                                    _val, Jid, Autojoin);
-decode_bookmark_conference_attrs(__TopXMLNS,
-                                [{<<"jid">>, _val} | _attrs], Name, _Jid,
-                                Autojoin) ->
-    decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
-                                    Name, _val, Autojoin);
-decode_bookmark_conference_attrs(__TopXMLNS,
-                                [{<<"autojoin">>, _val} | _attrs], Name, Jid,
-                                _Autojoin) ->
-    decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
-                                    Name, Jid, _val);
-decode_bookmark_conference_attrs(__TopXMLNS,
-                                [_ | _attrs], Name, Jid, Autojoin) ->
-    decode_bookmark_conference_attrs(__TopXMLNS, _attrs,
-                                    Name, Jid, Autojoin);
-decode_bookmark_conference_attrs(__TopXMLNS, [], Name,
-                                Jid, Autojoin) ->
-    {decode_bookmark_conference_attr_name(__TopXMLNS, Name),
-     decode_bookmark_conference_attr_jid(__TopXMLNS, Jid),
-     decode_bookmark_conference_attr_autojoin(__TopXMLNS,
-                                             Autojoin)}.
-
-encode_bookmark_conference({bookmark_conference, Name,
-                           Jid, Autojoin, Nick, Password},
-                          __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"storage:bookmarks">>, [],
-                        __TopXMLNS),
-    _els =
-       lists:reverse('encode_bookmark_conference_$password'(Password,
-                                                            __NewTopXMLNS,
-                                                            'encode_bookmark_conference_$nick'(Nick,
-                                                                                               __NewTopXMLNS,
-                                                                                               []))),
-    _attrs =
-       encode_bookmark_conference_attr_autojoin(Autojoin,
-                                                encode_bookmark_conference_attr_jid(Jid,
-                                                                                    encode_bookmark_conference_attr_name(Name,
-                                                                                                                         enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                         __TopXMLNS)))),
-    {xmlel, <<"conference">>, _attrs, _els}.
-
-'encode_bookmark_conference_$password'(undefined,
-                                      __TopXMLNS, _acc) ->
-    _acc;
-'encode_bookmark_conference_$password'(Password,
-                                      __TopXMLNS, _acc) ->
-    [encode_conference_password(Password, __TopXMLNS)
-     | _acc].
-
-'encode_bookmark_conference_$nick'(undefined,
-                                  __TopXMLNS, _acc) ->
-    _acc;
-'encode_bookmark_conference_$nick'(Nick, __TopXMLNS,
-                                  _acc) ->
-    [encode_conference_nick(Nick, __TopXMLNS) | _acc].
-
-decode_bookmark_conference_attr_name(__TopXMLNS,
-                                    undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"conference">>,
-                  __TopXMLNS}});
-decode_bookmark_conference_attr_name(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-encode_bookmark_conference_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_bookmark_conference_attr_jid(__TopXMLNS,
-                                   undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"conference">>,
-                  __TopXMLNS}});
-decode_bookmark_conference_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"conference">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bookmark_conference_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_bookmark_conference_attr_autojoin(__TopXMLNS,
-                                        undefined) ->
-    false;
-decode_bookmark_conference_attr_autojoin(__TopXMLNS,
-                                        _val) ->
-    case catch dec_bool(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"autojoin">>, <<"conference">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_bookmark_conference_attr_autojoin(false, _acc) ->
-    _acc;
-encode_bookmark_conference_attr_autojoin(_val, _acc) ->
-    [{<<"autojoin">>, enc_bool(_val)} | _acc].
-
-decode_conference_password(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"password">>, _attrs, _els}) ->
-    Cdata = decode_conference_password_els(__TopXMLNS,
-                                          __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_conference_password_els(__TopXMLNS, __IgnoreEls,
-                              [], Cdata) ->
-    decode_conference_password_cdata(__TopXMLNS, Cdata);
-decode_conference_password_els(__TopXMLNS, __IgnoreEls,
-                              [{xmlcdata, _data} | _els], Cdata) ->
-    decode_conference_password_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<Cdata/binary, _data/binary>>);
-decode_conference_password_els(__TopXMLNS, __IgnoreEls,
-                              [_ | _els], Cdata) ->
-    decode_conference_password_els(__TopXMLNS, __IgnoreEls,
-                                  _els, Cdata).
-
-encode_conference_password(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"storage:bookmarks">>, [],
-                        __TopXMLNS),
-    _els = encode_conference_password_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"password">>, _attrs, _els}.
-
-decode_conference_password_cdata(__TopXMLNS, <<>>) ->
-    <<>>;
-decode_conference_password_cdata(__TopXMLNS, _val) ->
-    _val.
-
-encode_conference_password_cdata(<<>>, _acc) -> _acc;
-encode_conference_password_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_conference_nick(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"nick">>, _attrs, _els}) ->
-    Cdata = decode_conference_nick_els(__TopXMLNS,
-                                      __IgnoreEls, _els, <<>>),
-    Cdata.
-
-decode_conference_nick_els(__TopXMLNS, __IgnoreEls, [],
-                          Cdata) ->
-    decode_conference_nick_cdata(__TopXMLNS, Cdata);
-decode_conference_nick_els(__TopXMLNS, __IgnoreEls,
-                          [{xmlcdata, _data} | _els], Cdata) ->
-    decode_conference_nick_els(__TopXMLNS, __IgnoreEls,
-                              _els, <<Cdata/binary, _data/binary>>);
-decode_conference_nick_els(__TopXMLNS, __IgnoreEls,
-                          [_ | _els], Cdata) ->
-    decode_conference_nick_els(__TopXMLNS, __IgnoreEls,
-                              _els, Cdata).
-
-encode_conference_nick(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"storage:bookmarks">>, [],
-                        __TopXMLNS),
-    _els = encode_conference_nick_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"nick">>, _attrs, _els}.
-
-decode_conference_nick_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_conference_nick_cdata(__TopXMLNS, _val) -> _val.
-
-encode_conference_nick_cdata(<<>>, _acc) -> _acc;
-encode_conference_nick_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_private(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"query">>, _attrs, _els}) ->
-    __Xmls = decode_private_els(__TopXMLNS, __IgnoreEls,
-                               _els, []),
-    {private, __Xmls}.
-
-decode_private_els(__TopXMLNS, __IgnoreEls, [],
-                  __Xmls) ->
-    lists:reverse(__Xmls);
-decode_private_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, _, _, _} = _el | _els], __Xmls) ->
-    decode_private_els(__TopXMLNS, __IgnoreEls, _els,
-                      [_el | __Xmls]);
-decode_private_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  __Xmls) ->
-    decode_private_els(__TopXMLNS, __IgnoreEls, _els,
-                      __Xmls).
-
-encode_private({private, __Xmls}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:private">>, [],
-                        __TopXMLNS),
-    _els = __Xmls,
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-decode_disco_items(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"query">>, _attrs, _els}) ->
-    {Items, Rsm} = decode_disco_items_els(__TopXMLNS,
-                                         __IgnoreEls, _els, [], undefined),
-    Node = decode_disco_items_attrs(__TopXMLNS, _attrs,
-                                   undefined),
-    {disco_items, Node, Items, Rsm}.
-
-decode_disco_items_els(__TopXMLNS, __IgnoreEls, [],
-                      Items, Rsm) ->
-    {lists:reverse(Items), Rsm};
-decode_disco_items_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items,
-                      Rsm) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/disco#items">> ->
-         decode_disco_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_disco_item(__TopXMLNS, __IgnoreEls,
-                                                   _el)
-                                 | Items],
-                                Rsm);
-      <<"http://jabber.org/protocol/disco#items">> ->
-         decode_disco_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_disco_item(<<"http://jabber.org/protocol/disco#items">>,
-                                                   __IgnoreEls, _el)
-                                 | Items],
-                                Rsm);
-      _ ->
-         decode_disco_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                Items, Rsm)
-    end;
-decode_disco_items_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"set">>, _attrs, _} = _el | _els], Items,
-                      Rsm) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"http://jabber.org/protocol/rsm">> ->
-         decode_disco_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                Items,
-                                decode_rsm_set(<<"http://jabber.org/protocol/rsm">>,
-                                               __IgnoreEls, _el));
-      _ ->
-         decode_disco_items_els(__TopXMLNS, __IgnoreEls, _els,
-                                Items, Rsm)
-    end;
-decode_disco_items_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Items, Rsm) ->
-    decode_disco_items_els(__TopXMLNS, __IgnoreEls, _els,
-                          Items, Rsm).
-
-decode_disco_items_attrs(__TopXMLNS,
-                        [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_disco_items_attrs(__TopXMLNS, _attrs, _val);
-decode_disco_items_attrs(__TopXMLNS, [_ | _attrs],
-                        Node) ->
-    decode_disco_items_attrs(__TopXMLNS, _attrs, Node);
-decode_disco_items_attrs(__TopXMLNS, [], Node) ->
-    decode_disco_items_attr_node(__TopXMLNS, Node).
-
-encode_disco_items({disco_items, Node, Items, Rsm},
-                  __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/disco#items">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_disco_items_$items'(Items,
-                                                    __NewTopXMLNS,
-                                                    'encode_disco_items_$rsm'(Rsm,
-                                                                              __NewTopXMLNS,
-                                                                              []))),
-    _attrs = encode_disco_items_attr_node(Node,
-                                         enc_xmlns_attrs(__NewTopXMLNS,
-                                                         __TopXMLNS)),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_disco_items_$items'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_disco_items_$items'([Items | _els], __TopXMLNS,
-                           _acc) ->
-    'encode_disco_items_$items'(_els, __TopXMLNS,
-                               [encode_disco_item(Items, __TopXMLNS) | _acc]).
-
-'encode_disco_items_$rsm'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_disco_items_$rsm'(Rsm, __TopXMLNS, _acc) ->
-    [encode_rsm_set(Rsm, __TopXMLNS) | _acc].
-
-decode_disco_items_attr_node(__TopXMLNS, undefined) ->
-    <<>>;
-decode_disco_items_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_disco_items_attr_node(<<>>, _acc) -> _acc;
-encode_disco_items_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_disco_item(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"item">>, _attrs, _els}) ->
-    {Jid, Name, Node} = decode_disco_item_attrs(__TopXMLNS,
-                                               _attrs, undefined, undefined,
-                                               undefined),
-    {disco_item, Jid, Name, Node}.
-
-decode_disco_item_attrs(__TopXMLNS,
-                       [{<<"jid">>, _val} | _attrs], _Jid, Name, Node) ->
-    decode_disco_item_attrs(__TopXMLNS, _attrs, _val, Name,
-                           Node);
-decode_disco_item_attrs(__TopXMLNS,
-                       [{<<"name">>, _val} | _attrs], Jid, _Name, Node) ->
-    decode_disco_item_attrs(__TopXMLNS, _attrs, Jid, _val,
-                           Node);
-decode_disco_item_attrs(__TopXMLNS,
-                       [{<<"node">>, _val} | _attrs], Jid, Name, _Node) ->
-    decode_disco_item_attrs(__TopXMLNS, _attrs, Jid, Name,
-                           _val);
-decode_disco_item_attrs(__TopXMLNS, [_ | _attrs], Jid,
-                       Name, Node) ->
-    decode_disco_item_attrs(__TopXMLNS, _attrs, Jid, Name,
-                           Node);
-decode_disco_item_attrs(__TopXMLNS, [], Jid, Name,
-                       Node) ->
-    {decode_disco_item_attr_jid(__TopXMLNS, Jid),
-     decode_disco_item_attr_name(__TopXMLNS, Name),
-     decode_disco_item_attr_node(__TopXMLNS, Node)}.
-
-encode_disco_item({disco_item, Jid, Name, Node},
-                 __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/disco#items">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_disco_item_attr_node(Node,
-                                        encode_disco_item_attr_name(Name,
-                                                                    encode_disco_item_attr_jid(Jid,
-                                                                                               enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                               __TopXMLNS)))),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-decode_disco_item_attr_jid(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"item">>, __TopXMLNS}});
-decode_disco_item_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_disco_item_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_disco_item_attr_name(__TopXMLNS, undefined) ->
-    <<>>;
-decode_disco_item_attr_name(__TopXMLNS, _val) -> _val.
-
-encode_disco_item_attr_name(<<>>, _acc) -> _acc;
-encode_disco_item_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_disco_item_attr_node(__TopXMLNS, undefined) ->
-    <<>>;
-decode_disco_item_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_disco_item_attr_node(<<>>, _acc) -> _acc;
-encode_disco_item_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_disco_info(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"query">>, _attrs, _els}) ->
-    {Xdata, Features, Identities} =
-       decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els, [],
-                             [], []),
-    Node = decode_disco_info_attrs(__TopXMLNS, _attrs,
-                                  undefined),
-    {disco_info, Node, Identities, Features, Xdata}.
-
-decode_disco_info_els(__TopXMLNS, __IgnoreEls, [],
-                     Xdata, Features, Identities) ->
-    {lists:reverse(Xdata), lists:reverse(Features),
-     lists:reverse(Identities)};
-decode_disco_info_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"identity">>, _attrs, _} = _el | _els],
-                     Xdata, Features, Identities) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/disco#info">> ->
-         decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els,
-                               Xdata, Features,
-                               [decode_disco_identity(__TopXMLNS, __IgnoreEls,
-                                                      _el)
-                                | Identities]);
-      <<"http://jabber.org/protocol/disco#info">> ->
-         decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els,
-                               Xdata, Features,
-                               [decode_disco_identity(<<"http://jabber.org/protocol/disco#info">>,
-                                                      __IgnoreEls, _el)
-                                | Identities]);
-      _ ->
-         decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els,
-                               Xdata, Features, Identities)
-    end;
-decode_disco_info_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"feature">>, _attrs, _} = _el | _els], Xdata,
-                     Features, Identities) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">>
-         when __TopXMLNS ==
-                <<"http://jabber.org/protocol/disco#info">> ->
-         decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els,
-                               Xdata,
-                               [decode_disco_feature(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                                | Features],
-                               Identities);
-      <<"http://jabber.org/protocol/disco#info">> ->
-         decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els,
-                               Xdata,
-                               [decode_disco_feature(<<"http://jabber.org/protocol/disco#info">>,
-                                                     __IgnoreEls, _el)
-                                | Features],
-                               Identities);
-      _ ->
-         decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els,
-                               Xdata, Features, Identities)
-    end;
-decode_disco_info_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"x">>, _attrs, _} = _el | _els], Xdata,
-                     Features, Identities) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"jabber:x:data">> ->
-         decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els,
-                               [decode_xdata(<<"jabber:x:data">>, __IgnoreEls,
-                                             _el)
-                                | Xdata],
-                               Features, Identities);
-      _ ->
-         decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els,
-                               Xdata, Features, Identities)
-    end;
-decode_disco_info_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Xdata, Features, Identities) ->
-    decode_disco_info_els(__TopXMLNS, __IgnoreEls, _els,
-                         Xdata, Features, Identities).
-
-decode_disco_info_attrs(__TopXMLNS,
-                       [{<<"node">>, _val} | _attrs], _Node) ->
-    decode_disco_info_attrs(__TopXMLNS, _attrs, _val);
-decode_disco_info_attrs(__TopXMLNS, [_ | _attrs],
-                       Node) ->
-    decode_disco_info_attrs(__TopXMLNS, _attrs, Node);
-decode_disco_info_attrs(__TopXMLNS, [], Node) ->
-    decode_disco_info_attr_node(__TopXMLNS, Node).
-
-encode_disco_info({disco_info, Node, Identities,
-                  Features, Xdata},
-                 __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/disco#info">>,
-                        [], __TopXMLNS),
-    _els = lists:reverse('encode_disco_info_$xdata'(Xdata,
-                                                   __NewTopXMLNS,
-                                                   'encode_disco_info_$features'(Features,
-                                                                                 __NewTopXMLNS,
-                                                                                 'encode_disco_info_$identities'(Identities,
-                                                                                                                 __NewTopXMLNS,
-                                                                                                                 [])))),
-    _attrs = encode_disco_info_attr_node(Node,
-                                        enc_xmlns_attrs(__NewTopXMLNS,
-                                                        __TopXMLNS)),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_disco_info_$xdata'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_disco_info_$xdata'([Xdata | _els], __TopXMLNS,
-                          _acc) ->
-    'encode_disco_info_$xdata'(_els, __TopXMLNS,
-                              [encode_xdata(Xdata, __TopXMLNS) | _acc]).
-
-'encode_disco_info_$features'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_disco_info_$features'([Features | _els],
-                             __TopXMLNS, _acc) ->
-    'encode_disco_info_$features'(_els, __TopXMLNS,
-                                 [encode_disco_feature(Features, __TopXMLNS)
-                                  | _acc]).
-
-'encode_disco_info_$identities'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_disco_info_$identities'([Identities | _els],
-                               __TopXMLNS, _acc) ->
-    'encode_disco_info_$identities'(_els, __TopXMLNS,
-                                   [encode_disco_identity(Identities,
-                                                          __TopXMLNS)
-                                    | _acc]).
-
-decode_disco_info_attr_node(__TopXMLNS, undefined) ->
-    <<>>;
-decode_disco_info_attr_node(__TopXMLNS, _val) -> _val.
-
-encode_disco_info_attr_node(<<>>, _acc) -> _acc;
-encode_disco_info_attr_node(_val, _acc) ->
-    [{<<"node">>, _val} | _acc].
-
-decode_disco_feature(__TopXMLNS, __IgnoreEls,
-                    {xmlel, <<"feature">>, _attrs, _els}) ->
-    Var = decode_disco_feature_attrs(__TopXMLNS, _attrs,
-                                    undefined),
-    Var.
-
-decode_disco_feature_attrs(__TopXMLNS,
-                          [{<<"var">>, _val} | _attrs], _Var) ->
-    decode_disco_feature_attrs(__TopXMLNS, _attrs, _val);
-decode_disco_feature_attrs(__TopXMLNS, [_ | _attrs],
-                          Var) ->
-    decode_disco_feature_attrs(__TopXMLNS, _attrs, Var);
-decode_disco_feature_attrs(__TopXMLNS, [], Var) ->
-    decode_disco_feature_attr_var(__TopXMLNS, Var).
-
-encode_disco_feature(Var, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/disco#info">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_disco_feature_attr_var(Var,
-                                          enc_xmlns_attrs(__NewTopXMLNS,
-                                                          __TopXMLNS)),
-    {xmlel, <<"feature">>, _attrs, _els}.
-
-decode_disco_feature_attr_var(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"var">>, <<"feature">>, __TopXMLNS}});
-decode_disco_feature_attr_var(__TopXMLNS, _val) -> _val.
-
-encode_disco_feature_attr_var(_val, _acc) ->
-    [{<<"var">>, _val} | _acc].
-
-decode_disco_identity(__TopXMLNS, __IgnoreEls,
-                     {xmlel, <<"identity">>, _attrs, _els}) ->
-    {Category, Type, Lang, Name} =
-       decode_disco_identity_attrs(__TopXMLNS, _attrs,
-                                   undefined, undefined, undefined, undefined),
-    {identity, Category, Type, Lang, Name}.
-
-decode_disco_identity_attrs(__TopXMLNS,
-                           [{<<"category">>, _val} | _attrs], _Category, Type,
-                           Lang, Name) ->
-    decode_disco_identity_attrs(__TopXMLNS, _attrs, _val,
-                               Type, Lang, Name);
-decode_disco_identity_attrs(__TopXMLNS,
-                           [{<<"type">>, _val} | _attrs], Category, _Type,
-                           Lang, Name) ->
-    decode_disco_identity_attrs(__TopXMLNS, _attrs,
-                               Category, _val, Lang, Name);
-decode_disco_identity_attrs(__TopXMLNS,
-                           [{<<"xml:lang">>, _val} | _attrs], Category, Type,
-                           _Lang, Name) ->
-    decode_disco_identity_attrs(__TopXMLNS, _attrs,
-                               Category, Type, _val, Name);
-decode_disco_identity_attrs(__TopXMLNS,
-                           [{<<"name">>, _val} | _attrs], Category, Type, Lang,
-                           _Name) ->
-    decode_disco_identity_attrs(__TopXMLNS, _attrs,
-                               Category, Type, Lang, _val);
-decode_disco_identity_attrs(__TopXMLNS, [_ | _attrs],
-                           Category, Type, Lang, Name) ->
-    decode_disco_identity_attrs(__TopXMLNS, _attrs,
-                               Category, Type, Lang, Name);
-decode_disco_identity_attrs(__TopXMLNS, [], Category,
-                           Type, Lang, Name) ->
-    {decode_disco_identity_attr_category(__TopXMLNS,
-                                        Category),
-     decode_disco_identity_attr_type(__TopXMLNS, Type),
-     'decode_disco_identity_attr_xml:lang'(__TopXMLNS, Lang),
-     decode_disco_identity_attr_name(__TopXMLNS, Name)}.
-
-encode_disco_identity({identity, Category, Type, Lang,
-                      Name},
-                     __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"http://jabber.org/protocol/disco#info">>,
-                        [], __TopXMLNS),
-    _els = [],
-    _attrs = encode_disco_identity_attr_name(Name,
-                                            'encode_disco_identity_attr_xml:lang'(Lang,
-                                                                                  encode_disco_identity_attr_type(Type,
-                                                                                                                  encode_disco_identity_attr_category(Category,
-                                                                                                                                                      enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                                      __TopXMLNS))))),
-    {xmlel, <<"identity">>, _attrs, _els}.
-
-decode_disco_identity_attr_category(__TopXMLNS,
-                                   undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"category">>, <<"identity">>,
-                  __TopXMLNS}});
-decode_disco_identity_attr_category(__TopXMLNS, _val) ->
-    _val.
-
-encode_disco_identity_attr_category(_val, _acc) ->
-    [{<<"category">>, _val} | _acc].
-
-decode_disco_identity_attr_type(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"type">>, <<"identity">>,
-                  __TopXMLNS}});
-decode_disco_identity_attr_type(__TopXMLNS, _val) ->
-    _val.
-
-encode_disco_identity_attr_type(_val, _acc) ->
-    [{<<"type">>, _val} | _acc].
-
-'decode_disco_identity_attr_xml:lang'(__TopXMLNS,
-                                     undefined) ->
-    <<>>;
-'decode_disco_identity_attr_xml:lang'(__TopXMLNS,
-                                     _val) ->
-    _val.
-
-'encode_disco_identity_attr_xml:lang'(<<>>, _acc) ->
-    _acc;
-'encode_disco_identity_attr_xml:lang'(_val, _acc) ->
-    [{<<"xml:lang">>, _val} | _acc].
-
-decode_disco_identity_attr_name(__TopXMLNS,
-                               undefined) ->
-    <<>>;
-decode_disco_identity_attr_name(__TopXMLNS, _val) ->
-    _val.
-
-encode_disco_identity_attr_name(<<>>, _acc) -> _acc;
-encode_disco_identity_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_block_list(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"blocklist">>, _attrs, _els}) ->
-    Items = decode_block_list_els(__TopXMLNS, __IgnoreEls,
-                                 _els, []),
-    {block_list, Items}.
-
-decode_block_list_els(__TopXMLNS, __IgnoreEls, [],
-                     Items) ->
-    lists:reverse(Items);
-decode_block_list_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:blocking">> ->
-         decode_block_list_els(__TopXMLNS, __IgnoreEls, _els,
-                               [decode_block_item(__TopXMLNS, __IgnoreEls, _el)
-                                | Items]);
-      <<"urn:xmpp:blocking">> ->
-         decode_block_list_els(__TopXMLNS, __IgnoreEls, _els,
-                               [decode_block_item(<<"urn:xmpp:blocking">>,
-                                                  __IgnoreEls, _el)
-                                | Items]);
-      _ ->
-         decode_block_list_els(__TopXMLNS, __IgnoreEls, _els,
-                               Items)
-    end;
-decode_block_list_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Items) ->
-    decode_block_list_els(__TopXMLNS, __IgnoreEls, _els,
-                         Items).
-
-encode_block_list({block_list, Items}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:blocking">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_block_list_$items'(Items,
-                                                   __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"blocklist">>, _attrs, _els}.
-
-'encode_block_list_$items'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_block_list_$items'([Items | _els], __TopXMLNS,
-                          _acc) ->
-    'encode_block_list_$items'(_els, __TopXMLNS,
-                              [encode_block_item(Items, __TopXMLNS) | _acc]).
-
-decode_unblock(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"unblock">>, _attrs, _els}) ->
-    Items = decode_unblock_els(__TopXMLNS, __IgnoreEls,
-                              _els, []),
-    {unblock, Items}.
-
-decode_unblock_els(__TopXMLNS, __IgnoreEls, [],
-                  Items) ->
-    lists:reverse(Items);
-decode_unblock_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:blocking">> ->
-         decode_unblock_els(__TopXMLNS, __IgnoreEls, _els,
-                            [decode_block_item(__TopXMLNS, __IgnoreEls, _el)
-                             | Items]);
-      <<"urn:xmpp:blocking">> ->
-         decode_unblock_els(__TopXMLNS, __IgnoreEls, _els,
-                            [decode_block_item(<<"urn:xmpp:blocking">>,
-                                               __IgnoreEls, _el)
-                             | Items]);
-      _ ->
-         decode_unblock_els(__TopXMLNS, __IgnoreEls, _els, Items)
-    end;
-decode_unblock_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Items) ->
-    decode_unblock_els(__TopXMLNS, __IgnoreEls, _els,
-                      Items).
-
-encode_unblock({unblock, Items}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:blocking">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_unblock_$items'(Items,
-                                                __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"unblock">>, _attrs, _els}.
-
-'encode_unblock_$items'([], __TopXMLNS, _acc) -> _acc;
-'encode_unblock_$items'([Items | _els], __TopXMLNS,
-                       _acc) ->
-    'encode_unblock_$items'(_els, __TopXMLNS,
-                           [encode_block_item(Items, __TopXMLNS) | _acc]).
-
-decode_block(__TopXMLNS, __IgnoreEls,
-            {xmlel, <<"block">>, _attrs, _els}) ->
-    Items = decode_block_els(__TopXMLNS, __IgnoreEls, _els,
-                            []),
-    {block, Items}.
-
-decode_block_els(__TopXMLNS, __IgnoreEls, [], Items) ->
-    lists:reverse(Items);
-decode_block_els(__TopXMLNS, __IgnoreEls,
-                [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"urn:xmpp:blocking">> ->
-         decode_block_els(__TopXMLNS, __IgnoreEls, _els,
-                          [decode_block_item(__TopXMLNS, __IgnoreEls, _el)
-                           | Items]);
-      <<"urn:xmpp:blocking">> ->
-         decode_block_els(__TopXMLNS, __IgnoreEls, _els,
-                          [decode_block_item(<<"urn:xmpp:blocking">>,
-                                             __IgnoreEls, _el)
-                           | Items]);
-      _ ->
-         decode_block_els(__TopXMLNS, __IgnoreEls, _els, Items)
-    end;
-decode_block_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                Items) ->
-    decode_block_els(__TopXMLNS, __IgnoreEls, _els, Items).
-
-encode_block({block, Items}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:blocking">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_block_$items'(Items,
-                                              __NewTopXMLNS, [])),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"block">>, _attrs, _els}.
-
-'encode_block_$items'([], __TopXMLNS, _acc) -> _acc;
-'encode_block_$items'([Items | _els], __TopXMLNS,
-                     _acc) ->
-    'encode_block_$items'(_els, __TopXMLNS,
-                         [encode_block_item(Items, __TopXMLNS) | _acc]).
-
-decode_block_item(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"item">>, _attrs, _els}) ->
-    Jid = decode_block_item_attrs(__TopXMLNS, _attrs,
-                                 undefined),
-    Jid.
-
-decode_block_item_attrs(__TopXMLNS,
-                       [{<<"jid">>, _val} | _attrs], _Jid) ->
-    decode_block_item_attrs(__TopXMLNS, _attrs, _val);
-decode_block_item_attrs(__TopXMLNS, [_ | _attrs],
-                       Jid) ->
-    decode_block_item_attrs(__TopXMLNS, _attrs, Jid);
-decode_block_item_attrs(__TopXMLNS, [], Jid) ->
-    decode_block_item_attr_jid(__TopXMLNS, Jid).
-
-encode_block_item(Jid, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:blocking">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_block_item_attr_jid(Jid,
-                                       enc_xmlns_attrs(__NewTopXMLNS,
-                                                       __TopXMLNS)),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-decode_block_item_attr_jid(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"item">>, __TopXMLNS}});
-decode_block_item_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_block_item_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_privacy(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"query">>, _attrs, _els}) ->
-    {Lists, Default, Active} =
-       decode_privacy_els(__TopXMLNS, __IgnoreEls, _els, [],
-                          undefined, undefined),
-    {privacy_query, Lists, Default, Active}.
-
-decode_privacy_els(__TopXMLNS, __IgnoreEls, [], Lists,
-                  Default, Active) ->
-    {lists:reverse(Lists), Default, Active};
-decode_privacy_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"list">>, _attrs, _} = _el | _els], Lists,
-                  Default, Active) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:privacy">> ->
-         decode_privacy_els(__TopXMLNS, __IgnoreEls, _els,
-                            [decode_privacy_list(__TopXMLNS, __IgnoreEls, _el)
-                             | Lists],
-                            Default, Active);
-      <<"jabber:iq:privacy">> ->
-         decode_privacy_els(__TopXMLNS, __IgnoreEls, _els,
-                            [decode_privacy_list(<<"jabber:iq:privacy">>,
-                                                 __IgnoreEls, _el)
-                             | Lists],
-                            Default, Active);
-      _ ->
-         decode_privacy_els(__TopXMLNS, __IgnoreEls, _els, Lists,
-                            Default, Active)
-    end;
-decode_privacy_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"default">>, _attrs, _} = _el | _els], Lists,
-                  Default, Active) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:privacy">> ->
-         decode_privacy_els(__TopXMLNS, __IgnoreEls, _els, Lists,
-                            decode_privacy_default_list(__TopXMLNS,
-                                                        __IgnoreEls, _el),
-                            Active);
-      <<"jabber:iq:privacy">> ->
-         decode_privacy_els(__TopXMLNS, __IgnoreEls, _els, Lists,
-                            decode_privacy_default_list(<<"jabber:iq:privacy">>,
-                                                        __IgnoreEls, _el),
-                            Active);
-      _ ->
-         decode_privacy_els(__TopXMLNS, __IgnoreEls, _els, Lists,
-                            Default, Active)
-    end;
-decode_privacy_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"active">>, _attrs, _} = _el | _els], Lists,
-                  Default, Active) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:privacy">> ->
-         decode_privacy_els(__TopXMLNS, __IgnoreEls, _els, Lists,
-                            Default,
-                            decode_privacy_active_list(__TopXMLNS, __IgnoreEls,
-                                                       _el));
-      <<"jabber:iq:privacy">> ->
-         decode_privacy_els(__TopXMLNS, __IgnoreEls, _els, Lists,
-                            Default,
-                            decode_privacy_active_list(<<"jabber:iq:privacy">>,
-                                                       __IgnoreEls, _el));
-      _ ->
-         decode_privacy_els(__TopXMLNS, __IgnoreEls, _els, Lists,
-                            Default, Active)
-    end;
-decode_privacy_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Lists, Default, Active) ->
-    decode_privacy_els(__TopXMLNS, __IgnoreEls, _els, Lists,
-                      Default, Active).
-
-encode_privacy({privacy_query, Lists, Default, Active},
-              __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:privacy">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_privacy_$lists'(Lists,
-                                                __NewTopXMLNS,
-                                                'encode_privacy_$default'(Default,
-                                                                          __NewTopXMLNS,
-                                                                          'encode_privacy_$active'(Active,
-                                                                                                   __NewTopXMLNS,
-                                                                                                   [])))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_privacy_$lists'([], __TopXMLNS, _acc) -> _acc;
-'encode_privacy_$lists'([Lists | _els], __TopXMLNS,
-                       _acc) ->
-    'encode_privacy_$lists'(_els, __TopXMLNS,
-                           [encode_privacy_list(Lists, __TopXMLNS) | _acc]).
-
-'encode_privacy_$default'(undefined, __TopXMLNS,
-                         _acc) ->
-    _acc;
-'encode_privacy_$default'(Default, __TopXMLNS, _acc) ->
-    [encode_privacy_default_list(Default, __TopXMLNS)
-     | _acc].
-
-'encode_privacy_$active'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_privacy_$active'(Active, __TopXMLNS, _acc) ->
-    [encode_privacy_active_list(Active, __TopXMLNS) | _acc].
-
-decode_privacy_active_list(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"active">>, _attrs, _els}) ->
-    Name = decode_privacy_active_list_attrs(__TopXMLNS,
-                                           _attrs, undefined),
-    Name.
-
-decode_privacy_active_list_attrs(__TopXMLNS,
-                                [{<<"name">>, _val} | _attrs], _Name) ->
-    decode_privacy_active_list_attrs(__TopXMLNS, _attrs,
-                                    _val);
-decode_privacy_active_list_attrs(__TopXMLNS,
-                                [_ | _attrs], Name) ->
-    decode_privacy_active_list_attrs(__TopXMLNS, _attrs,
-                                    Name);
-decode_privacy_active_list_attrs(__TopXMLNS, [],
-                                Name) ->
-    decode_privacy_active_list_attr_name(__TopXMLNS, Name).
-
-encode_privacy_active_list(Name, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:privacy">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_privacy_active_list_attr_name(Name,
-                                                 enc_xmlns_attrs(__NewTopXMLNS,
-                                                                 __TopXMLNS)),
-    {xmlel, <<"active">>, _attrs, _els}.
-
-decode_privacy_active_list_attr_name(__TopXMLNS,
-                                    undefined) ->
-    none;
-decode_privacy_active_list_attr_name(__TopXMLNS,
-                                    _val) ->
-    _val.
-
-encode_privacy_active_list_attr_name(none, _acc) ->
-    _acc;
-encode_privacy_active_list_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_privacy_default_list(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"default">>, _attrs, _els}) ->
-    Name = decode_privacy_default_list_attrs(__TopXMLNS,
-                                            _attrs, undefined),
-    Name.
-
-decode_privacy_default_list_attrs(__TopXMLNS,
-                                 [{<<"name">>, _val} | _attrs], _Name) ->
-    decode_privacy_default_list_attrs(__TopXMLNS, _attrs,
-                                     _val);
-decode_privacy_default_list_attrs(__TopXMLNS,
-                                 [_ | _attrs], Name) ->
-    decode_privacy_default_list_attrs(__TopXMLNS, _attrs,
-                                     Name);
-decode_privacy_default_list_attrs(__TopXMLNS, [],
-                                 Name) ->
-    decode_privacy_default_list_attr_name(__TopXMLNS, Name).
-
-encode_privacy_default_list(Name, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:privacy">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = encode_privacy_default_list_attr_name(Name,
-                                                  enc_xmlns_attrs(__NewTopXMLNS,
-                                                                  __TopXMLNS)),
-    {xmlel, <<"default">>, _attrs, _els}.
-
-decode_privacy_default_list_attr_name(__TopXMLNS,
-                                     undefined) ->
-    none;
-decode_privacy_default_list_attr_name(__TopXMLNS,
-                                     _val) ->
-    _val.
-
-encode_privacy_default_list_attr_name(none, _acc) ->
-    _acc;
-encode_privacy_default_list_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_privacy_list(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"list">>, _attrs, _els}) ->
-    Items = decode_privacy_list_els(__TopXMLNS, __IgnoreEls,
-                                   _els, []),
-    Name = decode_privacy_list_attrs(__TopXMLNS, _attrs,
-                                    undefined),
-    {privacy_list, Name, Items}.
-
-decode_privacy_list_els(__TopXMLNS, __IgnoreEls, [],
-                       Items) ->
-    lists:reverse(Items);
-decode_privacy_list_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:privacy">> ->
-         decode_privacy_list_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_privacy_item(__TopXMLNS, __IgnoreEls,
-                                                      _el)
-                                  | Items]);
-      <<"jabber:iq:privacy">> ->
-         decode_privacy_list_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_privacy_item(<<"jabber:iq:privacy">>,
-                                                      __IgnoreEls, _el)
-                                  | Items]);
-      _ ->
-         decode_privacy_list_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items)
-    end;
-decode_privacy_list_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Items) ->
-    decode_privacy_list_els(__TopXMLNS, __IgnoreEls, _els,
-                           Items).
-
-decode_privacy_list_attrs(__TopXMLNS,
-                         [{<<"name">>, _val} | _attrs], _Name) ->
-    decode_privacy_list_attrs(__TopXMLNS, _attrs, _val);
-decode_privacy_list_attrs(__TopXMLNS, [_ | _attrs],
-                         Name) ->
-    decode_privacy_list_attrs(__TopXMLNS, _attrs, Name);
-decode_privacy_list_attrs(__TopXMLNS, [], Name) ->
-    decode_privacy_list_attr_name(__TopXMLNS, Name).
-
-encode_privacy_list({privacy_list, Name, Items},
-                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:privacy">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_privacy_list_$items'(Items,
-                                                     __NewTopXMLNS, [])),
-    _attrs = encode_privacy_list_attr_name(Name,
-                                          enc_xmlns_attrs(__NewTopXMLNS,
-                                                          __TopXMLNS)),
-    {xmlel, <<"list">>, _attrs, _els}.
-
-'encode_privacy_list_$items'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_privacy_list_$items'([Items | _els], __TopXMLNS,
-                            _acc) ->
-    'encode_privacy_list_$items'(_els, __TopXMLNS,
-                                [encode_privacy_item(Items, __TopXMLNS)
-                                 | _acc]).
-
-decode_privacy_list_attr_name(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"name">>, <<"list">>, __TopXMLNS}});
-decode_privacy_list_attr_name(__TopXMLNS, _val) -> _val.
-
-encode_privacy_list_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_privacy_item(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"item">>, _attrs, _els}) ->
-    {Iq, Presence_out, Message, Presence_in} =
-       decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                               false, false, false, false),
-    {Action, Order, Type, Value} =
-       decode_privacy_item_attrs(__TopXMLNS, _attrs, undefined,
-                                 undefined, undefined, undefined),
-    {privacy_item, Order, Action, Type, Value, Message, Iq,
-     Presence_in, Presence_out}.
-
-decode_privacy_item_els(__TopXMLNS, __IgnoreEls, [], Iq,
-                       Presence_out, Message, Presence_in) ->
-    {Iq, Presence_out, Message, Presence_in};
-decode_privacy_item_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"message">>, _attrs, _} = _el | _els], Iq,
-                       Presence_out, Message, Presence_in) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:privacy">> ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq, Presence_out,
-                                 decode_privacy_message(__TopXMLNS,
-                                                        __IgnoreEls, _el),
-                                 Presence_in);
-      <<"jabber:iq:privacy">> ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq, Presence_out,
-                                 decode_privacy_message(<<"jabber:iq:privacy">>,
-                                                        __IgnoreEls, _el),
-                                 Presence_in);
-      _ ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq, Presence_out, Message, Presence_in)
-    end;
-decode_privacy_item_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"iq">>, _attrs, _} = _el | _els], Iq,
-                       Presence_out, Message, Presence_in) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:privacy">> ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 decode_privacy_iq(__TopXMLNS, __IgnoreEls,
-                                                   _el),
-                                 Presence_out, Message, Presence_in);
-      <<"jabber:iq:privacy">> ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 decode_privacy_iq(<<"jabber:iq:privacy">>,
-                                                   __IgnoreEls, _el),
-                                 Presence_out, Message, Presence_in);
-      _ ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq, Presence_out, Message, Presence_in)
-    end;
-decode_privacy_item_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"presence-in">>, _attrs, _} = _el | _els],
-                       Iq, Presence_out, Message, Presence_in) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:privacy">> ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq, Presence_out, Message,
-                                 decode_privacy_presence_in(__TopXMLNS,
-                                                            __IgnoreEls, _el));
-      <<"jabber:iq:privacy">> ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq, Presence_out, Message,
-                                 decode_privacy_presence_in(<<"jabber:iq:privacy">>,
-                                                            __IgnoreEls, _el));
-      _ ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq, Presence_out, Message, Presence_in)
-    end;
-decode_privacy_item_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"presence-out">>, _attrs, _} = _el | _els],
-                       Iq, Presence_out, Message, Presence_in) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:privacy">> ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq,
-                                 decode_privacy_presence_out(__TopXMLNS,
-                                                             __IgnoreEls, _el),
-                                 Message, Presence_in);
-      <<"jabber:iq:privacy">> ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq,
-                                 decode_privacy_presence_out(<<"jabber:iq:privacy">>,
-                                                             __IgnoreEls, _el),
-                                 Message, Presence_in);
-      _ ->
-         decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Iq, Presence_out, Message, Presence_in)
-    end;
-decode_privacy_item_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Iq, Presence_out, Message, Presence_in) ->
-    decode_privacy_item_els(__TopXMLNS, __IgnoreEls, _els,
-                           Iq, Presence_out, Message, Presence_in).
-
-decode_privacy_item_attrs(__TopXMLNS,
-                         [{<<"action">>, _val} | _attrs], _Action, Order, Type,
-                         Value) ->
-    decode_privacy_item_attrs(__TopXMLNS, _attrs, _val,
-                             Order, Type, Value);
-decode_privacy_item_attrs(__TopXMLNS,
-                         [{<<"order">>, _val} | _attrs], Action, _Order, Type,
-                         Value) ->
-    decode_privacy_item_attrs(__TopXMLNS, _attrs, Action,
-                             _val, Type, Value);
-decode_privacy_item_attrs(__TopXMLNS,
-                         [{<<"type">>, _val} | _attrs], Action, Order, _Type,
-                         Value) ->
-    decode_privacy_item_attrs(__TopXMLNS, _attrs, Action,
-                             Order, _val, Value);
-decode_privacy_item_attrs(__TopXMLNS,
-                         [{<<"value">>, _val} | _attrs], Action, Order, Type,
-                         _Value) ->
-    decode_privacy_item_attrs(__TopXMLNS, _attrs, Action,
-                             Order, Type, _val);
-decode_privacy_item_attrs(__TopXMLNS, [_ | _attrs],
-                         Action, Order, Type, Value) ->
-    decode_privacy_item_attrs(__TopXMLNS, _attrs, Action,
-                             Order, Type, Value);
-decode_privacy_item_attrs(__TopXMLNS, [], Action, Order,
-                         Type, Value) ->
-    {decode_privacy_item_attr_action(__TopXMLNS, Action),
-     decode_privacy_item_attr_order(__TopXMLNS, Order),
-     decode_privacy_item_attr_type(__TopXMLNS, Type),
-     decode_privacy_item_attr_value(__TopXMLNS, Value)}.
-
-encode_privacy_item({privacy_item, Order, Action, Type,
-                    Value, Message, Iq, Presence_in, Presence_out},
-                   __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:privacy">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_privacy_item_$iq'(Iq,
-                                                  __NewTopXMLNS,
-                                                  'encode_privacy_item_$presence_out'(Presence_out,
-                                                                                      __NewTopXMLNS,
-                                                                                      'encode_privacy_item_$message'(Message,
-                                                                                                                     __NewTopXMLNS,
-                                                                                                                     'encode_privacy_item_$presence_in'(Presence_in,
-                                                                                                                                                        __NewTopXMLNS,
-                                                                                                                                                        []))))),
-    _attrs = encode_privacy_item_attr_value(Value,
-                                           encode_privacy_item_attr_type(Type,
-                                                                         encode_privacy_item_attr_order(Order,
-                                                                                                        encode_privacy_item_attr_action(Action,
-                                                                                                                                        enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                        __TopXMLNS))))),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-'encode_privacy_item_$iq'(false, __TopXMLNS, _acc) ->
-    _acc;
-'encode_privacy_item_$iq'(Iq, __TopXMLNS, _acc) ->
-    [encode_privacy_iq(Iq, __TopXMLNS) | _acc].
-
-'encode_privacy_item_$presence_out'(false, __TopXMLNS,
-                                   _acc) ->
-    _acc;
-'encode_privacy_item_$presence_out'(Presence_out,
-                                   __TopXMLNS, _acc) ->
-    [encode_privacy_presence_out(Presence_out, __TopXMLNS)
-     | _acc].
-
-'encode_privacy_item_$message'(false, __TopXMLNS,
-                              _acc) ->
-    _acc;
-'encode_privacy_item_$message'(Message, __TopXMLNS,
-                              _acc) ->
-    [encode_privacy_message(Message, __TopXMLNS) | _acc].
-
-'encode_privacy_item_$presence_in'(false, __TopXMLNS,
-                                  _acc) ->
-    _acc;
-'encode_privacy_item_$presence_in'(Presence_in,
-                                  __TopXMLNS, _acc) ->
-    [encode_privacy_presence_in(Presence_in, __TopXMLNS)
-     | _acc].
-
-decode_privacy_item_attr_action(__TopXMLNS,
-                               undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"action">>, <<"item">>, __TopXMLNS}});
-decode_privacy_item_attr_action(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [allow, deny]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"action">>, <<"item">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_privacy_item_attr_action(_val, _acc) ->
-    [{<<"action">>, enc_enum(_val)} | _acc].
-
-decode_privacy_item_attr_order(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"order">>, <<"item">>, __TopXMLNS}});
-decode_privacy_item_attr_order(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"order">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_privacy_item_attr_order(_val, _acc) ->
-    [{<<"order">>, enc_int(_val)} | _acc].
-
-decode_privacy_item_attr_type(__TopXMLNS, undefined) ->
-    undefined;
-decode_privacy_item_attr_type(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [group, jid, subscription]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"type">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_privacy_item_attr_type(undefined, _acc) -> _acc;
-encode_privacy_item_attr_type(_val, _acc) ->
-    [{<<"type">>, enc_enum(_val)} | _acc].
-
-decode_privacy_item_attr_value(__TopXMLNS, undefined) ->
-    <<>>;
-decode_privacy_item_attr_value(__TopXMLNS, _val) ->
-    _val.
-
-encode_privacy_item_attr_value(<<>>, _acc) -> _acc;
-encode_privacy_item_attr_value(_val, _acc) ->
-    [{<<"value">>, _val} | _acc].
-
-decode_privacy_presence_out(__TopXMLNS, __IgnoreEls,
-                           {xmlel, <<"presence-out">>, _attrs, _els}) ->
-    true.
-
-encode_privacy_presence_out(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:privacy">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"presence-out">>, _attrs, _els}.
-
-decode_privacy_presence_in(__TopXMLNS, __IgnoreEls,
-                          {xmlel, <<"presence-in">>, _attrs, _els}) ->
-    true.
-
-encode_privacy_presence_in(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:privacy">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"presence-in">>, _attrs, _els}.
-
-decode_privacy_iq(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"iq">>, _attrs, _els}) ->
-    true.
-
-encode_privacy_iq(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:privacy">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"iq">>, _attrs, _els}.
-
-decode_privacy_message(__TopXMLNS, __IgnoreEls,
-                      {xmlel, <<"message">>, _attrs, _els}) ->
-    true.
-
-encode_privacy_message(true, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:privacy">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"message">>, _attrs, _els}.
-
-decode_rosterver_feature(__TopXMLNS, __IgnoreEls,
-                        {xmlel, <<"ver">>, _attrs, _els}) ->
-    {rosterver_feature}.
-
-encode_rosterver_feature({rosterver_feature},
-                        __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"urn:xmpp:features:rosterver">>, [],
-                        __TopXMLNS),
-    _els = [],
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"ver">>, _attrs, _els}.
-
-decode_roster_query(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"query">>, _attrs, _els}) ->
-    Items = decode_roster_query_els(__TopXMLNS, __IgnoreEls,
-                                   _els, []),
-    Ver = decode_roster_query_attrs(__TopXMLNS, _attrs,
-                                   undefined),
-    {roster_query, Items, Ver}.
-
-decode_roster_query_els(__TopXMLNS, __IgnoreEls, [],
-                       Items) ->
-    lists:reverse(Items);
-decode_roster_query_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlel, <<"item">>, _attrs, _} = _el | _els], Items) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:roster">> ->
-         decode_roster_query_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_roster_item(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                                  | Items]);
-      <<"jabber:iq:roster">> ->
-         decode_roster_query_els(__TopXMLNS, __IgnoreEls, _els,
-                                 [decode_roster_item(<<"jabber:iq:roster">>,
-                                                     __IgnoreEls, _el)
-                                  | Items]);
-      _ ->
-         decode_roster_query_els(__TopXMLNS, __IgnoreEls, _els,
-                                 Items)
-    end;
-decode_roster_query_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Items) ->
-    decode_roster_query_els(__TopXMLNS, __IgnoreEls, _els,
-                           Items).
-
-decode_roster_query_attrs(__TopXMLNS,
-                         [{<<"ver">>, _val} | _attrs], _Ver) ->
-    decode_roster_query_attrs(__TopXMLNS, _attrs, _val);
-decode_roster_query_attrs(__TopXMLNS, [_ | _attrs],
-                         Ver) ->
-    decode_roster_query_attrs(__TopXMLNS, _attrs, Ver);
-decode_roster_query_attrs(__TopXMLNS, [], Ver) ->
-    decode_roster_query_attr_ver(__TopXMLNS, Ver).
-
-encode_roster_query({roster_query, Items, Ver},
-                   __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:roster">>,
-                                    [], __TopXMLNS),
-    _els = lists:reverse('encode_roster_query_$items'(Items,
-                                                     __NewTopXMLNS, [])),
-    _attrs = encode_roster_query_attr_ver(Ver,
-                                         enc_xmlns_attrs(__NewTopXMLNS,
-                                                         __TopXMLNS)),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_roster_query_$items'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_roster_query_$items'([Items | _els], __TopXMLNS,
-                            _acc) ->
-    'encode_roster_query_$items'(_els, __TopXMLNS,
-                                [encode_roster_item(Items, __TopXMLNS)
-                                 | _acc]).
-
-decode_roster_query_attr_ver(__TopXMLNS, undefined) ->
-    undefined;
-decode_roster_query_attr_ver(__TopXMLNS, _val) -> _val.
-
-encode_roster_query_attr_ver(undefined, _acc) -> _acc;
-encode_roster_query_attr_ver(_val, _acc) ->
-    [{<<"ver">>, _val} | _acc].
-
-decode_roster_item(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"item">>, _attrs, _els}) ->
-    Groups = decode_roster_item_els(__TopXMLNS, __IgnoreEls,
-                                   _els, []),
-    {Jid, Name, Subscription, Ask} =
-       decode_roster_item_attrs(__TopXMLNS, _attrs, undefined,
-                                undefined, undefined, undefined),
-    {roster_item, Jid, Name, Groups, Subscription, Ask}.
-
-decode_roster_item_els(__TopXMLNS, __IgnoreEls, [],
-                      Groups) ->
-    lists:reverse(Groups);
-decode_roster_item_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlel, <<"group">>, _attrs, _} = _el | _els],
-                      Groups) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:roster">> ->
-         decode_roster_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_roster_group(__TopXMLNS, __IgnoreEls,
-                                                     _el)
-                                 | Groups]);
-      <<"jabber:iq:roster">> ->
-         decode_roster_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                [decode_roster_group(<<"jabber:iq:roster">>,
-                                                     __IgnoreEls, _el)
-                                 | Groups]);
-      _ ->
-         decode_roster_item_els(__TopXMLNS, __IgnoreEls, _els,
-                                Groups)
-    end;
-decode_roster_item_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Groups) ->
-    decode_roster_item_els(__TopXMLNS, __IgnoreEls, _els,
-                          Groups).
-
-decode_roster_item_attrs(__TopXMLNS,
-                        [{<<"jid">>, _val} | _attrs], _Jid, Name, Subscription,
-                        Ask) ->
-    decode_roster_item_attrs(__TopXMLNS, _attrs, _val, Name,
-                            Subscription, Ask);
-decode_roster_item_attrs(__TopXMLNS,
-                        [{<<"name">>, _val} | _attrs], Jid, _Name,
-                        Subscription, Ask) ->
-    decode_roster_item_attrs(__TopXMLNS, _attrs, Jid, _val,
-                            Subscription, Ask);
-decode_roster_item_attrs(__TopXMLNS,
-                        [{<<"subscription">>, _val} | _attrs], Jid, Name,
-                        _Subscription, Ask) ->
-    decode_roster_item_attrs(__TopXMLNS, _attrs, Jid, Name,
-                            _val, Ask);
-decode_roster_item_attrs(__TopXMLNS,
-                        [{<<"ask">>, _val} | _attrs], Jid, Name, Subscription,
-                        _Ask) ->
-    decode_roster_item_attrs(__TopXMLNS, _attrs, Jid, Name,
-                            Subscription, _val);
-decode_roster_item_attrs(__TopXMLNS, [_ | _attrs], Jid,
-                        Name, Subscription, Ask) ->
-    decode_roster_item_attrs(__TopXMLNS, _attrs, Jid, Name,
-                            Subscription, Ask);
-decode_roster_item_attrs(__TopXMLNS, [], Jid, Name,
-                        Subscription, Ask) ->
-    {decode_roster_item_attr_jid(__TopXMLNS, Jid),
-     decode_roster_item_attr_name(__TopXMLNS, Name),
-     decode_roster_item_attr_subscription(__TopXMLNS,
-                                         Subscription),
-     decode_roster_item_attr_ask(__TopXMLNS, Ask)}.
-
-encode_roster_item({roster_item, Jid, Name, Groups,
-                   Subscription, Ask},
-                  __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:roster">>,
-                                    [], __TopXMLNS),
-    _els =
-       lists:reverse('encode_roster_item_$groups'(Groups,
-                                                  __NewTopXMLNS, [])),
-    _attrs = encode_roster_item_attr_ask(Ask,
-                                        encode_roster_item_attr_subscription(Subscription,
-                                                                             encode_roster_item_attr_name(Name,
-                                                                                                          encode_roster_item_attr_jid(Jid,
-                                                                                                                                      enc_xmlns_attrs(__NewTopXMLNS,
-                                                                                                                                                      __TopXMLNS))))),
-    {xmlel, <<"item">>, _attrs, _els}.
-
-'encode_roster_item_$groups'([], __TopXMLNS, _acc) ->
-    _acc;
-'encode_roster_item_$groups'([Groups | _els],
-                            __TopXMLNS, _acc) ->
-    'encode_roster_item_$groups'(_els, __TopXMLNS,
-                                [encode_roster_group(Groups, __TopXMLNS)
-                                 | _acc]).
-
-decode_roster_item_attr_jid(__TopXMLNS, undefined) ->
-    erlang:error({xmpp_codec,
-                 {missing_attr, <<"jid">>, <<"item">>, __TopXMLNS}});
-decode_roster_item_attr_jid(__TopXMLNS, _val) ->
-    case catch dec_jid(_val) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"jid">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_roster_item_attr_jid(_val, _acc) ->
-    [{<<"jid">>, enc_jid(_val)} | _acc].
-
-decode_roster_item_attr_name(__TopXMLNS, undefined) ->
-    <<>>;
-decode_roster_item_attr_name(__TopXMLNS, _val) -> _val.
-
-encode_roster_item_attr_name(<<>>, _acc) -> _acc;
-encode_roster_item_attr_name(_val, _acc) ->
-    [{<<"name">>, _val} | _acc].
-
-decode_roster_item_attr_subscription(__TopXMLNS,
-                                    undefined) ->
-    none;
-decode_roster_item_attr_subscription(__TopXMLNS,
-                                    _val) ->
-    case catch dec_enum(_val,
-                       [none, to, from, both, remove])
-       of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"subscription">>, <<"item">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_roster_item_attr_subscription(none, _acc) ->
-    _acc;
-encode_roster_item_attr_subscription(_val, _acc) ->
-    [{<<"subscription">>, enc_enum(_val)} | _acc].
-
-decode_roster_item_attr_ask(__TopXMLNS, undefined) ->
-    undefined;
-decode_roster_item_attr_ask(__TopXMLNS, _val) ->
-    case catch dec_enum(_val, [subscribe]) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"ask">>, <<"item">>, __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_roster_item_attr_ask(undefined, _acc) -> _acc;
-encode_roster_item_attr_ask(_val, _acc) ->
-    [{<<"ask">>, enc_enum(_val)} | _acc].
-
-decode_roster_group(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"group">>, _attrs, _els}) ->
-    Cdata = decode_roster_group_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_roster_group_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_roster_group_cdata(__TopXMLNS, Cdata);
-decode_roster_group_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_roster_group_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_roster_group_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_roster_group_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_roster_group(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:roster">>,
-                                    [], __TopXMLNS),
-    _els = encode_roster_group_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"group">>, _attrs, _els}.
-
-decode_roster_group_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"group">>, __TopXMLNS}});
-decode_roster_group_cdata(__TopXMLNS, _val) -> _val.
-
-encode_roster_group_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_version(__TopXMLNS, __IgnoreEls,
-              {xmlel, <<"query">>, _attrs, _els}) ->
-    {Ver, Os, Name} = decode_version_els(__TopXMLNS,
-                                        __IgnoreEls, _els, undefined,
-                                        undefined, undefined),
-    {version, Name, Ver, Os}.
-
-decode_version_els(__TopXMLNS, __IgnoreEls, [], Ver, Os,
-                  Name) ->
-    {Ver, Os, Name};
-decode_version_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"name">>, _attrs, _} = _el | _els], Ver, Os,
-                  Name) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:version">> ->
-         decode_version_els(__TopXMLNS, __IgnoreEls, _els, Ver,
-                            Os,
-                            decode_version_name(__TopXMLNS, __IgnoreEls, _el));
-      <<"jabber:iq:version">> ->
-         decode_version_els(__TopXMLNS, __IgnoreEls, _els, Ver,
-                            Os,
-                            decode_version_name(<<"jabber:iq:version">>,
-                                                __IgnoreEls, _el));
-      _ ->
-         decode_version_els(__TopXMLNS, __IgnoreEls, _els, Ver,
-                            Os, Name)
-    end;
-decode_version_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"version">>, _attrs, _} = _el | _els], Ver,
-                  Os, Name) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:version">> ->
-         decode_version_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_version_ver(__TopXMLNS, __IgnoreEls, _el),
-                            Os, Name);
-      <<"jabber:iq:version">> ->
-         decode_version_els(__TopXMLNS, __IgnoreEls, _els,
-                            decode_version_ver(<<"jabber:iq:version">>,
-                                               __IgnoreEls, _el),
-                            Os, Name);
-      _ ->
-         decode_version_els(__TopXMLNS, __IgnoreEls, _els, Ver,
-                            Os, Name)
-    end;
-decode_version_els(__TopXMLNS, __IgnoreEls,
-                  [{xmlel, <<"os">>, _attrs, _} = _el | _els], Ver, Os,
-                  Name) ->
-    case get_attr(<<"xmlns">>, _attrs) of
-      <<"">> when __TopXMLNS == <<"jabber:iq:version">> ->
-         decode_version_els(__TopXMLNS, __IgnoreEls, _els, Ver,
-                            decode_version_os(__TopXMLNS, __IgnoreEls, _el),
-                            Name);
-      <<"jabber:iq:version">> ->
-         decode_version_els(__TopXMLNS, __IgnoreEls, _els, Ver,
-                            decode_version_os(<<"jabber:iq:version">>,
-                                              __IgnoreEls, _el),
-                            Name);
-      _ ->
-         decode_version_els(__TopXMLNS, __IgnoreEls, _els, Ver,
-                            Os, Name)
-    end;
-decode_version_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-                  Ver, Os, Name) ->
-    decode_version_els(__TopXMLNS, __IgnoreEls, _els, Ver,
-                      Os, Name).
-
-encode_version({version, Name, Ver, Os}, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:version">>, [],
-                        __TopXMLNS),
-    _els = lists:reverse('encode_version_$ver'(Ver,
-                                              __NewTopXMLNS,
-                                              'encode_version_$os'(Os,
-                                                                   __NewTopXMLNS,
-                                                                   'encode_version_$name'(Name,
-                                                                                          __NewTopXMLNS,
-                                                                                          [])))),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-'encode_version_$ver'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_version_$ver'(Ver, __TopXMLNS, _acc) ->
-    [encode_version_ver(Ver, __TopXMLNS) | _acc].
-
-'encode_version_$os'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_version_$os'(Os, __TopXMLNS, _acc) ->
-    [encode_version_os(Os, __TopXMLNS) | _acc].
-
-'encode_version_$name'(undefined, __TopXMLNS, _acc) ->
-    _acc;
-'encode_version_$name'(Name, __TopXMLNS, _acc) ->
-    [encode_version_name(Name, __TopXMLNS) | _acc].
-
-decode_version_os(__TopXMLNS, __IgnoreEls,
-                 {xmlel, <<"os">>, _attrs, _els}) ->
-    Cdata = decode_version_os_els(__TopXMLNS, __IgnoreEls,
-                                 _els, <<>>),
-    Cdata.
-
-decode_version_os_els(__TopXMLNS, __IgnoreEls, [],
-                     Cdata) ->
-    decode_version_os_cdata(__TopXMLNS, Cdata);
-decode_version_os_els(__TopXMLNS, __IgnoreEls,
-                     [{xmlcdata, _data} | _els], Cdata) ->
-    decode_version_os_els(__TopXMLNS, __IgnoreEls, _els,
-                         <<Cdata/binary, _data/binary>>);
-decode_version_os_els(__TopXMLNS, __IgnoreEls,
-                     [_ | _els], Cdata) ->
-    decode_version_os_els(__TopXMLNS, __IgnoreEls, _els,
-                         Cdata).
-
-encode_version_os(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:version">>, [],
-                        __TopXMLNS),
-    _els = encode_version_os_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"os">>, _attrs, _els}.
-
-decode_version_os_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"os">>, __TopXMLNS}});
-decode_version_os_cdata(__TopXMLNS, _val) -> _val.
-
-encode_version_os_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_version_ver(__TopXMLNS, __IgnoreEls,
-                  {xmlel, <<"version">>, _attrs, _els}) ->
-    Cdata = decode_version_ver_els(__TopXMLNS, __IgnoreEls,
-                                  _els, <<>>),
-    Cdata.
-
-decode_version_ver_els(__TopXMLNS, __IgnoreEls, [],
-                      Cdata) ->
-    decode_version_ver_cdata(__TopXMLNS, Cdata);
-decode_version_ver_els(__TopXMLNS, __IgnoreEls,
-                      [{xmlcdata, _data} | _els], Cdata) ->
-    decode_version_ver_els(__TopXMLNS, __IgnoreEls, _els,
-                          <<Cdata/binary, _data/binary>>);
-decode_version_ver_els(__TopXMLNS, __IgnoreEls,
-                      [_ | _els], Cdata) ->
-    decode_version_ver_els(__TopXMLNS, __IgnoreEls, _els,
-                          Cdata).
-
-encode_version_ver(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:version">>, [],
-                        __TopXMLNS),
-    _els = encode_version_ver_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"version">>, _attrs, _els}.
-
-decode_version_ver_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"version">>, __TopXMLNS}});
-decode_version_ver_cdata(__TopXMLNS, _val) -> _val.
-
-encode_version_ver_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_version_name(__TopXMLNS, __IgnoreEls,
-                   {xmlel, <<"name">>, _attrs, _els}) ->
-    Cdata = decode_version_name_els(__TopXMLNS, __IgnoreEls,
-                                   _els, <<>>),
-    Cdata.
-
-decode_version_name_els(__TopXMLNS, __IgnoreEls, [],
-                       Cdata) ->
-    decode_version_name_cdata(__TopXMLNS, Cdata);
-decode_version_name_els(__TopXMLNS, __IgnoreEls,
-                       [{xmlcdata, _data} | _els], Cdata) ->
-    decode_version_name_els(__TopXMLNS, __IgnoreEls, _els,
-                           <<Cdata/binary, _data/binary>>);
-decode_version_name_els(__TopXMLNS, __IgnoreEls,
-                       [_ | _els], Cdata) ->
-    decode_version_name_els(__TopXMLNS, __IgnoreEls, _els,
-                           Cdata).
-
-encode_version_name(Cdata, __TopXMLNS) ->
-    __NewTopXMLNS =
-       choose_top_xmlns(<<"jabber:iq:version">>, [],
-                        __TopXMLNS),
-    _els = encode_version_name_cdata(Cdata, []),
-    _attrs = enc_xmlns_attrs(__NewTopXMLNS, __TopXMLNS),
-    {xmlel, <<"name">>, _attrs, _els}.
-
-decode_version_name_cdata(__TopXMLNS, <<>>) ->
-    erlang:error({xmpp_codec,
-                 {missing_cdata, <<>>, <<"name">>, __TopXMLNS}});
-decode_version_name_cdata(__TopXMLNS, _val) -> _val.
-
-encode_version_name_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].
-
-decode_last(__TopXMLNS, __IgnoreEls,
-           {xmlel, <<"query">>, _attrs, _els}) ->
-    Status = decode_last_els(__TopXMLNS, __IgnoreEls, _els,
-                            <<>>),
-    Seconds = decode_last_attrs(__TopXMLNS, _attrs,
-                               undefined),
-    {last, Seconds, Status}.
-
-decode_last_els(__TopXMLNS, __IgnoreEls, [], Status) ->
-    decode_last_cdata(__TopXMLNS, Status);
-decode_last_els(__TopXMLNS, __IgnoreEls,
-               [{xmlcdata, _data} | _els], Status) ->
-    decode_last_els(__TopXMLNS, __IgnoreEls, _els,
-                   <<Status/binary, _data/binary>>);
-decode_last_els(__TopXMLNS, __IgnoreEls, [_ | _els],
-               Status) ->
-    decode_last_els(__TopXMLNS, __IgnoreEls, _els, Status).
-
-decode_last_attrs(__TopXMLNS,
-                 [{<<"seconds">>, _val} | _attrs], _Seconds) ->
-    decode_last_attrs(__TopXMLNS, _attrs, _val);
-decode_last_attrs(__TopXMLNS, [_ | _attrs], Seconds) ->
-    decode_last_attrs(__TopXMLNS, _attrs, Seconds);
-decode_last_attrs(__TopXMLNS, [], Seconds) ->
-    decode_last_attr_seconds(__TopXMLNS, Seconds).
-
-encode_last({last, Seconds, Status}, __TopXMLNS) ->
-    __NewTopXMLNS = choose_top_xmlns(<<"jabber:iq:last">>,
-                                    [], __TopXMLNS),
-    _els = encode_last_cdata(Status, []),
-    _attrs = encode_last_attr_seconds(Seconds,
-                                     enc_xmlns_attrs(__NewTopXMLNS,
-                                                     __TopXMLNS)),
-    {xmlel, <<"query">>, _attrs, _els}.
-
-decode_last_attr_seconds(__TopXMLNS, undefined) ->
-    undefined;
-decode_last_attr_seconds(__TopXMLNS, _val) ->
-    case catch dec_int(_val, 0, infinity) of
-      {'EXIT', _} ->
-         erlang:error({xmpp_codec,
-                       {bad_attr_value, <<"seconds">>, <<"query">>,
-                        __TopXMLNS}});
-      _res -> _res
-    end.
-
-encode_last_attr_seconds(undefined, _acc) -> _acc;
-encode_last_attr_seconds(_val, _acc) ->
-    [{<<"seconds">>, enc_int(_val)} | _acc].
-
-decode_last_cdata(__TopXMLNS, <<>>) -> <<>>;
-decode_last_cdata(__TopXMLNS, _val) -> _val.
-
-encode_last_cdata(<<>>, _acc) -> _acc;
-encode_last_cdata(_val, _acc) ->
-    [{xmlcdata, _val} | _acc].