<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY I-D.ietf-openpgp-crypto-refresh SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-openpgp-crypto-refresh.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
]>


<rfc ipr="trust200902" docName="draft-dkg-openpgp-revocation-00" category="info" submissionType="IETF" xml:lang="en">
  <front>
    <title>Revocation in OpenPGP</title>

    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization>ACLU</organization>
      <address>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>

    <date year="2023" month="August" day="16"/>

    <area>Security</area>
    <workgroup>openpgp</workgroup>
    <keyword>OpenPGP, revocation</keyword>

    <abstract>


<t>Cryptographic revocation is a hard problem.
OpenPGP's revocation mechanisms are imperfect, not fully understood, and not as widely implemented as they could be.
Additionally, some historical OpenPGP revocation mechanisms simply do not work in certain contexts.
This document provides clarifying guidance on how OpenPGP revocation works, documents outstanding problems, and introduces a new mechanism for delegated revocations that improves on previous mechanism.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://dkg.gitlab.io/openpgp-revocation/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dkg-openpgp-revocation/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OpenPGP Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://gitlab.com/dkg/openpgp-revocation"/>.</t>
    </note>


  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>OpenPGP revocation is complicated.
This document attempts to clean it up and build a consensus around syntax, semantics, use cases, and workflows.</t>

<t>The only substantive wire format change is the introduction of the "Delegated Revoker" subpacket described in <xref target="delegated-revoker"/>.</t>

<section anchor="terminology"><name>Terminology</name>

<t>The term "OpenPGP Certificate" is used in this document interchangeably with "OpenPGP Transferable Public Key", as defined in <xref section="10.1" sectionFormat="of" target="I-D.ietf-openpgp-crypto-refresh"/>.</t>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

</section>
</section>
<section anchor="what-can-be-revoked-keys-subkeys-certifications"><name>What Can Be Revoked: Keys, Subkeys, Certifications?</name>

<t>There are three kinds of signatures that do revocation: Key Revocation (0x20), Subkey Revocation (0x28), and User ID Revocation (0x30).</t>

<t>This document focuses on revoking full OpenPGP certificates (a.k.a. "Transferable Public Keys") using Key Revocation signatures (0x20).</t>

<t>This document also explicitly deprecates the remaining two signature types: Subkey Revocation (0x28) and User ID Revocation (0x30).</t>

<section anchor="revoking-certification"><name>Instead of Revoking a Certification</name>

<t>User ID self-certifications can be explicitly expired or replaced by the keyholder by issuing a superseding certification, so the only possible reason for a certification revocation is for third-party certifications.</t>

<t>When Alice revokes her certification over Bob's Primary Key and User ID, what is she saying specifically?</t>

<t>How does Alice's Certification Revocation signature packet get placed into Bob's certificate?</t>

<t>Why doesn't Alice just issue a superseding certification of her own over Bob's User ID instead of revoking it?</t>

</section>
<section anchor="revoking-subkeys"><name>Instead of Revoking a Subkey</name>

<t>Why bother revoking a subkey?
Why not just issue an superseding Subkey Binding Signature?</t>

<t>What happens when a Subkey Binding Signature is revoked, and then later a new Subkey Binding Signature is made over the same subkey?</t>

</section>
</section>
<section anchor="challenges-with-openpgp-revocation"><name>Challenges with OpenPGP Revocation</name>

<t>This section describes a number of outstanding challenges with implementing OpenPGP revocation in the state of the field before this document.
Some of these problems are fixed by this document.</t>

<section anchor="obtaining-revocation-information"><name>Obtaining Revocation Information</name>

<t>How does the user know that they have the correct revocation status?
Where do they look for revocations from?
With what frequency?</t>

<t>How does the keyholder distribute revocations for older keys?</t>

</section>
<section anchor="verifying-revocations"><name>Verifying Revocations</name>

<t>The deprecated "Revocation Key" subpacket contains only a fingerprint.
If the deprecated "Revocation Key" subpacket is in use, how does the verifier obtain the revoking key if they do not already have a copy of it?</t>

<t>What happens if they have a copy of a primary key that matches the fingerprint, but the enclosing certificate indicates that it is expired, revoked, or otherwise invalid?</t>

</section>
<section anchor="social-graph-leakage"><name>Social Graph Leakage</name>

