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


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

]>

<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-quic-load-balancers-19" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="QUIC-LB">QUIC-LB: Generating Routable QUIC Connection IDs</title>

    <author initials="M." surname="Duke" fullname="Martin Duke">
      <organization>Google</organization>
      <address>
        <email>martin.h.duke@gmail.com</email>
      </address>
    </author>
    <author initials="N." surname="Banks" fullname="Nick Banks">
      <organization>Microsoft</organization>
      <address>
        <email>nibanks@microsoft.com</email>
      </address>
    </author>
    <author initials="C." surname="Huitema" fullname="Christian Huitema">
      <organization>Private Octopus Inc.</organization>
      <address>
        <email>huitema@huitema.net</email>
      </address>
    </author>

    <date />

    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    

    <abstract>


<?line 53?>

<t>QUIC address migration allows clients to change their IP address while
maintaining connection state. To reduce the ability of an observer to link two
IP addresses, clients and servers use new connection IDs when they communicate
via different client addresses. This poses a problem for traditional "layer-4"
load balancers that route packets via the IP address and port 4-tuple. This
specification provides a standardized means of securely encoding routing
information in the server's connection IDs so that a properly configured load
balancer can route packets with migrated addresses correctly. As it proposes a
structured connection ID format, it also provides a means of connection IDs
self-encoding their length to aid some hardware offloads.</t>



    </abstract>



  </front>

  <middle>


<?line 66?>

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

<t>QUIC packets <xref target="RFC9000"/> usually contain a connection ID to allow endpoints to
associate packets with different address/port 4-tuples to the same connection
context. This feature makes connections robust in the event of NAT rebinding.
QUIC endpoints usually designate the connection ID which peers use to address
packets. Server-generated connection IDs create a potential need for out-of-band
communication to support QUIC.</t>

<t>QUIC allows servers (or load balancers) to encode useful routing information for
load balancers in connection IDs.  It also encourages servers, in packets
protected by cryptography, to provide additional connection IDs to the client.
This allows clients that know they are going to change IP address or port to use
a separate connection ID on the new path, thus reducing linkability as clients
move through the world.</t>

<t>There is a tension between the requirements to provide routing information and
mitigate linkability.  Ultimately, because new connection IDs are in protected
packets, they must be generated at the server if the load balancer does not have
access to the connection keys. However, it is the load balancer that has the
context necessary to generate a connection ID that encodes useful routing
information. In the absence of any shared state between load balancer and
server, the load balancer must maintain a relatively expensive table of
server-generated connection IDs, and will not route packets correctly if they
use a connection ID that was originally communicated in a protected
NEW_CONNECTION_ID frame.</t>

<t>This specification provides common algorithms for encoding the server mapping in
a connection ID given some shared parameters. The mapping is generally only
discoverable by observers that have the parameters, preserving unlinkability as
much as possible.</t>

<t>As this document proposes a structured QUIC Connection ID, it also proposes a
system for self-encoding connection ID length in all packets, so that crypto
offload can efficiently obtain key information.</t>

<t>While this document describes a small set of configuration parameters to make
the server mapping intelligible, the means of distributing these parameters
between load balancers, servers, and other trusted intermediaries is out of its
scope. There are numerous well-known infrastructures for distribution of
configuration.</t>

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

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in RFC 2119 <xref target="RFC2119"/>.</t>

<t>In this document, these words will appear with that interpretation only when in
ALL CAPS.  Lower case uses of these words are not to be interpreted as carrying
significance described in RFC 2119.</t>

<t>In this document, "client" and "server" refer to the endpoints of a QUIC
connection unless otherwise indicated.  A "load balancer" is an intermediary for
that connection that does not possess QUIC connection keys, but it may rewrite
IP addresses or conduct other IP or UDP processing. A "configuration agent" is
the entity that determines the QUIC-LB configuration parameters for the network
and leverages some system to distribute that configuration.</t>

<t>Note that stateful load balancers that act as proxies, by terminating a QUIC
connection with the client and then retrieving data from the server using QUIC
or another protocol, are treated as a server with respect to this specification.</t>

<t>For brevity, "Connection ID" will often be abbreviated as "CID".</t>

</section>
<section anchor="notation"><name>Notation</name>

<t>All wire formats will be depicted using the notation defined in Section 1.3 of
<xref target="RFC9000"/>.</t>

</section>
</section>
<section anchor="first-octet"><name>First CID octet</name>

<t>The Connection ID construction schemes defined in this document reserve the
first octet of a CID for two special purposes: one mandatory (config rotation)
and one optional (length self-description).</t>

<t>Subsequent sections of this document refer to the contents of this octet as the
"first octet."</t>

<section anchor="config-rotation"><name>Config Rotation</name>

<t>The first three bits of any connection ID MUST encode an identifier for the
configuration that the connection ID uses. This enables incremental deployment
of new QUIC-LB settings (e.g., keys).</t>

<t>When new configuration is distributed to servers, there will be a transition
period when connection IDs reflecting old and new configuration coexist in the
network.  The rotation bits allow load balancers to apply the correct routing
algorithm and parameters to incoming packets.</t>

<t>Configuration Agents SHOULD deliver new configurations to load balancers before
doing so to servers, so that load balancers are ready to process CIDs using the
new parameters when they arrive.</t>

<t>A Configuration Agent SHOULD NOT use a codepoint to represent a new
configuration until it takes precautions to make sure that all connections using
CIDs with an old configuration at that codepoint have closed or transitioned.</t>

<t>Servers MUST NOT generate new connection IDs using an old configuration after
receiving a new one from the configuration agent. Servers MUST send
NEW_CONNECTION_ID frames that provide CIDs using the new configuration, and
retire CIDs using the old configuration using the "Retire Prior To" field of
that frame.</t>

<t>It also possible to use these bits for more long-lived distinction of different
configurations, but this has privacy implications (see <xref target="multiple-configs"/>).</t>

</section>
<section anchor="config-failover"><name>Configuration Failover</name>

<t>A server that is configured to use QUIC-LB might be forced to accept new
connections without having received a current configuration.  A server without
QUIC-LB configuration can accept connections, but it SHOULD generate initial
connection IDs with the config rotation bits set to 0b111 and avoid sending the
client connection IDs in NEW_CONNECTION_ID frames or the preferred_address
transport parameter.  Servers in this state SHOULD use the
"disable_active_migration" transport parameter until a valid configuration is
received.</t>

<t>A load balancer that sees a connection ID with config rotation bits set to
0b111 MUST route using an algorithm based solely on the address/port 4-tuple,
which is consistent well beyond the QUIC handshake. However, a load balancer MAY
observe the connection IDs used during the handshake and populate a connection
ID table that allows the connection to survive a NAT rebinding, and reduces the
probability of connection failure due to a change in the number of servers.</t>

<t>When using codepoint 0b111, all bytes but the first SHOULD have no larger of a
chance of collision as random bytes. The connection ID SHOULD be of at least
length 8 to provide 7 bytes of entropy after the first octet with a low chance
of collision. Furthermore, servers in a pool SHOULD also use a consistent
connection ID length to simplify the load balancer's extraction of a connection
ID from short headers.</t>

</section>
<section anchor="length-self-description"><name>Length Self-Description</name>

<t>Local hardware cryptographic offload devices may accelerate QUIC servers by
receiving keys from the QUIC implementation indexed to the connection ID.
However, on physical devices operating multiple QUIC servers, it might be
impractical to efficiently lookup keys if the connection ID varies in length and
does not self-encode its own length.</t>

<t>Note that this is a function of particular server devices and is irrelevant to
load balancers. As such, load balancers MAY omit this from their configuration.
However, the remaining 5 bits in the first octet of the Connection ID are
reserved to express the length of the following connection ID, not including
the first octet.</t>

<t>A server not using this functionality SHOULD choose the five bits so as to have
no observable relationship to previous connection IDs issued for that
connection.</t>

</section>
<section anchor="format"><name>Format</name>

<figure title="First Octet Format" anchor="first-octet-format"><artwork><![CDATA[
First Octet {
  Config Rotation (3),
  CID Len or Random Bits (5),
}
]]></artwork></figure>

<t>The first octet has the following fields:</t>

<t>Config Rotation: Indicates the configuration used to interpret the CID.</t>

<t>CID Len or Random Bits: Length Self-Description (if applicable), or random bits
otherwise. Encodes the length of the Connection ID following the First Octet.</t>

</section>
</section>
<section anchor="load-balancing"><name>Load Balancing Preliminaries</name>

<t>In QUIC-LB, load balancers do not generate individual connection IDs for
servers.  Instead, they communicate the parameters of an algorithm to generate
routable connection IDs.</t>

<t>The algorithms differ in the complexity of configuration at both load balancer
and server. Increasing complexity improves obfuscation of the server mapping.</t>

<t>This section describes three participants: the configuration agent, the load
balancer, and the server. For any given QUIC-LB configuration that enables
connection-ID-aware load balancing, there must be a choice of (1) routing
algorithm, (2) server ID allocation strategy, and (3) algorithm parameters.</t>

<t>Fundamentally, servers generate connection IDs that encode their server ID.
Load balancers decode the server ID from the CID in incoming packets to route
to the correct server.</t>

<t>There are situations where a server pool might be operating two or more routing
algorithms or parameter sets simultaneously.  The load balancer uses the first
two bits of the connection ID to multiplex incoming DCIDs over these schemes
(see <xref target="config-rotation"/>).</t>

<section anchor="unroutable"><name>Unroutable Connection IDs</name>

<t>QUIC-LB servers will generate Connection IDs that are decodable to extract a
server ID in accordance with a specified algorithm and parameters.  However,
QUIC often uses client-generated Connection IDs prior to receiving a packet from
the server.</t>

<t>These client-generated CIDs might not conform to the expectations of the
routing algorithm and therefore not be routable by the load balancer. Those that
are not routable are "unroutable DCIDs" and receive similar treatment
regardless of why they're unroutable:</t>

<t><list style="symbols">
  <t>The config rotation bits (<xref target="config-rotation"/>) may not correspond to an active
configuration. Note: a packet with a DCID with config ID codepoint 0b111 (see
<xref target="config-failover"/>) is always routable.</t>
  <t>The DCID might not be long enough for the decoder to process.</t>
  <t>The extracted server mapping might not correspond to an active server.</t>
</list></t>

<t>All other DCIDs are routable.</t>

<t>Load balancers MUST forward packets with routable DCIDs to a server in
accordance with the chosen routing algorithm. Exception: if the load balancer
can parse the QUIC packet and makes a routing decision depending on the
contents (e.g., the SNI in a TLS client hello), it MAY route in accordance with
this instead. However, load balancers MUST always route long header packets it
cannot parse in accordance with the DCID (see <xref target="version-invariance"/>).</t>

<t>Load balancers SHOULD drop short header packets with unroutable DCIDs.</t>

<t>When forwarding a packet with a long header and unroutable DCID, load
balancers MUST use a fallback algorithm as specified in <xref target="fallback-algorithm"/>.</t>

<t>Load balancers MAY drop packets with long headers and unroutable DCIDs if
and only if it knows that the encoded QUIC version does not allow an unroutable
DCID in a packet with that signature. For example, a load balancer can safely
drop a QUIC version 1 Handshake packet with an unroutable DCID, as a
version 1 Handshake packet sent to a QUIC-LB routable server will always have
a server-generated routable CID. The prohibition against dropping packets with
long headers remains for unknown QUIC versions.</t>

<t>Furthermore, while the load balancer function MUST NOT drop packets, the device
might implement other security policies, outside the scope of this
specification, that might force a drop.</t>

<t>Servers that receive packets with unroutable CIDs MUST use the available
mechanisms to induce the client to use a routable CID in future packets. In
QUIC version 1, this requires using a routable CID in the Source CID field of
server-generated long headers.</t>

</section>
<section anchor="fallback-algorithm"><name>Fallback Algorithms</name>

<t>There are conditions described below where a load balancer routes a packet using
a "fallback algorithm." It can choose any algorithm, without coordination with
the servers, but the algorithm SHOULD be deterministic over short time scales so
that related packets go to the same server. The design of this algorithm SHOULD
consider the version-invariant properties of QUIC described in <xref target="RFC8999"/> to
maximize its robustness to future versions of QUIC.</t>

<t>A fallback algorithm MUST NOT make the routing behavior dependent on any bits
in the first octet of the QUIC packet header, except the first bit, which
indicates a long header. All other bits are QUIC version-dependent and
intermediaries SHOULD NOT base their design on version-specific templates.</t>

<t>For example, one fallback algorithm might convert a unroutable DCID to an
integer and divided by the number of servers, with the modulus used to forward
the packet. The number of servers is usually consistent on the time scale of a
QUIC connection handshake. Another might simply hash the address/port 4-tuple.
See also <xref target="version-invariance"/>.</t>

</section>
<section anchor="sid-allocation"><name>Server ID Allocation</name>

<t>Load Balancer configurations include a mapping of server IDs to forwarding
addresses. The corresponding server configurations contain one or
more unique server IDs.</t>

<t>The configuration agent chooses a server ID length for each configuration that
MUST be at least one octet.</t>

<t>A QUIC-LB configuration MAY significantly over-provision the server ID space
(i.e., provide far more codepoints than there are servers) to increase the
probability that a randomly generated Destination Connection ID is unroutable.</t>

<t>The configuration agent SHOULD provide a means for servers to express the
number of server IDs it can usefully employ, because a single routing address
actually corresponds to multiple server entities (see <xref target="lb-chains"/>).</t>

<t>Conceptually, each configuration has its own set of server ID allocations,
though two static configurations with identical server ID lengths MAY use a
common allocation between them.</t>

<t>A server encodes one of its assigned server IDs in any CID it generates using
the relevant configuration.</t>

</section>
</section>
<section anchor="server-id-encoding-in-connection-ids"><name>Server ID Encoding in Connection IDs</name>

<section anchor="cid-format"><name>CID format</name>

<t>All connection IDs use the following format:</t>

<figure title="CID Format" anchor="plaintext-cid-format"><artwork><![CDATA[
QUIC-LB Connection ID {
    First Octet (8),
    Plaintext Block (40..152),
}
Plaintext Block {
    Server ID (8..),
    Nonce (32..),
}
]]></artwork></figure>

<t>The First Octet field serves one or two purposes, as defined in <xref target="first-octet"/>.</t>

<t>The Server ID field encodes the information necessary for the load balancer to
route a packet with that connection ID. It is often encrypted.</t>

<t>The server uses the Nonce field to make sure that each connection ID it
generates is unique, even though they all use the same Server ID.</t>

</section>
<section anchor="configuration-agent-actions"><name>Configuration Agent Actions</name>

<t>The configuration agent assigns a server ID to every server in its pool in
accordance with <xref target="sid-allocation"/>, and determines a server ID length (in
octets) sufficiently large to encode all server IDs, including potential future
servers.</t>

<t>Each configuration specifies the length of the Server ID and Nonce fields, with
limits defined for each algorithm.</t>

<t>Optionally, it also defines a 16-octet key. Note that failure to define a key
means that observers can determine the assigned server of any connection,
significantly increasing the linkability of QUIC address migration.</t>

<t>The nonce length MUST be at least 4 octets. The server ID length MUST be at
least 1 octet.</t>

<t>As QUIC version 1 limits connection IDs to 20 octets, the server ID and nonce
lengths MUST sum to 19 octets or less.</t>

</section>
<section anchor="server-actions"><name>Server Actions</name>

<t>The server writes the first octet and its server ID into their respective
fields.</t>

<t>If there is no key in the configuration, the server MUST fill the Nonce field
with bytes that have no observable relationship to the field in previously
issued connection IDs. If there is a key, the server fills the nonce field with
a nonce of its choosing. See <xref target="cid-entropy"/> for details.</t>

<t>The server MAY append additional bytes to the connection ID, up to the limit
specified in that version of QUIC, for its own use. These bytes MUST NOT
provide observers with any information that could link two connection IDs to
the same connection, client, or server. In particular, all servers using a
configuration MUST consistently add the same length to each connection ID,
to preserve the linkability objectives of QUIC-LB. Any additional bytes SHOULD
NOT provide any observable correlation to previous connection IDs for that
connection (e.g., the bytes can be chosen at random).</t>

<t>If there is no key in the configuration, the Connection ID is complete.
Otherwise, there are further steps, as described in the two following
subsections.</t>

<t>Encryption below uses the AES-128-ECB cipher <xref target="NIST-AES-ECB"/>. Future standards
could add new algorithms that use other ciphers to provide cryptographic agility
in accordance with <xref target="RFC7696"/>. QUIC-LB implementations SHOULD be extensible to
support new algorithms.</t>

<section anchor="special-case-single-pass-encryption"><name>Special Case: Single Pass Encryption</name>

<t>When the nonce length and server ID length sum to exactly 16 octets, the server
MUST use a single-pass encryption algorithm. All connection ID octets except the
first form an AES-ECB block. This block is encrypted once, and the result forms
the second through seventeenth most significant bytes of the connection ID.</t>

</section>
<section anchor="general-case-four-pass-encryption"><name>General Case: Four-Pass Encryption</name>

<t>Any other field length requires four passes for encryption and at least three
for decryption. To understand this algorithm, it is useful to define four
functions that minimize the amount of bit-shifting necessary in the event that
there are an odd number of octets.</t>

<t>When configured with both a key, and a nonce length and server ID length that
sum to any number other than 16, the server MUST follow the algorith below to
encrypt the connection ID.</t>

<section anchor="overview"><name>Overview</name>

<t>The 4-pass algorithm is a four-round Feistel Network with the round function
being AES-ECB. Most modern applications of Feistel Networks have more than four
rounds. The implications of this choice, which is meant to limit the per-packet
compute overhead at load balancers, are discussed in
<xref target="distinguishing-attacks"/>.</t>

<t>The server concatenates the server ID and nonce into a single field, which is
then split into equal halves. In successive passes, one of these halves is
expanded into a 16B plaintext, encrypted with AES-ECB, and the result XORed with
the other half. The diagram below shows the conceptual processing of a plaintext
server ID and nonce into a connection ID. 'FO' stands for 'First Octet'.</t>

