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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-bishop-quic-http-and-qpack-00" category="std">

  <front>
    <title abbrev="QPACK">HTTP over QUIC - Mapping and Header Compression</title>

    <author initials="M." surname="Bishop" fullname="Mike Bishop">
      <organization>Microsoft</organization>
      <address>
        <email>michael.bishop@microsoft.com</email>
      </address>
    </author>

    <date year="2016"/>

    <area>Transport</area>
    <workgroup>QUIC Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>HTTP/2 <xref target="RFC7540"></xref> uses HPACK <xref target="RFC7541"></xref> for header compression.
However, HPACK relies on the in-order message-based semantics
of the HTTP/2 framing layer in order to function.  Messages can
only be successfully decoded if processed by the receiver in the
same order as generated by the sender.  This draft refines HPACK
to loosen the ordering requirements for use over 
QUIC <xref target="I-D.hamilton-quic-transport-protocol"></xref> and describes
changes to <xref target="I-D.shade-quic-http2-mapping"></xref> to leverage the new
compression.</t>



    </abstract>


  </front>

  <middle>


<section anchor="problems" title="Introduction">

<t>HPACK has a number of features that were intended to provide performance 
advantages to HTTP/2, but which don’t live well in an out-of-order 
environment such as that provided by QUIC.</t>

<t>The largest challenge is the fact that elements are referenced by a very 
fluid index. Not only is the index implicit when an item is added to the 
header table, the index will change without notice as other items are 
added to the header table. Static entries occupy the first 61 values, 
followed by dynamic entries. A newly-added dynamic entry would cause 
older dynamic entries to be evicted, and the retained items are then 
renumbered beginning with 62. This means that, without processing all 
preceding header sets, no index into the dynamic table can be 
interpreted, and the index of a given entry cannot be predicted.</t>

<t>Any solution to the above will almost certainly fall afoul of the memory 
constraints the decompressor imposes. The automatic eviction of entries 
is done based on the compressor’s declared dynamic table size, which 
MUST be less than the maximum permitted by the decompressor (and relayed 
using an HTTP/2 SETTINGS value).</t>

<t>In the following sections, this document proposes a new version of HPACK 
which makes different trade-offs, enabling out-of-order interpretation 
and bounded memory consumption with minimal head-of-line blocking.
None of the proposed improvements to HPACK (strongly-typed fields,
binary compression of common header syntax) are currently included,
but certainly could be.</t>

<section anchor="Terminology" title="Terminology">
<t>In this document, the key words “MUST”, “MUST NOT”, “REQUIRED”,
“SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”,
and “OPTIONAL” are to be interpreted as described in BCP 14, RFC 2119
<xref target="RFC2119"/> and indicate requirement levels for compliant STuPiD
implementations.</t>

</section>
</section>
<section anchor="QPACK" title="QPACK">

<section anchor="changes-to-static-and-dynamic-tables" title="Changes to Static and Dynamic Tables">

<t>QPACK uses two tables for associating header fields to indexes. The 
static table is unchanged from <xref target="RFC7541"></xref>.</t>

<t>The dynamic table is a map from index to header field. Indices are 
arbitrary numbers greater than the last index of the static table. Each 
insert instruction will specify the index being modified. While any 
index MAY be chosen for a new entry, smaller numbers will yield better 
compression performance. Once an index has been assigned, its value is 
immutable for the lifetime of that dynamic table.</t>

<t>In order to improve resiliency to reordering, an encoder MAY send
multiple insert instructions for the same value to the same index.
However, any attempt to insert a different value to an occupied
index is a fatal error.</t>

<t>The dynamic table is still constrained to the size specified by the 
receiver. An attempt to add a header to the dynamic table which causes 
it to exceed the maximum size MUST be treated as an error by a decoder.</t>

<t>Because it is possible for QPACK frames to arrive which reference 
indices which have not yet been defined, such frames MUST wait until 
another frame has arrived and defined the index. In order to guard 
against malicious senders, implementations SHOULD impose a time limit 
and treat expiration of the timer as a decoding error. However, if the 
implementation chooses not to abort the connection, the remainder of the 
header block MUST be decoded and the output discarded.</t>

<section anchor="dynamic-table-state-synchronization" title="Dynamic table state synchronization">

<t>No entries are evicted from the dynamic table. Size management is 
purely the responsibility of the sender, which MUST NOT exceed the
declared memory size of the receiver.</t>

<t>Both sender and receiver will maintain a count of references to
the indexed entry.  This count includes:</t>

<t><list style="symbols">
  <t>Insertions to the field, both the initial and any redundant
indexed literal emissions.</t>
  <t>Literal values which use the indexed entry to provide the
header name</t>
  <t>Explicit emissions of the indexed value</t>
</list></t>

<t>The sender MUST consider memory as committed beginning with the
first time the indexed entry is assigned.  An encoder MAY repeat
the insertion instruction in other frames rather than leveraging
the index while it waits for the frame to arrive.</t>

<t>When the sender wishes to delete an
inserted value, it flows through the following set of states:</t>

<t><list style="numbers">
  <t><spanx style="strong">Delete requested.</spanx>  The sender emits a delete instruction
including the terminal value of the reference counter.  The
sender MUST NOT reference the entry in any subsequent frame
until this state machine has completed and MUST continue to
include the entry in its calculation of consumed memory.</t>
  <t><spanx style="strong">Delete pending.</spanx>  The receiver receives the delete instruction
and compares the sender’s counter with its own.  If the receiver’s
counter is less than the sender’s, it stores the sender’s counter
and waits for other QPACK frames to arrive.</t>
  <t><spanx style="strong">Delete acknowledged.</spanx>  The receiver has received all QPACK
frames which reference the deleted value, and can safely delete
the entry.  The receiver SHOULD promptly emit a QPACK-ACK frame,
but MAY delay briefly waiting for other pending deletes as well.</t>
  <t><spanx style="strong">Delete completed.</spanx>  When the sender receives a QPACK-ACK
frame acknowledging the delete, it no longer counts the size
of the deleted entry against the table size and MAY emit
insert instructions for the field with a new value.</t>
</list></t>

<t>The decoder can receive a delete instruction for a vacant table
entry. A decoder MUST NOT consider this to be an error, but MUST
handle the delete as usual even while waiting for the definition
to arrive.</t>

</section>
</section>
<section anchor="changes-to-binary-format" title="Changes to Binary Format">

<section anchor="literal-header-field-representation" title="Literal Header Field Representation">

<t>(This section replaces <xref target="RFC7541"></xref>, Section 6.2.1.)</t>

<t>A literal header field with indexing representation results in 
inserting a header field to the decoded header list and inserting it as 
a new entry into the dynamic table.</t>

