<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pardue-http-identity-digest-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="HTTP Identity Digest">HTTP Identity Digest</title>
    <seriesInfo name="Internet-Draft" value="draft-pardue-http-identity-digest-01"/>
    <author fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="March" day="08"/>
    <area>Applications</area>
    <workgroup>HyperText Transfer Protocol</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <t>The Repr-Digest and Content-Digest integrity fields are subject to HTTP content
coding considerations. There are some use cases that benefit from the
unambiguous exchange of integrity digests of unencoded representation. The
Identity-Digest and Want-Identity-Digest fields complement existing integrity
fields for this purpose.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://LPardue.github.io/draft-pardue-http-identity-digest/draft-pardue-http-identity-digest.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-pardue-http-identity-digest/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HyperText Transfer Protocol Working Group mailing list (<eref target="mailto:http-wg@hplb.hp.com"/>),
        which is archived at <eref target="https://www.ics.uci.edu/pub/ietf/http/hypermail"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/LPardue/draft-pardue-http-identity-digest"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The Integrity fields defined in
<xref target="DIGEST-FIELDS"/> are suitable for a
range of use cases. However, because the fields are subject to HTTP content
coding considerations, it is difficult to support use cases that could benefit
from the exchange of integrity digests of the unencoded representation.</t>
      <t>As a simple example, an application using HTTP might be presented with request
or response representation data that has been transparently decoded.  Attempting
to verify the integrity of the data against the Repr-Digest would first require
re-encoding that data using the same coding indicated by the Content-Encoding
header field (<xref section="8.4" sectionFormat="of" target="HTTP"/>).</t>
      <t>Receiver-side re-encoding for the purpose of Repr-Digest validation is
technically possible but it might not be practical for certain kinds of
environments. For instance, browsers tend to provide built-in support for
transparent decoding but little support for encoding; while this could be done
via the use of additional libraries it would create work in JavaScript that
could contend with other activities. Even on the server side, the re-encoding of
received data might not be acceptable; some coding algorithms are optimized
towards efficient decoding at the cost of complex encoding. This is all made
more complex if the the Content-Encoding field value indicates a series of
encodings.</t>
      <t>A more complex example involves HTTP Range Requests (<xref section="14" sectionFormat="of" target="HTTP"/>), where a client fetches multiple partial representations from
different origins and "stitches" them back into a whole. Unfortunately, if the
origins apply different content coding, the Repr-Digest field will vary by the
server's selected encoding (i.e. the Content-Encoding header field, <xref section="8.4" sectionFormat="of" target="HTTP"/>). This provides a challenge for a client - in order to verify the
integrity of the pieced-together whole it would need to remove the encoding of
each part, combine them, and then encode the result in order to compare against
one or more Repr-Digests.</t>
      <t>The Accept-Encoding header field (<xref section="12.5.3" sectionFormat="of" target="HTTP"/>) provides the means
to indicate preferences for content coding. It is possible for an endpoint to
indicate a preference for no encoding, for example by sending the "identity"
token. However, codings often provide data compression that is advantageous.
Disabling content coding in order to simplify integrity checking is possibly an
unacceptable trade off.</t>
      <t>For a variety of reasons, decoding and re-encoding content in order to benefit
from HTTP integrity fields is not preferable. This specification defines the
Identity-Digest and Want-Identity-Digest fields to support a simpler validation
workflow in some scenarios where content coding is applied. These fields
complement the other integrity fields defined in <xref target="DIGEST-FIELDS"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <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>
      <t>This document uses the Augmented BNF defined in <xref target="RFC5234"/> and updated by
<xref target="RFC7405"/>. This includes the rules: LF (line feed)</t>
      <t>This document uses the following terminology from <xref section="3" sectionFormat="of" target="STRUCTURED-FIELDS"/> to specify syntax and parsing: Boolean, Byte
Sequence, Dictionary, Integer, and List.</t>
      <t>The definitions "representation", "selected representation", "representation
data", "representation metadata", "user agent" and "content" in this document
are to be interpreted as described in <xref target="HTTP"/>.</t>
      <t>Integrity fields: collective term for <tt>Content-Digest</tt>, <tt>Repr-Digest</tt>, and <tt>Identity-Digest</tt></t>
      <t>Integrity preference fields: collective term for <tt>Want-Repr-Digest</tt>,  <tt>Want-Content-Digest</tt>, and <tt>Want-Identity-Digest</tt></t>
    </section>
    <section anchor="complementary-integrity-fields">
      <name>Complementary Integrity Fields</name>
      <t>The following examples illustrate how Integrity fields can be used in