<t>If it's possible to find a certificate containing the matching fingerprint in a deprecated "Revocation Key" subpacket, then an observer can learn who the keyholder trusts even when no revocation is needed.</t>

<t>An attacker that wants to target Alice, for example, can observe that Alice has indicated Bob seems trustworthy if Alice has pointed to Bob's key's fingerprint with a deprecated "Revocation Key" subpacket.</t>

</section>
<section anchor="revocations-using-weak-cryptography"><name>Revocations Using Weak Cryptography</name>

<t>What if we find a Key Revocation signature made using SHA1 or MD5?</t>

<t>Should we consider the indicated key revoked?</t>

</section>
<section anchor="revocations-made-by-revoked-keys"><name>Revocations Made By Revoked Keys</name>

<t>It's possible for key A to indicate, using the deprecated "Revocation Key" subpacket, that key B is permitted to revoke key A.</t>

<t>What if B revokes both itself and key A: is A valid?</t>

<t>What if, instead, B indicates (via the deprecated "Revocation Key" subpacket) that key A is permitted to revoke key B?
In this scenario, what happens when both A and B revoke each other?</t>

<t>What if A designates that B can revoke A, and B designates that C can revoke B?
In that case, if C revokes B and then B revokes A, is A still valid?</t>

</section>
<section anchor="revoking-primary-key-binding-signatures"><name>Revoking Primary Key Binding Signatures</name>

<t>Primary keys sign Subkey Binding Signatures.
Signing-capable subkeys sign Primary Key Binding Signatures.</t>

<t>Is there ever a scenario where a signing-capable subkey might want to revoke its own Primary Key Binding Signature?</t>

<t>If so, how is that done?</t>

</section>
<section anchor="implications-for-revoked-key-material"><name>Implications for Revoked Key Material</name>

<t>You find a self-revoked primary key, and you find another OpenPGP certificate in the wild that uses the same key material (but maybe different creation date, or used as a subkey instead of as a primary key).
Is it acceptable for use?</t>

<t>In certificate with primary key X, there is a revoked subkey Y (it was revoked by X issuing a valid Subkey Revocation signature).
But the certificate with primary key Z, <em>also</em> has subkey Y.
Is subkey Y valid for the Z certificate?</t>

</section>
<section anchor="reasons-for-revocation-mismatch"><name>Reasons for Revocation Mismatch</name>

<t>How should an implementation interpret a Key Revocation signature or Subkey Revocation signature with Reason for Revocation subpacket with ID 32 ("User ID information is no longer valid")?</t>

<t>How should an implementation interpret a Certification Revocation with a Reason for Revocation with ID 1 ("Key is superseded")?</t>

<t>Do we just say these Revocation signatures are invalid?</t>

</section>
<section anchor="what-about-future-revocations"><name>What About Future Revocations?</name>

<t>FIXME: If a Revocation signature appears to have been made in the future, what should be done with it?</t>

</section>
</section>
<section anchor="expiration-as-a-revocation-alternative"><name>Expiration as a Revocation Alternative</name>

<t>Expiration makes just as much sense as a soft revocation in many circumstances, and is typically better supported.</t>

</section>
<section anchor="dealing-with-revoked-certificates"><name>Dealing With Revoked Certificates</name>

<t>Implementations <bcp14>MUST NOT</bcp14> encrypt to a revoked certificate.
Implementations <bcp14>MUST NOT</bcp14> accept a signature made by a revoked certificate as valid unless the revocation is "soft" (see <xref target="soft-vs-hard"/>) and the timestamp of the signature predates the timestamp of the revocation.
Implementations <bcp14>MUST NOT</bcp14> use secret key material corresponding to a revoked certificate for signing, unless the secret key material also corresponds to a non-revoked certificate.</t>

<t>Implementations <bcp14>MAY</bcp14> use the secret key material corresponding to a revoked certificate.</t>

</section>
<section anchor="soft-vs-hard"><name>Hard vs. Soft Revocations</name>

<t>Reasons for Revocation subpacket allows different values.</t>

<t>Some of them suggest that a verifier can still accept signatures from before the timestamp of the Revocation.
These are "soft" revocations.</t>

<t>All the rest require that a verifier <bcp14>MUST</bcp14> treat the certificate as "hard" revoked, meaning that even signatures that have creation timestamps before the creation timestamp of the revocation signature should themselves be rejected.</t>

