<?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.7.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-optimistic-upgrade-02" category="std" consensus="true" submissionType="IETF" updates="9298" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Optimistic HTTP Upgrade Security">Security Considerations for Optimistic Protocol Transitions in HTTP/1.1</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-optimistic-upgrade-02"/>
    <author fullname="Benjamin M. Schwartz">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <date year="2025" month="March" day="17"/>
    <area>Web and Internet Transport</area>
    <workgroup>HTTPBIS</workgroup>
    <abstract>
      <?line 30?>

<t>In HTTP/1.1, the client can request a change to a new protocol on the existing connection.  This document discusses the security considerations that apply to data sent by the client before this request is confirmed, and updates RFC 9298 to avoid related security issues.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpbis-optimistic-upgrade/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/httpwg/http-extensions"/>.</t>
    </note>
  </front>
  <middle>
    <?line 35?>

<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>
      <?line -18?>

</section>
    <section anchor="background">
      <name>Background</name>
      <t>In HTTP/1.1, a single connection is often used for many requests, one after another.  After each request, the connection is returned to its initial state, ready to send more HTTP requests.  However, HTTP/1.1 also contains two mechanisms that allow the client to change the protocol used for the remainder of the connection.</t>
      <t>One such mechanism is the "Upgrade" request header field (<xref section="7.8" sectionFormat="comma" target="RFC9110"/>), which indicates that the client would like to use this connection for a protocol other than HTTP/1.1.  The server replies with a "101 (Switching Protocols)" status code if it accepts the protocol change.</t>
      <t>The other mechanism is the HTTP "CONNECT" method.  This method indicates that the client wishes to establish a TCP connection to the specified host and port.  The server replies with a 2xx (Successful) response to indicate that the request was accepted and a TCP connection was established.  After this point, the TCP connection is acting as a TCP tunnel, not an HTTP/1.1 connection.</t>
      <t>Both of these mechanisms also permit the server to reject the request.  For example, <xref target="RFC9110"/> says:</t>
      <ul empty="true">
        <li>
          <t>A server <bcp14>MAY</bcp14> ignore a received Upgrade header field if it wishes to continue using the current protocol on that connection.</t>
        </li>
      </ul>
      <t>and</t>
      <ul empty="true">
        <li>
          <t>A server <bcp14>MUST</bcp14> reject a CONNECT request that targets an empty or invalid port number, typically by responding with a 400 (Bad Request) status code.</t>
        </li>
      </ul>
      <t>Rejections are common, and can happen for a variety of reasons.  An "upgrade" request might be rejected if:</t>
      <ul spacing="normal">
        <li>
          <t>The server does not support any of the client's indicated Upgrade Tokens (i.e., the client's proposed new protocols), so it continues to use HTTP/1.1.</t>
        </li>
        <li>
          <t>The server knows that an upgrade to the offered protocol will not provide any improvement over HTTP/1.1 for this request to this resource, so it chooses to respond in HTTP/1.1.</t>
        </li>
        <li>
          <t>The server requires the client to authenticate before upgrading the protocol, so it replies with the status code "401 (Authentication Required)" and provides a challenge in an "Authorization" response header (<xref section="11.6.2" sectionFormat="comma" target="RFC9110"/>).</t>
        </li>
        <li>
          <t>The resource has moved, so the server replies with a 3XX redirect status code (<xref section="3.4" sectionFormat="comma" target="RFC9110"/>).</t>
        </li>
      </ul>
      <t>Similarly, a CONNECT request might be rejected if:</t>
      <ul spacing="normal">
        <li>
          <t>The server does not support HTTP CONNECT.</t>
        </li>
        <li>
          <t>The specified destination is not allowed under server policy.</t>
        </li>
        <li>
          <t>The destination cannot be resolved, is unreachable, or does not accept the connection.</t>
        </li>
        <li>
          <t>The proxy requires the client to authenticate before proceeding.</t>
        </li>
      </ul>
      <t>After rejecting a request, the server will continue to interpret subsequent bytes on that connection in accordance with HTTP/1.1.</t>
      <t><xref target="RFC9110"/> also states:</t>
      <ul empty="true">
        <li>
          <t>A client cannot begin using an upgraded protocol on the connection until it has completely sent the request message (i.e., the client can't change the protocol it is sending in the middle of a message).</t>
        </li>
      </ul>
      <t>However, because of the possibility of rejection, the converse is not true: a client cannot necessarily begin using a new protocol merely because it has finished sending the corresponding request message.</t>
      <t>In some cases, the client might expect that the protocol transition will succeed.  If this expectation is correct, the client might be able to reduce delay by immediately sending the first bytes of the new protocol "optimistically", without waiting for the server's response.  This document explores the security implications of this "optimistic" behavior.</t>
    </section>
    <section anchor="possible-security-issues">
      <name>Possible Security Issues</name>
      <t>When there are only two distinct parties involved in an HTTP/1.1 connection (i.e., the client and the server), protocol transitions introduce no new security issues: each party must already be prepared for the other to send arbitrary data on the connection at any time.  However, HTTP connections often involve more than two parties, if the requests or responses include third-party data.  For example, a browser (party 1) might send an HTTP request to an origin (party 2) with path, headers, or body controlled by a website from a different origin (party 3).  Post-transition protocols such as WebSocket similarly are often used to convey data chosen by a third party.</t>
      <t>If the third-party data source is untrusted, we call the data it provides "attacker-controlled".  The combination of attacker-controlled data and optimistic protocol transitions results in two significant security issues.</t>
      <section anchor="request-smuggling">
        <name>Request Smuggling</name>
        <t>In a Request Smuggling attack (<xref section="11.2" sectionFormat="comma" target="RFC9112"/>) the attacker-controlled data is chosen in such a way that it is interpreted by the server as an additional HTTP request.  These attacks allow the attacker to speak on behalf of the client while bypassing the client's own rules about what requests it will issue.  Request Smuggling can occur if the client and server have distinct interpretations of the data that flows between them.</t>
        <t>If the server accepts a protocol transition request, it interprets the subsequent bytes in accordance with the new protocol.  If it rejects the request, it interprets those bytes as HTTP/1.1.  However, the client doesn't know which interpretation the server will take until it receives the server's response status code.  If it uses the new protocol optimistically, this creates a risk that the server will interpret attacker-controlled data in the new protocol as an additional HTTP request issued by the client.</t>
        <t>As a trivial example, consider an HTTP CONNECT client providing connectivity to an untrusted application.  If the client is authenticated to the proxy server using a connection-level authentication method such as TLS Client Certificates, the attacker could send an HTTP/1.1 POST request for the proxy server at the beginning of its TCP connection.  If the client delivers this data optimistically, and the CONNECT request fails, the server would misinterpret the application's data as a subsequent authenticated request issued by the client.</t>
      </section>
      <section anchor="parser-exploits">
        <name>Parser Exploits</name>
        <t>A related category of attacks use protocol disagreement to exploit vulnerabilities in the server's request parsing logic.  These attacks apply when the HTTP client is trusted by the server, but the post-transition data source is not.  If the server software was developed under the assumption that some or all of the HTTP request data is not attacker-controlled, optimistic transmission can cause this assumption to be violated, exposing vulnerabilities in the server's HTTP request parser.</t>
      </section>
    </section>
    <section anchor="operational-issues">
      <name>Operational Issues</name>
      <t>If the server rejects the transition request, the connection can continue to be used for HTTP/1.1.  There is no requirement to close the connection in response to a rejected transition, and keeping the connection open has performance advantages if additional HTTP requests to this server are likely.  Thus, it is normally inappropriate to close the connection in response to a rejected transition.</t>
    </section>
    <section anchor="existing">
      <name>Impact on HTTP Upgrade with Existing Upgrade Tokens</name>
      <t>This section describes the impact of this document's considerations on some registered Upgrade Tokens that are believed to be in use at the time of writing.</t>
      <section anchor="tls">
        <name>"TLS"</name>
        <t>The "TLS" family of Upgrade Tokens was defined in <xref target="RFC2817"/>, which correctly highlights the possibility of the server rejecting the upgrade. If a client ignores this possibility and sends TLS data optimistically, the result cannot be valid HTTP/1.1: the first octet of a TLS connection must be 22 (ContentType.handshake), but this is not an allowed character in an HTTP/1.1 method.  A compliant HTTP/1.1 server will treat this as a parsing error and close the connection without processing further requests.</t>
      </section>
      <section anchor="websocketwebsocket">
        <name>"WebSocket"/"websocket"</name>
        <t><xref section="4.1" sectionFormat="of" target="RFC6455"/> says:</t>
        <ul empty="true">
          <li>
            <t>Once the client's opening handshake has been sent, the client <bcp14>MUST</bcp14> wait for a response from the server before sending any further data.</t>
          </li>
        </ul>
        <t>Thus, optimistic use of HTTP Upgrade is already forbidden in the WebSocket protocol.  Additionally, the WebSocket protocol requires high-entropy masking of client-to-server frames (<xref section="5.1" sectionFormat="of" target="RFC6455"/>).</t>
      </section>
      <section anchor="connect-udp">
        <name>"connect-udp"</name>
        <t><xref section="5" sectionFormat="of" target="RFC9298"/> says:</t>
        <ul empty="true">
          <li>
            <t>A client <bcp14>MAY</bcp14> optimistically start sending UDP packets in HTTP Datagrams before receiving the response to its UDP proxying request.</t>
          </li>
        </ul>
        <t>However, in HTTP/1.1, this "proxying request" is an HTTP Upgrade request.  This upgrade is likely to be rejected in certain circumstances, such as when the UDP destination address (which is attacker-controlled) is invalid.  Additionally, the contents of the "connect-udp" protocol stream can include untrusted material (i.e., the UDP packets, which might come from other applications on the client device).  This creates the possibility of Request Smuggling attacks.  To avoid these concerns, this text is updated as follows:</t>
        <ul empty="true">
          <li>
            <t>When using HTTP/2 or later, a client <bcp14>MAY</bcp14> optimistically ...</t>
          </li>
        </ul>
        <t><xref section="3.3" sectionFormat="of" target="RFC9298"/> describes the requirement for a successful proxy setup response, including upgrading to the "connect-udp" protocol, and says:</t>
        <ul empty="true">
          <li>
            <t>If any of these requirements are not met, the client <bcp14>MUST</bcp14> treat this proxying attempt as failed and abort the connection.</t>
          </li>
        </ul>
        <t>However, this could be interpreted as an instruction to abort the underlying TLS and TCP connections in the event of an unsuccessful response such as "407 ("Proxy Authentication Required)".  To avoid an unnecessary delay in this case, this text is hereby updated as follows:</t>
        <ul empty="true">
          <li>
            <t>If any of these requirements are not met, the client <bcp14>MUST</bcp14> treat this proxying attempt as failed.  If the "Upgrade" response header field is absent, the client <bcp14>MAY</bcp14> reuse the connection for further HTTP/1.1 requests; otherwise it <bcp14>MUST</bcp14> abort the underlying connection.</t>
          </li>
        </ul>
      </section>
      <section anchor="connect-ip">
        <name>"connect-ip"</name>
        <t>The "connect-ip" Upgrade Token is defined in <xref target="RFC9484"/>.  <xref section="11" sectionFormat="of" target="RFC9484"/> forbids clients from using optimistic upgrade, avoiding this issue.</t>
      </section>
    </section>
    <section anchor="guidance-for-future-upgrade-tokens">
      <name>Guidance for Future Upgrade Tokens</name>
      <t>There are now several good examples of designs that reduce or eliminate the security concerns discussed in this document and may be applicable in future specifications:</t>
      <ul spacing="normal">
        <li>
          <t>Forbid optimistic use of HTTP Upgrade (WebSocket, <xref section="4.1" sectionFormat="of" target="RFC6455"/>).</t>
        </li>
        <li>
          <t>Embed a fixed preamble that terminates HTTP/1.1 processing (HTTP/2, <xref section="3.4" sectionFormat="of" target="RFC9113"/>).</t>
        </li>
        <li>
          <t>Apply high-entropy masking of client-to-server data (WebSocket, <xref section="5.1" sectionFormat="of" target="RFC6455"/>).</t>
        </li>
      </ul>
      <t>Future specifications for Upgrade Tokens should account for the security issues discussed here and provide clear guidance on how implementations can avoid them.</t>
      <section anchor="selection-of-request-methods">
        <name>Selection of Request Methods</name>
        <t>Some Upgrade Tokens, such as "TLS", are defined for use with any ordinary HTTP Method.  The upgraded protocol continues to provide HTTP semantics, and will convey the response to this HTTP request.</t>
        <t>The other Upgrade Tokens mentioned in <xref target="existing"/> do not preserve HTTP semantics, so the method is not relevant.  All of these Upgrade Tokens are specified only for use with the "GET" method.</t>
        <t>Future specifications for Upgrade Tokens should restrict their use to "GET" requests if the HTTP method is otherwise irrelevant and a request body is not required.  This improves consistency with other Upgrade Tokens and reduces the likelihood that a faulty server implementation might process the request body as the new protocol.</t>
      </section>
    </section>
    <section anchor="guidance-for-http-connect">
      <name>Guidance for HTTP CONNECT</name>
      <t>In HTTP/1.1, proxy clients that send CONNECT requests on behalf of untrusted TCP clients <bcp14>MUST</bcp14> wait for a 2xx (Successful) response before forwarding any TCP payload data.  Proxy clients that start forwarding before confirming the response status code are vulnerable to a trivial request smuggling attack (<xref target="request-smuggling"/>).</t>
      <t>To mitigate the impact of such vulnerable clients, proxy servers <bcp14>MAY</bcp14> close the underlying connection when rejecting an HTTP/1.1 CONNECT request, without processing any further data on that connection.  Note that this behavior will frequently impair the performance of correctly implemented clients, especially when returning a "407 (Proxy Authentication Required)" response.  This performance loss can be be avoided by using HTTP/2 or HTTP/3, which are not vulnerable to this attack.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <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"/>
            <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="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <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="RFC9298">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="RFC9484">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document describes how to proxy IP packets in HTTP. This protocol is similar to UDP proxying in HTTP but allows transmitting arbitrary IP packets. More specifically, this document defines a protocol that allows an HTTP client to create an IP tunnel through an HTTP server that acts as an IP proxy. This document updates RFC 9298.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <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 specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="RFC2817">
          <front>
            <title>Upgrading to TLS Within HTTP/1.1</title>
            <author fullname="R. Khare" initials="R." surname="Khare"/>
            <author fullname="S. Lawrence" initials="S." surname="Lawrence"/>
            <date month="May" year="2000"/>
            <abstract>
              <t>This memo explains how to use the Upgrade mechanism in HTTP/1.1 to initiate Transport Layer Security (TLS) over an existing TCP connection. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2817"/>
          <seriesInfo name="DOI" value="10.17487/RFC2817"/>
        </reference>
        <reference anchor="RFC6455">
          <front>
            <title>The WebSocket Protocol</title>
            <author fullname="I. Fette" initials="I." surname="Fette"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code. The security model used for this is the origin-based security model commonly used by web browsers. The protocol consists of an opening handshake followed by basic message framing, layered over TCP. The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or s and long polling). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6455"/>
          <seriesInfo name="DOI" value="10.17487/RFC6455"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
      </references>
    </references>
    <?line 188?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Mark Nottingham and Lucas Pardue for early reviews of this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7Vb3XbbSHK+51Mg9MVYe0iOJWt2bGUzE1m2d3yObSmWfGbn