<figure><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="560" width="392" viewBox="0 0 392 560" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
<path d="M 8,32 L 8,64" fill="none" stroke="black"/>
<path d="M 8,496 L 8,528" fill="none" stroke="black"/>
<path d="M 32,64 L 32,488" fill="none" stroke="black"/>
<path d="M 56,32 L 56,64" fill="none" stroke="black"/>
<path d="M 56,112 L 56,144" fill="none" stroke="black"/>
<path d="M 56,416 L 56,448" fill="none" stroke="black"/>
<path d="M 56,496 L 56,528" fill="none" stroke="black"/>
<path d="M 80,144 L 80,408" fill="none" stroke="black"/>
<path d="M 120,448 L 120,488" fill="none" stroke="black"/>
<path d="M 152,32 L 152,64" fill="none" stroke="black"/>
<path d="M 160,192 L 160,224" fill="none" stroke="black"/>
<path d="M 160,288 L 160,320" fill="none" stroke="black"/>
<path d="M 200,64 L 200,144" fill="none" stroke="black"/>
<path d="M 200,416 L 200,448" fill="none" stroke="black"/>
<path d="M 264,240 L 264,272" fill="none" stroke="black"/>
<path d="M 264,336 L 264,368" fill="none" stroke="black"/>
<path d="M 272,448 L 272,488" fill="none" stroke="black"/>
<path d="M 320,144 L 320,408" fill="none" stroke="black"/>
<path d="M 344,32 L 344,64" fill="none" stroke="black"/>
<path d="M 344,112 L 344,144" fill="none" stroke="black"/>
<path d="M 344,416 L 344,448" fill="none" stroke="black"/>
<path d="M 344,496 L 344,528" fill="none" stroke="black"/>
<path d="M 8,32 L 344,32" fill="none" stroke="black"/>
<path d="M 8,64 L 344,64" fill="none" stroke="black"/>
<path d="M 56,112 L 344,112" fill="none" stroke="black"/>
<path d="M 56,144 L 344,144" fill="none" stroke="black"/>
<path d="M 160,192 L 224,192" fill="none" stroke="black"/>
<path d="M 80,208 L 152,208" fill="none" stroke="black"/>
<path d="M 240,208 L 312,208" fill="none" stroke="black"/>
<path d="M 160,224 L 224,224" fill="none" stroke="black"/>
<path d="M 200,240 L 264,240" fill="none" stroke="black"/>
<path d="M 88,256 L 184,256" fill="none" stroke="black"/>
<path d="M 272,256 L 320,256" fill="none" stroke="black"/>
<path d="M 200,272 L 264,272" fill="none" stroke="black"/>
<path d="M 160,288 L 224,288" fill="none" stroke="black"/>
<path d="M 80,304 L 152,304" fill="none" stroke="black"/>
<path d="M 240,304 L 312,304" fill="none" stroke="black"/>
<path d="M 160,320 L 224,320" fill="none" stroke="black"/>
<path d="M 200,336 L 264,336" fill="none" stroke="black"/>
<path d="M 88,352 L 184,352" fill="none" stroke="black"/>
<path d="M 272,352 L 320,352" fill="none" stroke="black"/>
<path d="M 200,368 L 264,368" fill="none" stroke="black"/>
<path d="M 56,416 L 344,416" fill="none" stroke="black"/>
<path d="M 56,448 L 344,448" fill="none" stroke="black"/>
<path d="M 8,496 L 344,496" fill="none" stroke="black"/>
<path d="M 8,528 L 344,528" fill="none" stroke="black"/>
<path d="M 224,192 C 232.83064,192 240,199.16936 240,208" fill="none" stroke="black"/>
<path d="M 224,224 C 232.83064,224 240,216.83064 240,208" fill="none" stroke="black"/>
<path d="M 200,240 C 191.16936,240 184,247.16936 184,256" fill="none" stroke="black"/>
<path d="M 200,272 C 191.16936,272 184,264.83064 184,256" fill="none" stroke="black"/>
<path d="M 224,288 C 232.83064,288 240,295.16936 240,304" fill="none" stroke="black"/>
<path d="M 224,320 C 232.83064,320 240,312.83064 240,304" fill="none" stroke="black"/>
<path d="M 200,336 C 191.16936,336 184,343.16936 184,352" fill="none" stroke="black"/>
<path d="M 200,368 C 191.16936,368 184,360.83064 184,352" fill="none" stroke="black"/>
<polygon class="arrowhead" points="328,408 316,402.4 316,413.6" fill="black" transform="rotate(90,320,408)"/>
<polygon class="arrowhead" points="328,292 316,286.4 316,297.6" fill="black" transform="rotate(90,320,292)"/>
<polygon class="arrowhead" points="328,196 316,190.4 316,201.6" fill="black" transform="rotate(90,320,196)"/>
<polygon class="arrowhead" points="316,304 304,298.4 304,309.6" fill="black" transform="rotate(0,308,304)"/>
<polygon class="arrowhead" points="316,208 304,202.4 304,213.6" fill="black" transform="rotate(0,308,208)"/>
<polygon class="arrowhead" points="280,488 268,482.4 268,493.6" fill="black" transform="rotate(90,272,488)"/>
<polygon class="arrowhead" points="280,352 268,346.4 268,357.6" fill="black" transform="rotate(180,272,352)"/>
<polygon class="arrowhead" points="280,256 268,250.4 268,261.6" fill="black" transform="rotate(180,272,256)"/>
<polygon class="arrowhead" points="208,104 196,98.4 196,109.6" fill="black" transform="rotate(90,200,104)"/>
<polygon class="arrowhead" points="160,304 148,298.4 148,309.6" fill="black" transform="rotate(0,152,304)"/>
<polygon class="arrowhead" points="160,208 148,202.4 148,213.6" fill="black" transform="rotate(0,152,208)"/>
<polygon class="arrowhead" points="128,488 116,482.4 116,493.6" fill="black" transform="rotate(90,120,488)"/>
<polygon class="arrowhead" points="100,352 88,346.4 88,357.6" fill="black" transform="rotate(180,92,352)"/>
<polygon class="arrowhead" points="100,256 88,250.4 88,261.6" fill="black" transform="rotate(180,92,256)"/>
<polygon class="arrowhead" points="88,408 76,402.4 76,413.6" fill="black" transform="rotate(90,80,408)"/>
<polygon class="arrowhead" points="88,340 76,334.4 76,345.6" fill="black" transform="rotate(90,80,340)"/>
<polygon class="arrowhead" points="88,244 76,238.4 76,249.6" fill="black" transform="rotate(90,80,244)"/>
<polygon class="arrowhead" points="40,488 28,482.4 28,493.6" fill="black" transform="rotate(90,32,488)"/>
<circle cx="80" cy="256" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="74" y1="256" x2="86" y2="256" stroke="black"/><line x1="80" y1="250" x2="80" y2="262" stroke="black"/><circle cx="80" cy="352" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="74" y1="352" x2="86" y2="352" stroke="black"/><line x1="80" y1="346" x2="80" y2="358" stroke="black"/><circle cx="320" cy="208" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="314" y1="208" x2="326" y2="208" stroke="black"/><line x1="320" y1="202" x2="320" y2="214" stroke="black"/><circle cx="320" cy="304" r="6" class="xordot" fill="white" stroke="black"/>
<line x1="314" y1="304" x2="326" y2="304" stroke="black"/><line x1="320" y1="298" x2="320" y2="310" stroke="black"/><g class="text">
<text x="28" y="52">FO</text>
<text x="92" y="52">Server</text>
<text x="132" y="52">ID</text>
<text x="248" y="52">Nonce</text>
<text x="132" y="132">left_0</text>
<text x="280" y="132">right_0</text>
<text x="200" y="212">AES-ECB</text>
<text x="360" y="244">right_1</text>
<text x="224" y="260">AES-ECB</text>
<text x="116" y="292">left_1</text>
<text x="200" y="308">AES-ECB</text>
<text x="224" y="356">AES-ECB</text>
<text x="132" y="436">left_2</text>
<text x="280" y="436">right_2</text>
<text x="28" y="516">FO</text>
<text x="196" y="516">Ciphertext</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
   +-----+-----------+-----------------------+
   | FO  | Server ID |         Nonce         |
   +--+--+-----------+-----+-----------------+
      |                    |
      |                    V
      |  +-----------------+-----------------+
      |  |      left_0     |      right_0    |
      |  +--+--------------+--------------+--+
      |     |                             |
      |     |                             |
      |     |         .--------.          V
      |     +-------->| AES-ECB +-------->⊕
      |     |         '--------'          |
      |     V             .--------.      | right_1
      |     ⊕<-----------+ AES-ECB |<-----+
      |     |             '--------'      |
      |     | left_1  .--------.          V
      |     +-------->| AES-ECB +-------->⊕
      |     |         '--------'          |
      |     V             .--------.      |
      |     ⊕<-----------+ AES-ECB |<-----+
      |     |             '--------'      |
      |     |                             |
      |     V                             V
      |  +-----------------+-----------------+
      |  |      left_2     |      right_2    |
      |  +-------+---------+--------+--------+
      |          |                  |
      V          V                  V
   +-----+-----------------------------------+
   | FO  |            Ciphertext             |
   +-----+-----------------------------------+
]]></artwork></artset></figure>

</section>
<section anchor="useful-functions"><name>Useful functions</name>

<t>Two functions are useful to define:</t>

<t>The expand(length, pass, input_bytes) function concatenates three arguments and
outputs 16 zero-padded octets.</t>

<t>The output of expand is as follows:</t>

<figure><sourcecode type="pseudocode"><![CDATA[
ExpandResult {
     input_bytes(...),
     ZeroPad(...),
     length(8),
     pass(8)
}
]]></sourcecode></figure>

<t>in which:</t>

<t><list style="symbols">
  <t>'input_bytes' is drawn from one half of the plaintext. It forms the N most
significant octets of the output, where N is half the 'length' argument, rounded
up, and thus a number between 3 and 10, inclusive.</t>
  <t>'Zeropad' is a set of 14-N octets set to zero.</t>
  <t>'length' is an 8-bit integer that reports the sum of the configured nonce
length and server id length in octets, and forms the fifteenth octet of the
output. The 'length' argument MUST NOT exceed 19 and MUST NOT be less than 5.</t>
  <t>'pass' is an 8-bit integer that reports the 'pass' argument of the algorithm,
and forms the sixteenth (least significant) octet of the output. It guarantees
that the cryptographic input of every pass of the algorithm is unique.</t>
</list></t>

<t>For example,</t>

<figure><sourcecode type="pseudocode"><![CDATA[
expand(0x06, 0x02, 0xaaba3c) = 0xaaba3c00000000000000000000000602
]]></sourcecode></figure>

<t>Similarly, truncate(input, n) returns the first n octets of 'input'.</t>

<figure><sourcecode type="pseudocode"><![CDATA[
truncate(0x2094842ca49256198c2deaa0ba53caa0, 4) = 0x2094842c
]]></sourcecode></figure>

<t>Let 'half_len' be equal to 'plaintext_len' / 2, rounded up.</t>

</section>
<section anchor="algorithm-description"><name>Algorithm Description</name>

<t>The example at the end of this section helps to clarify the steps described
below.</t>

<t><list style="numbers">
  <t>The server concatenates the server ID and nonce to create plaintext_CID. The
length of the result in octets is plaintext_len.</t>
  <t>The server splits plaintext_CID into components left_0 and right_0 of equal
length half_len. If plaintext_len is odd, right_0 clears its first four bits,
and left_0 clears its last four bits. For example, 0x7040b81b55ccf3 would split
into a left_0 of 0x7040b810 and right_0 of 0x0b55ccf3.</t>
  <t>Encrypt the result of expand(plaintext_len, 1, left_0) using an AES-ECB-128
cipher to obtain a ciphertext.</t>
  <t>XOR the first half_len octets of the ciphertext with right_0 to form right_1.
Steps 3 and 4 can be summarized as</t>
</list></t>

<figure><sourcecode type="psuedocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 1, left_0))
    right_1 = XOR(right_0, truncate(result, half_len))
]]></sourcecode></figure>

<t><list style="numbers" start="5">
  <t>If the plaintext_len is odd, clear the first four bits of right_1.</t>
  <t>Repeat steps 3 and 4, but use them to compute left_1 by expanding and
encrypting right_1 with pass = 2, and XOR the results with left_0.</t>
</list></t>

<figure><sourcecode type="psuedocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 2, right_1))
    left_1 = XOR(left_0, truncate(result, half_len))
]]></sourcecode></figure>

<t><list style="numbers" start="7">
  <t>If the plaintext_len is odd, clear the last four bits of left_1.</t>
  <t>Repeat steps 3 and 4, but use them to compute right_2 by expanding and
encrypting left_1 with pass = 3, and XOR the results with right_1.</t>
</list></t>

<figure><sourcecode type="pseudocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 3, left_1))
    right_2 = XOR(right_1, truncate(result, half_len))
]]></sourcecode></figure>

<t><list style="numbers" start="9">
  <t>If the plaintext_len is odd, clear the first four bits of right_2.</t>
  <t>Repeat steps 3 and 4, but use them to compute left_2 by expanding and
encrypting right_2 with pass = 4, and XOR the results with left_1.</t>
</list></t>

<figure><sourcecode type="psuedocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 4, right_2))
    left_2 = XOR(left_1, truncate(result, half_len))
]]></sourcecode></figure>

<t><list style="numbers" start="11">
  <t>If the plaintext_len is odd, clear the last four bits of left_2.</t>
  <t>The server concatenates left_2 with right_2 to form the ciphertext CID,
which it appends to the first octet. If plaintext_len is odd, the four
least significant bits of left_2 and four most significant bits of right_2,
which are all zero, are stripped off before concatenation to make the
resulting ciphertext the same length as the original plaintext.</t>
</list></t>

</section>
<section anchor="encryption-example"><name>Encryption Example</name>

<t>The following example executes the steps for the provided inputs. Note that the
plaintext is of odd octet length, so the middle octet will be split evenly
left_0 and right_0.</t>

<figure><sourcecode type="pseudocode"><![CDATA[
server_id = 0x31441a
nonce = 0x9c69c275
key = 0xfdf726a9893ec05c0632d3956680baf0

// step 1
plaintext_CID = 0x31441a9c69c275
plaintext_len = 7

// step 2
hash_len = 4
left_0 = 0x31441a90
right_0 = 0x0c69c275

// step 3
aes_input = 0x31441a90000000000000000000000701
aes_output = 0xa255dd8cdacf01948d3a848c3c7fee23

// step 4
right_1 = 0x0c69c275 ^ 0xa255dd8c = 0xae3c1ff9

// step 5 (clear bits)
right_1 = 0x0e8c1ff9

// step 6
aes_input = 0x0e8c1ff9000000000000000000000702
aes_output = 0xe5e452cb9e1bedb0b2bf830506bf4c4e
left_1 = 0x31441a90 ^ 0xe5e452cb = 0xd4a0485b

// step 7 (clear bits)
left_1 = 0xd4a04850

// step 8
aes_input = 0xd4a04850000000000000000000000703
aes_output = 0xb7821ab3024fed0913b6a04d18e3216f
right_2 = 0x0e8c1ff9 ^ 0xb7821ab3 = 0xb9be054a

// step 9 (clear bits)
right_2 = 0x09be054a

// step 10
aes_input = 0x09be054a000000000000000000000704
aes_output = 0xb334357cfdf81e3fafe180154eaf7378
left_2 = 0xd4a04850 ^ 0xb3e4357c = 0x67947d2c

// step 11 (clear bits)
left_2 = 0x67947d20

// step 12
cid = first_octet || left_2 || right_2 = 0x0767947d29be054a
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="load-balancer-actions"><name>Load Balancer Actions</name>

<t>On each incoming packet, the load balancer extracts consecutive octets,
beginning with the second octet. If there is no key, the first octets
correspond to the server ID.</t>

<t>If there is a key, the load balancer takes one of two actions:</t>

<section anchor="special-case-single-pass-encryption-1"><name>Special Case: Single Pass Encryption</name>

<t>If server ID length and nonce length sum to exactly 16 octets, they form a
ciphertext block. The load balancer decrypts the block using the AES-ECB key
and extracts the server ID from the most significant bytes of the resulting
plaintext.</t>

</section>
<section anchor="general-case-four-pass-encryption-1"><name>General Case: Four-Pass Encryption</name>

<t>First, split the ciphertext CID (excluding the first octet) into its equal-
length components left_2 and right_2. Then follow the process below:</t>

<figure><sourcecode type="pseudocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 4, right_2))
    left_1 = XOR(left_2, truncate(result, half_len))
    if (plaintext_len_is_odd()) clear_last_bits(left_1, 4)

    result = AES_ECB(key, expand(plaintext_len, 3, left_1))
    right_1 = XOR(right_2, truncate(result, half_len))
    if (plaintext_len_is_odd()) clear_first_bits(left_1, 4)

    result = AES_ECB(key, expand(plaintext_len, 2, right_1))
    left_0 = XOR(left_1, truncate(result, half_len))
    if (plaintext_len_is_odd()) clear_last_bits(left_0, 4)
]]></sourcecode></figure>

<t>As the load balancer has no need for the nonce, it can conclude after 3 passes
as long as the server ID is entirely contained in left_0 (i.e., the nonce is at
least as large as the server ID). If the server ID is longer, a fourth pass
is necessary:</t>

<figure><sourcecode type="pseudocode"><![CDATA[
    result = AES_ECB(key, expand(plaintext_len, 1, left_0))
    right_0 = XOR(right_1, truncate(result, half_len))
    if (plaintext_len_is_odd()) clear_first_bits(right_0, 4)
]]></sourcecode></figure>

<t>and the load balancer has to concatenate left_0 and right_0 to obtain the
complete server ID.</t>

</section>
</section>
</section>
<section anchor="per-connection-state"><name>Per-connection state</name>