<figure title="Literal Header Field with Indexing -- Indexed Name"><artwork><![CDATA[
     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | 0 | 1 |    New Index (6+)     |
   +---+---+-----------------------+
   |          Name Index (8+)      |
   +---+---------------------------+
   | H |     Value Length (7+)     |
   +---+---------------------------+
   | Value String (Length octets)  |
   +-------------------------------+
]]></artwork></figure>

<figure title="Literal Header Field with Indexing -- New Name"><artwork><![CDATA[
     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | 0 | 1 |    New Index (6+)     |
   +---+---+-----------------------+
   |               0               |
   +---+---+-----------------------+
   | H |     Name Length (7+)      |
   +---+---------------------------+
   |  Name String (Length octets)  |
   +---+---------------------------+
   | H |     Value Length (7+)     |
   +---+---------------------------+
   | Value String (Length octets)  |
   +-------------------------------+
]]></artwork></figure>

<t>A literal header field with incremental indexing representation starts 
with the ‘01’ 2-bit pattern, followed by the new index of the header 
represented as an integer with a 6-bit prefix. This value is always 
greater than the number of entries in the static table.</t>

<t>If the header field name matches the header field name of an entry 
stored in the static table or the dynamic table, the header field name 
can be represented using the index of that entry. In this case, the 
index of the entry is represented as an integer with an 8-bit prefix 
(see Section 5.1 of <xref target="RFC7231"></xref>). This value is always non-zero.</t>

<t>Otherwise, the header field name is represented as a string literal 
(see Section 5.2 of <xref target="RFC7231"></xref>). A value 0 is used in place of the 8-bit index, 
followed by the header field name.</t>

<t>Either form of header field name representation is followed by the 
header field value represented as a string literal (see Section 5.2).</t>

<t>An encoder MUST NOT attempt to place a value at an index not known to
be vacant.  An encoder MAY insert the same value to the same vacant slot
multiple times in different frames, to reduce the risk of blocking from
out-of-order frame interpretation.  However, a decoder MUST treat the attempt
to insert a different header field into an occupied slot as a fatal error.</t>

</section>
<section anchor="deletion" title="Deletion">

<t>(This section replaces <xref target="RFC7541"></xref>, Section 6.2.3.)</t>

<t><spanx style="strong">DISCUSS:</spanx>  I stole the never-indexed instruction code to
avoid renumbering <spanx style="emph">all</spanx> the instructions to fit a new one.
If we think we still need this in QUIC, we’ll have to
do the renumbering later.</t>

<figure title="Header Field Deletion"><artwork><![CDATA[
 0   1   2   3   4   5   6   7    +---+---+---+---+---+---+---+---+    | 0 | 0 | 0 | 1 | RefCount (4+) |    +---+---+---+---+---------------+    |          Index (8+)           |    +-------------------------------+ ~~~~~~~~~~
]]></artwork></figure>

<t>The sender may delete an entry in the dynamic header table at any
time in order to stay below the receiver’s declared memory boundary.
This instruction tells the receiver that they should prepare to delete
the specified entry after all preceding frames referencing it have
been received.  The delete instruction includes the count of such
frames to facilitate the receiver’s garbage collection process.</t>

</section>
<section anchor="the-qpack-ack-frame" title="The QPACK-ACK frame">

<t>Each peer MUST periodically emit a QPACK-ACK frame (0xTBD) on QUIC
stream 3 to reflect the current state of its header table.  A peer
MAY omit sending a new QPACK-ACK frame if the dynamic table has not
changed since the last frame.</t>

<t>The QPACK-ACK frame defines no flags and consists of a bitmap.  The
first bit in the bitmap reflects the first index after the static
table (currently 62), and each successive bit indicates the next
integer value.  Each bit MUST be set if the indexed entry has had
a delete complete since the preceding QUIC frame and MUST be unset
otherwise.  Indices beyond the end of the QPACK-ACK frame are assumed
to be unset.</t>

<t>Upon receipt, an encoder uses the table to confirm which items have been
deleted. At this point, the space can be recovered by the encoder and the
encoder can safely reuse the index for future insertions.</t>

</section>
</section>
</section>
<section anchor="http-over-quic-mapping" title="HTTP over QUIC Mapping">

<t><xref target="I-D.shade-quic-http2-mapping"></xref> refers to QUIC Stream 3 as carrying
“headers,” but more accurately, it carries a nearly-complete HTTP/2 session,
complete with framing and multiplexing.  The mapping deletes certain elements
of HTTP/2’s framing layer which can be delegated to the QUIC transport layer.</t>

<t>This was done in large part for expediency, reusing HTTP/2 code in place
anywhere no QUIC-specific approach had yet been added.  A primary driver of
this is the need for in-order reliable delivery of frames carrying HPACK data
(HEADERS, CONTINUATION, PUSH_PROMISE).</t>

<t>While the ability to reuse HTTP/2 framing is useful, the double-mux layer
is unwieldy and has proved unpopular in the working group.  This section
presents an alternate mapping preserving some HTTP/2 code, but delegating
all multiplexing to the QUIC layer.</t>

<t>QPACK would permit header data to be on-stream with the request/response bodies,
but some framing is still required.  It would be possible (and perhaps desirable)
to introduce a simplified version of HTTP/2’s framing on each QUIC stream.</t>

<section anchor="stream-usage" title="Stream usage">

<t>In both QUIC and HTTP/2, odd-numbered streams are client-initiated, while
even-numbered streams are server-initiated.  A single HTTP transaction
spans two streams, differentiated by the next stream bit.  This means that
the client’s first request occurs on QUIC streams 5 and 7, the second on
stream 9 and 11, and so on.  This amounts to the second least-significant
bit differentiating the two streams in a request.</t>

<t>The payload of each frame type is unmodified from HTTP/2 unless otherwise noted.
Frames which would be sent on stream zero in HTTP/2 are sent on QUIC stream 3.</t>

<t>Because stream creation does not depend on particular frames, the requirement
that a stream begin only with HEADERS is omitted.</t>

<t>The second stream is used to carry any message payload, eliminating the
DATA frame.  The first stream is the request control stream and is used to
carry all other frames which would have been on-stream in HTTP/2.</t>

</section>
<section anchor="on-stream-framing-definition" title="On-Stream Framing Definition">

<t>Many framing concepts from HTTP/2 can be elided away on QUIC, because the transport
deals with them.  Because these frames would already be on a stream, they can omit the stream number.
Because the frames do not block multiplexing (QUIC’s multiplexing occurs below this layer),
the support for variable-maximum-length packets can be removed.  Because stream termination
is handled by QUIC, an END_STREAM flag is not required.</t>

<t>On QUIC streams other than Stream 1, the general frame format is as follows:</t>

<figure title="HTTP/QUIC frame format"><artwork><![CDATA[
     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   |          Length (16)          |
   |                               |
   +---+---+---+---+---+---+---+---+
   |            Type (8)           |  
   +---+---+---+---+---+---+---+---+
   |            Flags (8)          |
   +---+---+---+---+---+---+---+---+
   |        Frame Payload        ...
   +---+---+---+---+---+---+---+---+
]]></artwork></figure>