5OSiCTTJXoEAthsQzfXxu+RZ8mT5qqq70QBpTzY5udi1SALd1fXz1VdVPfP5
fNKattQX2fRW55017T67qitnCm1Va/BXtqptdt20Zmtca/LsxtZtnddldmcV
npNnTJX9cnd38/3p4nQ6Ucul1Q9YMXmLfs0+NmurCp2FnaaTXLV6Xdv9Reba
YjIp6rxSWwhTWLVq50a3q/mmbZulcfM6LjbvZJ35k7OJ65b40kGIdt/gxTev
7l5Pqm671PZiUmD1i0kOAXXlOneRtbbTE0j2dKKsVpDwV73MVFVkb6pW20q3
cqimtu10sqvt/drWXYPnSPwXb26nk3u9x/fFxeRBVx0Wz7K1aTfdEs+QoLv1
9/TPXH9qsSWpZjrpGpIDuz8/e/5sMlFdu6khXDbHy1m26spSzvxCV39VW2jy
3SK7zTc7Zdu/8yO1XavK/J3NcZG9063KbkrVwi5bN4Po+YIf01tlyouMlPav
S3xw+QInmkwqPId3HyDtxFSr5NNkPp9naulaq3I8+KY34ixrNzrLS6OrNstV
lVn9t067NlNZvlHVWmdtjb8rvcua4A91xS/pT2Skap1B75XOSehFlt1tjMtg
3m5LKxbG5Z1z2vEbLjhePnS8dqOwYdOUe9oNSlR4FG8v96l0S40jQR7aIEiJ
P7HWytitLmZsYG+E7MPrK7YDy/9QmwLvQJe66KWAO2GRhVfP1hRFqSeTRxQW
MLqIRku+1CtTif9PJncQCL6RkXO4bPru4+3ddCb/Zu+v+e8Pr/7t45sPr17S
37e/XL59G/+Y+Cduf7n++PZl/1f/5tX1u3ev3r+Ul/FtNvhqMn13+dtUDjq9
vrl7c/3+8u2UgrIdqF1ZtttS4yf4e2M1HVy5SaFdbs0SH/DOi6ub//rP0/Ps
8+d/grbOTk+ff/niPzw7/fEcH3YbXcludQXjyEeYZD+BtbSytIoqSzhOY1pV
wkmVy9ym3lXZRlsN1f7h30kz/3GR/WmZN6fnP/kv6MCDL4POBl+yzg6/OXhZ
lHjkqyPbRG0Ovh9peijv5W+Dz0HvyZd/+rk0lc7mp89+/mlCLvRC5Qwp0Nzn
R8v44cso9uDnCKBSJyFELl2vACpZ52AmwuStqvbB46HiGjsBNLWFYWoYwyLq
LvmzVvkmPOgDe7Au3KAD+BXkG6YlMIdXqxKQjMCY4WdVcAQi+IpsS8HGaB62
xj6/1Dv9oO0sngHmdzVt0ypDkbyrs60m5DBuGwK7LOtdGsjYIWALvoywEs9L
31oCuQoQAWWMTgKvuoYKXIfDxr3oePTY1KeeaYSIDU6FZVZGl0X2WNz7+enp
kxllJ9bMj4tnX76czODeBktiV5MzhLD0idy7usMSpbnn4IK4EnWJjkl6lQAl
WYeW6W3OCElIaKFGyNhgaZftkFrw4vT0yWn2+Baf8g0Ba8jA7mTKNupoM6RV
s4L5MpXnumndUImi2IXglOx/oCM26vTq+v37V1d3U/yOPFUE6JZP39KCcRv6
us6gXbUs8RGi313dpIrArwz4jc4NNF9km5pyCtyKUu43lXD26RN00OFwziFn
nuB35OnKsdKDWL1Uwcw7II9ohJAOGx3IRE9EkXURo4aN2NRASomZ0WuG1uU8
Rzvwr22HX8tZhvDLEtsOffQFtO+dF7InQcER02i7Na3PiqwGnM7qv+L19FgQ
8jV8Sn9S26ZEiH7+7L0X4OzU3iG3/5RdhiWAVJlZVxS4CivkGtm/iGRsEAji
Qr0tKYINiA7cmo7K9u6sJYMP8z7UPjgmVD2UgdDdH0Rl3smilcRsyq51S7kV
VKZBIq4pkTyo0oh7ZELrYI19A2uXyDzLvXeDgqTznnL+5En2+IUqsg+y+kka
JBDtA0shadwSgmy3tU9nxHQ2lMNCzD4oCz61J4MBBh3eIf+osmk3xpOtWW+I
jPhDUipdwQx/SF26qKFV8g7XNXwiQvAAZBxG37noy72F7up7kMnssVnoxWz4
MIzQ1ASQKRNzAC1HUB7N5wIyRbwZCnZf1bsAy8gwfl8frfVqhaRd9AbfGeR2
Oga+eQBf42OYLX3SzDNqWjO6v2B3ws54Xf7s6s7mOkq7qWsnsnqrpnXFSGRa
zFjPIPsMQuyaSBqjgaeGcp7gv+EYYdcBznDgJZA6PSfovewXpdD/IFsXgF+G
LtGCE25clppSGDEguMklk33P3ac9ZvmgO5p3Tk8Xf1ycIfWEEwc9wTUBxFBu
wbK3X8XKp3/5C74qICOiLT3O0f2eLs55s8kt6qtS2XI/OxKi/yv/5pTiV4r2
i+APncE7VYBThk0iBfip4xzvl23q0uT78H76FuKV3lqKjkrWDFbqKkucB5AO
36oTuSQTHBAHWRh2/LT/R/wKL+Rak2NBeZI0RDmcFYaMyx+FQyeCKmcuT8Sh
s6WjN7jAoQx7iKvsVXmOEkNVcAe2dh8ek964SAOcTpjBhWzQV3Ois7WpPKz3
MV8clHPJ7h3ELilkyA8Bm0g9rQYKc1GWJt0tcrRCEBwgFm3+XXuU5hmu2ohi
kkRGNpfiiyBShUXJUSPdXOpcEax5DAUUOrM0pQmI7YE+kl68hKe9r1Ez4IKC
dqAXHJY2sobSS6qjYbG7BSTyEyKAVwoVhEQi4jlkX5skqZGOFkz9Xb3Fcwrg
N9CWxJz+1Ej699QmytDGBoz4lSN2xAzmzUoQVl6NEcaS5O2RPRBBFC0CvUWX
U5iVihOs2aKINipYOh4L1bWLrir6H2ho2jdsKFejPCV/rTviZIZDJJB6iY3v
XITHg34BzlHWdtwuQMopPSZ7EfBOsu0Ux9qoB1PbBRVfN+wdZd9+yt5wpT+Z
/IrQpqWJIOF/XNRSyVJwJwO6b5RtCV9BRxhlPLwfYXhHfJ5yRH9M5OYjBqSl
W1uz5quaFTnqR1xIGUeS7LNtR7S5lMpsSS6h8UNSJ/kSw9dsyi4N9rJ7aaIc
RrYSKgLF6XE1lzwWKlCvBSkFuYwhZXkdzYhDJmDgCICDYemYedkVXCLZYi6n
IaHGjFZlSwtOQjlSHjo98a4qJ6oGNSgjdIWdDAWsf+PsRBCyUe1m5jOu43yw
rAtuNkHjSNcFebnKdnoJW8Cvbb3Fx8Iw7SE2M1j16QlEhSu18yT8IvOS8hNI
8Kte3tb5PeF6yKriW30NL/T6QXurgP3gaCILa0dsTQAhCh2rLPOsgBMewMy1
lP52BCQAA3qDnzJtz1Cmqm0VpLLz/vRTX3YB0JchrxLgHj4p63Hbp2/sHnVm
2LsruZPAruFQfSDlA2HbI222R48CU89ut916XQIbGBXV4fdeLCIyP0uuOxsQ
J6JNfPSvik8wKJqGcGItANJe4FWSUNoc871Gn74VVyeqKPicqhw4oejRhb1d
0uEI0nBENlrdUwwSOJWrIf+nZgMQarlvlOsrrsD2qYFmu5Ko5pKBlGSOccaF
GyzPioUwh8qj8qbOof8QowlC+RMCL3WPe1ETKch6v2KFrUoqHJa63WmB0G3v
r0Fnvh+hjiauSJJMspvH+TEhOsJ+xllHch+zesr9LkWiwz3gBn5pGDZpxUQA
THREHJK4C5VKsSWUaueA5rXqXvecydfd7njGG5So4QxdaJAP2+yDtDrzzSak
Aj5HZo2777lCKk9PNb8eHNXhft/0eXG2YtiSJzZMorTWPFAfMYJ66O9H+A5F
htex4FQ6O3ggpBBwjxjHIwGf9wPXiWaitkxC1YtQxAq59+oIjK5PbfMSBi/T
V8mivukVMP3u7W12JdtcaSS7lbTCZsMQz7kdmGYppgg317d9MRXS9EAqbzIm
nRUJWK+4HTtsPB2cGETNEK/1vX5O8CMXCQxkXNOtlCndsD5h4fFu7yx8uF7j
3/k9uOuVhOhQ67/jHoD8G2Upu78iZodTwmXiJCYMBfs05Lh5EV0S+KTWVkuz
gTqOskj20JWVtoorAKFr42gTqZBD2QPKem3yQ9jmidPOc0JPgqJ3BSccJAZU
Il0bSpABMxglalQYvQG9zh04wY64AXUiC/LDuoklMGsfStw2HmPgJVwtUHsK
Qe0ReRCTIc9xxXsY6rM0fbOofoLK+UHqGfaldF+eGoFKs4VmpPGaVfh7Kh8I
1rDNmYxfN37MB3wINHyolhTBjyWMEYVl2ZPCeqn7ycGwy269JUKpH7woL2un
D8Yj1aDRrPr2Ry+TBNi91k1f8sUFamomUm2IA/PslXKXKh7AhVD+OcrEX8FW
FxtlASAgOY0Zyj0fpHMzT1h4wkv9UPC3hlqC1nAz/P9wJjbSm22jwALqaji+
58z7Kox5R13Kz4/CAPgLTRtYetk2DBnFpMavvRrOKL9z4ylw7ctjC1xE5NnD
xqj0LS1BJ8L0QUCfh5wMGx5Xqbih7XaWq09BoSkwfSpTEf4TkLilyh/PjTaR
4ESBL9Wf8M+zZ6c/fvkSRkS+vMbrG1QqJVUr7lhf4sDJg9v4JsyCACL2JaRz
78I8ol9JWFtVSGI6CvzCfoiLJ60y6aiHmLhIivkaTtBKt4WWTFyGC068e3aW
Pb5ClEGwu32jFyj+CrcB0TkJEEj82YURSGjn5RtFVwy0HRfOcch0KQ0lQyVC
/HXApojhBFwiMukxXFtLUEjN+2O+HnoO3KsTSr3qLFfHcX4pnhArtun3U6oF
5W/qqoX64hwiQTlk+D+e//BDOmu5pqgecnXEPe0WNcQgsCSaTP2yAbfk4Qh1
RfzUIUYn16KJu/jGY2jDUM0eTsNFNHkywUIC8L49Nghg0qFvHmC9pSkKKYdo
p75wTTj1ZUSo4FWHj/WdU/L+uaZ00+yzrXL3nszIaedtPffHWVm1xfOPexX/
MFbxibeON+m8K5qBTX6gx7ntefb82XD6FZR7+dsoLohs2zZq8ePLG3gTnSXe
Y8peQpvQ1dYFlQt9D4E6mD3iNV6CuFzS4Uv7lGZ4s4baVOPHp2yVEdKmlSWV
+b39JA94oOtb8siBYKaK/jUWiIqTwjPhEYHDRlpDIqetdCQhnArG8LWNO0Yd
TqQ8ZgQ56ha5YEOsFAd2613FUTRvOWeHhlBP77fIXZbqhqSVltgooK10g3JK
DRwm0vJKmKqLja5AlB9Mrk+CMkPJdASgv9Z2oOHfXbg3JANcnA8ar5w3a6s/
cUaW60Z0twYRRiAoTsmNRqk+2B/OiMYRpbKzHvCPOOxisUid/uni6cjth7k1
JTaCKC4OzmPN0XZN9OOZNwMJlkzL6m/YUEhPDDfKWHGY6QYiyJiVMgLQ/hD3
EmCPMQF10wiY1YcaJYzulzRTGg9vJkm1zj1uqmAOrjhl7Grwuy7eROiXY6pd
8s6U92ivYdEVea1+4I7gSgrSRKt9Ie8DbXr+5Mfs8fSGtf3VAWLqULxkGD/s
fQM+3OGi4cDIx4jJogr5iqv9Pxukr2LSqzXD6aa/UkDdqsOUBye3ujtM2OSv
IadFIhBS9T9LlO+MjFxY3KNmHDhImj9ME+he8s2Q65HEA6bHcXb+7PzLF5y6
j8LT0xiE/KPPpc4f0QksSbSnCVn2monVJaMwaaKuHbHuP3dGOlykitdd28FY
QzLKJ/DDCmpHOfJ/AOa6rovQbWEIBiyAPnqG7Ac71GUvIUwl92WG1y8Zy+L1
zOLIFUK6AqZ46OChliYqeGwlgvrprkdgHhC/ZrX8Hid5HBnFLPsG5eKh+Kst
XVVUcLBPPLFELuHhFXe96AZNxcge3Schf48Fd9M9ni7Owx7PT0+f+j0uuQvw
P6YyTL+Pn+Eop3l9TF1s8VHd4TYMaNT47Ko2mZkN2uiJycQz+nsJkJWuZK6D
V0GiDXyGhmeMBn5rysUxsW0lam51GarYPim+Y8oOH7yl1DuUtucZXE3N2END
LJHoZHm5pEDYZOH+BHXsCO/6+2b6yDh6cJUlHI1fdBpFNdzKSUoKI3YarIy5
GvvyoGef3ogbaX4rl30DCsSyFtm29tdfNFv/QAx/OSPcmZNyyEKZVPUTb4qN
GzfWIGusvyLBo8iB4hhy//yqv6D3j/sSxG6tkRtlRpaGbmTRfpqQNJb6gyTw
a8OB/LW60OTh4Vo8syS6wLn8JSFf44PtVflejnXUArSwoJbwGia9ZkMoJzU/
khFq29hBHfq0Z4g++NNJgMioDpvrh/ibtqlHt3SFSAWwl84cdX1HXVY3nPX0
PJcphn97XAF+/bajr0fwfztlYxVIazVqX9aqCOPUmyPicd2TvOoX83flD6qb
9OoQ+WVo9pW+bxQa/EGt7siYzv82j78J/oH1bFE7rEMS6ttBjCDJTv4Es0Gz
3DGB6Cv+o6lfip3kSk7SeBgZaXasUTAur4/ddMyy93V/79S4eOVAcGhlpT1e
8m0FZXzbP2kFUjKJfaPowNQzCefWHNhcB/gD0XVtmWAIy/wdknlwryLdHyoU
8F9qTuqUAqS9Pa5T+K+nofwKFHLoE9KfYeNLB/Hy/eXovyfyXcHIKKgtUtXy
pBK2Hf7bC7ohT6tc5jR1A+tcM32dfL6Qq6C6+JfpSpVOT7nXqKp7zg7vlL0n
s5DRNygzCUbedmDQNHQoOglszSN5i5pQ79xBG3Ix+W9P82dDGjUAAA==

-->

</rfc>