<t>The CID allocation methods QUIC-LB defines require no per-connection state at
the load balancer. The load balancer can extract the server ID from the
connection ID of each incoming packet and route that packet accordingly.</t>

<t>However, once a routing decision has been made, the load balancer MAY
associate the 4-tuple or connection ID with the decision. This has two
advantages:</t>

<t><list style="symbols">
  <t>The load balancer only extracts the server ID once until the 4-tuple or
connection ID changes. When the CID is encrypted, this might reduce
computational load.</t>
  <t>Incoming Stateless Reset packets and ICMP messages are easily routed to the
correct origin server.</t>
</list></t>

<t>In addition to the increased state requirements, however, load balancers cannot
detect the CONNECTION_CLOSE frame to indicate the end of the connection, so they
rely on a timeout to delete connection state. There are numerous considerations
around setting such a timeout.</t>

<t>In the event a connection ends, freeing an IP and port, and a different
connection migrates to that IP and port before the timeout, the load balancer
will misroute the different connection's packets to the original server. A short
timeout limits the likelihood of such a misrouting.</t>

<t>Furthermore, if a short timeout causes premature deletion of state, the routing
is easily recoverable by decoding an incoming Connection ID. However, a short
timeout also reduces the chance that an incoming Stateless Reset is correctly
routed.</t>

<t>Servers MAY implement the technique described in <xref section="14.4.1" sectionFormat="of" target="RFC9000"/>
in case the load balancer is stateless, to increase the likelihood a Source
Connection ID is included in ICMP responses to Path Maximum Transmission Unit
(PMTU) probes.  Load balancers MAY parse the echoed packet to extract the Source
Connection ID, if it contains a QUIC long header, and extract the Server ID as
if it were in a Destination CID.</t>

</section>
<section anchor="additional-use-cases"><name>Additional Use Cases</name>

<t>This section discusses considerations for some deployment scenarios not implied
by the specification above.</t>

<section anchor="lb-chains"><name>Load balancer chains</name>

<t>Some network architectures may have multiple tiers of low-state load balancers,
where a first tier of devices makes a routing decision to the next tier, and so
on, until packets reach the server. Although QUIC-LB is not explicitly designed
for this use case, it is possible to support it.</t>

<t>If each load balancer is assigned a range of server IDs that is a subset of the
range of IDs assigned to devices that are closer to the client, then the first
devices to process an incoming packet can extract the server ID and then map it
to the correct forwarding address. Note that this solution is extensible to
arbitrarily large numbers of load-balancing tiers, as the maximum server ID
space is quite large.</t>

<t>If the number of necessary server IDs per next hop is uniform, a simple
implementation would use successively longer server IDs at each tier of load
balancing, and the server configuration would match the last tier. Load
balancers closer to the client can then treat any parts of the server ID they
did not use as part of the nonce.</t>

</section>
<section anchor="server-process-demultiplexing"><name>Server Process Demultiplexing</name>

<t>QUIC servers might have QUIC running on multiple processes listening on the same
address, and have a need to demultiplex between them. In principle, this
demultiplexer is a Layer 4 load balancer, and the guidance in <xref target="lb-chains"/>
applies. However, in many deployments the demultiplexer lacks the capability to
perform decryption operations. Internal server coordination is out of scope of
this specification, but this non-normative section proposes some approaches
that could work given certain server capabilities:</t>

<t><list style="symbols">
  <t>Some bytes of the server ID are reserved to encode the process ID. The
demultiplexer might operate based on the 4-tuple or other legacy indicator, but
the receiving server process extracts the server ID, and if it does not match
the one for that process, the process could "toss" the packet to the correct
destination process.</t>
  <t>Each process could register the connection IDs it generates with the
demultiplexer, which routes those connection IDs accordingly.</t>
  <t>In a combination of the two approaches above, the demultiplexer generally
routes by 4-tuple. After a migration, the process tosses the first flight of
packets and registers the new connection ID with the demultiplexer. This
alternative limits the bandwidth consumption of tossing and the memory footprint
of a full connection ID table.</t>
  <t>When generating a connection ID, the server writes the process ID to the
random field of the first octet, or if this is being used for length encoding,
in an octet it appends after the ciphertext. It then applies a keyed hash (with
a key locally generated for the sole use of that server). The hash result is
used as a bitmask to XOR with the bits encoding the process ID. On packet
receipt, the demultiplexer applies the same keyed hash to generate the same
mask and recoversthe process ID. (Note that this approach is conceptually
similar to QUIC header protection).</t>
</list></t>

</section>
<section anchor="moving-connections-between-servers"><name>Moving connections between servers</name>

<t>Some deployments may transparently move a connection from one server to another.
The means of transferring connection state between servers is out of scope of
this document.</t>

<t>To support a handover, a server involved in the transition could issue CIDs that
map to the new server via a NEW_CONNECTION_ID frame, and retire CIDs associated
with the old server using the "Retire Prior To" field in that frame.</t>

</section>
</section>
<section anchor="version-invariance"><name>Version Invariance of QUIC-LB</name>

<t>The server ID encodings, and requirements for their handling, are designed to be
QUIC version independent (see <xref target="RFC8999"/>). A QUIC-LB load balancer will
generally not require changes as servers deploy new versions of QUIC. However,
there are several unlikely future design decisions that could impact the
operation of QUIC-LB.</t>

<t>A QUIC version might define limits on connection ID length that make some or all
of the mechanisms in this document unusable.  For example, a maximum connection
ID length could be below the minimum necessary to use all or part of this
specification; or, the minimum connection ID length could be larger than the
largest value in this specification.</t>

<t><xref target="unroutable"/> provides guidance about how load balancers should handle
unroutable DCIDs. This guidance, and the implementation of an algorithm to
handle these DCIDs, rests on some assumptions:</t>

<t><list style="symbols">
  <t>Incoming short headers do not contain DCIDs that are client-generated.</t>
  <t>The use of client-generated incoming DCIDs does not persist beyond a few round
trips in the connection.</t>
  <t>While the client is using DCIDs it generated, some exposed fields (IP address,
UDP port, client-generated destination Connection ID) remain constant for all
packets sent on the same connection.</t>
</list></t>

<t>While this document does not update the commitments in <xref target="RFC8999"/>, the
additional assumptions are minimal and narrowly scoped, and provide a likely
set of constants that load balancers can use with minimal risk of version-
dependence.</t>

<t>If these assumptions are not valid, this specification is likely to lead to loss
of packets that contain unroutable DCIDs, and in extreme cases connection
failure.  A QUIC version that violates the assumptions in this section therefore
cannot be safely deployed with a load balancer that follows this specification.
An updated or alternative version of this specification might address these
shortcomings for such a QUIC version.</t>

<t>Some load balancers might inspect version-specific elements of packets to make a
routing decision.  This might include the Server Name Indication (SNI) extension
in the TLS Client Hello.  The format and cryptographic protection of this
information may change in future versions or extensions of TLS or QUIC, and
therefore this functionality is inherently not version-invariant. Such a load
balancer, when it receives packets from an unknown QUIC version, might misdirect
initial packets to the wrong tenant.  While this can be inefficient, the design
in this document preserves the ability for tenants to deploy new versions
provided they have an out-of-band means of providing a connection ID for the
client to use.</t>

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

<t>QUIC-LB is intended to prevent linkability.  Attacks would therefore attempt to
subvert this purpose.</t>

<t>Note that without a key for the encoding, QUIC-LB makes no attempt to obscure
the server mapping, and therefore does not address these concerns. Without a
key, QUIC-LB merely allows consistent CID encoding for compatibility across a
network infrastructure, which makes QUIC robust to NAT rebinding. Servers that
are encoding their server ID without a key algorithm SHOULD only use it to
generate new CIDs for the Server Initial Packet and SHOULD NOT send CIDs in QUIC
NEW_CONNECTION_ID frames, except that it sends one new Connection ID in the
event of config rotation <xref target="config-rotation"/>. Doing so might falsely suggest to
the client that said CIDs were generated in a secure fashion.</t>

<t>A linkability attack would find some means of determining that two connection
IDs route to the same server. Due to the limitations of measures at QUIC layer,
there is no scheme that strictly prevents linkability for all traffic patterns.</t>

<t>To see why, consider two limits. At one extreme, one client is connected to the
server pool and migrates its address. An observer can easily link the two
addresses, and there is no remedy at the QUIC layer.</t>

<t>At the other extreme, a very large number of clients are connected to each
server, and they all migrate address constantly. At this limit, even an
unencrypted server ID encoding is unlikely to definitively link two addresses.</t>

<t>Therefore, efforts to frustrate any analysis of server ID encoding have
diminishing returns. Nevertheless, this specification seeks to minimize the
probability two addresses can be linked.</t>

<section anchor="attackers-not-between-the-load-balancer-and-server"><name>Attackers not between the load balancer and server</name>

<t>Any attacker might open a connection to the server infrastructure and
aggressively simulate migration to obtain a large sample of IDs that map to the
same server. It could then apply analytical techniques to try to obtain the
server encoding.</t>

<t>An encrypted encoding provides robust protection against this. An unencrypted
one provides none.</t>

<t>Were this analysis to obtain the server encoding, then on-path observers might
apply this analysis to correlating different client IP addresses.</t>

</section>
<section anchor="attackers-between-the-load-balancer-and-server"><name>Attackers between the load balancer and server</name>

<t>Attackers in this privileged position are intrinsically able to map two
connection IDs to the same server. These algorithms ensure that two connection
IDs for the same connection cannot be identified as such as long as the server
chooses the first octet and any plaintext nonce correctly.</t>

</section>
<section anchor="multiple-configs"><name>Multiple Configuration IDs</name>

<t>During the period in which there are multiple deployed configuration IDs (see
<xref target="config-rotation"/>), there is a slight increase in linkability. The server
space is effectively divided into segments with CIDs that have different config
rotation bits. Entities that manage servers SHOULD strive to minimize these
periods by quickly deploying new configurations across the server pool.</t>

</section>
<section anchor="limited-configuration-scope"><name>Limited configuration scope</name>

<t>A simple deployment of QUIC-LB in a cloud provider might use the same global
QUIC-LB configuration across all its load balancers that route to customer
servers. An attacker could then simply become a customer, obtain the
configuration, and then extract server IDs of other customers' connections at
will.</t>

<t>To avoid this, the configuration agent SHOULD issue QUIC-LB configurations to
mutually distrustful servers that have different keys for encryption
algorithms. In many cases, the load balancers can distinguish these
configurations by external IP address.</t>

<t>However, assigning multiple entities to an IP address is complimentary with
concealing DNS requests (e.g., DoH <xref target="RFC8484"/>) and the TLS Server Name
Indicator (SNI) (<xref target="I-D.ietf-tls-esni"/>) to obscure the ultimate destination
of traffic. While the load balancer's fallback algorithm
(<xref target="fallback-algorithm"/>) can use the SNI to make a routing decision on the
first packet, there are three ways to route subsequent packets:</t>

<t><list style="symbols">
  <t>all co-tenants can use the same QUIC-LB configuration, leaking the server
mapping to each other as described above;</t>
  <t>co-tenants can be issued one of up to seven configurations distinguished by
the config rotation bits (<xref target="config-rotation"/>), exposing information about the
target domain to the entire network; or</t>
  <t>tenants can use the 0b111 codepoint in their CIDs (in which case they SHOULD
disable migration in their connections), which neutralizes the value of
QUIC-LB but preserves privacy.</t>
</list></t>

<t>When configuring QUIC-LB, administrators evaluate the privacy tradeoff by
considering the relative value of each of these properties, given the trust
model between tenants, the presence of methods to obscure the domain name, and
value of address migration in the tenant use cases.</t>

<t>As the plaintext algorithm makes no attempt to conceal the server mapping,
these deployments MAY simply use a common configuration.</t>

</section>
<section anchor="stateless-reset-oracle"><name>Stateless Reset Oracle</name>

<t>Section 21.9 of <xref target="RFC9000"/> discusses the Stateless Reset Oracle attack.  For a
server deployment to be vulnerable, an attacking client must be able to cause
two packets with the same Destination CID to arrive at two different servers
that share the same cryptographic context for Stateless Reset tokens. As QUIC-LB
requires deterministic routing of DCIDs over the life of a connection, it is a
sufficient means of avoiding an Oracle without additional measures.</t>

<t>Note also that when a server starts using a new QUIC-LB config rotation
codepoint, new CIDs might not be unique with respect to previous configurations
that occupied that codepoint, and therefore different clients may have observed
the same CID and stateless reset token. A straightforward method of managing
stateless reset keys is to maintain a separate key for each config rotation
codepoint, and replace each key when the configuration for that codepoint
changes. Thus, a server transitions from one config to another, it will be able
to generate correct tokens for connections using either type of CID.</t>

</section>
<section anchor="cid-entropy"><name>Connection ID Entropy</name>

<t>If a server ever reuses a nonce in generating a CID for a given configuration,
it risks exposing sensitive information. Given the same server ID, the CID will
be identical (aside from a possible difference in the first octet).  This can
risk exposure of the QUIC-LB key. If two clients receive the same connection ID,
they also have each other's stateless reset token unless that key has changed in
the interim.</t>

<t>The encrypted mode needs to generate different cipher text for each generated
Connection ID instance to protect the Server ID. To do so, at least four octets
of the CID are reserved for a nonce that, if used only once, will result in
unique cipher text for each Connection ID.</t>

<t>If servers simply increment the nonce by one with each generated connection ID,
then it is safe to use the existing keys until any server's nonce counter
exhausts the allocated space and rolls over. To maximize entropy, servers SHOULD
start with a random nonce value, in which case the configuration is usable until
the nonce value wraps around to zero and then reaches the initial value again.</t>

<t>Whether or not it implements the counter method, the server MUST NOT reuse a
nonce until it switches to a configuration with new keys.</t>

<t>Servers are forbidden from generating linkable plaintext nonces, because
observable correlations between plaintext nonces would provide trivial
linkability between individual connections, rather than just to a common server.</t>

<t>For any algorithm, configuration agents SHOULD implement an out-of-band method
to discover when servers are in danger of exhausting their nonce space, and
SHOULD respond by issuing a new configuration. A server that has exhausted its
nonces MUST either switch to a different configuration, or if none exists, use
the 4-tuple routing config rotation codepoint.</t>

<t>When sizing a nonce that is to be randomly generated, the configuration agent
SHOULD consider that a server generating a N-bit nonce will create a duplicate
about every 2^(N/2) attempts, and therefore compare the expected rate at which
servers will generate CIDs with the lifetime of a configuration.</t>

</section>
<section anchor="distinguishing-attacks"><name>Distinguishing Attacks</name>

<t>The Four Pass Encryption algorithm is structured as a 4-round Feistel network
with non-bijective round function. As such, it does not offer a very high
security level against distinguishing attacks, as explained in <xref target="Patarin2008"></xref>.
Attackers can mount these attacks if they are in possession of O(SQRT(len/2))
pairs of ciphertext and known corresponding plain text, where "len" is the
sum of the lengths of the Server ID and the Nonce.</t>

<t>The authors considered increasing the number of passes from 4 to 12,
which would definitely block these attacks. However, this would require
12 round of AES decryption by load balancers accessing the CID, a cost deemed
prohibitive in the planned deployments.</t>

<t>The attacks described in <xref target="Patarin2008"></xref> rely on known plain text. In a normal
deployment, the plain text is only known by the server that generates the ID
and by the load balancer that decrypts the content of the CID. Attackers
would have to compensate by guesses about the allocation of server identifiers
or the generation of nonces. These attacks are thus mitigated by making nonces
hard to guess, as specified in <xref target="cid-entropy"/>, and by rules related to mixed
deployments that use both clear text CID and encrypted CID, for example when
transitioning from clear text to encryption. Such deployments MUST use different
server ID allocations for the clear text and the encrypted versions.</t>

<t>These attacks cannot be mounted against the Single Pass Encryption algorithm.</t>

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

<t>There are no IANA requirements.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>

<reference anchor="NIST-AES-ECB" target="https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf">
  <front>
    <title>Recommendation for Block Cipher Modes of Operation: Methods and Techniques</title>
    <author initials="M." surname="Dworkin">
      <organization></organization>
    </author>
    <date year="2021"/>
  </front>
<refcontent>NIST Special Publication 800-38A</refcontent></reference>


<reference anchor="RFC9000">
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9000"/>
  <seriesInfo name="DOI" value="10.17487/RFC9000"/>
</reference>

<reference anchor="RFC8999">
  <front>
    <title>Version-Independent Properties of QUIC</title>
    <author fullname="M. Thomson" initials="M." surname="Thomson"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8999"/>
  <seriesInfo name="DOI" value="10.17487/RFC8999"/>
</reference>




    </references>

    <references title='Informative References'>

<reference anchor="Patarin2008" target="https://eprint.iacr.org/2008/036.pdf">
  <front>
    <title>Generic Attacks on Feistel Schemes - Extended Version</title>
    <author initials="J." surname="Patarin" fullname="Jacques Patarin">
      <organization>PRiSM, University of Versailles</organization>
    </author>
    <date year="2008"/>
  </front>
</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"/>
    <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="RFC7696">
  <front>
    <title>Guidelines for Cryptographic Algorithm Agility and Selecting Mandatory-to-Implement Algorithms</title>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <date month="November" year="2015"/>
    <abstract>
      <t>Many IETF protocols use cryptographic algorithms to provide confidentiality, integrity, authentication, or digital signature. Communicating peers must support a common set of cryptographic algorithms for these mechanisms to work properly. This memo provides guidelines to ensure that protocols have the ability to migrate from one mandatory-to-implement algorithm suite to another over time.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="201"/>
  <seriesInfo name="RFC" value="7696"/>
  <seriesInfo name="DOI" value="10.17487/RFC7696"/>
</reference>

<reference anchor="RFC8484">
  <front>
    <title>DNS Queries over HTTPS (DoH)</title>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <author fullname="P. McManus" initials="P." surname="McManus"/>
    <date month="October" year="2018"/>
    <abstract>
      <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS. Each DNS query-response pair is mapped into an HTTP exchange.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8484"/>
  <seriesInfo name="DOI" value="10.17487/RFC8484"/>