<t>The fields are defined as in <xref target="RFC7540"></xref>.  The frames currently defined are
described in this section:</t>

<section anchor="data" title="DATA">

<t>DATA frames (type=0x0) do not exist.</t>

</section>
<section anchor="headers" title="HEADERS">

<t>The HEADERS frame (type=0x1) is used to carry part of a header set,
compressed using QPACK ({QPACK}).  The PRIORITY-equivalent regions
have been removed, since a stream MAY begin with a PRIORITY frame
and the size of the QUIC stream format requires changes to how
these fields are handled.</t>

<t>Padding MUST NOT be used.  The flags defined are:</t>

<t><list style="symbols">
  <t>End Header Block (0x4): This frame concludes a header block.</t>
</list></t>

<t>The next frame on the same stream after a HEADERS frame without the EHB
flag set MUST be another HEADERS frame. A receiver MUST treat the receipt
of any other type of frame as a stream error. (Note that QUIC can intersperse 
data from other streams between frames, or even during transmission of 
frames, so multiplexing is not blocked by this requirement.)</t>

<t>A full header block is contained in a sequence of zero or more HEADERS 
frames without EHB set, followed by a HEADERS frame with EHB set.</t>

<t>HEADERS frames from various streams may be processed by the QPACK 
decoder in any order, completely or partially. It is not necessary to 
withhold decoding results until the end of the header block has arrived. 
However, depending on the contents, the processing of one frame might
depend on other QPACK frames. The results of decoding 
MUST be emitted in the same order as the HEADERS frames were placed on 
the stream.</t>

</section>
<section anchor="pushpromise" title="PUSH_PROMISE">

<t>The PUSH_PROMISE frame (type=0x02) is used to carry a request header set 
from server to client, as in HTTP/2. It contains the same flags as 
HEADERS.</t>

<t>The payload contains a QPACK headers block encoding 
the request whose response is promised, preceded by a 32-bit 
Stream ID indicating the QUIC stream on which the response headers 
will be sent.  (The response body stream is implied by the headers stream,
as defined in <xref target="stream-usage"/>.)</t>

<t><spanx style="strong">TODO:</spanx>  QUIC stream space may be enlarged; would need to redefine
Promised Stream field in this case.</t>

</section>
<section anchor="priority" title="PRIORITY">

<t>The PRIORITY frame (type=0x2) specifies the sender-advised priority
of a stream and is sent on Stream 3.  It can refer to a stream in any state,
including idle or closed streams.</t>

<figure title="PRIORITY Frame Payload"><artwork><![CDATA[
    +---------------------------------------------------------------+
    |                  Prioritized Stream (32)                      |
    +---------------------------------------------------------------+
    |                   Dependent Stream (32)                       |
    +---------------+-----------------------------------------------+
    |   Weight (8)  |
    +---------------+
]]></artwork></figure>

<t>The payload of a PRIORITY frame contains the following fields:</t>

<t><list style="hanging">
  <t hangText='Prioritized Stream:'>
  The 32-bit stream identifier for the stream
whose priority is being modified.</t>
</list></t>

<t>Stream Dependency:<vspace />
:The 32-bit stream identifier for the stream that
      this stream depends on.</t>

<t>Weight:
:An unsigned 8-bit integer representing a priority weight for
      the stream (see Section 5.3).  Add one to the value to obtain a
      weight between 1 and 256.</t>

<t>The PRIORITY frame defines one flag:</t>

<t>EXCLUSIVE (0x01):<vspace />
:Indicates that the stream dependency is
      exclusive (see <xref target="RFC7540"></xref> Section 5.3).</t>

<t>If a PRIORITY frame
is received which attempts to modify a stream which is
not a request control scheme, the recipient MUST
respond with a connection error (Section 5.4.1) of type
PROTOCOL_ERROR.</t>

<t>The PRIORITY frame can affect a stream in any state.  Note that this frame could arrive after
processing or frame sending has completed, which would cause it to
have no effect on the identified stream.  For a stream that is in the
“half-closed (remote)” or “closed” state, this frame can only affect
processing of the identified stream and its dependent streams; it
does not affect frame transmission on that stream.</t>

<t>The PRIORITY frame can create a dependency on a stream in the “idle” or “closed”
state.  This allows for the reprioritization of a group of dependent
streams by altering the priority of an unused or closed parent
stream.</t>

<t>A PRIORITY frame with a length other than 9 octets MUST be treated as
a connection error of type FRAME_SIZE_ERROR.</t>

</section>
<section anchor="settings" title="SETTINGS">

<t>The EXTENDED_SETTINGS frame as defined in <xref target="I-D.bishop-httpbis-extended-settings"></xref>
will be renamed SETTINGS and will replace the HTTP/2 SETTINGS frame.</t>

<t><spanx style="strong">TODO:</spanx>  SETTINGS_ACK and stream state.  Do we need to emit the ACK
on every active stream?  What about idle streams and in-flight data?</t>

</section>
<section anchor="other-frames-not-mentioned" title="Other frames not mentioned">

<t>QUIC stream 3 is equivalent to HTTP/2’s stream 0, and the same
framing is used as for other streams.  SETTINGS frames remain 
on stream 3, as do any other HTTP/2 stream-zero frames.
This enables HTTP/2 extension frames which do not have a hard cross-stream
ordering requirement to continue to function.</t>

</section>
</section>
<section anchor="http-message-exchanges" title="HTTP Message Exchanges">

<t>A client sends an HTTP request on a new pair of QUIC stream. A
server sends an HTTP response on the same streams as the request.</t>

<t>An HTTP message (request or response) consists of:</t>

<t><list style="numbers">
  <t>for a response only, zero or more header blocks (a sequence of 
HEADERS frames with End Header Block set on the last) on the control stream
containing the message headers of informational (1xx) HTTP responses
(see <xref target="RFC7230"></xref>, Section 3.2 and <xref target="RFC7231"></xref>, Section 6.2),</t>
  <t>one header block on the control stream containing the message headers
(see <xref target="RFC7230"></xref>, Section 3.2),</t>
  <t>the payload body (see <xref target="RFC7230"></xref>, Section 3.3), sent on the data stream</t>
  <t>optionally, one header block on the control stream containing the
trailer-part, if present (see <xref target="RFC7230"></xref>, Section 4.1.2).</t>
</list></t>

<t>If the message does not contain a body, the corresponding data stream
MUST still be half-closed without transferring any data. The “chunked”
transfer encoding defined in Section 4.1 of <xref target="RFC7230"></xref> MUST NOT be used.</t>

