mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-23 09:42:20 -05:00
80e8ece078
Vote date: 2021-06-16
563 lines
21 KiB
XML
563 lines
21 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<!DOCTYPE xep SYSTEM 'xep.dtd' [
|
|
<!ENTITY % ents SYSTEM 'xep.ent'>
|
|
%ents;
|
|
<!ENTITY component "<note>Support can be enabled via an external component or an internal server module/plugin. If claiming compliance using such an addition, the necessary components/modules/plugins MUST be detailed.</note>">
|
|
<!ENTITY usecases "<note>Support for the Entity Use Cases and Occupant Use Cases is REQUIRED; support for the remaining use cases is RECOMMENDED.</note>">
|
|
<!ENTITY onlyone "<note>Only one of the recommended providers must be implemented for compliance.</note>">
|
|
<!ENTITY nocli "<note>Not required for command line or terminal based interfaces.</note>">
|
|
<!ENTITY avatar "<note>While 'User Avatars' is more modern, 'vCard-Based Avatars' is more widely deployed. Although it is suggested that to maximise interoperability with existing software a client fully supports both it is sufficient to claim compliance with this suite if the support for 'vCard-Based Avatars' is read-only.</note>">
|
|
<!ENTITY pubsubjid "<note>While 'Personal Eventing Protocol' does not require all the features of 'Publish-Subscribe' to be available on the users' JIDs, and nor does this suite, it is desirable for this to be the case and it is expected that this will a requirement of future Compliance Suites.</note>">
|
|
<!ENTITY yes "✓">
|
|
<!ENTITY no "✕">
|
|
]>
|
|
<?xml-stylesheet type='text/xsl' href='xep.xsl'?>
|
|
<xep>
|
|
<header>
|
|
<title>XMPP Compliance Suites 2020</title>
|
|
<abstract>
|
|
This document defines XMPP application categories for different use cases
|
|
(Core, Web, IM, and Mobile), and specifies the required XEPs that client and
|
|
server software needs to implement for compliance with the use cases.
|
|
</abstract>
|
|
&LEGALNOTICE;
|
|
<number>0423</number>
|
|
<status>Obsolete</status>
|
|
<type>Standards Track</type>
|
|
<sig>Standards</sig>
|
|
<dependencies>
|
|
<spec>RFC 6120</spec>
|
|
<spec>RFC 6121</spec>
|
|
<spec>RFC 7395</spec>
|
|
<spec>RFC 7590</spec>
|
|
<spec>RFC 7622</spec>
|
|
<spec>XEP-0030</spec>
|
|
<spec>XEP-0045</spec>
|
|
<spec>XEP-0048</spec>
|
|
<spec>XEP-0049</spec>
|
|
<spec>XEP-0084</spec>
|
|
<spec>XEP-0085</spec>
|
|
<spec>XEP-0114</spec>
|
|
<spec>XEP-0115</spec>
|
|
<spec>XEP-0124</spec>
|
|
<spec>XEP-0163</spec>
|
|
<spec>XEP-0191</spec>
|
|
<spec>XEP-0198</spec>
|
|
<spec>XEP-0206</spec>
|
|
<spec>XEP-0223</spec>
|
|
<spec>XEP-0249</spec>
|
|
<spec>XEP-0280</spec>
|
|
<spec>XEP-0313</spec>
|
|
<spec>XEP-0352</spec>
|
|
<spec>XEP-0368</spec>
|
|
</dependencies>
|
|
<supersedes>
|
|
<spec>XEP-0412</spec>
|
|
</supersedes>
|
|
<supersededby/>
|
|
<shortname>CS2020</shortname>
|
|
<author>
|
|
<firstname>Georg</firstname>
|
|
<surname>Lukas</surname>
|
|
<email>georg@op-co.de</email>
|
|
<jid>georg@yax.im</jid>
|
|
</author>
|
|
<revision>
|
|
<version>1.0.0</version>
|
|
<date>2019-11-07</date>
|
|
<initials>mb</initials>
|
|
<remark><p>Update to Draft as per council vote on 2019/11/07.</p></remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.3.0</version>
|
|
<date>2019-11-06</date>
|
|
<initials>gl</initials>
|
|
<remark>
|
|
<p>Update with LC feedback</p>
|
|
<ul>
|
|
<li>IM Category:
|
|
<ul>
|
|
<li>Core Client: moved &xep0066; and &xep0385; out to "Specifications of note"</li>
|
|
<li>Advanced Client: moved &xep0392; out to "Specifications of note"</li>
|
|
<li>Specification of note: added &xep0077; and &xep0157;, &xep0392;, &xep0066; and &xep0385;</li>
|
|
</ul>
|
|
</li>
|
|
<li>Mobile Category:
|
|
<ul>
|
|
<li>Core Mobile: moved &xep0286; out to "Specification of note"</li>
|
|
<li>Specification of note: added &xep0286;</li>
|
|
</ul>
|
|
</li>
|
|
<li>Web Category:
|
|
<ul>
|
|
<li>Advanced Web: added &xep0156;</li>
|
|
</ul>
|
|
</li>
|
|
<li>Future developments: added &xep0333; and &xep0420;</li>
|
|
</ul>
|
|
</remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.2.0</version>
|
|
<date>2019-10-15</date>
|
|
<initials>gl</initials>
|
|
<remark>
|
|
<p>Update before LC:</p>
|
|
<ul>
|
|
<li>IM Category:
|
|
<ul>
|
|
<li>Core Client: added &xep0245;; File Upload: &xep0066; and optionally &xep0385;</li>
|
|
<li>Core Client and Server: added &xep0363;</li>
|
|
<li>Advanced Client: added &xep0234;, &xep0261;, &xep0392;</li>
|
|
<li>Advanced Client and Server: added &xep0411;</li>
|
|
</ul>
|
|
</li>
|
|
<li>Mobile Category:
|
|
<ul>
|
|
<li>Core Mobile: added &xep0286;</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.1.0</version>
|
|
<date>2019-09-11</date>
|
|
<initials>XEP Editor (jsc)</initials>
|
|
<remark>Accepted by vote of Council on 2019-09-11.</remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.0.1</version>
|
|
<date>2018-12-08</date>
|
|
<initials>jsc</initials>
|
|
<remark>
|
|
<p>First draft based on XEP-0412. Non-editorial Changes:</p>
|
|
<ul>
|
|
<li>Added "Future Development" section</li>
|
|
</ul>
|
|
</remark>
|
|
</revision>
|
|
</header>
|
|
<section1 topic='Introduction' anchor='intro'>
|
|
<p>
|
|
There is a growing number of XMPP Extension Protocols (XEPs) that provide
|
|
different building blocks for XMPP-based applications. XMPP software
|
|
developers are confronted with the challenge of finding the right
|
|
combination of XEPs for a given application profile. Users need a way to
|
|
compare applications without resorting to comparing for individual XEP
|
|
numbers.
|
|
</p>
|
|
<p>
|
|
This document defines XMPP application <strong>Categories</strong> based on
|
|
typical use cases (Core, Web, IM, Mobile) and <strong>Levels</strong>
|
|
(Core, Advanced) based on functionality in the respective category. For
|
|
each combination of those, the required XEPs are referenced. As the
|
|
protocol landscape changes over time, this document is updated roughly
|
|
once a year.
|
|
</p>
|
|
<p>
|
|
For developers, this document provides guidance on which specifications
|
|
they need to consider when implementing an application of a certain kind.
|
|
By completing a compliance test or performing a self-assessment, they can
|
|
advertise their implementation as compliant with a given Category and
|
|
Level.
|
|
</p>
|
|
<p>
|
|
For users, this provides an easy way to compare implementations based on
|
|
their respective advertised compliance levels and year.
|
|
</p>
|
|
<p>
|
|
Unless explicitly noted, support for the listed specifications is REQUIRED
|
|
for compliance purposes.
|
|
A feature is considered supported if all comma separated feature providers
|
|
listed in the "Providers" column are implemented (unless otherwise noted).
|
|
</p>
|
|
<section2 topic='Changes since 2019' anchor='changes'>
|
|
<p>The following changes were made to the Compliance Suites since &xep0412;:</p>
|
|
<ul>
|
|
<li>IM Category:
|
|
<ul>
|
|
<li>Core Client: added &xep0245;</li>
|
|
<li>Core Client and Server: added &xep0363;</li>
|
|
<li>Advanced Client: added &xep0234;, &xep0261;</li>
|
|
<li>Advanced Client and Server: added &xep0411;</li>
|
|
<li>Specifications of note: added &xep0077; and &xep0157;, &xep0392;, &xep0066; and &xep0385;</li>
|
|
</ul>
|
|
</li>
|
|
<li>Mobile Category:
|
|
<ul>
|
|
<li>Specifications of note: added &xep0286;</li>
|
|
</ul>
|
|
</li>
|
|
<li>Web Category:
|
|
<ul>
|
|
<li>Advanced Web: added &xep0156;</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</section2>
|
|
</section1>
|
|
<section1 topic='Compliance Categories' anchor='categories'>
|
|
<section2 topic='Core Compliance Suite' anchor='core'>
|
|
<table caption='XMPP Core Compliance Levels'>
|
|
<tr>
|
|
<th>Feature</th>
|
|
<th>Core Server</th>
|
|
<th>Core Client</th>
|
|
<th>Advanced Server</th>
|
|
<th>Advanced Client</th>
|
|
<th>Providers</th>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Core features</strong></td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&rfc6120; <note>&rfc7622; is not listed due to the unclear interoperability impact of using PRECIS and Stringprep in the same ecosystem.</note></td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>TLS</strong></td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&rfc7590;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Direct TLS</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;<note>Server support of XEP-0368 means having the ability to accept direct TLS connections.</note></td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0368;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Feature discovery</strong></td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0030;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Feature broadcasts</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0115;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Server Extensibility</strong></td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>N/A</td>
|
|
<td>&xep0114;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Event publishing</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;&pubsubjid;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0163;</td>
|
|
</tr>
|
|
</table>
|
|
</section2>
|
|
<section2 topic='Web Compliance Suite' anchor='web'>
|
|
<p>
|
|
To be considered XMPP web compliant, all features from the core
|
|
compliance category must be met, as well as all features in this suite.
|
|
</p>
|
|
<table caption='XMPP Web Compliance Levels'>
|
|
<tr>
|
|
<th>Feature</th>
|
|
<th>Core Server</th>
|
|
<th>Core Client</th>
|
|
<th>Advanced Server</th>
|
|
<th>Advanced Client</th>
|
|
<th>Providers</th>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Web Connection Mechanisms</strong></td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;&onlyone;</td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;&onlyone;</td>
|
|
<td>&rfc7395;, &xep0206; (See also: &xep0124;)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Connection Mechanism Discovery</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0156;</td>
|
|
</tr>
|
|
</table>
|
|
</section2>
|
|
<section2 topic='IM Compliance Suite' anchor='im'>
|
|
<p>
|
|
To be considered XMPP IM compliant, all features from the core
|
|
compliance category must be met, as well as all features in this suite.
|
|
</p>
|
|
<table caption='XMPP IM Compliance Levels'>
|
|
<tr>
|
|
<th>Feature</th>
|
|
<th>Core Server</th>
|
|
<th>Core Client</th>
|
|
<th>Advanced Server</th>
|
|
<th>Advanced Client</th>
|
|
<th>Providers</th>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Core features</strong></td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&rfc6121;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>The /me Command</strong></td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0245;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>User Avatars</strong></td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&yes;&nocli;</td>
|
|
<td>&xep0084;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>User Avatar Compatibility</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;&nocli;</td>
|
|
<td>&xep0398;, &xep0153;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>vcard-temp</strong></td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0054;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Outbound Message Synchronization</strong></td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0280;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>User Blocking</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0191;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Group Chat</strong></td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;&usecases;</td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;&usecases;</td>
|
|
<td>&xep0045;<note>Implementations should take note that future versions of these compliance suites may rely on &xep0369; instead.</note>, &xep0249;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Advanced Group Chat</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0048;, &xep0313;<note>Support for requesting history from a MUC archive as opposed to from the user's account.</note>, &xep0410;, &xep0411;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Persistent Storage of Private Data via PubSub</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0223;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Private XML Storage</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0049; (only recommended for legacy bookmarks support)</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Stream Management</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0198;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Message Acknowledgements</strong></td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0184;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>History Storage / Retrieval</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0313;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Chat States</strong></td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0085;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Message Correction</strong></td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0308;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>File Upload</strong></td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0363;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Direct File Transfer</strong></td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>N/A</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0234;, &xep0261;</td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
Further specifications of note, which are not required for compliance:
|
|
</p>
|
|
<ul>
|
|
<li>For public IM networks: &xep0077; (should be supported, but not enabled in default server configurations) and &xep0157;</li>
|
|
<li>File uploads should be indicated using &xep0066;, optionally also using &xep0385;</li>
|
|
<li>&xep0392; for cross-client consistency of user names</li>
|
|
</ul>
|
|
</section2>
|
|
<section2 topic='Mobile Compliance Suite' anchor='mobile'>
|
|
<p>
|
|
To be considered XMPP mobile compliant, all features from the core
|
|
compliance category must be met, as well as all features in this suite.
|
|
</p>
|
|
<table caption='XMPP Mobile Compliance Levels'>
|
|
<tr>
|
|
<th>Feature</th>
|
|
<th>Core Server</th>
|
|
<th>Core Client</th>
|
|
<th>Advanced Server</th>
|
|
<th>Advanced Client</th>
|
|
<th>Providers</th>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Stream Management</strong></td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0198;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Client State Indication</strong></td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td align='center'>&yes;</td>
|
|
<td>&xep0352;</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>Third Party Push Notifications</strong></td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&no;</td>
|
|
<td align='center'>&yes;&component;</td>
|
|
<td align='center'>&yes;<note>Only on platforms that disallow long-lasting background connections.</note></td>
|
|
<td>&xep0357;</td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
Further specifications of note, which are not required for compliance:
|
|
</p>
|
|
<ul>
|
|
<li>&xep0286;</li>
|
|
</ul>
|
|
</section2>
|
|
</section1>
|
|
<section1 topic='Future Development' anchor='future'>
|
|
<p>This section outlines the protocol specifications that are relevant for
|
|
developers, but are not ready yet to be required for Compliance.
|
|
Developers are encouraged to implement those and
|
|
to share their experience and feedback.</p>
|
|
<ul>
|
|
<li>Client connection optimizations: &xep0386; and &xep0409;, maybe also &xep0397;</li>
|
|
<li>&xep0333;</li>
|
|
<li>&xep0369;</li>
|
|
<li>End-to-End Encryption (E2EE): &xep0380; for tagging encrypted messages, &xep0420; to protect all payloads; and also one or multiple of the following for actual encryption:
|
|
<ul>
|
|
<li>&xep0384; and &xep0396;</li>
|
|
<li>&xep0374;</li>
|
|
</ul>
|
|
</li>
|
|
<li>&xep0402; to phase out &xep0048;, &xep0049;, and &xep0411;</li>
|
|
<li>&xep0225; to phase out &xep0114;</li>
|
|
<li>&xep0390; to phase out &xep0115;</li>
|
|
</ul>
|
|
</section1>
|
|
<section1 topic='Implementation Notes' anchor='impl'>
|
|
<p>
|
|
Some of the protocol specifications referenced herein have their own
|
|
dependencies; developers need to consult the relevant specifications for
|
|
further information.
|
|
</p>
|
|
</section1>
|
|
<section1 topic='Security Considerations' anchor='security'>
|
|
<p>
|
|
This document introduces no additional security considerations above and
|
|
beyond those defined in the documents on which it depends.
|
|
</p>
|
|
</section1>
|
|
<section1 topic='IANA Considerations' anchor='iana'>
|
|
<p>This document requires no interaction with &IANA;.</p>
|
|
</section1>
|
|
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
|
|
<p>This document requires no interaction with the ®ISTRAR;.</p>
|
|
</section1>
|
|
<section1 topic='Acknowledgements' anchor='ack'>
|
|
<p>
|
|
The author would like to thank Guus der Kinderen, Dele Olajide, Marc
|
|
Laporte, Dave Cridland, Daniel Gultsch, Florian Schmaus, Tobias Markmann,
|
|
and Jonas Schäfer for their suggestions.
|
|
</p>
|
|
</section1>
|
|
</xep>
|