</reference>


<reference anchor="I-D.ietf-tls-esni">
   <front>
      <title>TLS Encrypted Client Hello</title>
      <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
         <organization>RTFM, Inc.</organization>
      </author>
      <author fullname="Kazuho Oku" initials="K." surname="Oku">
         <organization>Fastly</organization>
      </author>
      <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
         <organization>Cloudflare</organization>
      </author>
      <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
         <organization>Cloudflare</organization>
      </author>
      <date day="9" month="October" year="2023"/>
      <abstract>
	 <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-17"/>
   
</reference>

<reference anchor="RFC6020">
  <front>
    <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
    <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
    <date month="October" year="2010"/>
    <abstract>
      <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6020"/>
  <seriesInfo name="DOI" value="10.17487/RFC6020"/>
</reference>

<reference anchor="RFC8340">
  <front>
    <title>YANG Tree Diagrams</title>
    <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
    <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
    <date month="March" year="2018"/>
    <abstract>
      <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="215"/>
  <seriesInfo name="RFC" value="8340"/>
  <seriesInfo name="DOI" value="10.17487/RFC8340"/>
</reference>

<reference anchor="RFC9146">
  <front>
    <title>Connection Identifier for DTLS 1.2</title>
    <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
    <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
    <author fullname="T. Fossati" initials="T." surname="Fossati"/>
    <author fullname="A. Kraus" initials="A." surname="Kraus"/>
    <date month="March" year="2022"/>
    <abstract>
      <t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.</t>
      <t>A CID is an identifier carried in the record layer header that gives the recipient additional information for selecting the appropriate security association. In "classical" DTLS, selecting a security association of an incoming DTLS record is accomplished with the help of the 5-tuple. If the source IP address and/or source port changes during the lifetime of an ongoing DTLS session, then the receiver will be unable to locate the correct security context.</t>
      <t>The new ciphertext record format with the CID also provides content type encryption and record layer padding.</t>
      <t>This document updates RFC 6347.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9146"/>
  <seriesInfo name="DOI" value="10.17487/RFC9146"/>
</reference>

<reference anchor="RFC4347">
  <front>
    <title>Datagram Transport Layer Security</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
    <date month="April" year="2006"/>
    <abstract>
      <t>This document specifies Version 1.0 of the Datagram Transport Layer Security (DTLS) protocol. The DTLS protocol provides communications privacy for datagram protocols. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4347"/>
  <seriesInfo name="DOI" value="10.17487/RFC4347"/>
</reference>

<reference anchor="RFC6347">
  <front>
    <title>Datagram Transport Layer Security Version 1.2</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
    <date month="January" year="2012"/>
    <abstract>
      <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol. The DTLS protocol provides communications privacy for datagram protocols. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees. Datagram semantics of the underlying transport are preserved by the DTLS protocol. This document updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6347"/>
  <seriesInfo name="DOI" value="10.17487/RFC6347"/>
</reference>

<reference anchor="RFC7983">
  <front>
    <title>Multiplexing Scheme Updates for Secure Real-time Transport Protocol (SRTP) Extension for Datagram Transport Layer Security (DTLS)</title>
    <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
    <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
    <date month="September" year="2016"/>
    <abstract>
      <t>This document defines how Datagram Transport Layer Security (DTLS), Real-time Transport Protocol (RTP), RTP Control Protocol (RTCP), Session Traversal Utilities for NAT (STUN), Traversal Using Relays around NAT (TURN), and ZRTP packets are multiplexed on a single receiving socket. It overrides the guidance from RFC 5764 ("SRTP Extension for DTLS"), which suffered from four issues described and fixed in this document.</t>
      <t>This document updates RFC 5764.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7983"/>
  <seriesInfo name="DOI" value="10.17487/RFC7983"/>
</reference>

<reference anchor="RFC9147">
  <front>
    <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
    <date month="April" year="2022"/>
    <abstract>
      <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
      <t>This document obsoletes RFC 6347.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9147"/>
  <seriesInfo name="DOI" value="10.17487/RFC9147"/>
</reference>




    </references>


<?line 1052?>

<section anchor="yang-model"><name>QUIC-LB YANG Model</name>

<t>These YANG models conform to <xref target="RFC6020"/> and express a complete QUIC-LB
configuration. There is one model for the server and one for the middlebox
(i.e the load balancer and/or Retry Service).</t>

<figure><artwork><![CDATA[
module ietf-quic-lb-server {
  yang-version "1.1";
  namespace "urn:ietf:params:xml:ns:yang:ietf-quic-lb";
  prefix "quic-lb";

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types.";
  }

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types.";
  }

  organization
    "IETF QUIC Working Group";

  contact
    "WG Web:   <http://datatracker.ietf.org/wg/quic>
     WG List:  <quic@ietf.org>

     Authors: Martin Duke (martin.h.duke at gmail dot com)
              Nick Banks (nibanks at microsoft dot com)
              Christian Huitema (huitema at huitema.net)";

  description
    "This module enables the explicit cooperation of QUIC servers
     with trusted intermediaries without breaking important
     protocol features.

     Copyright (c) 2022 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";

  revision "2023-07-14" {
    description
      "Updated to design in version 17 of the draft";
    reference
      "RFC XXXX, QUIC-LB: Generating Routable QUIC Connection IDs";
  }

  container quic-lb {
    presence "The container for QUIC-LB configuration.";

    description
      "QUIC-LB container.";

    typedef quic-lb-key {
      type yang:hex-string {
        length 47;
      }
      description
        "This is a 16-byte key, represented with 47 bytes";
    }

    leaf config-id {
      type uint8 {
        range "0..6";
      }
      mandatory true;
      description
        "Identifier for this CID configuration.";
    }

    leaf first-octet-encodes-cid-length {
      type boolean;
      default false;
      description
        "If true, the six least significant bits of the first
         CID octet encode the CID length minus one.";
    }

    leaf server-id-length {
      type uint8 {
        range "1..15";
      }
      must '. <= (19 - ../nonce-length)' {
        error-message
          "Server ID and nonce lengths must sum
           to no more than 19.";
      }
      mandatory true;
      description
        "Length (in octets) of a server ID. Further range-limited
         by nonce-length.";
    }

    leaf nonce-length {
      type uint8 {
        range "4..18";
      }
      mandatory true;
      description
        "Length, in octets, of the nonce. Short nonces mean there
         will be frequent configuration updates.";
    }

    leaf cid-key {
      type quic-lb-key;
      description
        "Key for encrypting the connection ID.";
    }

    leaf server-id {
      type yang:hex-string;
      must "string-length(.) = 3 * ../../server-id-length - 1";
      mandatory true;
      description
        "An allocated server ID";
    }
  }
}
]]></artwork></figure>

<figure><artwork><![CDATA[
module ietf-quic-lb-middlebox {
  yang-version "1.1";
  namespace "urn:ietf:params:xml:ns:yang:ietf-quic-lb";
  prefix "quic-lb";

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types.";
  }

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types.";
  }

  organization
    "IETF QUIC Working Group";

  contact
    "WG Web:   <http://datatracker.ietf.org/wg/quic>
     WG List:  <quic@ietf.org>

     Authors: Martin Duke (martin.h.duke at gmail dot com)
              Nick Banks (nibanks at microsoft dot com)
              Christian Huitema (huitema at huitema.net)";

  description
    "This module enables the explicit cooperation of QUIC servers
     with trusted intermediaries without breaking important
     protocol features.

     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";

  revision "2021-02-11" {
    description
      "Updated to design in version 13 of the draft";
    reference
      "RFC XXXX, QUIC-LB: Generating Routable QUIC Connection IDs";
  }

  container quic-lb {
    presence "The container for QUIC-LB configuration.";

    description
      "QUIC-LB container.";

    typedef quic-lb-key {
      type yang:hex-string {
        length 47;
      }
      description
        "This is a 16-byte key, represented with 47 bytes";
    }

    list cid-configs {
      key "config-rotation-bits";
      description
        "List up to three load balancer configurations";

      leaf config-rotation-bits {
        type uint8 {
          range "0..2";
        }
        mandatory true;
        description
          "Identifier for this CID configuration.";
      }

      leaf server-id-length {
        type uint8 {
          range "1..15";
        }
        must '. <= (19 - ../nonce-length)' {
          error-message
            "Server ID and nonce lengths must sum to
             no more than 19.";
        }
        mandatory true;
        description
          "Length (in octets) of a server ID. Further range-limited
           by nonce-length.";
      }

      leaf cid-key {
        type quic-lb-key;
        description
          "Key for encrypting the connection ID.";
      }

      leaf nonce-length {
        type uint8 {
          range "4..18";
        }
        mandatory true;
        description
          "Length, in octets, of the nonce. Short nonces mean there
           will be frequent configuration updates.";
      }

      list server-id-mappings {
        key "server-id";
        description "Statically allocated Server IDs";

        leaf server-id {
          type yang:hex-string;
          must "string-length(.) = 3 * ../../server-id-length - 1";
          mandatory true;
          description
            "An allocated server ID";

        }

        leaf server-address {
          type inet:ip-address;
          mandatory true;
          description
            "Destination address corresponding to the server ID";
        }
      }
    }
  }
}
]]></artwork></figure>

<section anchor="tree-diagram"><name>Tree Diagram</name>

<t>This summary of the YANG models uses the notation in <xref target="RFC8340"/>.</t>

<figure><artwork><![CDATA[
module: ietf-quic-lb-server
  +--rw quic-lb!
     +--rw config-id                         uint8
     +--rw first-octet-encodes-cid-length?   boolean
     +--rw server-id-length                  uint8
     +--rw nonce-length                      uint8
     +--rw cid-key?                          quic-lb-key
     +--rw server-id                         yang:hex-string
]]></artwork></figure>

<figure><artwork><![CDATA[
module: ietf-quic-lb-middlebox
  +--rw quic-lb!
     +--rw cid-configs* [config-rotation-bits]
     |  +--rw config-rotation-bits    uint8
     |  +--rw server-id-length        uint8
     |  +--rw cid-key?                quic-lb-key
     |  +--rw nonce-length            uint8
     |  +--rw server-id-mappings* [server-id]
     |     +--rw server-id         yang:hex-string
     |     +--rw server-address    inet:ip-address
]]></artwork></figure>

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

<t>This section uses the following abbreviations:</t>

<figure><artwork><![CDATA[
cid      Connection ID
cr_bits  Config Rotation Bits
LB       Load Balancer
sid      Server ID
]]></artwork></figure>

<t>In all cases, the server is configured to encode the CID length.</t>

<section anchor="unencrypted-cids"><name>Unencrypted CIDs</name>

<figure><sourcecode type="pseudocode"><![CDATA[
cr_bits sid nonce cid
0 c4605e 4504cc4f 07c4605e4504cc4f
1 350d28b420 3487d970b 20a350d28b4203487d970b
]]></sourcecode></figure>

</section>
<section anchor="encrypted-cids"><name>Encrypted CIDs</name>

<t>The key for all of these examples is 8f95f09245765f80256934e50c66207f. The
test vectors include an example that uses the 16-octet single-pass special
case, as well as an instance where the server ID length exceeds the nonce
length, requiring a fourth decryption pass.</t>

<figure><sourcecode type="pseudocode"><![CDATA[
cr_bits sid nonce cid
0 ed793a ee080dbf 0720b1d07b359d3c
1 ed793a51d49b8f5fab65 ee080dbf48
                         2fcc381bc74cb4fbad2823a3d1f8fed2
2 ed793a51d49b8f5f ee080dbf48c0d1e5
                         504dd2d05a7b0de9b2b9907afb5ecf8cc3
3 ed793a51d49b8f5fab ee080dbf48c0d1e55d
                         125779c9cc86beb3a3a4a3ca96fce4bfe0cdbc
]]></sourcecode></figure>

</section>
</section>
<section anchor="interoperability-with-dtls-over-udp"><name>Interoperability with DTLS over UDP</name>

<t>Some environments may contain DTLS traffic as well as QUIC operating over UDP,
which may be hard to distinguish.</t>

<t>In most cases, the packet parsing rules above will cause a QUIC-LB load
balancer to route DTLS traffic in an appropriate way. DTLS 1.3 implementations
that use the connection_id extension <xref target="RFC9146"/> might use the techniques in
this document to generate connection IDs and achieve robust routability for DTLS
associations if they meet a few additional requirements. This non-normative
appendix describes this interaction.</t>

<section anchor="dtls-10-and-12"><name>DTLS 1.0 and 1.2</name>

<t>DTLS 1.0 <xref target="RFC4347"/> and 1.2 <xref target="RFC6347"/> use packet formats that a QUIC-LB
router will interpret as short header packets with CIDs that request 4-tuple
routing.  As such, they will route such packets consistently as long as the
4-tuple does not change. Note that DTLS 1.0 has been deprecated by the IETF.</t>

<t>The first octet of every DTLS 1.0 or 1.2 datagram contains the content type.
A QUIC-LB load balancer will interpret any content type less than 128 as a short
header packet, meaning that the subsequent octets should contain a connection
ID.</t>

<t>Existing TLS content types comfortably fit in the range below 128. Assignment of
codepoints greater than 64 would require coordination in accordance with
<xref target="RFC7983"/>, and anyway would likely create problems demultiplexing DTLS and
version 1 of QUIC. Therefore, this document believes it is extremely unlikely
that TLS content types of 128 or greater will be assigned. Nevertheless, such
an assignment would cause a QUIC-LB load balancer to interpret the packet as a
QUIC long header with an essentially random connection ID, which is likely to be
routed irregularly.</t>

<t>The second octet of every DTLS 1.0 or 1.2 datagram is the bitwise complement
of the DTLS Major version (i.e. version 1.x = 0xfe). A QUIC-LB load balancer
will interpret this as a connection ID that requires 4-tuple based load
balancing, meaning that the routing will be consistent as long as the 4-tuple
remains the same.</t>

<t><xref target="RFC9146"/> defines an extension to add connection IDs to DTLS 1.2.
Unfortunately, a QUIC-LB load balancer will not correctly parse the connection
ID and will continue 4-tuple routing. An modified QUIC-LB load balancer that
correctly identifies DTLS and parses a DTLS 1.2 datagram for the connection ID
is outside the scope of this document.</t>

</section>
<section anchor="dtls-13"><name>DTLS 1.3</name>

<t>DTLS 1.3 <xref target="RFC9147"/> changes the structure of datagram headers in relevant
ways.</t>

<t>Handshake packets continue to have a TLS content type in the first octet and
0xfe in the second octet, so they will be 4-tuple routed, which should not
present problems for likely NAT rebinding or address change events.</t>

<t>Non-handshake packets always have zero in their most significant bit and will
therefore always be treated as QUIC short headers. If the connection ID is
present, it follows in the succeeding octets. Therefore, a DTLS 1.3 association
where the server utilizes Connection IDs and the encodings in this document
will be routed correctly in the presence of client address and port changes.</t>

<t>However, if the client does not include the connection_id extension in its
ClientHello, the server is unable to use connection IDs. In this case, non-
handshake packets will appear to contain random connection IDs and be routed
randomly. Thus, unmodified QUIC-LB load balancers will not work with DTLS 1.3
if the client does not advertise support for connection IDs, or the server does
not request the use of a compliant connection ID.</t>

<t>A QUIC-LB load balancer might be modified to identify DTLS 1.3 packets and
correctly parse the fields to identify when there is no connection ID and
revert to 4-tuple routing, removing the server requirement above. However, such
a modification is outside the scope of this document, and classifying some
packets as DTLS might be incompatible with future versions of QUIC.</t>

</section>
<section anchor="future-versions-of-dtls"><name>Future Versions of DTLS</name>

<t>As DTLS does not have an IETF consensus document that defines what parts of
DTLS will be invariant in future versions, it is difficult to speculate about
the applicability of this section to future versions of DTLS.</t>

</section>
</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>Manasi Deval, Erik Fuller, Toma Gavrichenkov, Jana Iyengar, Subodh Iyengar,
Stefan Kolbl, Ladislav Lhotka, Jan Lindblad, Ling Tao Nju, Ilari Liusvaara,
Kazuho Oku, Udip Pant, Ian Swett, Andy Sykes, Martin Thomson, Dmitri Tikhonov,
Victor Vasiliev, and William Zeng Ke all provided useful input to this document.</t>

</section>
<section anchor="change-log"><name>Change Log</name>

<ul empty="true"><li>
  <t><strong>RFC Editor's Note:</strong>  Please remove this section prior to
publication of a final version of this document.</t>
</li></ul>

<section anchor="since-draft-ietf-quic-load-balancers-18"><name>since draft-ietf-quic-load-balancers-18</name>

<t><list style="symbols">
  <t>Rearranged the output of the expand function to reduce CPU load of decrypt</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-17"><name>since draft-ietf-quic-load-balancers-17</name>

<t><list style="symbols">
  <t>fixed regressions in draft-17 publication</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-16"><name>since draft-ietf-quic-load-balancers-16</name>

<t><list style="symbols">
  <t>added a config ID bit (now there are 3).</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-15"><name>since draft-ietf-quic-load-balancers-15</name>

<t><list style="symbols">
  <t>aasvg fixes.</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-14"><name>since draft-ietf-quic-load-balancers-14</name>

<t><list style="symbols">
  <t>Revised process demultiplexing text</t>
  <t>Restored lost text in Security Considerations</t>
  <t>Editorial comments from Martin Thomson.</t>
  <t>Tweaked 4-pass algorithm to avoid accidental plaintext similarities</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-13"><name>since draft-ietf-quic-load-balancers-13</name>

<t><list style="symbols">
  <t>Incorporated Connection ID length in argument of truncate function</t>
  <t>Added requirements for codepoint 0b11.</t>
  <t>Describe Distinguishing Attack in Security Considerations.</t>
  <t>Added non-normative language about server process demultiplexers</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-12"><name>since draft-ietf-quic-load-balancers-12</name>