<t>Trailing header fields are carried in a header block following the body. 
Such a header block is a sequence of HEADERS frames with End Header 
Block set on the last frame. Header blocks after the first but before 
the end of the stream are invalid.  These MUST be decoded to maintain
QPACK decoder state, but the resulting output MUST be discarded.</t>

<t>An HTTP request/response exchange fully consumes a pair of streams. After 
sending a request, a client closes the streams for sending; after sending 
a response, the server closes its streams for sending and the QUIC streams
are fully closed.</t>

<t>A server can send a complete response prior to the client sending an 
entire request if the response does not depend on any portion of the 
request that has not been sent and received. When this is true, a server 
MAY request that the client abort transmission of a request without 
error by sending a RST_STREAM with an error code of NO_ERROR after 
sending a complete response and closing its stream. Clients MUST NOT 
discard responses as a result of receiving such a RST_STREAM, though 
clients can always discard responses at their discretion for other 
reasons.</t>

</section>
</section>
<section anchor="performance-considerations" title="Performance Considerations">

<t>While QPACK is designed to minimize head-of-line blocking between 
streams on header decoding, there are some situations in which lost or 
delayed packets can still impact the performance of header compression.</t>

<t>References to indexed entries will block if the frame containing the 
entry definition is lost or delayed.  Encoders MAY choose to trade off
compression efficiency and avoid blocking by repeating the
literal-with-indexing instruction rather than referencing the
dynamic table until the insertion is known to be complete.</t>

<t>Delayed frames which prevent deletes from completing can prevent the
encoder from adding any new entries due to the maximum table size.
This does not block the encoder from continuing to make requests,
but could sharply limit compression performance.
Encoders would be well-served to delete entries in advance of encountering
the table maximum.  Decoders SHOULD be prompt about emitting QPACK-ACK
frames to enable the sender to recover the table space.</t>

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

<t>The security considerations for QPACK are believed to be the same
as for HPACK.</t>

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

<t>This document currently makes no request of IANA, but probably should.</t>

</section>
<section anchor="ack" title="Acknowledgements">

<t>This draft draws heavily on the text of <xref target="RFC7540"></xref> and <xref target="RFC7541"></xref>,
as well as the ideas of <xref target="I-D.shade-quic-http2-mapping"></xref>.  The indirect
input of those authors is gratefully acknowledged, as well as ideas
gleefully stolen from:</t>

<t><list style="symbols">
  <t>Jana Iyengar</t>
  <t>Patrick McManus</t>
  <t>Martin Thomson</t>
  <t>Charles ‘Buck’ Krasic</t>
  <t>Kyle Rose</t>
</list></t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor='RFC7230' target='http://www.rfc-editor.org/info/rfc7230'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the &quot;http&quot; and &quot;https&quot; Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='7230'/>
<seriesInfo name='DOI' value='10.17487/RFC7230'/>
</reference>



<reference  anchor='RFC7231' target='http://www.rfc-editor.org/info/rfc7231'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t></abstract>
</front>
<seriesInfo name='RFC' value='7231'/>
<seriesInfo name='DOI' value='10.17487/RFC7231'/>
</reference>



<reference  anchor='RFC7540' target='http://www.rfc-editor.org/info/rfc7540'>
<front>
<title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
<author initials='M.' surname='Belshe' fullname='M. Belshe'><organization /></author>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='M.' surname='Thomson' fullname='M. Thomson' role='editor'><organization /></author>
<date year='2015' month='May' />
<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 perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t><t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t></abstract>
</front>
<seriesInfo name='RFC' value='7540'/>
<seriesInfo name='DOI' value='10.17487/RFC7540'/>
</reference>



<reference  anchor='RFC2119' target='http://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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='RFC7541' target='http://www.rfc-editor.org/info/rfc7541'>
<front>
<title>HPACK: Header Compression for HTTP/2</title>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='H.' surname='Ruellan' fullname='H. Ruellan'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.</t></abstract>
</front>
<seriesInfo name='RFC' value='7541'/>
<seriesInfo name='DOI' value='10.17487/RFC7541'/>
</reference>



<reference anchor='I-D.hamilton-quic-transport-protocol'>
<front>
<title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>

<author initials='R' surname='Hamilton' fullname='Ryan Hamilton'>
    <organization />
</author>

<author initials='J' surname='Iyengar' fullname='Janardhan Iyengar'>
    <organization />
</author>

<author initials='I' surname='Swett' fullname='Ian Swett'>
    <organization />
</author>

<author initials='A' surname='Wilk' fullname='Alyssa Wilk'>
    <organization />
</author>

<date month='October' day='31' year='2016' />

<abstract><t>QUIC is a multiplexed and secure transport protocol that runs on top of UDP.  QUIC builds on past transport experience, and implements mechanisms that make it useful as a modern general-purpose transport protocol.  Using UDP as the basis of QUIC is intended to address compatibility issues with legacy clients and middleboxes.  QUIC authenticates all of its headers, preventing third parties from from changing them.  QUIC encrypts most of its headers, thereby limiting protocol evolution to QUIC endpoints only.  Therefore, middleboxes, in large part, are not required to be updated as new protocol versions are deployed.  This document describes the core QUIC protocol, including the conceptual design, wire format, and mechanisms of the QUIC protocol for connection establishment, stream multiplexing, stream and connection-level flow control, and data reliability.  Accompanying documents describe QUIC's loss recovery and congestion control, and the use of TLS 1.3 for key negotiation.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-hamilton-quic-transport-protocol-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-hamilton-quic-transport-protocol-01.txt' />
</reference>



<reference anchor='I-D.bishop-httpbis-extended-settings'>
<front>
<title>HTTP/2 Extended SETTINGS Extension</title>

<author initials='M' surname='Bishop' fullname='Mike Bishop'>
    <organization />
</author>

<date month='June' day='13' year='2016' />

<abstract><t>HTTP/2 defines the SETTINGS frame to contain a single 32-bit value per setting.  While this is sufficient to convey everything used in the core HTTP/2 specification, some protocols will require more complex values, such as arrays of code-points or strings.  For such protocols, this extension defines a parallel to the SETTINGS frame, EXTENDED_SETTINGS, where the value of a setting is not a 32-bit value, but a variable-length opaque data blob whose interpretation is subject entirely to the definition of the protocol using it.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-bishop-httpbis-extended-settings-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-bishop-httpbis-extended-settings-00.txt' />
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='I-D.shade-quic-http2-mapping'>
<front>
<title>HTTP/2 Semantics Using The QUIC Transport Protocol</title>

<author initials='R' surname='Shade' fullname='Robbie Shade'>
    <organization />
</author>

<author initials='M' surname='Warres' fullname='Mike Warres'>
    <organization />
</author>

<date month='July' day='8' year='2016' />