combination to address different and complementary needs, particularly the cases
described in <xref target="introduction"/>. The unencoded data used in the example is the
string "An unexceptional string" following by an LF character.</t>
      <t>When a response message is not conveying partial or encoded representation data,
all Integrity fields contain the same value, making validation trivial and
identical.</t>
      <figure>
        <name>Simple GET request</name>
        <sourcecode type="http-message"><![CDATA[
GET /boringstring HTTP/1.1
Host: example.org

]]></sourcecode>
      </figure>
      <figure>
        <name>Response to GET request</name>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Length: 24
Content-Digest: \
  sha-256=:5Bv3NIx05BPnh0jMph6v1RJ5Q7kl9LKMtQxmvc9+Z7Y=:
Repr-Digest: \
  sha-256=:5Bv3NIx05BPnh0jMph6v1RJ5Q7kl9LKMtQxmvc9+Z7Y=:
Identity-Digest: \
  sha-256=:5Bv3NIx05BPnh0jMph6v1RJ5Q7kl9LKMtQxmvc9+Z7Y=:

An unexceptional string
]]></sourcecode>
      </figure>
      <t>When a response message conveys complete encoded content, the Content-Digest and
the Repr-Digest are the same, while the Identity-Digest is different.</t>
      <figure>
        <name>GET request with content negotiation</name>
        <sourcecode type="http-message"><![CDATA[
GET /boringstring HTTP/1.1
Host: example.org
Accept-Encoding: gzip

]]></sourcecode>
      </figure>
      <figure>
        <name>Response with gzip encoding</name>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Digest: \
  sha-256=:XyjvEuFb1P5rqc2le3vQm7M96DwZhvmOwqHLu2xVpY4=:
Repr-Digest: \
  sha-256=:XyjvEuFb1P5rqc2le3vQm7M96DwZhvmOwqHLu2xVpY4=:
Identity-Digest: \
  sha-256=:5Bv3NIx05BPnh0jMph6v1RJ5Q7kl9LKMtQxmvc9+Z7Y=:

1f 8b 08 00 79 1f 08 64 00 ff
73 cc 53 28 cd 4b ad 48 4e 2d
28 c9 cc cf 4b cc 51 28 2e 29
ca cc 4b e7 02 00 7e af 07 44
18 00 00 00
]]></sourcecode>
      </figure>
      <t>Finally, when a response message contains partial and encoded content, all
Integrity fields vary. The Content-Digest can be used to validate the integrity
of the received part. Repr-Digest or Identity-Digest can be used later after
reconstruction, the choice of which to use is left to the application, which
would consider a range of factors outside the scope of discussion.</t>
      <figure>
        <name>Range request with content negotiation</name>
        <sourcecode type="http-message"><![CDATA[
GET /boringstring HTTP/1.1
Host: example.org
Accept-Encoding: gzip
Range: bytes=0-10

]]></sourcecode>
      </figure>
      <figure>
        <name>Partial response with gzip encoding</name>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Digest: \
  sha-256=:SotB7Pa5A7iHSBdh9mg1Ev/ktAzrxU4Z8ldcCIUyfI4=:
Repr-Digest: \
  sha-256=:XyjvEuFb1P5rqc2le3vQm7M96DwZhvmOwqHLu2xVpY4=:
Identity-Digest: \
  sha-256=:5Bv3NIx05BPnh0jMph6v1RJ5Q7kl9LKMtQxmvc9+Z7Y=:

1f 8b 08 00 79 1f 08 64 00 ff
]]></sourcecode>
      </figure>
    </section>
    <section anchor="identity-digest">
      <name>The Identity-Digest Field</name>
      <t>The Identity-Digest HTTP field can be used in requests and responses to
communicate digests that are calculated using a hashing algorithm applied to the
representation with no content coding (a.k.a. an identity encoding). Apart
from the content coding concerns, it behaves similarly to Repr-Digest.</t>
      <t>Identity-Digest is a <tt>Dictionary</tt> (see <xref section="3.2" sectionFormat="of" target="STRUCTURED-FIELDS"/>)
where each:</t>
      <ul spacing="normal">
        <li>key conveys the hashing algorithm used to compute the digest;</li>
        <li>value is a <tt>Byte Sequence</tt> (<xref section="3.3.5" sectionFormat="of" target="STRUCTURED-FIELDS"/>), that