</section>
<section anchor="revocation-certificates"><name>Revocation Certificates</name>

<t>A revocation certificate indicates that a given primary key is revoked.</t>

<t>This can take two common forms.
Each form is a sequence of OpenPGP packets:</t>

<t><list style="symbols">
  <t>A standalone Key Revocation signature packet by key X over X (this form is valid only for primary keys earlier than version 6)</t>
  <t>Primary Key X + Key Revocation signature by X over X</t>
</list></t>

<t>Additionally, there is a deprecated form:</t>

<t><list style="symbols">
  <t>Primary Key X + Direct Key Signature with Revocation Key subpacket pointing to Y + Key Revocation signature by Y over X (this form is valid only for primary keys earlier than version 6)</t>
</list></t>

<t>This document introduces a new form in <xref target="delegated-revoker"/>:</t>

<t><list style="symbols">
  <t>Primary Key X + Direct Key Signature with Delegated Revoker subpacket containing Y + Key Revocation signature by Y over X</t>
</list></t>

<section anchor="handling-a-revocation-certificate"><name>Handling a Revocation Certificate</name>

<t>When an implementation observes any of the above forms of revocation certificate for a certificate with primary key X, it should record it and indicate that X has been revoked and is no longer to be used, along with all of its User IDs and Subkeys.</t>

</section>
<section anchor="publishing-a-revocation-certificate"><name>Publishing a Revocation Certificate</name>

<t>FIXME: talk about interactions with HKP, VKS, WKD, OPENPGPKEY (DANE), or other key discovery methods?</t>

</section>
</section>
<section anchor="escrowed-revocation-certificate"><name>Escrowed Revocation Certificate</name>

<t>An escrowed revocation certificate is just a valid revocation certificate that is not published.
The parties who can retrieve or reassemble the escrowed revocation certificate can publish it to inform the rest of the world that the certificate has been revoked.</t>

<t>In what circumstances does escrowed revocation work?
When is it inappropriate?</t>

<section anchor="escrowed-hard-revocation-workflow"><name>Escrowed Hard Revocation Workflow</name>

<t>An escrowed hard revocation certificate covers the use case where where the keyholder has lost control of the secret key material, and someone besides the keyholder may have gotten access to the secret key material.</t>

<t>At key creation time, keyholder creates a hard revocation certificate.
Optionally, they encrypt it to a set of trusted participants.
The keyholder stores the revocation certificate somewhere they or one of the trusted participants will be able to access it.</t>

<t>If the keyholder sends it to any trusted participant immediately, that participant can trigger a revocation any time they like.
In this case, the keyholder and the trusted participants should clarify between themselves what an appropriate signal should be for when the trusted participant should act</t>

<t>If physical access is retained by the keyholder, then the keyholder has to be capable of consenting for the revocation to be published.</t>

</section>
<section anchor="escrowed-soft-revocation-workflow"><name>Escrowed Soft Revocation Workflow</name>

<t>Do regular updates of the escrowed revocation  (e.g. after each signing).
Store them somewhere safe?</t>

</section>
<section anchor="k-of-n-escrowed-revocation"><name>K-of-N Escrowed Revocation</name>

<t>FIXME: how to split an escrowed revocation certificate among N parties so that any K of them can reconstruct it.</t>

</section>
</section>
<section anchor="delegated-revoker"><name>The Delegated Revoker Subpacket</name>

<t>See https://gitlab.com/openpgp-wg/rfc4880bis/-/merge_requests/18</t>

<t>This should effectively replace the deprecated "Revocation Key subpacket".</t>

<t>Signature subpacket type ID 36.
Only valid in the hashed subpackets section of a direct-key self-signature over a primary key.</t>

<t>Contains a full public key packet.</t>

<t>(FIXME: do we include a class octet with a "sensitive bit", as the "Revocation Key subpacket" does, or can we just rely on the exportable certification subpacket as described in <xref target="exportable-certification"/>?)</t>

<section anchor="supersedingoverriding-the-delegated-revoker-subpacket"><name>Superseding/Overriding the Delegated Revoker Subpacket?</name>

<t>If the delegated revoker subpacket is in a direct key signature made at time T0, and another direct key signature packet was made at time T1 that lacks a delegated revoker subpacket, what happens?</t>