<abstract><t>The QUIC transport protocol has several features that are desirable in a transport for HTTP/2, such as stream multiplexing, per-stream flow control, and low-latency connection establishment.  This document describes a mapping of HTTP/2 semantics over QUIC. Specifically, this document identifies HTTP/2 features that are subsumed by QUIC, and describes how the other features can be implemented atop QUIC.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-shade-quic-http2-mapping-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-shade-quic-http2-mapping-00.txt' />
</reference>




    </references>




  </back>

<!-- ##markdown-source:
H4sIADLeKlgAA+VcW1McyZV+J4L/kIEeBOPuXkAajQeHw4sEslhLIAPyZScm
JrKrsukKVVe1K6uAtkb72/d855zMyuoGyTMRfthYHPJAd1VezvU7l8zxeLy9
1RZt6Y7Mm+vr96a+dY3584ezV2Zs3tnlsqhujK1y88bZnL55VS+WjfO+qKvt
LTudNu72yPz5/fGrP21v5XVW2QUNlDd21o6nhZ/Xy/E/uiIbz9t2OaZhxv9Y
2uzjuLSt8y29Qf89Mof7By+2tzL6/aZuVkfGt/n21vZWsWyOTNt0vj3c3/9+
/5Dma5w9MteNrfyybuj9u7r5eNPU3fJIlvxX+hsL/iM+29766Fb0RH5kzqrW
NZVrxydYGQb3La3mJ1vWFS1g5fz21rI4Mj+0dTYynsZu3MzTb6sFfvkRb9iu
ndfN0faWIYoZ+ikqf2TeTcxL3qd8Jvt/V3x0g4/r5sZWxT9tS2TD11lT+xoL
wZduYYvyyCyKbG5dORGy/eciPDTJ6gXmr+pmQQPcOizBXL5+9d3hs/3k94P4
+7fP4+eHBwffJ5/LM2fjk8ncLoqyrSthTxtIOl42NdGgLuODykUwkH4du/vW
VbnLx961LZHaHzGrqtlgdXjRz0lgeu4fjhciTfwC/jcej42depo7Y5ZA/P7j
0PygW/jRdN558wayFT48+NHQRGYuspj1sjih1+s7R7I70jcaVxb0el2Zdu6I
V2MSBHpnQc/bGzeeWu9y44n2VVtkxP56xg/qImYN0YcEqbQreqmojLzd1mbW
VRnYODHmnYzlTWZJGeqqXJmpM77LMvpi1pX0d+6ymqhlipkhyuJz+mO64qka
l7niVoanv0kmSXh0IuvNjatcQzoRn/cgfEPzXs8LLzpGY8yKKlCJFLk2ZV3T
g/wCD4VdNI7Y0LiFq1rPBCTKiqJvb7He/PCviMSPbAdy57OmmEJjSF4rbJ9m
/eFLHP8RT5RgDlGLV1a5O3p9wD6Rh0WR56XDX0+gtE2dd0xtYz49oXVMS7fw
n1lYmMlzopM1VbeY0l6IgzNn267Bkua2NXeuAedFYLEGGuG2yJ1Zuobltcoc
UcDmtyQEVnciAjAy044GmJNOmryunramJFbRiGUJdlkSiK4d1zOVqu0tV90W
TV2BxJCAOTjIi9A5mYug9cSI9F8TGUrb0KytIUKWpSNamsIzfWakEvK6K5Vt
ZPvAbdoSrZpHs4YouqLhZmVXkIjRLu8n5rxuDYuiDsUfm2KxLIuswJYcL79o
3QKP2Fxpg2e3t1SzWkuUHiXv3xW0ceE3/U6GkKhT1aQ5Dhut6cGGh5R1gqbJ
sOmgE3PVkp3IDG2qYQXNsm4pAj4rGiLGiwNza8vOkfmlrdVlSXrN+81XZF37
NyfmGHJUrsYyWfr1ytzVXZmTYkLSSTdLLGBtACyP9NXdFhlp2YilW/SytaRU
ebKhFlTb3iLas6hhPe6mqCooF8hhXhxORC0XjtSGWTeKhFLNZ09KZCRXA9XP
8beShowpbbeqA7cqpVxYMZMOZgYLhrkld0aDDJYtr5ISWHNDslopIeglYhTe
oxdy3qqI4HG1Ik9XdqxeOp+d1pByMNuWixqi6RpQg+RphrXbGdHVqK1cuEXN
ApjVFcx4ATnlZbug22RrSPTIInnQhybo2noh/AfZMTUNFhhCO/NQN2fEPKvx
7gd76jE2qU3Cb6GNL/5JAisKu7317sPVNbZc0ltghoyzsPfFoltA/RdFm1jW
wXp3QVDyHmT5cxqqE75VwTNcnV5fn53/8UqEdE9oeSYTiLTiee94cx46xHvK
OjYNJApMDVgtdwcF9koDMWgEaXgLC/uRHsqLGSs82YIGprWeAZS4inaMSQYm
KMoEgwyoIG1jWnds+5RT4FO3WPIDLLbk44qFLVkMMRQNS7Qv6wwoiozyOXih
3Nal52Ao2TQ1S7CYvPJdkoC6uiF1bFdLempWuDL3o+2taVFZnjtae4xIfy7o
tyD/KzLA93usa1nXYMuwYFVWdrR8DNKlopixck8du40nT8w1GFrVZX2zMvHn
05Pk48/Ko4QXYt4IIhpgRG92IDQ7I/mvOb/g3y9PyWZfnp7s0Bp2rt4cv32L
T/mX8MjVm4sPb0/63/pXX128e3d6fnLKX747/jsGAVd2Lt5fn12cH7/dEePC
ZijRaZjU4GZh183LV+/NwfMRQJwBotve+vRJwd3nz2wASPkLAOjU1bPLLcXh
g/plQW7OXF1374sT0jT6gB9jefFCSkHyRDr+72cl76vez6vxxpQnqn/X0D+P
R+VlRm3tXS2KKdNb0qyssG1i8kQ+MCYbrmAgGJm3Ua2JX4S3eH4SqaZe9EhQ
NO96w0rCqZH+LOVxsYo0SzrthLAF0ctFb9VMC9IwklKx7wS+KNJo4bOC7Sgt
GcNoYhmOJeucmFPLhodiApJShAYUuGSqaGQ3/dJlxWyVGOqpAzEWNel4AZP8
13lBi7fVikfBEyQxEIxszoCOychGg+06xSYLgIYmLpnnWWF79FbbMipJlS4B
PRNzAegDGMAzAUZNHYABPXpTwasUpNts4UBPSMuiE/JiHUyQYubaYqHmgZDK
gAsTtYoRNqvRIPn0BQHzKlvh08YFjAo/RjsDWm5450C721uLrmyLJbi6QVgf
l8K4WRarfow/EUCUBAYgriXKkAUUueMhbWJm4yAAeAAmxJrADparmW3JXLqm
qZvJo+LnW0ZLwSn2QAhOSkWh6L0PcIVEAgRpqnSFBGxozgCfHoIE4i0Y5jCb
+DV3nzmXD1wezxy8YsvCzWYGRMdmBE9KtNKIZr10gp5oTNoTmX5fBP6LoiNG
Eqtgm4bRMS8mglQRZFYz+WZu6SGAkZVrRd5yDl9I3Bgy64C8zDtL83YUm5Xs
ygRh8gMC+nnGXCOSmRA56BbUu5e8m842cOT2xkJ6iCRAwnXnNaAij7pmC40a
ckEuRBeW87Ig0KB+lSlIdF4WjQ0gBtPjQQ7elJZQcREWE6WwmCnXh7NCzxkZ
gECg6ZRiL4U/VSVwYqT4dGGxzybMGmE7e+7I5hB7BoBIcGFJbjQvfEYUCTDw
CRn4kyGUauFIyCVnc/LomrXAo+d1RGqwmwqcxc5uiCYBfcgc2RuKrNgdsSFZ
UnhWhviX4suKpIoMQruKZpWZEqBc8MWJTG9vRQiosIaFW1+PqsQiTGKjAxpB
dRpxs60EFQEoiFkEKGiBNEQUXsg1xdNBpGgyNrsh+pYXFKBIDsSYMckdTArL
kKor+xuKJrESGa1oCzIhWA7sEW2DIBo55pBTksmIIhQtk6VZFGy94Z8xwVv9
XCIkJRK0dGOlabzLVMPwKifIUsl4p/caF8aJAiHDYDwTHhZjp9RkvsDCFZJU
YT5Yz7BOofUwQOIlSIDH2rS5XthXdT9E5eOhN2jckjQuMESJPHCzyNH0RsIb
Usx5cOCae6DFJCwF8Uo2b7A1vTcRIxOtGgvSX+eaUtHt3xV+LqYvpwC9hSsN
vj+QDC7UzCgcQADS1N3NfCNEYIljbQsSdDAx33xzIkMCyTmPcO2bb4xJaE+s
asXC8HMJEYTJKpaYg20So+AgM72eBCvNoqx5JRWTAZehff3TeFf5VbEA+27q
sVJSB6acjiCmmwG32JMFASREF3ORkmUpSJfUIMgSoUN2voNdrM2InWe2zLoy
2l0JaqI1mOjr+M9hQs4lbQlBTSBmtAX6S4hcH6EpFopl20afFBI99YF+IuZY
X32H5ODZ0B499TpQeJwIM4xOw4AsOL6tH5soWVAvuCL6D/vllCLPEorY7GNV
35Uuv0lkLJIFfNI/ck5baJKfh9Ip1h1+T8GoBEw32qG3M8f5UHyro0TOTtbm
Vv9L5ouAEL0FiSeB5xWM4xZHOgxiQ9iIHDG7mZJ/mtE7oA1UoKeOSoCuAdaG
83kpeZ4n5IlCyrRZtwBRapJlpcRJqBsUUeZl9lbI01JM0whTfUSHOoQqaaCl
iH8AMKzUMekhKkTbB5Gi6jwOltkhibBqDgKM6sGsQEDmme7xQVOj8citzRBU
8nKQBGVmHsdRogGJroItgkS8AXtKrhWPEpCh3ZSpIIFLne/gCpHTEpud8lYe
nbFfhbY+IPbDEPal5CNec8EiIKDgV7XK9ZqJdOkQPAWAhkd32flrcgdOqbSA
CjEmHZkr/e7F5HByMNnjRFv05mkMqvYCnkhS9OlcwEYU+XiYvOBYOA01HCKE
BAr09LuyICGRpEB4D+oD9JUEkI8kGQUU/k/8USLu078D+ndI/57Rv+f071v6
94L+fcfP/GY8Hn/xHz/1M430M430MwY9p7WcsSveffGbPZ7n542xHvoJY8Wf
c2icDvVbHWptrMd+wlhvdLy/sJd866obYs/udw+u62tjyRhXLRdfdnWsmsBy
6/fSsb7085shFz4dGa7S/n7nQVFlYToLwjQey+8kE6DMzuf/izyNa0x/ftlY
gacsHuss/YU8lUG+ztP/h7IGnvdy9mVzl0lu0paPmj6Ci00LYxXiBvN0/+Cp
ORxPyYotkR1pKBBOC0NaURym53RyJFd0+JjxQKr1JiA2a17IyCil3msVJ2a+
bHlnV1jMRkKwLzqGmLioNvOCnAYbLEiogQiMIHGbzRXlbX6LSk4o4iArWjeS
DF6fwwQnmJrx0SODos2Ci0gpVaTEMaghSe1R3HlInGfW67ghJaakjvHb10hd
md8mtKZhdr1z0WV+OznAiD9oO8OPe48wo6qr8T9dU4urugC2o3js0S0/sC6i
H6tLENSNhRyuL+RYV7HPGWkvnGDvH4ggO2O6rBcuH1yXrP60kJiVwAgG2lz9
mnIUfkPyY/ZH3pJ1fm3H6/vdm0hJsA+6A3JL0pGyX6tT2LZPICNnBbhbcfg2
dYoLN+N4RaZfyNoqovRl3SbpX+QMWMP6XK3EICNJI+edhh9N4T+CkqGIxdmp
7a1BqUwA+rBgRkvt88RD/CrJPi6PCi0YZD6QPR7wgeFVkkbmHQkv1pPInIID
2v1VKPOZoEyKW86uXn24ujpCuHKGCLIMzRa0q3FItqQYHptkjtnbukB6TIwa
yPYNhXzfqE1Iogg0wHAsBntbVzBwZN7uMFFRfcQvkvyuJFlXMM/Q9jCi757S
F5wDxpR5rfFxPye6woQi/wZ8sp/glEs3e8UJvN3n5HM3McVDvncDn6zDzTXf
/av87cDPBpEQt5okgBZ21eed+txI6gTSlgvR1BXa/Fjs+9Q4uRG0LJE5WctV
mPUUKxeSLWdXroWrvRS1FET7YUcTuw/6ZGX8nGu1pGdLrXWGFABrfKyFaIg7
g49FtqFvkQj5PM0yaDgDOYKlcTFMzTWL8ECsGvK0mk7XXC9qDmSoY7ZkZjNk
opGsWqPGjW2maF3KyPSq5mlPR9RfzLyWn2D7jrLg0gVTsiRBr1GpLR/Napjd
/fvrlyd7aH6A4sD1kwFakAqwpZthBbIRKZRrfo02hGTQsNeG/BYm396C7a0x
n9ckiGjw+txamxjWmJAJqmCNQx2W4IJaW66K8qsxgbA+ZK4dahURuLQ3XjNp
laco1Uu7CjnOhV2GBKQkicWZ8iTyddi6T1qFxPmI0PSwiESL173bdxK8ONyT
VJQDP7RDD6kN9dlcO/dqLe9b6bABbpHkiJHyLh4OxRVkb4thplxEGNSa2xyx
dj5MJCV066Wb2+80YxRyoTR8R96FllEHcDMxsWQ9dataKzrEywA/1skOZbOe
E6PsrsKYzKcPy1rVZtkOCq9Su4/5JXqPOEW0XmiqTzqi2IZD9VCKkRSZOW7F
3C/rIrRW+CXgQsSbGRoOe9gSptTqFJJHfeZJs4WNG5Q2ON8z69Dh1xcBfHQY
6F9Ya2HWBmY88ZUORTYvbAb4xaugc8hW26ZZ8Sg7ol1+tMMpK7KMyPORmJH0
lCvO7OHhQvt7bFOuxpH72j/kpRw/kuI8f8PgOHScgh4B9iA8UqumC43JS22G
if2B3MAqU5DBGravhiJxJVXB0t1w+VdRF+83dnvKK6rNxM87qx1ZNBe3K1II
Rk+BE+5+STKMUv6IOYUJdZMMLAJCRsl0dTdHM2Yl5B2r3c8M7aqpLdeG874s
zA19Yr2aYoFsXd6wX6ln8BvwP0FZUX9Ek1no70XbL8su7bPg/ki0hYqND4zU
jqWcYBiBrTenxyenl1cj8+ri/Prs/MMxenNG5v2Hqzc/vb+8eHd2dbqnRaBC
EZXVkiUbZIjoWtewxAizrhRFyOuOVjRedPdCXW5z66o7ePkVMxxGg/sjKBir
lvWyI1IH83enPe3c5x7qjwoOuZXQS38oka1EbCzFFpEW/ra55XJTvXApeyTr
qtLA0g23m0reQEB6sZAig/RXSiddcDogqOZ2KURTtxWjeK1n/YeWfcmCkCd0
Xpu7eHkJ/QRGajcTZOGs1TnRyRiaEbhXjxYxt0tumSoa8H5PAbq0DyNi8dz/
ykAjbblbVxf6mB0E71jWH1rM1CB0aPg2n57Il2P+87P2unCNl1/l8xLaR1zn
+Th2jcprUj7P0AbTjqUgzJ2cnNwmQ3jrqodfAS8ZyusrrCLQu1JYK2psVTTI
/lbSiaVjjPpYpUgby+Hy9Bn4uCBjfSurgDVZMMjFzlf5yQFO4wNciev9lqnw
nboCsv7wVVVEM9/z1wcH4pZ9bTgE43ntQmsidfpu6QhrjFEfhuHggjn8cbqj
WPHst8xVyrDUiFGWdlXWln0n81tLvqulNpyFrixpbVCl6Squ10WXDExELNje
ep0Ww6KMQisNp7N4v0hYYDE6mHBTnkjIZp5N0tYb/TBDAAqZzWvtD8ndkn1/
xda4yNhexIB4PmgDBPMQAUQOozAvLeKsm2r/sPNaaveTPt5g0uuLIfMBVABL
yuVfPU8RSDoih1Sg3ByYsb11cnx9rBhRXJmITz9oYhy4DNzUZfiWqxhxWiSv
eF6yDINaf0r6CE4SGxTpHrT5ohqrQr9W1T9JSkgEl7G1YBVoTZlbotCaSIN6
U9ott9jcUSBVh0h3quxjWewPK+XOlj7awwVR42X/oHdxM7wNW9Ly8pXY0si8
kQRVmJzRvIBe3ogYjEkvPLGXAQ6cpUbagwYmfhcrJpUefKgaHQJDVKph/fdG
GrR1S0YK8Lu3tmF3O9ZGs3EpCWic8nJcq1f0t6glQlsTbW1OELoXgJao/8XD
EgxOT89Pfrq6vjw9fscRBAQCu4m+gbOAa9an7ps/lNEHohhyqqZUlZdTS9J6
ook1acX4NxZL4k/I+x+82FtPIKyXQdZ/Hk9ZfHFG0j/YuN3fDlIWUvr+NaO9
5oBuMNyvWhlbUPNerbL+TCaTf3WsR5Ip0NQkvhJm99kU7UCGKQ4thJYdRjyB
FgyWwscYTsbHG+5GSzq12wScHcXcHllA/N5bQiIavM3v9+/394J2ku6pi8I7
apXDWoOR1hSBvnywt2mUGZ5zWN2fLRn1ncAx3S8wbveTdHrv6VbfX55dXJ5d
/30M5aLgFy6qIYdBgA3F+WBaVZ9HGtJG3yIty/AvWlsJ44WMSOhFTFv2Uv+n
Cqm67U1yxGxe37H98QPOqcFgur2nuAFbi7lrBL0+JoYk/ZDwjhk0Nqf96daX
bCF39++f7x0JGBGCwwVIBimSlY1p34POGEoe1lMrnM0OfkzyWmtsDOeD8PTp
m5c4yGWlLyykAULj6+A9VCNipm0tQ61BPUeD8GFqB6H1IQ6K9QAsTJtTd89r
znrRKMyNTEs3DQVqDZ+gYmzPDlCGDIZ26to7SEQAH4gL0aiRd5zSZfenrYVY
Qci34ZDt0OmoVWeyBmjKpZsIZEI3BU5WDrhguCGzCqe22F1yS5pUZxh60bo4
XA+UjIm/wARiAKvKoL7yEMfCk8L7wfcKEeAUub9YabTgLOvmAdA/65GfUG3Q
jjoOZEcxbVTiE8F5SBtOEAkpsSqHAa00e0rBdF6Xed97HNpIQjfeIGU0IGHS
VI2NxVqIIE0NjiR9igOVreLM5GgbjYo8gRBqUdzMGfIEnLrZoDbRni9ZIb0d
V92f33LaTFokKhUPyLbrdtHLiU9OOvCkilfSQO7JILAP2pt+tmZj9w8fMLIx
pEiMLIsUcV+CNH6WA6aRehVFoGCfCqvvN6WpUVSadUsbwUp8SVPGOrVXBnL6
TKiXAuo7nB4xMeYuOM9ACgnjLVnIIOnPpMK+vaWA6ewkZEZDXJUa6rpS1C2T
6fBhSZBFUlINg8j+7l6nj1Hkv0oCAA7O10ulQX1wZqq32kTHT58GwffnUP66
vji54NpXukzJQaoCuoozWPnvFGNLkYrLhzw8eRClTQCNoZTXF8B7MVLPFkVo
4Omi+JD0hCJH2s45tvktT7QkU9EU7Uos9lrcEyLEkI2UNIi05s1ExuIroR0X
xYAREtihB7jIpUcgK/n0nhqliZxCXse5X6tcfe1HgN1D+PW9bJT8fqTu7rPD
vc0HexT5b1wNxXuwTKDvVxfz2Gp+6eqS1fzVwT4Kcn5s9MdgbRS0AWruYW2S
3FjHX0PD07eiC55iOLTJJvr4iE21GoggbyAexLrpz2HxNzjCCpsTJBuCvHbY
DRMp2QMfstUR4pCjXzCRpqaER9ppzp+L10FKSvK2TGxs47hCEYSPGMR+Danz
xH4JqY3Ftd8Jo2jifqI4/1oTxTOA6OM8ZzeoyavY31BP5ahJGEYHDvDpgFX+
8NsXk0fsSSijsYslZ8HMOv3bq7cfrs7+cgrIun+wJyQ8S+pZdpAjyCOxiSlh
Je6eLAUXw3g//fUbg51pI9Mmoi+SNnHxCNolwaCdWb7qrZSWkTyuM2kTNxrz
PtmcsF7IYWXFEh5Ue4PFfcTe5f5YlB5h2+0X/HxCoRFgDhlhkunLi+uLVxdv
fzq9vLy4fIzCMKt2NkN19UGjSsztUXKbxgacr5EjcAz0kZXvYVHoNwmV18EB
iNEgdxUP3CHXpafljJM1hYtMgjYES07Les2t2IlSmCJ0o6FmZcvZWI3/LgK3
1u3tYFk78uGO+ozBnqxmCIUgww3NHl6IOK3WRykLGux/Z9CZHpOXSmRNug4C
hEqWnyC2RxjFKVHpTI8ineTJAmDcgfMbbFbOF7uYa+aUTzQsMANq/+L5EiuV
F0GourOQxvYMnVB2CRgpWg5p3+sqBo69+0UXRP++dF2tb1AFXFNpSSrre23s
fOAkJ+rNGxqhGmBeXx6/O/3p6uy/TxMVAIgJlxkESp/+7ZoPrP8UbzmIIWOC
wH74V+4F+rHHgLRjiwM6cVA+uyL1HekpYyi/dr9C31aQYLvw7U8AwLbPTQem
ntToQQrAzoUcKR/OAFm4IogCyW0win/A2Q7kx6eIAhksxZIL99CPZyWbakTA
fwiEu0jTzxBqBKhEeMc3Vw0y+lDGJJsSr5h5Gv3Vfn+Jh2ebOqwj5pKcbIaR
98SskcrrwVDDOw2zc/SR10kyINShBURzcKwBmZZ8+X4J3CkkDzJnWT0H2XbN
WrGVsvSfhsxXU3s/DijgoduHtKMgnPTqL1PSvDwXsfRaJXN6H7I/oiUSTrEd
9eFCjr4KVWlLy9IWLPhpDc8ck8JJWLb+tkYkmzkbH0LMUDzSS1PkxVD22I3z
N3GwvbS9hf30wUSPyyTzoV9gkJlIw3Fvdoc5jI1Eg2Qi1jNXfKawv7BgLw3a
+7IKX9gCOBKMVthNiLzQSxRu9KpxdHD34P5+b0gyr02z2iW7n3QlPpscskDH
BtpBw+LeiClJkTCwzCAJ8eBqzZcX+8VloGSxvUVxU5sAY44+H3/pGS0wBF5c
vUfmS5eC0Z7TwpdCF/DwV22CYvTGFiXFgcjrjOR6MMafjy6MIA3adE3SUR4o
ET2rToKWKtrjSNfRKHDi9pF+M5plkUL7FJnUHifEzCS8M0WajXSmrPh9Sdzs
ZPOu+sgeNTzV5yASZ5GsP2mqJni5maVlLwS6bF4TwgVzbq3RBN+A5H0kw/1i
tHcMdsXXcG1kCoeK9RW12t56ULFCIvbNQGf7RjTtYesA8Gc13zGylnwLmIlb
mcg1FJql9v01DeFYF2C0HlUP3RchY6jIbdqF7C+SaXo10LLr88j9mf/UiG10
ZDi1uEYur9OTtSBZsKrR+RzP5IaRvp9QR0P7tFpqFiafbFfcmL7yO6VXGAEI
JqwkdA2wydZhAC0fGCa6zrT+x1dFhl2wSCvSCkOixwzcsH13XqQCQ7gQwCVO
R++B4mOORdOn2Ipw0lfff6BKD9VBzTS5KgLxjLzPkFebLKW8woYgubCAr4dx
moVCxbzho7VhN9LeORguWbpeJLGWiO9Dr6DrtK9wE0jP1Mur61B7DUc45Cnu
8KJxzi8EUiozU4HYpCy3fhI7pIfXR/f8ilfqe5NA0YJIbO9upGwhEi43NYA0
3Nkket4vFdLDB+7J0enIHNzJ8ZEHRmZ6kYDjq8bF462Cl8Ao69FoKPdlmPfJ
7YGv9FyrXBzSd4mJmhbSlHSjV8DwbVsofD143VbMBfTBRX9BVsiNs2I00t7J
LVO+aDu9taQIKdmyFkDC7Zl8jVlajheDXyyWVvuI09sQ+zMo67czXqY3Ywx6
Xgunlw+piZ31rQfrvluPCCcHdvkcvK5XV4t2W+kF9VxQlItRWCFxCxqtcTa8
2Ygi5CKTO4X4Wg0+zNCTdaW3R0Tfq4dgxpDocTyGljaMp5dHpI3n/PqwO7ov
rST3Uvh4GoZvcFJFYDqeKEsGYJq2cgtdDd2dXEjQ17gFxVbxmTZtluUHtewJ
IxOO94IneX+yJlwD1B8bD2A/GithXpt05uoiGK1rOyCupQuGI3TuSf7DUwSw
JGsrt+Q8du/U9lbkbGyUwhn8MVuyPLlQIzlUx/dzimxiaXwJQrzKQ3ak+0MA
6HR8vUNA6m44wCQBHleUYv1bTu33RwAk9Eny9FIe4NblpC+aqwp6Yxrhm44D
/k1ToC1U8nU2+Dq5RgmqPMVltUqAqUsiQY38uGFVJzw7Pj9+cLL0nsG+V0Fu
EqzqPlKa8RCCGnCnKm0pnNPQKY77myHklr9PT8iAfO6n4btn6f/v+MDBbVGu
AjpqUQcPOI/TiDES4KNLvCW+RlXDK9qF5Yjjyw3aWsNHRarhjFRRAeCwM+VL
mvh2ZvaON2jHFt+fXnExMsnMPOv21k3p9Ek+LlWxzMfbfP7LVtacrVx1Yxv5
5L0lqcQVS9k7W3VePnyH0mxFy6sXXu4LGeO+gQYx9NOXXfbxqflTYz0OJuCr
P61Igi5pzeHO2ymtEr//L/9CFfqLWwAA

-->

</rfc>