<t><list style="symbols">
  <t>Separated Retry Service design into a separate draft</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-11"><name>since draft-ietf-quic-load-balancers-11</name>

<t><list style="symbols">
  <t>Fixed mistakes in test vectors</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-10"><name>since draft-ietf-quic-load-balancers-10</name>

<t><list style="symbols">
  <t>Refactored algorithm descriptions; made the 4-pass algorithm easier to
implement</t>
  <t>Revised test vectors</t>
  <t>Split YANG model into a server and middlebox version</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-09"><name>since draft-ietf-quic-load-balancers-09</name>
<t><list style="symbols">
  <t>Renamed "Stream Cipher" and "Block Cipher" to "Encrypted Short" and
"Encrypted Long"</t>
  <t>Added section on per-connection state</t>
  <t>Changed "Encrypted Short" to a 4-pass algorithm.</t>
  <t>Recommended a random initial nonce when incrementing.</t>
  <t>Clarified what SNI LBs should do with unknown QUIC versions.</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-08"><name>since draft-ietf-quic-load-balancers-08</name>
<t><list style="symbols">
  <t>Eliminate Dynamic SID allocation</t>
  <t>Eliminated server use bytes</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-07"><name>since draft-ietf-quic-load-balancers-07</name>
<t><list style="symbols">
  <t>Shortened SSCID nonce minimum length to 4 bytes</t>
  <t>Removed RSCID from Retry token body</t>
  <t>Simplified CID formats</t>
  <t>Shrunk size of SID table</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-06"><name>since draft-ietf-quic-load-balancers-06</name>
<t><list style="symbols">
  <t>Added interoperability with DTLS</t>
  <t>Changed "non-compliant" to "unroutable"</t>
  <t>Changed "arbitrary" algorithm to "fallback"</t>
  <t>Revised security considerations for mistrustful tenants</t>
  <t>Added retry service considerations for non-Initial packets</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-05"><name>since draft-ietf-quic-load-balancers-05</name>
<t><list style="symbols">
  <t>Added low-config CID for further discussion</t>
  <t>Complete revision of shared-state Retry Token</t>
  <t>Added YANG model</t>
  <t>Updated configuration limits to ensure CID entropy</t>
  <t>Switched to notation from quic-transport</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-04"><name>since draft-ietf-quic-load-balancers-04</name>
<t><list style="symbols">
  <t>Rearranged the shared-state retry token to simplify token processing</t>
  <t>More compact timestamp in shared-state retry token</t>
  <t>Revised server requirements for shared-state retries</t>
  <t>Eliminated zero padding from the test vectors</t>
  <t>Added server use bytes to the test vectors</t>
  <t>Additional compliant DCID criteria</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-03"><name>since-draft-ietf-quic-load-balancers-03</name>
<t><list style="symbols">
  <t>Improved Config Rotation text</t>
  <t>Added stream cipher test vectors</t>
  <t>Deleted the Obfuscated CID algorithm</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-02"><name>since-draft-ietf-quic-load-balancers-02</name>
<t><list style="symbols">
  <t>Replaced stream cipher algorithm with three-pass version</t>
  <t>Updated Retry format to encode info for required TPs</t>
  <t>Added discussion of version invariance</t>
  <t>Cleaned up text about config rotation</t>
  <t>Added Reset Oracle and limited configuration considerations</t>
  <t>Allow dropped long-header packets for known QUIC versions</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-01"><name>since-draft-ietf-quic-load-balancers-01</name>
<t><list style="symbols">
  <t>Test vectors for load balancer decoding</t>
  <t>Deleted remnants of in-band protocol</t>
  <t>Light edit of Retry Services section</t>
  <t>Discussed load balancer chains</t>
</list></t>

</section>
<section anchor="since-draft-ietf-quic-load-balancers-00"><name>since-draft-ietf-quic-load-balancers-00</name>
<t><list style="symbols">
  <t>Removed in-band protocol from the document</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-06"><name>Since draft-duke-quic-load-balancers-06</name>
<t><list style="symbols">
  <t>Switch to IETF WG draft.</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-05"><name>Since draft-duke-quic-load-balancers-05</name>
<t><list style="symbols">
  <t>Editorial changes</t>
  <t>Made load balancer behavior independent of QUIC version</t>
  <t>Got rid of token in stream cipher encoding, because server might not have it</t>
  <t>Defined "non-compliant DCID" and specified rules for handling them.</t>
  <t>Added psuedocode for config schema</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-04"><name>Since draft-duke-quic-load-balancers-04</name>
<t><list style="symbols">
  <t>Added standard for retry services</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-03"><name>Since draft-duke-quic-load-balancers-03</name>
<t><list style="symbols">
  <t>Renamed Plaintext CID algorithm as Obfuscated CID</t>
  <t>Added new Plaintext CID algorithm</t>
  <t>Updated to allow 20B CIDs</t>
  <t>Added self-encoding of CID length</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-02"><name>Since draft-duke-quic-load-balancers-02</name>
<t><list style="symbols">
  <t>Added Config Rotation</t>
  <t>Added failover mode</t>
  <t>Tweaks to existing CID algorithms</t>
  <t>Added Block Cipher CID algorithm</t>
  <t>Reformatted QUIC-LB packets</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-01"><name>Since draft-duke-quic-load-balancers-01</name>
<t><list style="symbols">
  <t>Complete rewrite</t>
  <t>Supports multiple security levels</t>
  <t>Lightweight messages</t>
</list></t>

</section>
<section anchor="since-draft-duke-quic-load-balancers-00"><name>Since draft-duke-quic-load-balancers-00</name>
<t><list style="symbols">
  <t>Converted to markdown</t>
  <t>Added variable length connection IDs</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+192XbbWHbo+/kKXPnBUhdJkxQ1VncSleTqcuIpll2dYSVe