</section>
<section anchor="reasonable-workflows"><name>Reasonable Workflows</name>

<t>The Delegated Revoker mechanism is only useful for a potential scenario where the keyholder has lost control of the primary secret key.
Otherwise, the keyholder could simply issue the desired Key Revocation signature (type 0x20) directly.</t>

<t>If the keyholder needs a hard revocation, and they have access to an escrowed Key Revocation signature, they can use that.</t>

<t>So the circumstances where a Delegated Revoker is relevant</t>

<section anchor="delegator-selection"><name>Delegator Selection</name>

<t>Keyholder needs to choose who they think will be responsible for handling the delegated responsibility of revoking when the time is needed.
This could be another individual, or it could be a machine that has distinct security and operational characteristics from the machine that holds the primary key.</t>

</section>
<section anchor="delegated-key-selection"><name>Delegated Key Selection</name>

<t><list style="symbols">
  <t>Keyholder generates revocation secret key</t>
  <t>Keyholder selects signing-capable key or subkey already belonging to delegate</t>
</list></t>

</section>
<section anchor="delegation-publication"><name>Delegation Publication</name>

<t><list style="symbols">
  <t>private communication</t>
  <t>public (keyservers)</t>
</list></t>

</section>
</section>
<section anchor="interaction-with-specific-subpackets"><name>Interaction with Specific Subpackets</name>

<t>Some signature subpackets might have additional meaning when coupled with a Delegated Revoker subpacket in the hashed subpackets section of a single signature</t>

<section anchor="signature-expiration-subpacket"><name>Signature Expiration Subpacket</name>

<t>FIXME: what should be done if the signature expires?</t>

</section>
<section anchor="exportable-certification"><name>Exportable Certification Subpacket</name>

<t>(Should an observed non-exportable delegated revocation subpacket, when combined with an actual revocation, be treated as exportable?)</t>

</section>
</section>
<section anchor="k-of-n-delegated-revokers"><name>K-of-N Delegated Revokers</name>

<t>FIXME: should this document outline how a group of trusted parties could effectively revoke a given certificate that authorized them to do so?</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This draft asks IANA to do several things, all within the OpenPGP protocol group.</t>

<section anchor="subpacket-types-add-delegated-revoker-row"><name>Subpacket Types: Add Delegated Revoker Row</name>

<t>Add an entry "Delegated Revoker" to OpenPGP subpackets, type 36, referencing this document, <xref target="delegated-revoker"/>.</t>

</section>
<section anchor="reasons-for-revocation-add-hard-vs-soft-column"><name>Reasons for Revocation: Add Hard vs. Soft Column</name>

<t>The "Reasons for Revocation Code" registry should add a column to indicate "Hard/Soft".
Only "Key is Superseded" and "Key is retired and no longer used" are marked "Soft".
All other values should be treated as "Hard".</t>

</section>
<section anchor="signature-types-update-references"><name>Signature Types: Update References</name>

<t>"Signature Types" registry entries should have References updated:</t>

<t><list style="symbols">
  <t>0x20 references should additionally point to this document</t>
  <t>0x28 references should be marked "deprecated", and additionally point to this document, <xref target="revoking-subkeys"/></t>
  <t>0x30 references should be marked "deprecated", and additionally point to this document, <xref target="revoking-certification"/></t>
</list></t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This document describes ways that the OpenPGP ecosystem deals with revoked certificates.
Revocation is a security measure because it is a method of last resort for dealing with cryptographic credentials that are known to have failed for one reason or another.</t>

<t>The entire document is therefore focused on security.
Implementers who ignore this guidance may either allow known-bad key material to be used (by ignoring a valid revocation signature) or may issue revocation signatures that other implementations are likely to ignore.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>

&I-D.ietf-openpgp-crypto-refresh;
&RFC2119;
&RFC8174;


    </references>



<section anchor="test-vectors"><name>Test Vectors</name>

<t>FIXME: This document should include several different valid OpenPGP Revocation Certificates.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Phil Zimmermann championed the Delegated Revoker subpacket work.</t>

</section>
<section anchor="substantive-changes-to-this-document"><name>Substantive changes to this document</name>