conveys an encoded version of the byte output produced by the digest
calculation.</li>
      </ul>
      <t>For example:</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Identity-Digest: \
  sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
  yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
]]></sourcecode>
      <t>The <tt>Dictionary</tt> type can be used, for example, to attach multiple digests
calculated using different hashing algorithms.</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Identity-Digest: \
  sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:,\
  sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
  yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
]]></sourcecode>
      <t>A recipient <bcp14>MAY</bcp14> ignore any or all digests. This allows the recipient to choose
which hashing algorithm(s) to use for validation instead of verifying every
digest.</t>
      <t>A sender <bcp14>MAY</bcp14> send a digest without knowing whether the recipient supports a
given hashing algorithm, or even knowing that the recipient will ignore it.</t>
      <t>Identity-Digest can be sent in a trailer section. In this case, Identity-Digest
<bcp14>MAY</bcp14> be merged into the header section; see <xref section="6.5.1" sectionFormat="of" target="HTTP"/>.</t>
    </section>
    <section anchor="the-want-identity-digest-field">
      <name>The Want-Identity-Digest Field</name>
      <t>Want-Identity-Digest indicates that the sender would like to receive a
representation digest on messages associated with the request URI and
representation metadata where no content coding is applied, using the
Identity-Digest field.</t>
      <t>If Want-Identity-Digest is used in a response, it indicates that the server
would like the client to provide the Identity-Digest field on future requests.</t>
      <t>Want-Identity-Digest is only a hint. The receiver of the field can ignore it and
send an Integrity field using any algorithm or omit fields entirely. It is not a
protocol error if preferences are ignored. Applications that use Integrity
fields and Integrity preferences can define expectations or constraints that
operate in addition to this specification.</t>
      <t>Want-Identity-Digest is of type <tt>Dictionary</tt> where each:</t>
      <ul spacing="normal">
        <li>key conveys the hashing algorithm;</li>
        <li>value is an <tt>Integer</tt> (<xref section="3.3.1" sectionFormat="of" target="STRUCTURED-FIELDS"/>) that conveys an