IHEoIiYBNgBqaJfzAff9/uD9krvHMwCky0pl3ZWH1uouSyRwhn322fPQ7/dN
kzdLe57s/eOHF5f9lz+cJ3+0ha3SJi9uknflpkmnS5vgl8llWRR21uRlkby4
qvdMOp1W9vY8kTdNVs6KdAVjZVU6b/q5beb9P2/yWX9Zpll/mi7TYmarur9M
G1s3JoN/zpPPVxfvn38xM/jjpqwezpO6yUy+rs6TptrUzXg4PBuOTVrZ9Dx5
X6VFvS6rxtyV1aebqtyseXZj6iYtso/psixgzAdbm3V+nvxrU856SQ0vVHZe
w28PK/4FVrpK12vY4r8Zk26aRVmdmyTpw/+TJC/q8+TVILnafLL0AW/qVVoB
TPynZXUDsCrLmyX/bVdpvjxPVvTYYDHI4MG/u8EPB7NyZeLhXw+SH9LiUx2M
/zqffQo+pOFf5bOqrMt5E85Q5FN86u9W+uWW8S8HyU+bvIE3ghkuF1VeN3la
RN/RRG+r/BZOIHkza8r1pk5eFLNBOOeCX/g7+XdQ2MaYoqxWgCe3FmH3+sX1
+/7F8+v+88sfzulVRax3Fta3sgWcN6LOvKySH5YlbPYyXy9slbwqM1sn5Tx5
sya8KwvYuIUzyeoEDjV5b2eLIv/zxgLK4bj+vPCn788LkSIv6HPGrfFwPKI/
4dRnZdHYovGv7eGKk+u1neXpMnm7mS7zGa/wdDjsH55e8GxNWt3YBraxaJp1
ff7sWXG7XG+m9aAAWA5uyttn+At+8uylvUlnD8+u39JHNY+89gPzuOlgnc33
jMmLeQi/JHmbwlx5ARh/qqv00+vsdg2PNIM8nVUDOLln+PSz4eExDupfYsjT
Rc5nyUXTpLNPAOIi+dHCyuwyuZ4t7Aqg3k+e3wNYMpslP8PVhEW6QWIw8w+B
+u8HutToO8axv09neFJbn2BMe5dfv+olHwrYN0zYPODJ49yAZ0tbuxf0BIen
xvT7/SSd1k2VzgDtiBalWVbZuk5W+Q3jTJIul+VdncyWORxznTRlMlukxY1N
moXNq+TFW/fO3SKHOwuIXTTwf6RzM0/ZgJA0dpC8LwFpss2MXofJ86UsFW5P
Oa1tBavHOZZ58Slp7krjx7dAYHQViL/8cJ1sapsU9i6cDMgorMYWOMlDgtdk
UyCyWHObp0mWz+e2gnFkOD8BrG+R18m6hN+TNFlXJRDpFV0tAFKW4+CA1HvL
9MFW/cmeQQqcOAoM06VNAuQTbvwaUMPCSnFC3GoAJ1w8Uttk0m8266XlWQ0h
9lwvC8x9m2e0DKLBaZXlfwF0Wlmg1Qiw2s42lV0+JLaYlRlCGyeGf/0NgGFy
goHA6mndBlJd8pppr0AmlgitYp7fwNBZgrszurtkBkcU7+0ubxaCKfC0gyIM
UVUwyfJhkFzUSd7Q4AxTYCjVZtbQ8NFaEl5zDx9Pl7CuAABuz/HqTW2X877b
PuPj0hY3sCpAoTQHHClXNlkA7O6A08EIc9xSPWDUX+VZBghrngBZbqoSsBJH
louge/z8+X+9+/HybDgcfvkCqLaB60AwQhSHpcV7wFnxusCZZOsy5/ti0rou
gWS1AefRUCD3LEQKuml0dHD/g2kMEdz7RlB1blMEJrDHTzY83RqOagp8XhHA
3uJEAMLXF+/hBk7zAmE24L361eoGAe75TYFLxpfjTcI1ny2StdW7h5vmDRjZ
3yC5Jnzr37DI0z5rWCjIHTA4oF2J3AM5RWHhMbxpgGL9cg5yTZEZf3XxTZip
3qwJSrjugdIsplBKD/ZhjPheHuCbhCcWVzzfLPWuJOFdgd/aFxqgF698kCQv
BEFxwE2V3lg3dQ+fFxgYwN8G3oNNTQFhqod1U8JFWS8eergawW6EnFKVFojk
+JlEDQyddpsW49X9VAC+EZ1DFL8p6So4Ih2QHQALgQ6+BCAYoCt2neLptM63
ZIxBkrpOmwUsdwGSC1FtHBsps9Lt1K3FrMpbRBaA682C3gepYZnBEb0HWcQm
uPgEjhpZYTK1zZ1l6gzjgihbAdMU5qKA2XZAiBErANcNLjpYBxzKh2WTw1NA
D3sw/CzdwRQQRDkRVz4bxdgeQ3CFN2YKUHR4CwD29DPJ5/RXhCQg9AIGFGUD
dOYWwDqbIbD19Pz0n+wDYM9P5R1cxYrIXF5vGY3OdJHSV3rXYSc4aFo94Li6
uC71wVcZzesWnoc8YQDkTrhvDU9b5r4PSQ10EnZMjNodUbw4PAAGRW/L0gl6
yv5hdcCdSAxDHnW/xrNHFCG9p5zLODtJRI/Y5B0ILwTbmPE4BiMn8mDwvLfC
4y5FzM9v8kIot5MFsoRW6XHh9fM/fbx88/r188v3L968/og8qQLiSzgMZ7WD
P+OIJCaBmgVkfVUTEQu5kmKPqEYwrWkv9QZAUzC3kmPAq7myDVAVpPTWv1wL
AuBuymL5YLK8nsHlqwiwQGtUjKoVl26ZivsRe7B6iw/hgJsivtFmtQHynpIU
VOcwJuz/AseCmUG/2+BNDRh6EjD0rjYbsXMnAjyArMxSVczBY5gIJ89JBE3c
RVWRhUmqEZ5O0omdw/EgOULQTAkL4daFJAT28ieUUlvbgXOcVfmU97PC6Wrb
iMBBwpCcuYMg3kNkuWbr8QIZWgLGAez4mjj5BY6qgXmYssE3dXgqZuudwx0r
d8EbUTao25EOTxgMb65sloNSAKuHPcE9wZlyIMmAFmsSLpEAI+UrYLdwkUD+
gAX2kXGggAhI7s6QkdcvEzYNVzWCAoDwyRNQHqtVXpTL8uaBSDwBGkg+6JZ7
rz5cv9/r8b/J6zf0+7vngBzvnl/h79c/Xbx86X7RJ65/evPhJXxv5Df/5uWb
V6+ev77il19d/PMeQ2LvzVu8pxcv91jICQ8UdwtHNLWGIAToTsS8didNlx8E
u2Q8Gp2BkPe38Dv++uUL7O9Fa7ienBXvj2gSnLVNKxbkCB3dPIwqeDNZBYHb
jru8vHh7DXzqJdB/FKVrkkQIKcKx6ZTKhteetNY+S6vqAYk5ymZEiZB6b93R
1k3sMa/eY+gxVu2hDs8qF4mJThJEpsA2oOBWAq0gSQJx8C6vcYUZ01LY2gXo
RSHm7hHTL0IcfSAZi6+vH5X+dlwUyQ5OQsSkxT+BtwN658hlHmDhd0BwbaQh
opAD76AoLzcFvoXPPly9RQqEXBTFXlxrfLVBjEPIgBrGYGiQGPLC8HICrlvm
1mKU200ZSFkk+alBw4lBYC+R57OkSCSeCSDA3N00myhUopv2utRviC0jR9+m
coL+ThS7Ku9zVJOBC/Ci2dzYPUjBW+s0YFhkg9gKyAaUhBhDljYpcMByFfKw
DcKPhytRHmAgIw8tZ+WyxxePhHtC2VTfownhjICHNoxsbY4Ku/0RhkTTJ8Ae
sDViJHt87co5yJB4NdhGmus8e5fwCFMmAFnKetwFvHAHsqWolnJzp3hl1jlJ
5rwbOi15C76bw1nTZbqW2UeDQ6SCnz87RRBnSn7MK5B3LlFihsGa5POTOX7S
p7++MFWM9oCny5SWDCJiKgomjGkYs2ji3YZGlnnoZl6yxowmkkQsYsl6UxGL
PQfqgwIDWgZLuHP7jFUgQ/EeDwgn8ZlyLbrHvjBb4sdMUeirA9jp9QYEij9v
cEm1KpdEtuLFBlREbIL+MV64CLV7wWYGe3Rml7zAd3oIn5/wkvu6ZAEnvwla
hgVJJxcqVTy0BAfiO6LuIf3J8DrPc1if3M2YofEV6uq5G28QsgUKV6gOzlhV
AZABEi3LB/wDZBDSNZQ0gOyA1w40UTu4GfSIch2Q5AG4K0pJMD2C0ZGBjJRc
ZfgNsW5F2xSNUCBFE3avbZWXGbOYlpIDZ7HEPwG1y2VGd7s766y097mzDxih
VkDGEc4KdgYymzTadKdEHrh8EMCRPO60DScMs60rEpsAhuUK16bGAmMuo5Vd
3BDuiBSQ2SVaNLs7oMFai5paOGFrMlKCUVAMYKlyY+sVJFhAr7IHUT5Je7tE
MDriYFgVdpvwlkVgyLA4FJCTLXtIvCCTqH4CWIP8FSerLEnhSH1xdy2k3ADO
LpHVNWTZgUdBqXX7RtkzqdHww/R/GZoPZOmGdkGEF42ry6yFAYT0xHN0UaQq
zJZAQ7KETZ6CbRYV+WvRKlSs84roFkWbgbd9XqDhlYH92PyWuRO+j+TIMZst
vFltSjI/wG2nwiZMUS0J8WF2EYmkSVhPg6yi9XB39f67vXf8ylu4iFXyvtwD
8mTheWAVNL8qj2ovUn1KDDAi99ENQ7q0AswF5Cxu+ojwGdEEuCsig3trYYwn
IhIRlV2QCJDfpjPQeVZrdY8AHaqBXn7+vNosm3y9tH0eof7y5WAQkF/d4Y9p
vkR90lPhuXzyBRFdbfQk9NahuVj2pWRwld8syJoCu5vx12gcWTeK7Q5dEUdR
bwH8Izs2oQYy9mS2qdhQH8lFKGsGcgW8araLZagUypzBfE6KlPvp8DgvcjRF
mhYue2Ep5qN8dqgpwtaG09FoROQuvS3R8mwL1f+NCFmtYYHy7kRgkSHXxFYB
th/Vwtqoq9YTJACHXg2VIdiGI9sTXDN7gFHIxj6CtAjg/ehcPHvJllGFAKXJ
bbrM25cAxGQ9JCJ+W0xYgHJ1xyJDkPwKFA1DkW44W3wcHfEsZZoifarLpSUL
CJuytljQe4Yt1YykNTro4BBQ9QWkfChZ4mU1YwHnVi+ApgYGurS1K1A8jZhW
usIC2dvgzm4qpQ5uSHH3rDfLts3OoI2KrDZKxNG42xqbbN7VLZrO0th4z1ow
e9NYskJ/VeBSC0bBG4zcItuwvV7Nw+IdKDarKWyRvEqESSqtMPg9h6Dz6RG/
mT40MC0TH5XMBOOIjxTAndHJSsOmBidkWyPoCcuc7MBArwDxMiD6NBgbumKM
kRGnbKUE7m3TujEirZ6GBuMTWRE8Z9Gds35gThMsj8VQ5ogJyjS8KBMuapD8
uKlQ7kJ67GwvYiosy6WuiEi6szoKdsWUI/BF1USP5w9dq+lTkC7vyQMrhL6N
IcQU6wUi9gLkFD4cINovefBrlNivvMRuzMtyBuKpc3oFrod8pi4wEKtuc0Qb
VKSRQi6ZAtJt0D1PHwIujUKsZ9D0HO6JpWFxNWb2nul8534MjLtXqC0vHup8
RjI0r6Jca2SM8qhoJWRFVHZiYFoCFw6Afp3A6Lcsy0+bNa9VbPXxidyKnazQ
s0HW70wP3hppE9Iu7vS5SBUnEksOjfnGM+g1BqjM4JZXypt0d3hN8Q0g5Et7
m5L013I0kaO03swWvbZ8CmQnAXlZZtUDyKu2qcDBl50qK/HAHzF5lXveUiOb
joYKCGNE76SDtPdr8h0R2jLE5L15ieSqY7XtESBBbllukEaZ1qyDQILAB1Wa
wq0JLFMiX3LLZouyZPYFo9yKtAQXLyUpmBwuQGeYLBMlZZ8DXMhFvmbqAIeA
Js82863rjfgb8UyDi8u360cyGRjzn//5n4YV/Tes5Juko63uHx708GOAH1xK
5N3vmKr9gKvdP4Jvv9BAn8+T0EbQZ7sEh5X8YS+chqffi9RePjZxDQXwJ6mz
Plc1yq3rPHkh1jnHVCI5lk/Y2RgZG/Cqmu07Od9FcpJ9uGuoDMJkcAYHPXxR
CTsaop29cJA8F/dUF6FiRPTbw+8C0JDp5SXekR/ojuAjb+HUc7R20eX+/CSI
i4Ovv5AtVATEzv3KSkLEQAbMgOBlm65DFk2Xyh4TgC1Q/DTrdUJMWr4WiW3x
4kvgwTOVxgG2nMx87IFLiaV/vcYwG5DIe8/mY61uCvCOt2l8vAx6/9D7Lozd
DYRUFWR8WO90vqnFySVHEzs4nD9MFuydJ2yYYUKYr4HQAc7sUOe8/9AFmPTU
CulW+iOZGB/EO7ZdxBenJ9lnglvcf3HVT4n/BYAgoYltKurpRUmozFkw2R8d
dC0YvWR/fKAQQAoJeCnQwcCpxt488MKBCgSnHLjvjPlxU2Qpm43QP6381eFc
2/Pv/bhC6930A/Oyhb5WHwvW6Ng0XuS86JhcyPqA4rVxvJrtNwJ4ddoj+Oq8
2Ygaeccf6kQkDTklz7NwNEmqPtsBJ4chOCWjxtWAcARcPy0s0GmMGSIxMBa+
yVfieInBKdT+12XyaB8RMeLe7/2KVPuSdVfUvMUAa0Q7blscVTn+ULhbGgfq
AqHZuO++GOPNf3y8ZLZzZ3y55YwRvnSAqZgFRBJEH6k7zJxU2LLKSH4W4VUs
56gj7zC1ARhVJOAoGTadEyBZHw1c763FrcmiQSYqb6Rh3CHcCryejCu13TIm
jsTogQQWwQtMzTma7tETkAbWZKaGNFe0JbqvaNajYaaMU+rr7ojTqEOwxADc
W71p7g38YM8fGuPEnuhRpM8iMuYow5ETg6y7lb0BWZodX3O4BDTrw1MYyo8E
3Pd3qr10ldv9bdhFojdDpkLHCCmkJfEK0s9bXlf0a9hzfw6CCLiDSK0mN0Ok
rpH5x7glOGMOLIFCiu7Sh9qBaCD7oHH96U3ZNAVUieJ71MfF1KcKTKf6vmCy
zVrMI8KIrfv2iIX+G/Yv8d1NKxuss00JyWgACwOin8WBdvFxs/6rAT2FaV8u
oieIQ0XSQUiQX+7RmkTS1bZgIIMWJ7iEIrMGkYSEZByll7qBAX6sCcOBib2I
DRrGuVDEh4CjXb9+wXro+5fX6rhbWOBHB6QgoabARpMuyTCss7DMEhg52soG
wjDACDl11jsdUPMGt0m+WtrpFgrVKAoJcb3lIOh+XqAGhs8xfW2dodr8QXuP
VN74PNsXWI0VcvgRuXLKvt8GHkRriF4siQggWLufA9OewmAhWaoDAgy7//xZ
H+q7h8hJ2EZROCHaW7SdYG31tsWhKiseOw54yjnor/aOKxYWJABHYO096uy/
SYtgYHMlokEMKLbcUeTnprIsgNn7FIXErkEMUb1O5xZDkHBTaTz9KPnJmcCi
wyi60EdPsfnKi+QloXurTNYN4OzAGJTBmMtxeEknwMzzcRCkiEoB0Vrk01zE
0hTvBx3QOhSW6P5Eh8TqNZvtNwXH0YR7Z5kvsCLdScxRW6xx9gPnUwnRoyc0
Fq0IhummM7kIYaQgcBTf1+USrSDwDmyyzlUkxAgg9cLGAeY9Pmweliz0AF2c
PfD0cDi7MMZdV5Aw1N0XMsbeAoshLFtZtLDl9Uo8fy7wX6hXoya0cDREy/mG
oppdPPGLwsTI1WOjgUSPOn9TZyCim+UGt0cuc/XQdJAjPGAxAejFv/DC6+cn
W256KC5j8EnOUo0PzJlavIAqPscoQGS29veQXXdpstelO4M9jD3GaydmEdSN
AkVF3SizskQqmLpIj0Bec/6iQL0MjKwa7IK+pxkLy0yHmxzjVmbpkmJYjGDG
kkCnmHFTRjHrqsW9JyRGquLiAdpTGzKhZmKsbTOLRpITmpzNu4QJUdgTB+mf
np2dffmCxrVVeg9i3F/YiseB8IVE5Qpm6U3V8cgwtYXUu4tJHleyrQnvnlp0
V2G0HPFuupMFHQnZPHZb3EKhgBGuB0SWnFT+DRijx5H2JndWnIiPDRIvH7Gb
vrIRFer7haGVsxUqGPim0aEiiqaeU+EGUaKRNBZoDy5DAnUcXyDPbRdyTFng
YGEkdHG3iD7LfLSqG2HKZHjhePmtTomely1WZbZZbmpnxRLWb9j2gqBlvOuM
gSJvkMWhXiFxI3ksZ6dFOwYt8BNdSOgTb5Ps+w9onFvs9EcNgK5a9htsF4iY
7Fw7ze/Cmxo+P4Hr0fe2hy8iW/zgmHEcGsEGWKQ2Knc7EGhygZeWTJT/ZAPB
nMIo+K3WBJoBQ1FElSFlf0PZhME0YsfaYv4RChYEiHl3CYVPp7PFFkOPoeuI
ZhvxBPH8zrK83USEYpcPmaTgYKT95Diq8zLMkMJl1IBA1uznAzvoOe/SPBWL
hlOuiD0WYk4iSwlj2IEEuaCNzXbccpJtxdZRWIlnQFcW/f284tgWiihbBIrP
LpjKlXapJRJ3zHHWwtEjk75pXw82jTOP4QQCjN1fYaCTT6uAIwO8WHpKqL5p
0N/0YikC1aExRieh6EqkQaIcLKd9EBNAoGKdADaPxHDDxrItmIAmcHXPSJz2
Nvtc3TPIDzEdBYPkUPGetdGYCAoHiKE7qY2LLLLTpo2L83eXMkhjWYWODU3B
INykUGwQcBEBvTYs/n/kFiSoeAO0Bu+wG0f8RZ0A7IBKPNfo+byFNzXHdrjU
Olaou27rtjuBHj5n14deqBghP1M2aeiv2D8lF0iSvF1i/gfmrHAu8v5kOBiM
jsbkA2l/yeP4reyfDgYyzmtEgmT/cEyfePfJWofoz4Agxg4U3GrsOAmXyKIf
wV+OhqMnNWqyx+HhLhgTlLognPOL3Du/WB7PBv6MMFXJZ+yoraQVI1EaVrC3
KGCx5xRlPgyhJPMdTIfuXCuJVT4qV5bAYOOldcPE9C6FtKUxHvOI0CAN71G+
YKLXh0LdAHcUWUi8c5DYFkPE8W8XHG+zm2LxtYi5AJIo+PXBm2joBpG1eYu5
5vPnFmf8wub4IGx7C4/Zh5HoYIFc15vQg4whC0G6IOeC6J3tec9mkLnIIqXz
DRnzvEuz1F6wzfPlcQoXHhyhSDwGnVuNR07HIL1mYMwbCeVFmqk5N/wCAmB0
zHiMrnE2JTJGaFxIow/Ds/CIYc5Bj/h0IuQKDqws5rTIWicct2dixpt73xPB
Icg8UsG+k4EuqF4QXARyHTlgwlKASDCd8/bPG35+5KWGum23EHB38zHHQ5ml
1xIZKMQW12cc36AgxQ3Zu0dn8hqSnCUZSQNBL7okas3AxIa6o0BQIEFTBxMD
LSxFdJfgerQcM/Jg6OFc5JMcLUGSDNV1yUXbYTsqmlNaBMXQfeMgG59Z9nX3
O+8AqRFlXbIvfvlgxP3ezq0N10uIGK0MF8VAKQIyRzcklY+E3ZJ0SYke1+zb
ARIhQUGgIFKKkwXxdVnHZBSZPSb2FFmYlys73hLV0ks2bpeENCYyCxKQFK0E
vXs0u0ovm5rzszAOlGZRddOoEOdvnxjPonQ25RcbgINWTOjirXE0O7iYYoIh
X733DAdRLL2A9jn7SitImZbr1Si44AA3zyJ8/FOX8/QMR2f4gLqIGEz/g3HZ
KegghaDS9dA9GTEhoCbrRN/iIcRKkkeXLod8V0zIlmCQ0PzOsyERnDoPAVpB
SJQ/eOxt64j47ItvQMB/o+ES6qxG7WLO9kSQY+1aZZXAAkLa613p5ThTY9oG
0xZkSSw4sNiK1ignMmBtmdH4FOvLJDOuHPP5c1h1BmSf5Ee2mmglCvS0I87h
aWM8deDeJYxEQYHVYx4xyuyOA9LSGzpxs8WJwFl5J8dnx7gEFUXjqLM6MF7Z
e0owZ1+q0UoB8fqI9D5x5WkuQUc7T65Zn3kL7CzxgBKvQtPmPT6WImAwQurt
fUppyaPjLZzCBF4FVqH6a5zS+rMJPE0dYV2ZiLcVSVoQ+VUBLeW8kikK15K5
Qr8nee0lxwT34mMt4AaCekZj1GInnHFsLKfy11Q5AtQcLPVR1k2oSfuIyw5p
FDhzzSuF84/lpup3oIyXmpGFCbpA1Jl25/BWgoCyLrXagavIvAhA0SeGibs+
QQVnNgUadRvecWh91Cx8yZX3QhBOadQ4X6ulvGCbIgk+q3LD9TSmedMHbjcn
TdhL/VHZDSIq/ipjVgReHKd8i+giCBdE1DPHLcmFRdyQNvwN6EgzCk4iMdS5
CMxktxgdb+H6RDwi47BQC7hPAvZdR/0keXOLGeX2jlnqhHHb2wM5YBIxABAL
1qwlk15z5pG37fHXCn0ztQhZwe1B8gpxcIVe50JjzlwQQWtI9gSx2Yb2TMdK
w4ucGGVJqHGaA4LE+orLRmG44aJEHIhpkzXaj0hvQ7vAGhU5tCmhZTbp5Bhx
ViSm6W/qmsi1+fyZ0ztuNjkgT3HTT7mWlNMzvdUNTb+FC+LbInOyEOisMnSJ
/OoR71D9WOYNPwjXisKDl7eWHCsYdkp5seTj4TJLYrngOBl+FIey9+uUalrJ
jKPjHxKnkPcCEkNnKUfWITX/9OadPEL0hnESJpmLqyBPgTesBPHqRRATL2ah
IJOXA6bdGsxXwNPSqp/++OYp8zOmKk8DW8HTAVk/kjStb2/QHPFdH3/4v/3O
7+HPd/j4L8mPb/C/XrH7xRXrYoFaf36R0b/bNnp3ju+kjJcfLvj55Wtf/uy/
3DLs1yaS4ZZ23nwchhNUaPnmj36JRv/uq6N/197G1vXu2NV/7dmBzj3YCpAk
gMnf/OLYqP/s//7v/7Nj5Kf6zNNdq/g5WmF7Jb8IFEfROzDf70OIuSX98vst
aBDDpL2iNkzoHEf/o2Hy/w0WX/v52orbP/89l2scrorRYtxayXedMb/r/tIl
A1t2qoMGG9uyx5+3E79dPxHxC364ICUZfjtreMzoaARmWeMDS2xORAOmicqP
k9iQ4balunPmrMzEJOG9RywPzXrAwz+SOHvgozJa3BeDm9PqZrPSEoSm3DTw
Xo3i/l9sVYJIkCF7dPIczsfPUFoSzUyCUC2yVs129nVtN1mJBkfznB56x6yS
DeTh6vYHzkSe/AtM+TbNwo94V84aT7uDv8SAjkoWyQUUrvg0GPYpZaFX6V3B
wcMoACBLVtnecVgyR5OywOYh0glCI58zdfGLvPueBD+8TihNdcnfPeXVPnVA
7bHsZzOzWavYsEGxUcRXdbgc0nejoZhja87Bhh0hROAMnrKwKb6h0aT/Wlcl
yZp4WPyGLoFLlZz2pywmkU9aghxQixThCwRqr+yokB4a/kJpPM+CEkaqDeL3
Hnxz0BtYtQojBAStWBzqAMmHJKAiCPOPzmhU9zHGarKDD3Z0xNtEPPjGTcqz
bjrZsFeaTLyHOr+XPeyzHhYgw0Ec+aD7AhS62aRVinplbXz5hcgwQNhJ14a8
AaRNtNfiPRatoIT2rZJLP7wfgtoD/x3jf9N0mh7ODpI/uN+H23+Oh2O+P9cc
HIw29qbaEHHYp3X2kuIAa6dsqiI02xbBbeDrJqJlsDQ30PB+PDybnE7Gs3Ry
Nj46Hp2dzsaZTdPhND06nMG/vWTCq9UHeVUvAcJP8VZ9BFx5SpYQkvEB0Z+6
i8vfPUvG7pIlm7Wqbi7CKYkyCZlcEkQTF2mYOUVJE0AWdrnmwrAAG01yJDuV
t1EZEudhvlFkof8m/QZH5nqRfjcawmdiV4qoGO7CIYJEIIAVjKMVkGZUxyOz
yoCKHdBBpPUi/FKcuEi9iJgIZV2Awp+M2NGU5L3LQCXTV2dwTyp2YasBZ8Mx
PD2pFjRvPbZMw6dacZnD+5PhZDg9HU2Pjmaz+WFyR7Y52pgR5UeGhEW7pzvb
gWshIwCQDgdqownh6pjYfrTDHsbj8RQHPmNbBDU0LhoxLDal1mVLxTJIPMWY
yQDVwuDmKDhb7MS/JKHdsnyOZ1mpND0w14R+zCgmarQF+r0CDP0L1QySe7ix
cg9J6uJt/gHX/hHWvk9Gl1/b8oHxEtsIXoad7MvCAjrBY/fczuA1ur2fz0EL
rZo/7B3tfTFH6gPZgUKEEwGYHE4ggNzmzfEgeWfXlspGBXDg2D/x4pJtSI0X
ohVMH2SzfISZGn2oKoPsj+BO1PgPSExwYD063qKGNRNwBr8VzGO9NyOBsyyV
wcyTPAbKJwDlk2+GcnzxEMg8PWzr9LEwVpH+a0CWzYUwPvwKjP2JxzzlsUA+
FFweRbg8jnB59BgonwGUz347Lo+RYQz/S8j8dTjrBkNAT34NmUe/GZkniszj
EJnHITI/CsyjEcB5NPqt6ExgHu9mzLLKAOXGjuK2qDKG82vdjUacqbX3BPtE
8N1sksORNpXpiJOtVYswvam2OCZiNNIlkfV9uST5n62yWHcLFolCzVzKRwV7
F4ehxv4aPhDKnPVbbrs7JUFbi84GupNIW4Ev7jkzcUnzdjFYKnTZezvbONGI
sH/uSsOUHC1LYmUdBnXgSt2kHDtEDgeWxVXxrflMuAi6K43BlcbYXIzOi+WD
6Qo/HXrDSPMRNB6UTg9Hk8koNSy84Qdns+Oz2fjkyKBLFD+YZ/OT8XF6dnp2
aGfDo9nw+HCcHZ4dHR+fgrA7Hxrz7BntNxmZWDLz47tBYyz6Q3Li3x4bjMiV
zye6k2CMoVEJAj8c6pBugEOT2vojqyLha1t/ToYjelw0flIrxkdHWXY6y9LZ
fDgCoT07TE8np7PD2cnc2vGhn2livADhV5L8ezAIj2gPZ6P5/My/eZTs8w1H
pD+Ih7GnrYePWxvSJ3ZsaNzekD2yk6PxbHpmRyDVT4fT8XR+ejg8Gh5P55PZ
xBrHnj2waBP6In2TTdLh5PRo6td1Em8iGEWeDXDitLUHfWLHHg7be5ienI5H
6fRwOJ7MbTY8Gx1Oj2GEbHRqD8ej47nx7M8DiDahb/IwZ1M7PJqkfmFn205C
huk8PBq2j0Ie2bGNSWcbh4eTw6OTGVym05E9nKdzOzodjo4mNp2fHJ6cGsdc
PIh4F4eWXqRvjk/OJicZqJJ+YaMtZzEOHw7v5xhke7z2RNs/Mhn55Rel0L/8
kkRQOJERFBpi0UviYHYXEvWm4MiRVgL7tuLjknDKtZ6QaqI/S6wuoHwCKaZ6
KM7LKG5uz4xaoRu9NsfCmIcwYTXSVlvRH0HsUivskxJA1b12VyZc9wfNgN8e
lvBi3nX4em35WwISHiRmwARszEUNdOrbszedmRDHE/gieGqNx6BBXIM7hliZ
dxUJvh5C4PiraTHNbwokIA9eT5hXVy5J9u29Bm+2zvaANX4UGkip76tW37YB
jAM2yAJTEXrNtX4kGTs6pt3/HmkxUn3GX5cWyXg8T+KBP+ZARrJs/+CAJcOP
KBV+xLvuJNDJgflv0iFiffi/ZblMaX7zercrlsNHyOL/JeiSEY/p3sW2/g+Y
3AAUyHVDceFHPU3MQPGUk3uovNmheO0NvEjpYWn78lH0D5aq9J1rOGhMdiyp
Lj7QCSmYBsriqBQT3R72wGkd0Uy4BC6fh5K5aFcGyarGxvzme7Hd8jJMHqGt
PhrTnD1HD0+DGrqnR5qo05622Q69GayhVH8O/Iu4yZPkra36QcwClXSUotJx
GZqV9HTTADmN+pYAKsSm9ZaxEo5J6pbPaO+JOitIYZLtVL1V9g6thFu4NoOg
dLXO9VOK+kNW9wD7DsrEzTQxOKqUgBCeohNolWZ2G4vFOo2+41JDoUiUfye1
4dvlKPEJHV2C5ugU70qTZph9g3XbXX2PeC7KyN/B8mgDXEQzXkQLWlyJERQ4
F214qXdWwmkk15kzDbneo0QdpRIIi6siR88LBfk1HjG5gd5ZdHppji6ewYvL
V28Ba+AyYkV61IIxJB92Qoejwo3RokCsyPqyHC8KF4OrcpCmu2n3mLCpD9y7
HdUmuIiEwZQCQa2gFurlyzfXz7kcquSO++pazgkRRzSzRotFC7kwaEr5nJgR
TT5gumPtW7C1PYZmI3NgmEk5Ik3KelOZPj+2dlrQWL8o0AiNHz3YhLViE8de
BdL9TYP5osK++qI0VRPLCVyW4EU1U+Ccsogt98CQLr/Ka71xNux752Z6WodF
oSK7hUaFX3AKuFFgSnoEzZh/sst8UZZ0HgIYmZMrhUVlELBMXJBPTrnqKQUi
r7GkAoUY0zlJwDydUE+DArmPUe2Q1UZdb6gUjUDZEZ7LOOYrqO0ab4myZYJK
qlIYlEEfDti+VnnQi4gTuqJK2Rf/HFRsoPPSnpvt/HXXa2AymAxGuHnXbAC9
9jPJJW3RHy31iyvqtfNOw9NJpQiC6YSdS6YwLYMIA6s4NePe2xSTZzCbHtQJ
ahMLp0t0+EORN2b/7av3Hw6oTyJSsGRLvRNfDAe2XrpqAWG1K/xy2/J6UuxE
ZJZaK4wESfB8iaKBvAMRxA56/85y1680zrEVPnvh8wk+wEpRwajbFe4kdLNN
GTi1Fjt6+GYAST2zWIiw5NorFGGK7k/xikY9pNJpSZELqgB7lkvpsFjJ0KXG
AlbhRFKnH+jVbJEj3aSmPVhKimNdNdW2yaX2ICgifSbKraBUo/UopKlCzrHI
vjDsjlJFQiYKMn3megR1aZAEM79TilKRGODZIga1S06hi+ZnMIGgh/VLGtd6
EEDG0i+HZ9MF0HDtsJC6RvnnDavgNGPnkrg8Ncq8vrHtbHipZQ5kAZMmXByG
e5aqT+kYxEwYSK6KGxXN9/0vJLWmUY7OVevcW77RQNopzvcVccs1aVmla0zc
bBXvC8sfcQ5dbBRGhC6X3NQpr1vZEmkFYm4FeOtyIDnmRnAorKfJuNVThWAl
1MGt01ACPU7xZ+xqzMM5A0kQ9u6j5YOzWGNlWMStRbmW8A60VRDNJlpqWmWH
2duNOOIDmakUMOoh4ciaAKuYHpR8ctW0A4DHmU48C/AoQWjypOBIA7q6Qemo
bahAh8rYgIEMFJKPmVbO8BGkv6IEk+WZlMclvQsf1SdJQ4sSCN8KLl1ZV/UQ
OaWJajmz8Eg0gj4H3aiQcmOOZghSosOH8rl8OTLyb2iZCIYUDZWynko3wpdc
jPLiKamsAiTP19wOLa9N8LDcz+QldtRNJvHV9Wdys8k5MYiYZVAwwFAOgI06
K+IFKR4CmlyLkB/OuqTWzXRE6dpVZyixrwrZxnwOiZa2xEQq7BRrKy8dxbV2
fPs1Lbxkun2OgoYNcJZ91+zbcRvXKY84C+yvKgFtNVCKE6+IB3BZVIATqZK6
IN1NLloLsY3IyhZQFGp+EpR7dkVHHYXSOJsYeoxODBgrFfkFVQJti0P7l9S+
WyX4siIASH0DLS+pJUVl0u0qFaMD83RX3IyuJCcSUOKORLTJSL1oLwy7vQb4
xx5/4WSRgJDCVr2U4MoaAiQprTseq7I3eFWqli6idTR8ar2qmjEcNU1DikA1
VLqyNUysH6OKRzrGaqpLlFMla7JDFpYtelsQ33WPNDIriCauEfUFmZRSn3wd
A7Ch3myhz37JiDA3oYKpUJFk3XZ3mFDvDlYmbbDTJd0wuhKBqoHtgO/yjAtd
1pvV2u29rCXiiEnFyq5KKrtQNtTT3VCKCJYyaZeJlXIqv2PNW86Ky4i10nwD
NAxSs/0VUZVZil5rlbG2mZmSbXOJnsPkPFILqYbRvHStq7UdZo9yIiUCKvSm
+7YGQQwVBlUShxGCyD4Im3FNon3JkkYHLBqOllHpGbUzYk8Nzt2cJ9LEA/d8
wFYhGkgD7GpDy6YWbyA5rNL6EwIBgyfc6ZITPmqEGhKVN9oqmZsMrJttyKqb
cT72YE9hK1zHo2ghUs8V1cO6Pe1+SyTSKyNtQlzlGeMKwZbSI0QqUXK72Jx7
owEXflXexlXwa8cAhfmK6B7yIxTYuelKWnHiNPVPjhDPBWJrx51S++0NyAzo
uorSQNgnplWNP+7kGxTA2sqktJUbhq17uTqlmlelas1akuO2XN4GiceuUZSQ
RUrv58qAlImIAqvTG+50mNs8xZ4m23vgaHcT35XJGfWkEgHR/KULt/71xkya
kq+NmZ4kP0ty/gtXhStINwf1a0uVrig9Dxar+F3rgoN21nKv8oqAuGQps7JO
xZEWpVH5CeyioWXbpD6SK213gMYYXV2s5KC1x/jGwFT1WOy/YmCkqqWCA4yK
dBadQni+bHQTlLa6Je8b9gr+hNK1VNGTcnGqG4pCJDiwWosKY5wAFSbza70u
t3OWKSQDVyh/2WpuF+a3SnUbvFpYJx72LxQ3qDrZaaq4KTbUBGmQtIubqh4T
d19xfkDc0tRqOiwFzhT0fNSbmwR2LMtXBUJ7u/Tm90kpfTp0jK17dHNKGx0t
N2bob+Apt+lyY33Pp1Yzzc+fg+rkX3y/aidKg4SAPbe6rf3qBc1MOGtNp9ou
28h1GC+jt/Sybt8DwyPiw7UM1kOGwufM0m6trJ2FV2fPjhrgaNMGLUJ3dRmV
VG+XItea1MLZOpXKWyXifSdaRExqE0DdokCIgPtCtmCDUWOuq0rYOwSFCa31
KrpfrtUzpJivFwuzHu/a3q+p5x7XbUn2fUfbnqHOtWQu7qw721Ux7kAq1JKo
1KCXfS43RKW0Oih62KoMsqtFtkJls86U42JJtLxhWkeKmaNUhN4mKNURHCyd
EWE+fo5xC2lVlXdAVYghZYxRvoodkxzjO3LTluS8uy4FOmZiEDpHlYNMAK8q
NTdKYWfeLFHbzhJxs9T8rLflgpGrk2khJoZj3je1o6xrQ72AxKQu5bwIS9sX
SdQZtvbYFdu4wqIkRqozUb+7iFRyZZm8XLq8iXDxjiK4/spSQV/LdmOEHxVu
FkagGdvt2rTMLUvtS9YlMheFoEPGJNhL7kHZmy3AY1KvlZ4I/IZuOF9EMayy
OyHc+EBEqdapS23kgrsLdyqX2qXw4/BkJKozNW0DJ/WfyP2g7GsPTMuv8b5I
ax0qEXP9+sWBmtPKQiu/YpH2S6YAP2GRdulrISXr8OjjfCcvWDquEVb6QYnR
N23rVLGt/AJonzg7fMglhzD42SFBsqXbEvkBFlZEUUL8dg3eQXLN59Hq2cI9
zl2ZaO9OIvGVin13C2T3BLqrvM5y0rml9WLbGXVXoa0fPem4giQgTJLSAbKC
Vm9T/QFFEtNh/FpqSK6LGHxIQqPRa7ZideQi4wJt0TInZq8CReh+Oe9Pqaq/
CuL86BYN0jceDuteSyFHqeB9GbsWPj/R2t792OkQdBqhY2ssJXNJXSMcPSik
hKSDK0uIBdOjQdpgRd+GS+VMqUgvQUzqIUYdz7SyNCuQqi46RdW3/CSnQVEG
g2MdphmWxwt0aKlJ60QHWZEvWB8SBtbKKjS+/UmXYSg6xM1qyeMr/RODqr6X
gXxOq0avOUBRDj+dVSXa4LX5MVbWqlLu0L2pXAUQ3hRbTamUNO4q6sToe9O6
tiOh2hs28GmBslODmyIKkIPldDJRi91LX6TK+7nk3rz1IRZBZWdsQsqv5XwB
d7bMDUpQp2RsqMnUgOonTR27DVkOZWxzHah805Mt7U4GyZU2ZZaS8+myxlOr
NzckzEqZMr0gZH1Ic1k9efBCgY10UUQrGKdeMGe4iCqIcUEVwXpQKTIWtdxd
dZXO6YzQGhCVTjPUSJtd51tqml9t3OekqfgSMjBBTT45GJK9lWjZVmWKw0u5
85BsEkRJitCU21tHuxC5DTVsJHNAHpuG7gIr6aAe3i3gJvjy6XdSpQY7CnJ1
ZJEuuKiLF0llqz7cI+zqRFRNQxCofq06lIDja0k69lSxM56Lz7EV0peTDi64
7BxXkj1oMqmHDx4ff8Y2Y7foNKHs39Al5WX4Wkvu+52gh0e24mbn4qWyH0dc
VJDEjlMXQvsIdFL8NC1A9fElbboaP3unvBBImmveiPtJq/H52trSJmBOoRDA
tTjjuoQLuOFOYlzPH1jyQ81JG1vmpN4WWU4l+hfcLJmSjgfJa9TRYbcSC9AV
ugBbPrHgE1SyiotTh+tVDos7oagGzBOmS4WEjsVI5+dpCY4+C57Le6Xynvcb
FDGLjOOpYzpM4kt6c1M53x41DEOAOTN1lFnKyFJzCo14b8VgsHbYHt7mF2qz
cAZUOQdpMqpBGyyWsKYfBPCFZZ856uUiqNTrz86p4MJGAolPm4/gsdElC1DP
4MV17xbwF6poViU5hzDRopLWosQZDRLdGkM6fFlJOhHDe+6M5wononzso4eY
iHgt1dZt9PhG1HDPq7iG7ctBxLvBOJFSTIopRW8AmSyoaSyejTj/6TyB4HQr
tXYI9ntW8XydQpCVXV3kLaTfmcRj5TjxGhRXDecebLUoK9sicI2Wum85Azj8
Cx3BLlWLo29dQJHYl9U9G1dY5gZ0nZbuxlz5HtRrW+UlsUuWZLxBz/l8nQI4
64wetw0LOpf1PEkHNrxUPYkDjzCsOJQ/vbXUxwUA8ePqnqiB5prGhtEc9oY1
NVJHvVWHpO4ofA2WZKIma5ivLmXl5a4X6Y0ryq9CEXLbW9smgqB9MqjIGfbn
TT775HRjLut31y4cL7JjcNOQcUosD3KRDkjJuEFV4slQFoYMBTZnTo1flhtn
AVGiGRXfvlkC1V7u6Hqvci0wPSoeECvLXPBDJZsZECKQi4LOpheFJ9cBVZQO
F1M7Izude7EXhzJHdU5dwIrGswTRGJiTSKxeB6qfRj4UkKPRps2CTnpb5ly8
sacWt13dD9j1sBUwVAt3tZEmBViADzkv1giqA/G9jWzc+DqqOxm0s6T4Bgo3
IOvNlkBMqZvty/0JxrWWRtnKElvgKWsYEc0BSFGTbNdJgRvo+fdcQdmcDLLA
ssgBSKpUuiRj5Otr8hCQ+VWq3F6VP0nR1dPJ6QQbBKptF80JgfnDvFBnvlg/
9uG1F/2rQW6beb9Z1n1bFzkO4BVAGgcXvkLOHdguDbuwUL4dBNbTdpf0bosZ
s7+98dqBMwOSovT6hbf2dMPZ2D4mlVSD9DIhlFz1idqKadNUDhIDyBUurJps
1Sl5mPtqTgjXQHd2K05iKkP6SQm2EErt2aKFk/miRCV/yb3/PU7bmhI5ExfX
liwzLlFNZVzb1yFASmq7Y/zd+pYOlj02XHPvCW+pYr8CArVBQQxNx2SM1s6f
lIqigYzoC8FdbIMad6/03SyZyIA2TYxh37E1DY7VruEgH5OPJxAP3asBiTlQ
Bb+wG8C/JTADJujsVynnjrxiwI63H6GMks4e2uVaEQyuyXSacROtCu8IMDwc
0vWG5vcR5zNLaecPrv+VIgJLXbd+LYIIaqv2DbF6EgbEfligZwaLoy69BMaA
1TgOeFm8nJo20rqhcliFumCNW0GnML9z/9IULkyzHrjUJi/aBH2httiIhC6F
7FRtRIY3HDrPuZ8PsSMupiytWTpdUp504rXfABvCdHsNtx6PBme4N3JdcLh1
EO1L5GPrCMIixYvo2vUGPJ1cu8ntZllwjHqPvGH0FrnpWYZ2bahFoqVweGpv
HLXbczSkFcBMdL8ikUbEWM+3NPiArQyLtApIUWx5RgcFnhEyufZ2m/KTRe3y
wuUXGVeYOW4Wp5QVoBm3WgZ5cM4IFGVrcCwvgM613/DGGeL3EswvAHd2M+9T
UlOLmiopip/tlaTHuRJPDYVaaotAlOZiWuyInXHEpuctblEXXOlxxaUwuONC
u6R8QGEZ+OVstlnnZEEmd5CbomX+bClYQVi3qGuZr+R/KfHALvyf4vjkvChn
A8gLLlw74vJ1p4uPkjFViG+9S5JOLr6RvBBturbYVLqxzvQbdGTaCjgOg4Cr
P7P8LL54p6HQsejm4vXc+8blQ71fbOog6MQHmdQ+NEaW4UNjCK+0jAX1oAzD
hDRUmrFaTMJe5mQMsTmx2+aBW2deBh1uAhvoc24nATpY2FyC3IluySi3ASg2
3OhMqxHHkWbSnwl+k3DOSDow6FnJ60+1Z7W1JTDcRv2GBskfHRcI9F4XvMZd
opdL4xRXNGzsp9QplD01PqxeEXFmlcKHqdLqHwNObcizSitD9hH0N8S7Ra1m
XnCau2K0NhPdplpTTwi21sE9Jrz30s/TejuqowVOih0SAlPuHqMQFdqmwASM
2c1XUo/TG2aQUVIAcx3FkgX3UKqWKXGk5TgzdDuXhsyJXK5OLDuRof6KatFn
IIph6RktWk/la6S+gMDvsh2Yy+ghtfBgn5QXs+GQW8p0o2rliPOu/J0ROrV1
B3FWVFBPoFa2Stq8S1rimacPdOOI8sWA2HKIhZB3dDNrXAwJf/cscjKt4WwR
VJ54/qe1M4Fs8MyMvV8AQ5QIUEl5RVssGRI4nRRbwpRs4ikT1/dT7mOvpf8b
YgXq7JZoTZ6SxJxe0hEqWwSLgjmIW9PijYcPy0l3wFPRLE0Zg1Jp1OvBlBDj
uoWx54bfIwMgi5REfeCsKH0oaPmrZdAJNELPuzX80e1DJCfRCjwMZXTpwL55
eqmHHuY3IEiQ5eHBBCls1HqkrKZ5llkJSQzIF1t6lrZtw6pdt0CzvQ2LtxC2
3xSPjYZ/oL0mxyqLgVNEX0XnGzyEpS4DKt6Dc21cm4P/EH+dExJdGisJbnED
3S1mBWc58nl8He8vHgSyGRQcSeghZlcHEASsylLKR6EKioTU3jnIx0RIzSK3
TKnFRqYPpNJ56SUWdBPXeFDMF7VOYaldlBHAEnoIc2NUYMC07WpOM+Vg5YKd
SHBvAbQknQZB/ir0tZVGx85VS6rzv8j6HRkTUQM4Urcb5k4zj8LGe7y4oaZA
IGKtr6nQLU9I5FGqiMKWN9z3wRpWVrnE7Pjf918/Gx+oYlK3BTTyHldKyNbs
c2LHTSO9en2zJpjOcRT2Yaogj+IwNZpVkbittFxFrSGcA//zkx09I6TXIXKS
Vk2UuFKu86hI3Pak1YlDVHKOrsXclGkuXZhaPTlIHUCLdy9KxSgRj9RjtwDh
07j25EuA8NK3WI83KPugjDJMBHT1Kf71bQr0Oi/Gw+Hpvw0CdwFaCbgDC2uH
MgLH1qMEwXduTekKGof0Zv/6H9+9x8Lfz7CgyjrNObstqBKD583RKnEPXFpT
wl0uOG1yD4bZIwxGB5CvC63937a29sNPXkv+Fh5ZugHSUfmsUo5FDBvkeY+n
NsBBCjyhrnKuqh1TTHE/ok2di/REoAnyo8jRcifpK6TKmdFYThgmunh+HSY/
TR/a5sx0ps03RFrpERrjuVp076JLcZFPVUZVQ0BRUMiiU+MVBnJ0UT50dPCJ
5vPzyfizGHAuDGVQLY0fuudtD4krgYeSEg+gqbgBzfR5OvjNiyuq7iHPbQmJ
iyoikfbs62RTYWKHqeZOQmnZ6YAUBMR3CssHardhR6szmIVVPbz71zmaYDjx
SimZ4+eYvjsflwCUKdUG9dcmvyG5CeZcsbGRXzEL1AxR9t1wXp9zGWtaetQ4
j+khDFJtllRfhNu/kzPlHs49TriTNmDUvUgqUGohJsrZdmI4YdDcB2MT+zRe
3aPgHUT7YBTOVXNNnig0LTIRaactX10hyHrzLYKdny8YW2+qX6HGgjHKBjD2
3kCiRkhYnSPX7qjfFXXtfJK8uHh90Yr9kkABCULlJ8K8Aniv3+8naPbGEVTf
+ueL139MXpHx7/OTBxA3+mQJ/KKLpu/pIzZTUPXOUgz+x8Mx2r44m54bRKeJ
q0yjpp+W4PFe3YAoIrDZ0flNGdo4ns/L02qT0/Ke+mtvdw8/g2ffWXSzI/XM
Z/aA600aavoO86GPAZ10/eW0L/NgowTassad7o0Go73v4VM0ZLK+sLepinN8
+RwNGqv6/H61PC/qc3zvPByU3gMYzPP7ZM9/Bh+CEEjJ5vgwTYdGglraNMgb
+Pn3UtNI1GjptbEHcE6Oz85G53DgJIzSkVwBrUve40ADmvlLeyZgh822mfDz
3z5TWd2kRf4XNuPQyy+ev/+RY3P+BOIAXr8/AndYMwgomnnW8JN/+mPyJzs9
h19/v2ia9fmzZxlMgb4+IH7kDBrA8M/ubp4hGP+GVwcvvQQBAN76PX76d/rY
33ANr+SCueJ58gp7URbJ1eaTTfZX9MdgMcjwT6TZqxTUmozSAFYHJm5c8joH
BvhDWsAd3S/yKf1CPdzQNVrOm13vXS4qlE1AvPgJc9dXabK/kF9QtOZfBwD3
A4ZGFpTLJ4hw6DAjqi1Q7alVXqQCB5gw3M6GcaZaWgLLiZWI76jrAU/NgRtK
FinyimklTiNGk7RopN0HCODlrIRraKmaCpIK3hcQcKo+lezPDpLxcDxO6JTf
4zyO4mHCAwWQh6ENPICKKq7sTkZh6WhzwGFrZ63QGd9ZcrDmUy44gFNsODyg
plIfzEvyQlpkr6TXMbqDHBhwqwDLIHU6pwIBwNEQOOtNVW+4NZsUodhQ21B0
89IYLG3PgOOikwIbVoTlz3pCpNFLSnv94foKMJMfr62AFMO0qIOHugwmg5lC
wYPwaZ28tDcYh4l6KwcOCxgkfAYoLT1+JQHJ8v0+3psaLg6fuPWXRhbeRyvf
gUKV0KsdW6+EnYijrxaANOCf4Kc10d3d3aCaz/pwPk1Z0VQ4xTP4DJ8++J7C
CnF7OADoj3Y5d6DgPNolbRU4H5az8EtjEzGoEFmdPEUO/LTH/6JRAn9/9xzQ
/d3zK/z9+qeLly/dLzyEPMYqnv/Nv3755tWr56+veAS0dEQf8SBPX13881PG
h6dv3mKU68XLp91EsJS7Xk/FPAgktQnQPZJGf7h8m4wmyT7CYzwanR3wr6ej
k8kBCSs94XNLtnP3HPY9UM5uSk3MyT2crvMmXYqotUBpFFnogIkJ+hCYecEF
PewPT/qjyZ6Q/DahAVLzQTIvKPSQ8vBgFsWN0YkiaVal82bvK3wCT90FU59L
pU3C2Xear0JUKjIb1p6B6J2qEuGVnkuxs3HvvYjJ/NRc8hI6vnABw9bNBi/w
MO5hZIyg++jkfcRB6ZvENnzi7wt730dyBLvSL7VbUjI5+V4++iL/dhegpD2X
bupYUIGLvFaWN+r6Hk5OuNyCwPyLkeqSqQZK9/MsXuEGUPA0WBfXndkbDgbH
e+2lrbADb4MZ7kAx7PdfW/ALpzgkrpYOit8doLeXSeZ+bhjf55IQdR81AYFX
tPZpWcI7hV/IPKV+shje/fXVzWkHYsEEcWZ3uXfngvDc+lL74YY1Ky598uQq
LzYkl27bH/Pb/o4d7TiN0WAwOuoeB/LPp4Pk939I9kdnST8ZDJ6RciVDHzwN
RrJVVVZ9qbwXSB57sZkgrONb8wz1ZhVKKg3mPwaNTUdng9+CKC8ZCvuubc4B
26Z8QcpE6rgxMPpLjnDzS5o+JOGutwE9/P6bAD4BgJ/+9m31wvZbURGd5JqS
SsU8is5nNvb5bakjcV5JvE9skeTct3rbbvG6dChRQKK+uvB/UE+rb1jRLFq+
sq/i9VcJ4Pch6u7xZ3Iu+wPsL3WY/A7RGP7XuSj9ZORO5BEncVGE3hvFKrcD
/L90qNul5znF8a+q3l9Vvejnr6rer6h6o7+qen9V9f6q6v3PVfVG/eG4Pxr9
l1W9w7+qev+zVD0sGoICoCTluGXgevdacdToo673vi7H4ngbSV3DcPRWffYo
5FBhFWuc0WwBWLbK36ECOnZL8yDbJfptX/5jFVEHxl9T1n5t9bHCFi3/MUrb
brXtGxU3x6P0Z6fq9htA/NtVuJ1KXPtA2qrNbuVm52ofo+C0p9+qR/4aLsS6
5G+G82/RKR+rVYb7R0Lg74OEyIf3mSiMe2Jv63YAa5EYSCqlU8scKgckZKde
6SC+Q7ckyP5G/fJrp7PrfL6mawaHv3V7mt/Q2SMqX+f5Wh/4jesLQ/h9LnoY
bdJuLrUFb790NecnT0A+BeZwlac3oPNqCXNqefugSBr6gDea4lBo1Ba5/Cn9
63Ay/PIlcrueb/O7wvzf9fvVnV7+/8XL48+8sXPXD13X8JWvGx7/Fp4Tc2P4
UgeJfn2eiIZ829KE6v3tzs2EBHDr8na+2LpDbUPI+Q5LyNeB78WP3yX/uk0K
+Dd+/JfWccWSQgyJX34N5Nue3QW4Drh++bXT+fpKlBrCdt2Hfo9fOY42+He9
opcVfloUQS5gq4vdeyxr8jPwM1SmPz8Bkt70b/nPL60GA+4q+hag6XSKSgIL
ddwyiTrt0U8kn5tZ9ZEPizPEQZaX+/wDRn+CJM0/0epMrWM5us+7eKHqi8tm
1TAkn9zSKRbtDe8cwfihiMJ76nbHJ11xnavQBFszw2Q2OR4e2WRyNJzMZpN5
MjzhT/QDM0oOj4bZ+HQ6GQ+Tw8npSXZ2Mpwm42HqP3cfO7r4vLUY1V+1uopL
q5MIJJL9T+dnR/Ph2XhydHJ8ND8djo+Ozw4n9mg4Oz4eD0/mXBa7oUKMcsha
LIwq+HMsk8ZB8fGCNsFOi5pCg/rUebjmpn+GWxykWO1muaQIzcInFXDUYcQW
XL3g+xnnMKgQYrTFKwcNcTCsdOMKIvtw8k4n110nY7OTs8M0sXZ4OsymeDLj
4XSUDU+mh0dn2eEMToYfORplk7Pp6fxonk6Pj9wLk9OW+S34Gc9ns8PT0XR2
MplNJ/NpCgc5PkwPs9H8dG6zsRl3xg7GnQ2zkT3aPTqgTpaNs+FRejIdZvZs
Op6enQ1P0vn0yM7mpzC1Odyy9s4MR9nuOUbjo5OTs9nZbHZ6PLVTWHs6SQ9n
6dnxfGYn07kdzrLpTMkE1ZAn06AEtJMueUUl2/BoP1y9lTp3trjNq7LwNYNd
xUt8WIsCBShD2rtYHTEXT4bTSFEcYoqVnDnsL4jD5TZG1J0xuPpSHx17uFCt
GYr7o9RjCahOOQEzrElrfKykJkxHq+Wi1lR2eV1Rj6679GHAz4wGh60yopJC
t/HJGEL4sNmwK3knYsvZaHL85UurXkJQvYXygULLUJwbFpddx+ocs0VuKfqZ
6rVw+UZfmAmX7FqNUTShxh+vLNb3oHqhQb5iFMPH9r2oA4DhAt/5vbNJSdVF
MlulWp0TI8QZWNxVbjQYG+M+YUhMDicnEs4HX2uMH3+IgJGD5fwxLZ3qMzzx
1LimsDeZiR3LVWGNM1R9rQ4pKqApAlpfEU3IGjROMOKEJUmox8L6Mpyv34bq
SVRRxWjagQs550yvsM+JA4RrFJeh1WamAbBqzJXw47AgC+ZmUOy6GwMOGcGH
ng6UqfX6xYG/qCMMzNcKM4dALB6iFxPNXiuAiJxyXD73poqg3CNV0tcqW0RV
CFgT1bq9SiPCdFtDiV7PNfsK9xeugopFoPk7nWJx51xz7UV95qLHsD4M/Efz
o1Qt8VmfdXJDuRWSdXM8iQPMk7hNRiFNDZizYWEKRtCTs9NDDTMGQAFdkGGk
yJbkb2DJKiARdVgrnkpa4LYoZV0to76o9XtfeismAbA3vOO1JKxJ4TFMLZfS
XkyAuhCDofHEAEV06y7tVDoFtWtyIZobpH0ehry9bWQ0Ccmox5+AKiOumHZD
LMltAwGkRkNlTkq+JLq1mhowS4jq2E6tNDFLclBIbzbLtKIyRO8XccPkb7gq
ubRtyJu7vLYSSox71jRHevNV+h/wop4XNSL1du3BPTeLt7vrnpvW9eIKVnWn
/qajTJS4rmSE+5a0+wB1bpomOen5BhUmWxWfHM2j8su+bQGV4w44lLbo5FZP
wsMaKr7W5kPwqcB4PDAfMGq72WBf0eVDbyfG0EK5QLaUkgrasMX1zfGqMSsH
5M6LTSe1iwoCsWcOYLUDQ7HqpZ/L+RRrdyV5fjwX3YzHFBeCHyk13KaA8pMJ
itKrIL69ETc8dFzw0MsDyPC0AD6N46rKYQ1IXYLWFc8xRXNpseunwZovWH4H
Vl8vsHhMwKAYUk2pXZDa1GFL3jQRJkRm/S68T653pcOx8BQwHY4vq1B47Jop
nghPDKmDCN/kqDgpVWZWOxMXEOZCk1Q2oegvOhtMl1TvhvZG+auuekq3e3fe
OBQKSgzLCFPL/a444Yz932Edd9dBOL6sea27o/wyLUCtcMMuX5Z3RnwvIu6p
FyQDycx01CfAbS74ctkV+yT5g9s6dNyJRo9IKGWA95LrFBRZkTIfCn/XwlOL
HATlnXIBBb/hJJywAPUu6TcvKM+Tq01Tsem25r4ptMLIptNhiNKopKYyaqAo
k5ouVtC2xcfJJVtIytjGW3ijDkRG8zu1psOm+DpBqT0Fo7q8Xj/CW74DUGmG
vDanPnDcuyQu75BQyfU4PQVfNtorw0rajrQJkPQXrH3dckyYncIeax6UDiT7
Q+bN5PDBY2bQK8lsI9HSByB8V+tnuEqq8ZXBkSrLRZzLNglHQ8CKu9QEew+0
EWlE6VMEWVKJAjKSbyLILLvNlijizB+44O/K+uZQwhEcnKj1ApVklhIv3crm
IsERpf+Rv/w5+JKUMKw3RAM7bNA63RSIgQwb6z2Gmh/n8TEbvuN21NyPj5mI
XnJX/3xL1XWtYYM5ZvkMo16x0Nbazrg4KaX1UbY0dTGaqeroSuL72qdbNo2r
4P6kM0xbXNqMSyMa8yot0jpPrrCoVC95XuWfAC7LJZ7b+3KVJn9MbytgFrb4
VN72kr+Hp5MXD7a4SeGB6820zBbub3Pd2DlA6R/K5RTGeplmeb1Mb5OXi7L5
lNLLyUtgI9NlCjzoJakOaZm8/o9NL3kBwmEOn23q2zSt0p75h/Qvm0WZvPkE
X37I8nXyNkWEeAFjXN/ZBn69KLKH5PrhE5oXJOLr/aJc1Rjuc7XKGxjvff5p
URawcPNzjka15GcsMAwSOmPWn+BYcmDY/wLrT/6Be624Au1wcbGYX16sN9LT
rSUqJJfM/16WN8b8TfK732FMxHMKjnlakw55/rvfJcnbJVWypEtj47NaU0uh
poS315vpMvfJmthHFZX8dsROLKrUOTIGitPoB1Z9318T3u6PTo3pJ++A0FZc
xwRxCHBpvXFZpvZ+nQYJ2WRqofbFyeXbD0yUqMY1GfseMfMJzjzHbE5s4lZx
8jTxQH5zdBLu+xEDH+PAwAapB6tUCwC6hfLDfsEddSTj8fDgMaA6onHT+vaG
ll0/5t0Jg/k2Ry1Ae4S1dErMCKWnakASUhaQS1BScbGrdj88z0iVU2WKlTSD
whTWGOsH8OT7OwtcNgOaTcbgsF+OlL0EXZnYAHZHcMUypDsZVX98xJYPccvY
VKcCDkmCWVzERkzKqKFXNxstTgoyc0HN1xXfYJALOstOuytfrQ+r9+EGr8SW
tb2swVfAOHCzxH0yYTM3G6ztynnTrdaRUf+4x4BmjKC5lmJXWZyB6qOuqGKG
K4lFYz5ijhHO8SNdrxVAgyrhUZK6dyI8YrQh4+88nTFuetwJnM/198kqFZ7d
wTGsNEAWBt9UN7gS0bIANsDEmsCD7KHhUn19lLaQwW/fzfCMZsYY7gwjFEBv
WCWXVJphj8be+4GqGuhHMPWe9+tQ1AU9Z4JPX4JqvuewSGk4knFb9QMBiipL
wXOXUjeqOzBttA2+Aa2YL3imzaVRGNbSPlJ6hMohaUUlKhAOU+HlJQmRhA8s
UvryB2fCy0oWhrb1TnkMiRueIi3CUB80GSRXDwDefJZcR0nw4SNBNz1pGvuI
yU4QSRBeFqNur6/RK8gg0D5n2r0NRFQZHSGIbBYuHD1PVJLvHtf3AnnlAcf1
sbtSMQ0N1zQhEKdPWF+GpNFrbez5iHUfOxTJd3pmQuxAcuR0A8ZE39tpL3xS
u2o/7MWEfU/L1u4F180VS5mVnSbzq6BYsVT0DGhwIy2085nd9jKu90XcX+cR
0DlyE2EreWHdWrVuLjFlUjOTselSywa4KFcsZoEVKDNpRc8H/B4P2I3uCQt8
pAGvcWSUtoMttXo7N3ih8hSIClzfKuP0KPGBE0LRxrjfJprWv33zk64gFm2k
CjAVhX/GUv1EeBIGFfSTV66EEIat5ysgrulqTVHyO0aMcKOts0mPrParOd2p
4D6TAWeNXigto8FOsYi0K4GMr74GInUfVo+W15CvKJ4Te+OC1OMB3P81AB+i
PLJCEZ5lkSh+QYQvWR2zBFfRLlrTlV1SUDcu9810vqnZ30PFRly56G9f1ZhA
TyUs2xP7eywFnSorfnxleR57Gc2l45ePmMAYfDo9Oc4sef/Wn4K/SkHPusR3
ICXmYVMksRgTTBVLSBBql+TUAeO6tUWWLLfWp5+1ZdgLNLvBDSnXa7r8xU2/
5fnDPWxhUI8A9Agl4DCEgqyYkU0FlBiyxAWnDDeAq0UDgPKCy7BpPgw89pKs
C5j0QLkRoSDnNDkcTer8Zu14amot/4hNDAMu1l6Ov3LOfkh1iQPqg1lOuxnT
tavURqaMP/2R3xo8YpijWCFh0yNSJJQL471P7SK9RRU3bEOruUsewf+IJrOc
W1wTpUMqFl0T33dECgG6us6umi6ZaPKGznVOiToxZyWawrKfr0rEIQiIJdpS
F4G78rrCGmufUyyL2v/wUlDHpfQRMJsEdAdjPKtMbmzAa+tHjHcYSLdvnRYX
0Se0jsW0yytA9m7XWwG5QSGV7ux4+ANHOnnKvpz3XR8aLmorwtgj9jB247UI
tfscG1ZSzAnycVVumWGr6zlavF9hKNx3NvjOMg1tAoNxKMh82/JHsWhCjdzx
grG1uPZdFeKqdbVSlDvLPQs5D+AxMw9p5gLNs1IvK60+ZUA33faJuKMN1PX+
Dc3W5v8BYUyjJlAAAQA=

-->

</rfc>