<t>RFC Editor Note: Please delete this section before publication.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA61b23LbSJJ951fU0A8j9ZKU1N3T61FsrIaW5LbC17Xstt0b
GxtFoEjWCAQwKFA0x+F/mW/ZL9uTmVVAgQRlT8Q8tJsC6pL3PJlVGI/Hg7RI
cr0y5yqt9Lwep3eLcVGavFyU48rcF4mubZGPT08H+HWubD4vBm49W1nn8Lze
lph5c/3u6cCW1bmqq7Wrfzw9/fPpj4NM54tzZfJBbesMo942q2EV9Rp7vPn1
zUBXRp+rW5OsK1tvBxtM8dsP7jbnYdhItbQM7k2+NucDpRZVsS7P1dAPGuKR
EDT8UFR3Nl+oX2kEPV9pm+G5X/ov1tTzSVEt6JWukiVeLeu6dOcnJzSSHtl7
MwnDTujByawqNs6c+DVOaG5lyiKauwCnejZJitUJ5HiyL0eak+nauDqahaET
P9MWPZOwk17Xy6I6H4whOneuribq+UT9arNsVVRYUhR4pXNrMvVcL/PoHcg/
V9PLF+/x24gYsOFf5nZeL7Gmw7N8kpt6MB6PlZ65utJJPRhcVtuyLhaVLpc2
iaSvrFNaLXWVqrIqZplZTQZe/n908biVSZYgyK0wvjLKrkpTzU1Sj1Re1Gq+
zrKtWuepqVxdFOlI6TzlN9qpjU0N3mIKljd5bVJ6Wi/NViXFOkvVzEwG0zS1
tJHGQiPlipVRS4u1KpvoLNjNAYIcLb1VacE7bmAsZJKJqWpN/4ddm8+1mwze
YUWMStZEBfF7D8qcSmAgdr4lA1usbarzxChssCw2ffvS8m7ULONUsa5dDXZp
vpehE/5tXldFuk4MyTg3m5ZmNS8qBamYhSZxtMuTXHRNsgJ1mIcNS7y1xdq1
sycD1u7KpmlmBoNH6sZvxP406CEafMOKywzCxH67ktB1bVYlWKkLCMNojK/V
umQeZmsLDWmSojO5W5P6CyhauW1e689QFVlcbRPwvHZGJdoZzz5Jap7ByUDv
uyXJFEpCsCFp1fBHGAYsCZJYgWNibWGIUBhGIzkmvpjzs+FVIy+KPXemGtJq
pU7uTA1huqSyM0NSV1++NLJlx8PYr19BxaNH6p2pVjYvsmKxFapqPGhijrqE
0dg5i2lIxIAlXrHuCAzkmUoo1jMwtbH1sl3jXaVzNzcVXhn1Zj2D1NVzsx2O
yOxTM7d5oBJxkjk8O52cEZt/uBlfcZRqYnbCfgsm5pVxS2aCiL6D70C8qVPD
l+9v32Fp/r969Zp/v73+r/c3b6+v6Pfts+mLF82PgR9x++z1+xdX7a925uXr
ly+vX13JZDxVnUeD4cvpp6Hod/j6zbub16+mL4b7EqIYAWuaGZEVbFjcftDR
05PLN//3j7OfIYk/vH16+ePZ2Z+/fvV/PD7795/xx2ZpctmNrUf+pNAx0GVp
dEWrIGTA7Epb68yxjB1cF/5rKsSVwQ//TZL5n3P1H7OkPPv5P/0DYrjzMMis
85Bltv9kb7IIsedRzzaNNDvPdyTdpXf6qfN3kHv0kKLAB4ocl/DeJ8Z7SHpO
hgeh3K5nd/yjtW8KNhdsTVAVq2tZGViWzWFVsEVnF7mu1zA7CUmIrm1A4XVj
CHB0+vnH0+Ow0e6bx8eiw/fOVOrmauf1T6fHbNax/czxw0n8Ywem4EpJponI
SeuoTh3pyd1ET9TwgOu54TE8mdbYITtiUjjYIwQ2VSjzmUIncjqSjIEty64U
lCrKwTmtXG+KdjkGLsjsh8TxTWk8oqDuaqNT0sXbIALdVaD68ihIZ5zEL74O
BmF1Z7J59yVyAYwErhmxhZ8IxtisIhCU6QS/Z1tmEQwsiwyZnR4AJ66FELcG
AkB0pL86y1P25onssWUBZEnaADB0oJgSn+5O2ElUNALBpErHpa7qbXcs5ZIP
CAJqCsqN2AZUASPeWRPZs1JPihlQzJvKrnS1Zd1Hch8hmlCqpXhhlNMMAFxp
El4EMATe8QwYIC2wAW+Htbri77Mk5RPSAv95QSIEFp6WyGwviJMtL5//sfYM
/RWAm4VsHhIx2QSxTGEuYjSo3LaW0ziPrS8esCpvp5E5OYkYX4XIWVHTflU7
Q95f8FtCXTHheYdyv/YTKxDpNgiK+YcClhTJYZQU21tS9oaTokTdHl3WNJ7Q
d+XR1UMzVzo1IqqalQ14GThA5LxcQt8G2dxJKg9BptWvDwvOJ+yQxRjYrVcz
0sW8gwSTnSUb9Esv+xBaLpTVYCggnjnwP6FjeITp5tfJ4JYQsowD6gq4kwP5
3H4O3tuZQup/Pat9vIps9yYXEMZ8NiZPFKzJou5yPOIcwJh9qe8Nv0yKCqGw
jrkg8teOrIKySlrIjKwo7titY5w7r4oVBpJs2A8BcP62NnnScbtu/ElREEDq
69p0V8LKMoAsVsz8NxMgfcunE+zURHAgmEgIhNAiPElVAyTlJIppCBW6BI6x
JMkb0c/3rQQdQLmQ5IhLioaveyLRkuWwTnw68Q5GhmznIj5f1+gMITT18idA
Xm7JANixO44U5u0M1LASCYS0OOsTOk+WnpyIwRFQPysb5X6SFa4bfwjSpTak
QIqgzKPPIKPWSUktFDY21tGce53ZVLRzWyQWVd2vVI6qF0bf6QXqmBtiBmGs
SRmImqAq7eQLEzTDORckMg8MD1oGGBV+n3pGEkcQs4oZjJ0iBGVHVEEVar1l
sWOC3BEBs/cml4CVFzvpKzcmpRJrMM2psKJNKpHTRudSY9W6ouzAEX/E5ms+
a4oPI97bEyKTJC0stWuknlK0RyQid2dyUAjUSzaXdnBZWC60m8QDFvBvLCMO
S98pJQkekSsh15DMP0B3KuotbL0pgpaNCco7hLkkKAsuA6w+I4N5efUnmMjt
kvsCG1a2s6kP260EyIK9nV3skfaSln2yDRiYASCsq2NaJHRaZEoSCuuOPDHf
7dsj0RFnHdJ9ScVl7eUu9Mkuk1YuTxrQQkkVFk8AjRMajzyndaYqOIufNQo5
fUQbNe53dG/191N73FI7fYjaJxeDG1/PucTkurKFx0qdVM3kT5nywJMyOlmK
07e0YwzSJSs9RIwnbOd+znTk19gddRmPCkRRq0BTLMXCl40on7SIoJUvFmZZ
utqicIjCTwN8YmS4BxtgM2/agOnYbg9iDOBS+s1AXJdcfngEJfMe3gnmccNR
GE5h7hnQBMmTrCsGg73Lq5VdLCW0RFq01JbafGPXC464rpC0ZJsyLzceKfp+
UZNjI3+CjwF3IYYPBp+KdXB0LjW8W8bJRhS8bQbmgiZ7SrkAgzbUdGJ6uAps
MBtz7LdWR5SlVnqLSia1c1R9VK8lSJIC0dihQTa3cLRrMGsMj/lxRClKLygC
CU0niSlrHUIF1iBx5R1aOYDGOfXjyOuQm6pBEH7XT+rIkqIaFEsI7WNUULGB
9lSMTbwEcU98Xn6QjN9H6gcqW3/gTBC2Z84aWmQzKbWM+n2nLmEfoXKtVbwn
5qV1nHAFozmJ09QwDPA2oFnf9Hko/GPlB7gVvt62VWM8qAFXPAglz08/qqNh
W/80eJYzcgEESnlPuB4eX/wT1B8s+Hz67CcwkHUGqoh/CqW+JDJCwFVB6Y2r
JpSeHsb3dya43x7DJw6s0xnKDfV0zbKK0h+GPL35+PL6XN3Mmb4e0UrvjLEI
g8SZQeDkbOz9b87L+qjv5URuhuDgyxkuJ9U1gT5ZnV0p2m2aQYjYz94D2kXj
VppiMzOOKas1EgY1lo130WJe75RFK51vVWIrlDFUXSWhvUwRa1tKqQ7iaioE
IeQSaIjx1yN1ZSAzQiliSeJ1UYeXUEFH88AOvjVIyJdgDYmodeXISyaHp0rs
8CE7Qjqzbf9SxLn44zrPjHNNJdCCyiHJZaiOgPrUly/0x/jejenY5uvX45D7
VG1XBiJalaGAjJoSgOZN02pvXLvZA2xRdx/1L7lFJwxzGejKQtLLIXmxh/gc
NooZ7VuSm27tuk5WzYt83KuJfZqnn5jcQ+t/H8lsQ8/oaOzeTVCzwDJjmPnl
UUcPg8GBkNkGK1hqsXFRsoLW15z9o2p+hQmLBfQj+U+3dSKhIcEy3sKiGEHV
dNsp6FHx20jF7zjYUFjxdhVV01S4YAexCke++Le1rcweMWwWNSXbvYQEcx6S
SIZtKbgy2hdsGM/F0257meNQk7wb8l3M1P7rfQOObN7HLZIpkAmdps1o5F9N
EgJEpKVuWJjGKz5Q+mq1sMRNnH7bPlVoJpPiaoQ97hEnxWolCWMFYV8TYKbf
ghmc9EDYFgI8EuNx54PBmMEsvF1nFIgPJlZvbjOPSqTv9VEdMaQPm0nE4e4G
GWwZQ10kh8xK2ZqTyulugPrlGATEiPKj+rfDNMzajQc7h7sRRorqFqKLedzd
4spyl4n+vN0FB3GlEzkaV7/etT99g8pP/zrx7Bwd7B3/ytoHjif/Sd73DkP3
e1ckgO/lnnHFM5hWJmC03zN8730fMfmWBRjNt8En9QxLi52HTnSPQ+2eB/TD
atugEMijQEQmiM4n7OKO4o0fGfAymAnh3AOFFgLKoSTVBEAR9MwDOcQ8bqY1
XXTHc/3BmfQ/+EDJLR+WkAdftc7uSARrf1qsE8kavNuz529G6rfntyP14fnV
SL1+c/0Knv78GjXC1fTV9XHbO2MBpNYlpCZkMFMvi9QJ9nJJVWy8AfRRMs2V
CWMOhbOAxLy9HxhW+4MSakOWIgS5RUCxBsOoyb0sfLleVxYRXk6StHNmxa08
aiZ+gxia7lcn/XJjhl2mSUbesjZFFcrD3dyzawATrtoYxnYgpLRh+yiiWwsX
YueWS0GbAy5XBSyyKY4a0TM6iOT/wV956Aqfr9ccYpoU2zTbubfhS375t9t+
JPaywomLV0XWAL19kCMgmS7SUK6YGcd3XbrLoXiWxLsoAJ9zxhVOWpT9ixI6
kCedXDyK1uQXprlV1M82XTLqJIRtA7itx9zOiL6pw0ntBLKzxJbUQ52EOxB+
S7omZPZgcyxlEkMjzy17V94cs/RtQR2IjCKF9o1oLxpLrVDf/o8IMARSPeWI
gD0rImKuTEomJBzDIOO3DBEqu1hw8yfigpeDiP1Jir2jysN356QR1iWlqQX6
mPIx1F94oqJpQ74SIST2FNASmbwkjCwqAylmcwvwwEZNZU03zyCscrl1fI0r
CJEQEmWonkNm34/fN3sJ3KH7BdXJjSRO86GPEclNhkfBquO3O2A+8tsraqIt
1pCQWpdSMnkz6QsW6shMFhOl51R8cvPTlzjHk8Ft7XHrKjI/p+c+hjwfF/Px
q74o3uQQ6suBD1dmnO6+GUD1ivLZqyYm8zk86xOIoikvJEqT9KC6pBaTfqTI
pfZBxW0DKr482gctKFxQkPZclwzXlzaLk2qe/Pz48enMupPxycpUC/O/fNLn
andy9jicq4rBmDldKQSizrbhGsI32tst6hlSGdVi/4ZuuonBHaJfEHQIzkmm
840OWNZSenQeZjdHvHxiljL+GlPA4+Zm1LySNm2EU7D/ZTg01HJZpZQbKDS9
OUc58spNuQFk8yRbp3xMlyFZqgK1SXM0M6TGiOWrcjNby/0xvgl3UAac1hg9
kJZDg6kieRbCsPlMDRL2oe6VgqhMdbu36dpJO9dMvl4cy4Fee95/8hqSqWwa
DlIesKmLQXuSGl+F7KJZOT8NumBh7jRWCAdQiHx3KkkvNJh7Z4TGoXY7k8/E
WWB0d1KaHCSpexoS90tZriGY+PPmfQG010CtP19G6ofBeDBcFjXFNQq53UOA
78MCwSTb9A3DD+ewu+lCLuD6C7RyfUP04fg60MHS4Yjdiq9MeTFn277MSKeh
PVigucERTqkb4BGHuUO7e8RAJi5dHl1zD0XQYAfmhdOTfSVwEsrMPfIVKfBR
GEJdafzyd2mf73BCN2SXRcEgzd9uQCrO7xq8IH2l9pBxGWqqXTP3wyxi+7Zz
U6fNrGSW0Ymy9BJCEg5GTiXQvU3XhPiwn62jIbBwOhs3ocXi+AoFYk5N1sFX
9OVuJbxXCx6jiytUrADuObrVK50lOWiP14JQXMfcJAJGgvQKjIQ5Vq04Fyan
PU3nknlrsp2xjpdwe0dgdwLl/KFGuB8xM1TW+eo/SLxDGW0llwN1IAxc3Asc
X63WeXgxDhH8iIpAvh3gjv01qqamk2h96y+OtdHN+bae209Kzh/bie03zZGm
TcYmADWixk5DMnio4P++ZEZn21lEj8ikzZlRk75hosEifScBdrfLLHdAJCLy
4UBINd1TlBhUHEwtyJS3zQGN7y+k3AOOUljfFfpunGZBrmaMNUWSVObUcJdO
OJoZaWbKUWG7g89vHqzt6cA18mmajXEHCNV/Ri5DQE7L9y17NY0JPt0FP3yO
G9qLe7W4fEBi/26kvcmWDqBYcGPgZvpqqi79xYn25hMRRt8EgUEkOB7kp9GR
s844kC3ocAWRjETlrarpQ1ZFXSTIM8zHxOf9oMl3cuF1mqY9lvqWK+KUVQm5
IFr0XeYHNWGv1oRHAuB++oUuFnHbPJFoGsl59NCF//6uvFDabe5fFtl6lUvS
Hh5o5l8WqaG+9oKuom2bQieVTyRofnyhRA1phxNafejRZzgOvG2PA+Uy/fPQ
Oq4588r3M6FrRf2qIXfsEWuprzX0a1KvXvKAnCVELhrZM5Mx9CprvNWr7D2X
OWBSpEvt7+HOoIhjUp9t9+EI1k71NVPKzUxCB43S2ik6agZLp1YaDpFCZfLj
nsmzVgJtUeC/R/iOhclS9q64fuXtfuqj9V+53Q5yJk8N38kd8NYQRtrbphu9
dW3jK3gLijm3RURZYaTOfI+x50DLTQaRKfsDB08BUo/jnjB4JFAll/q07zhS
1EJ9QqWEQ2T0ny/J6SrvlnS+L0MWTwXChnMSrEzXSPPmyHmubSZdf27F+Nvh
hH8F1/gPXWgVvkkaeur+mgyfCclHAtSlb/iIzi+prUYgDabc3J9tvu+izpex
7Dh8KifUjWc67Z4Utu1idUTX32mt+LpG38HTMbFBGwie7hvixeIR3M7pJQmL
Gj0wqzqQ7z/5miEocrFO3dDfkC6KKAV1jcZbcCgwQ5DvHD6Cgf2rzp2jMG4N
TBOSDtS1YDLpYtTSZup3amlVK53nBBpXJeZKPnoQq1B/lVe9jb4Ek2+p3H4g
GLx9eqmu4WgQ6SvURefqTWaoR0rxvvZaDSjHHxWWLbTDRv8PmofK5RU7AAA=

-->

</rfc>