ascending, relative, weighted preference. It must be in the range 0 to 10
inclusive. 1 is the least preferred, 10 is the most preferred, and a value of
0 means "not acceptable".</li>
      </ul>
      <t>Examples:</t>
      <sourcecode type="http-message"><![CDATA[
Want-Identity-Digest: sha-256=1
Want-Identity-Digest: sha-512=3, sha-256=10, unixsum=0
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The considerations in <xref target="DIGEST-FIELDS"/> apply. There are no known additional
considerations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions (yet)</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="DIGEST-FIELDS">
        <front>
          <title>Digest Fields</title>
          <author fullname="Roberto Polli" initials="R." surname="Polli">
            <organization>Team Digitale, Italian Government</organization>
          </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="6" month="March" year="2023"/>
          <abstract>
            <t>   This document defines HTTP fields that support integrity digests.
   The Content-Digest field can be used for the integrity of HTTP
   message content.  The Repr-Digest field can be used for the integrity
   of HTTP representations.  Want-Content-Digest and Want-Repr-Digest
   can be used to indicate a sender's interest and preferences for
   receiving the respective Integrity fields.

   This document obsoletes RFC 3230 and the Digest and Want-Digest HTTP
   fields.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-digest-headers-11"/>
      </reference>
      <reference anchor="HTTP">
        <front>
          <title>HTTP Semantics</title>
          <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
            <organization/>
          </author>
          <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
            <organization/>
          </author>
          <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
            <organization/>
          </author>
          <date month="June" year="2022"/>
          <abstract>
            <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes. </t>
            <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="97"/>
        <seriesInfo name="RFC" value="9110"/>
        <seriesInfo name="DOI" value="10.17487/RFC9110"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC5234">
        <front>
          <title>Augmented BNF for Syntax Specifications: ABNF</title>
          <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
            <organization/>
          </author>
          <author fullname="P. Overell" initials="P." surname="Overell">
            <organization/>
          </author>
          <date month="January" year="2008"/>
          <abstract>
            <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="68"/>
        <seriesInfo name="RFC" value="5234"/>
        <seriesInfo name="DOI" value="10.17487/RFC5234"/>
      </reference>
      <reference anchor="RFC7405">
        <front>
          <title>Case-Sensitive String Support in ABNF</title>
          <author fullname="P. Kyzivat" initials="P." surname="Kyzivat">
            <organization/>
          </author>
          <date month="December" year="2014"/>
          <abstract>
            <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7405"/>
        <seriesInfo name="DOI" value="10.17487/RFC7405"/>
      </reference>
      <reference anchor="STRUCTURED-FIELDS">
        <front>
          <title>Structured Field Values for HTTP</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham">
            <organization/>
          </author>
          <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
            <organization/>
          </author>
          <date month="February" year="2021"/>
          <abstract>
            <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8941"/>
        <seriesInfo name="DOI" value="10.17487/RFC8941"/>
      </reference>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Early drafts of <xref target="DIGEST-FIELDS"/> included a mechanism to support the exchange
of digests where no content coding is applied, which was removed before
publication. While the design here is different, it is motivated by discussion
of the previous design in the HTTP WG. The motivating use cases still mostly
apply identically.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9Va63Ibt5L+j6dAmB+xT0hKlCjLYlZbh7pZSiRL1iVee89W
CZwBSVhzoedCinYpz7LPsk+2XzcwwxmSck5Ozm7tVrnK1MwAaHzd/fUFaLVa
IjNZoHuycXp7eyXPfB3hwVwemZFOs4ZQg0Gip8++9lSmR3Ey78k084XwYy9S
IWbzEzXMWhOV+LlujbNs0jJuaMvnoa3NjkjzQWjS1MRRNp9g0Nnx7YmI8nCg
k57wMXNPeHGU6ijN057MklwLSLItVKIVJOpPJoGBABifNsQsTh5GSZxPSFZM
l9zqx0zeJipKhzqRV0mcxV4cNMSDnuNbvydkS0b0zUhHOuFp6FEeGS9O+GcK
+R8CE42kb9IsMYM8074MtD/SiZjqKIeAUv5di0ppt9h4DzFpxjc0ip6HygR4
zhjNRn8dT4JBezxpe3FIb1Xijd3btLexMZvN2sZL27ln2trPNyb5YMPobLhB
H2yMSQKaj0aOTDbOBxh7fsVa2PhdldCoAKinWWVFN7ptp2ub+Pfn+f0v2uMs
hJBC5dk4TkgTWFrKYR4E1nzOc0+l0i7Nr+JkpCLzhbXUk4dBnPvDAHbAL7XF
MKBBdtX2Vre9+9cRPSckhYhiAJOZKTQmTDSs/CVarZZUA+hXeZkQt2Mtr/Uk
aVkLlyry5SEMFPIXjwz+GiXkBUOjAz+FkrSELX/SXiazWLKneHYMDNgndZMd
AwRrZmlbYhkM4oFxqGWeagnhdSqzscrkABY5NJkcJnGIJ1rkgGVgRnmcp1I/
emMVjbSMhxVRLLApPcwjHWFZmGqCjWj4T8bL8qqicOHqBt8r7G75hdsc4JsE
OsQ7rAw3oN2Uywr3EQCFnCaVkzyZxKluO1xD4/uBFuJ7eRZlSeznHrsZo3y2
DKOPPUeQ2kTi69fvjs7eHN/ctk7Ojs+PbvbPWkdta1Zk7mxUA5MWXDLWCtim
T09OFSZTg0CzVEokBVglyG15Gs/0VCdNIO0peg6Q/2FtNiVUhb37Zjg0Xh7w
sDSfTOIkW9asF+eBX+hXFPr9fZ3SR8/qVYg+xJapIU1hLkX/N6FZqRYUCUlI
dN5OaEZjsjLppsGUM/g35v2cY0UB3PBiQty7tJYELSu7lTE8dKB1BGIG3cHv
8E0AoTXL2Jayn2U6nJDBCAACuM1wzhtZ7NDtjCdVI2Ui2F225IEzhmxoEvwm
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
zbXIAMVyScfs6YyvWTYmtFxOEk3Fsf+01S0VNT05+mImy7ZYQcJ2L4r8MtKj
GB7HweWfb51LQn3TQv9t/ml6nJ8MOlc7yWdvK9Db03fh7sXeq6PZx/E0vJx9
Pj3Ptx5/nXzoftNC/9g8/1QL7Qzl64HcfC2Bwu6exJ/4/apLfw6HYndbep7c
2ZZbr6Xny+4ALC+7r2VXyy1f0MM9+sAb0iv6skNfbuHtnvAUPcFzvSs3t3h+
lIqYf1d2u6LDK/K/57yBlU5KKItJUvcJQk5AvYzZ865BlJqWxExhaMU9MMdK
/Oemho0zS55TjXzUXbC0rOvdWeH6C2WfjARo17wNMWLZsapT02kS0h6UvAl1
27CtLLHxz/qzN46Nx51BOKo3JlGoUwjfDPSQ2+j0VaWJ3bQfilnRC+Q2PKFW
dM+HiHdxgjo7z7g3y1zgxRN+6ZvUy7nQ/h9yee6e9RCAM53ub7Y6m8skYNtr
/8dp4CbODnav1E5/15zeHPjjvXDUOZ5uPGT9L8njXffj68D3Ds/u5sOz/6c0
UNfJVdmp/Kajfs+OtGzunILKr98vnXA+uTOupa+5F2J7XfXkszCJ1PVXrCTU
xKC0NKRDafLP4kSI20QU6pAzUd5JFYI9/VB0LjOu9aqLtoXzJ7GUzfFuo3i5
3fFCtR/aqk2ZZLG3Eo6XbdknMlgcYC0Nxp+eTtzR2ECPFfWXUxMalyLHVRah
ymU1Oit5vyji7uWLVOtq4djeIodeqRyfnl4K272hviYM4S/cNSnSCxJ1FZ+C
Bin5yB0LWqR/wnjXXmeJqMqURZV5X+1Xbre32zvPidS0JxiylENFJYNPdcKd
P0e2RB1EXhCEuoQoFxYHV1YmmsZp3RLZyaIh2fuHeeNZ79vpbO33Plz0VbjT
+fnLxqfL/u3tq40v09Pk/NfR5YfbNyfzjv/qzc/m8vQ2Hn/uzq9+nIweutPh
ljpMaZL59cfLbPb64tPDxa6Z7c4/brx/mEzCi273dvvzaB/eSu7I7lLTOF2Y
qHpJrfPa5Aoty6h5XR45OO8QK06xKOFWlJ+uiwR/EjImLL+7vfMu/jH65eOP
o3Pv7jTaffMue7e7NTYHv/ZHn+Pz9GP08crcvrl62O81/7fR7lNUNxM+abjo
f5BmFFHDXkVziulU2jkwXSNIUW2ZFumAG0guM47jVAsbvlfAfZG+LGI66a56
+IlUQCP3gtXbow0u3PFzLvyCFPrcWwfkJCD9hAf67kwYs8NJ5ENkK164PHdd
6/K59i+kFyNDB4MrAja5yqVXxUzMrPVp+HzIAWTWsZUz0tS1wRW11A11m1NL
Dm3Uye50VKUw3aXxgvY3oIQvGXEwcHmPOxpxk/wk6wz4qr2DKF+ej7SLALW2
Jc5RCtXXuneLg8Ny7w53m2UF5kHb8yNOA+lGxVI7wOWCUZGyAvA0jT2jyosF
FlCb9Nxdn3Hl9ky3zDXfVwPSov/eXJz0r+iCgyvpaLgeCcxShNxFrm1vcKzD
gQ4CRRUHinVBYf3FMc66AtNGeWxsmGd5Um6f+OY5wbjZjQAOC7BZu4M8KYLD
InMozZGhtM4RLbdjipQATr0IdjD4ODTlKQkJkehgXhyQUS9IiYm7uCZ1ktBt
gmHteI0SDyuAT4nA4haeRY7cvZSkuCFEac26DqLtwtkONch9Aut2c9kzPOrf
AQ87tUAez+080p67S2CzmuWTo2+hPLShpRZs/mjOUE8MInnvmswrOUHnuZyg
uA9UJAR02Y9OoOwhI1TCF9RQ8Gi6mEDVV4kZ6yrM08w2ia13cWGxSWig6pC2
c59ihrbsuBYiiiqVFkduCblRZ7N4Fcb1N4rZ1u4wHmK+TXvkKhtsIOXpYQNA
H7t+67rkY50SemWQ7HzjPUXC7ebi080mXc18TPNw31bY4DsAnbM9HdYuZNlk
on5Ja+25m70wUL2NB9qhSBBVrqqIpbt7fFZ31n/bX7Nq9SSE7kdhOv5SeVaI
F3OdvXR34+h2A03V92hFulXK93dQmNgrsNrfbwxVkGoqPo45b+YbcGzBq1tx
RzWktlDTbTKThtUz0Oo1M8G1sC0l/h66teF9hg3ZSwR0wQcBXYtJPiicvy3f
l802X6fgBz6LqzXaiptyIQrdaXEla1GUFw0H2OHU0FVHN48zcS6e3r+x1Oim
IEkXV+zSjEI12XLAR4WArGwtQ8/ivwHebGvw7ywAAA==

-->

</rfc>
