<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.34 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-zheng-quic-fec-extension-02" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="QUIC FEC">FEC Extension for QUIC</title>
    <seriesInfo name="Internet-Draft" value="draft-zheng-quic-fec-extension-02"/>
    <author initials="H." surname="Zheng" fullname="Zheng Huanhuan">
      <organization>Alibaba Inc.</organization>
      <address>
        <email>zhenghuanhuan.zhh@taobao.com</email>
      </address>
    </author>
    <author initials="Y." surname="Liu" fullname="Yanmei Liu">
      <organization>Alibaba Inc.</organization>
      <address>
        <email>miaoji.lym@alibaba-inc.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>QUIC Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 44?>

<t>This document specifies a Forward Error Correction (FEC) extension
for the QUIC protocol, which provide protection against packet loss.</t>
    </abstract>
  </front>
  <middle>
    <?line 49?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies an extension to QUIC version 1 <xref target="QUIC-TRANSPORT"/>
to supports Forward Error Correction (FEC).
FEC is a method of erasure control in data transmission by simultaneously
sending redundant data (see <xref target="RFC6363"/>). This redundancy allows the receiver
to detect and recover limited lost data without waiting for retransmission,
which can be beneficial in latency-sensitive scenarios.</t>
      <t>For instance, real-time communication frameworks like WebRTC, which is widely
applied in scenarios such as video conferenceing and voice call. FEC plays
an important role by recovering lost packets under unreliable network,
thereby optimizing user experience.</t>
      <t>QUIC-FEC might become a crucial foundation for MoQ (Media over QUIC),
which is primarily used for video stream transmission, which can migrate
the impact of packet loss on media transmission.</t>
      <t>This document defines how FEC framework take effects in QUIC transport process.
Since FEC extension introduce new QUIC frames and parameters, it requires
negotiation between two endpoints.</t>
      <t>This document does not define how the flows to be protected are determined,
nor does it defines how the redundant data are calculated via FEC schemes.</t>
      <t>This document also defines an optional Repair ACK frame (see <xref target="Repair-ACK-Frame"/>)
through which the receiver can notify the sender of source packets successfully recovered
via FEC decoding. This allows the sender to suppress unnecessary retransmissions,
thereby avoiding bandwidth waste, while ensuring that the notification does not
interfere with congestion control or RTT estimation.</t>
      <section anchor="definition">
        <name>Conventions and Definitions</name>
        <t>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
<xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>
        <t>We assume that the reader is familiar with the terminology used in
<xref target="QUIC-TRANSPORT"/>. In addition, we introduce the following FEC-related terms:</t>
        <ul spacing="normal">
          <li>
            <t>Source symbol: piece of information exchanged by two endpoints.
This document considers QUIC packets payloads as source symbols.</t>
          </li>
          <li>
            <t>Repair symbol: redundant information constructed from the combination
of several source symbols.</t>
          </li>
          <li>
            <t>Erasure: loss of one or more symbols</t>
          </li>
          <li>
            <t>Erasure correction code: algorithm generating repair symbols and reconstructing
missing source symbols from a set of source and repair symbols.</t>
          </li>
          <li>
            <t>Forward Erasure Correction: process of recovering erased symbols
before the detection of their erasure.</t>
          </li>
          <li>
            <t>FEC scheme: the conjunction of an erasure correction code and the specific protocol
elements required to use it with the design described in this document.</t>
          </li>
          <li>
            <t>Encoder: entity producing repair symbols using an erasure correction code.
The encoder can be a library used by the protocol implementation or a program
running in a separate process or machine.</t>
          </li>
          <li>
            <t>Decoder: entity reconstructing missing source symbols using an erasure correction code.
The decoder can be a library used by the protocol implementation or a program running
in a separate process or machine.</t>
          </li>
          <li>
            <t>Coding window: window of source symbols that are required to decode a repair symbol.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="architecture-overview">
      <name>Architecture Overview</name>
      <t>FEC Framework is designed as a module within QUIC-Transport layer.
The primary target of current draft is to establish
common mechanism for integrating FEC logic into the QUIC protocol,
thus ensuring interoperability across different QUIC instances.</t>
      <t>Endpoints use transport parameters in <xref target="QUIC-TRANSPORT"/> to negotiate
whether to enable the FEC mechanism. The FEC Framework specifies necessary
configuration information that needs to be exchanged between QUIC endpoints
using transport parameters during the QUIC handshake process.</t>
      <t>The FEC Framework operates within the QUIC-Transport layer. It facilitates
the transmission of FEC information and redundant data using QUIC frames.</t>
      <t>The FEC framework calls upon the FEC scheme to manage the detailed processes of FEC encoding and decoding.
The FEC scheme defines detailed algorithm process, and the procedures used to
identidy packet payload data in the context of FEC scheme. This draft will describe
the interface specification between FEC Framework and FEC scheme.</t>
      <t>FEC Framework MUST ensure compatibility with existing modules within the QUIC protocol.
Special attention is given to ensuring interoperability with the congestion control
and the ACK handling and retransmission decisions (see <xref target="QUIC-RECOVERY"/> and <xref target="RFC9265"/>).</t>
      <figure anchor="fig-fec-framework">
        <name>FEC Framework</name>
        <artwork><![CDATA[
        +------------------------------------------------------------+
        |                   Application layer                        |
        +------^-------------------------------^---------------------+
               |                               |
   Source data |                               | Recovered source data
               |                               |
 +-------------v-------------------------------|---------------------------+
 |                                             |                           |
 |          QUIC-Transport layer               |                           |
 |                                             |                           |
 |   +-------------------------------------v-------+                       |
 |   |              FEC Framework                  |                       |
 |   |                                             |       +-----------+   |
 |   |  +-----------+ +----------+ +-----------+   |<----->| FEC Scheme|   |
 |   |  | Handshake | |   SID    | |  Repair   |   |       |           |   |
 |   |  | Negotiate | |  Frame   | |  Packet   |   |       | - Encoder |   |
 |   |  |   (TP)    | | Handling | | Handling  |   |       | - Decoder |   |
 |   |  +-----------+ +----------+ +-----------+   |       +-----------+   |
 |   +---^-------------------------------^----------+                      |
 |       |                               |                                 |
 |   +---v-------------------------------v----------+                      |
 |   |   Congestion Control / ACK & Retransmission  |                      |
 |   +----------------------------------------------+                      |
 |                                                                         |
 +-------------^-------------------------------^---------------------------+
               |                               |
   Source pkts |                               | Repair packets
   (with SID)  |                               |
        +------v-------------------------------v---------------------+
        |                      UDP layer                             |
        +------------------------------------------------------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="handshake-negotiation-and-transport-parameter">
      <name>Handshake Negotiation and Transport Parameter</name>
      <section anchor="transport-params">
        <name>Transport Parameter</name>
        <t>This extension defines several new transport parameters used to negotiate
the use of the FEC extension and specific FEC schemes during the connection handshake (see <xref target="QUIC-TRANSPORT"/>).
The new transport parameters are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>fec_encode_schemes (current version uses 0xfece01): A list of variable-length integers
specifying the FEC schemes supported by endpoints for encoding. The presence of this transport parameter
indicates whether FEC functionality is enabled for encoding.</t>
          </li>
          <li>
            <t>fec_decode_schemes (current version uses 0xfecd02): A list of variable-length integers
defining the FEC schemes supported by endpoints for decoding. The content of this transport parameter
determines which FEC scheme is used for decoding.</t>
          </li>
        </ul>
        <t><xref target="fig-transport-param"/> introduce the transport parameter format of fec_encode_schemes and fec_decode_schemes:</t>
        <figure anchor="fig-transport-param">
          <name>Transport Parameter for FEC</name>
          <artwork><![CDATA[
FEC_ENCODER_SCHEMES TRANSPORT_PARAM{
  0xfece01 (i),
  Transport Parameter Length (i),
  Transport Parameter Value {
    FEC Encoder Schemes Length (i),
    FEC Scheme1 ID(i),
    FEC Scheme2 ID(i),
    ...
  }
}

FEC_DECODER_SCHEMES TRANSPORT_PARAM{
  0xfecd01 (i),
  Transport Parameter Length (i),
  Transport Parameter Value {
    FEC Encoder Schemes Length (i),
    FEC Scheme1 ID(i),
    FEC Scheme2 ID(i),
    ...
  }
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>fec_max_symbol_num (current version uses 0xfecb02): A variable-length integer indicating
the block size (i.e., the number of symbols in each encoding group) used in block encoding.
This is an optional transport parameter and SHOULD be sent only when an endpoint uses block code schemes
for encoding. For coding methods such as convolutional codes that do not require a fixed block size,
this parameter SHOULD NOT be included.</t>
          </li>
        </ul>
        <t>For a single endpoint, FEC encoding and decoding are independent processes. By negotiating these separately,
the framework can support distinct FEC schemes for encoding and decoding, or enable unidirectional
encoding/decoding only. This flexibility allows FEC operations to adapt to diverse requirements
and configurations.</t>
        <t>To ensure interoperability of FEC negotiation across QUIC protocol stacks, FEC schemes MUST
use standardized identifiers registered with IANA (Internet Assigned Numbers Authority).
This standardization guarantees seamless communication and compatibility between implementations.</t>
        <t>During negotiation, if a receiver's encoder scheme matches any of the sender's encoder schemes,
the negotiation for that direction is considered successful.</t>
      </section>
      <section anchor="handshake-nego">
        <name>Handshake Negotiation</name>
        <t>Endpoints negotiate the transport parameters for FEC during the connection handshake,
as outlined in Section 3.1.</t>
        <t><xref target="fig-fec-handshake"/> illustrates an example of the negotiation process:</t>
        <figure anchor="fig-fec-handshake">
          <name>Handshake negotiation for FEC</name>
          <artwork><![CDATA[
Client                                       Server
        ------------------------------------>

        fec_encode_schemes={REED_SOLOMON,XOR}

        fec_decode_schemes={XOR}

        fec_max_symbol_num=10

        <------------------------------------

                     fec_encode_schemes={XOR}

            fec_decode_schemes={REED_SOLOMON}

                         fec_max_symbol_num=5
]]></artwork>
        </figure>
        <t>Please note that in the actual process, the Client first declare the list of encoder/decoder algorithms
it can handle. When the server receive the fec_encode_schemes and fec_decode_schemes,
it chooses one proper scheme for each direction, and set fec_decode_schemes and fec_encode_schemes params
as corresponding scheme for decoding and encoding.</t>
        <t>Note that if the client wants to specify the FEC algorithm, it can provide only one FEC algorithm
for fec negotiation process, the server could choose to support or not; otherwise, the algorithm selection
SHOULD be based on the server's priority.</t>
        <t>For example, if the client's FEC schemes parameter is set as follows:</t>
        <ul spacing="normal">
          <li>
            <t>fec_encode_schemes {Algorithm1, Algorithm2, Algorithm3, ...}</t>
          </li>
          <li>
            <t>fec_decode_schemes {Algorithm1, Algorithm2, Algorithm3, ...}</t>
          </li>
        </ul>
        <t>The encoder/decoder algorithm used in practice is chosen and returned by the Server:</t>
        <ul spacing="normal">
          <li>
            <t>supported_fec_encode_schemes {Algorithm1}</t>
          </li>
          <li>
            <t>supported_fec_decode_schemes {Algorithm3}</t>
          </li>
        </ul>
        <t>Note that the encoding/decoding option and the selected algorithm may differ after
negotiation.</t>
      </section>
    </section>
    <section anchor="transport-mechanism">
      <name>Transport mechanism</name>
      <t>The FEC module directly participates in and influences the sending and receiving stages
of packet transmission:</t>
      <t>As the sender, the FEC Framework takes the original data frame as source symbols and provides
the required source symbols to the FEC scheme module. The FEC scheme can encode the data grouped
by streams, or mixed data from different streams.</t>
      <t>FEC Framework retrieves the following information from the FEC scheme:</t>
      <ol spacing="normal" type="1"><li>
          <t>Source Symbol ID (SID) frame: SID frame is viewed as an unique identification for source symbol,
which is composed of block ID and symbol index typically.</t>
        </li>
        <li>
          <t>Repair packets: When the incoming source symbols meets the encoding conditions, the FEC scheme
could generate original source symbol with repair packets. Repair packet contains FEC Payload ID,
repair symbol, and optional repair key.</t>
        </li>
      </ol>
      <t>At the sender, FEC Framework is required to acquire and insert the SID frame into the packet
that includes the source symbols. Subsequently, FEC Framework SHOULD generate and transmit repair packets
to the receiver after processing a sufficient number of source symbols. Generally, the repair packets
SHOULD be sent immediately following the source packets from the same block.</t>
      <t>As the receiver, the source packets can be normally parsed by ignoring SID frame, but it might be
necessary to store source symbols and identifications to perform FEC decoding after receiving
repair packets from the same block.</t>
      <figure anchor="fig-fec-work-flow">
        <name>Work Flow for FEC</name>
        <artwork><![CDATA[
+-------------------------------------------------------------------------------+
|                               Application                                     |
+-------------------------------------------------------------------------------+
            |                                                      ^
            | Application data                Received & recovered |
            |                                     application data |
            |                                                      |
      +-----v-----+                                          +-----|-----+
|-----| Send API  |------------------------------------------| Recv API  |------|
|     +-----|-----+                                          +-----^-----+      |
|           |                                                      |            |
|           |                                       Source packets |            |
|           | Source packet                     & recovered source |            |
|           |                                              packets |            |
|    +------v------+                QUIC                    +------|------+     |
|    | FEC Encoder |                                        | FEC Decoder |     |
|    +------|------+                                        +------^------+     |
|           |                                                      |            |
|           | Source packets                        Source packets |            |
|           | with SID frame                        with SID frame |            |
|           | & Repair packets                    & Repair packets |            |
|           |                                                      |            |
|   +-------v-------+                                      +-------|-------+    |
----| Packet Sender |--------------------------------------|Packet Receiver|-----
    +---------------+                                      +-------^-------+
            |                                                      |
            | QUIC packets                            QUIC packets |
            v                                                      |
+-------------------------------------------------------------------------------+
|                                 Network                                       |
+-------------------------------------------------------------------------------+
]]></artwork>
      </figure>
      <section anchor="sender-operation">
        <name>Sender Operation</name>
        <t>### Define FEC-protected QUIC payload</t>
        <t>Endpoints can decide which types of data require FEC protection.
As applying equal protection to all data types may result in inefficient bandwidth utilization,
it is RECOMMENDED that protocol implementations selectively prioritize protection for critical data,
such as restricting FEC to stream frames and datagram frames.
For retransmitted frames or non-time-sensitive data, FEC SHOULD NOT be applied.</t>
        <section anchor="identify-source-symbols-using-sid-frame">
          <name>Identify source symbols using SID frame</name>
          <t>In the context of packets that require protection through FEC (Forward Error Correction),
it is necessary to define a SID (Source Identifier) frame that conveys the identity information
of the data. This is intended to help the receiver clarify the following information
during the decoding process:</t>
          <ul spacing="normal">
            <li>
              <t>Which part of data insides the packet will be taken part in the FEC decode process.</t>
            </li>
            <li>
              <t>Which block and the index inside the block the source symbol belongs to.</t>
            </li>
          </ul>
          <t>Therefore, it's recommended to append the SID frame after the fec-protected QUIC packet data
to indicate that the data preceding this frame is identified by the current SID frame and
is involved in the decoding process at the receiver.</t>
          <t>Based on the above reason, generating and inserting the SID frame SHOULD occur
before the encryption process of packets.</t>
          <t>As the FEC module requires an additional data frame to be appended after the protected packet,
developers MUST consider reserving space for the FEC data frames within the packet.
This ensures that the length of the packet does not exceed the MTU (Maximum Transmission Unit) limit.
Additionally, the SID MUST include Explicit Source Payload ID information to facilitate
the resolution of the current data's identity, as shown in Figure 6.</t>
        </section>
        <section anchor="generate-and-send-repair-symbols">
          <name>Generate and send repair symbols</name>
          <t>The encoding content of the Repair package originates from the original data identified by the SID frame.
It requires encoding the identity information of the FEC for the receiver to recognize the protection
object of the current Repair package, as shown in Figure 6.</t>
          <t>The specific encoding process is carried out by the FEC scheme module, which typically requires
the sender to pre-set the following parameters:</t>
          <ul spacing="normal">
            <li>
              <t>Block size: How many original packets are involved in the calculation for a computing unit,
which directly affects the frequency of Repair symbol generation.</t>
            </li>
            <li>
              <t>Redundancy level of FEC: How many redundant packets can be generated from the block.</t>
            </li>
            <li>
              <t>Repair key (optional): The encoding key required by the FEC scheme module, which usually
needs to be included in the Repair package for the receiver to use for decoding.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="receiver-operation">
        <name>Receiver Operation</name>
        <section anchor="process-recovered-symbols">
          <name>Process recovered symbols</name>
          <t>In the FEC module, the block triggering the decoding module generally needs to satisfy the following conditions:</t>
          <ol spacing="normal" type="1"><li>
              <t>The block receives a sufficient number of source symbols;</t>
            </li>
            <li>
              <t>The block receive at least one repair symbol.</t>
            </li>
          </ol>
          <t>However, the specific required amounts of source symbols and repair symbols SHOULD be
determined by the FEC schemes module.</t>
        </section>
      </section>
    </section>
    <section anchor="fec-frame-types">
      <name>FEC Frame Types</name>
      <t>FEC will introduce three new frames into QUIC protocol: the Source Symbol ID (SID) frame,
which SHOULD be attached to the original packet; the Repair Symbol frame,
which contains repair data and SHOULD be encapsulated and transmitted independently;
and the optional Repair ACK frame, which allows the receiver to notify the sender
of source packets that have been successfully recovered via FEC decoding.</t>
      <section anchor="SID-Frame">
        <name>Source Symbol ID Frame</name>
        <t>FEC SID FRAME contains the identification of the current source packet,
which declares the encoding flow and the block current symbol is involved.</t>
        <t>SID Frame SHOULD be inserted after the fec-protected QUIC frame to indicate
the range of FEC protected data.
Since the maximum length of the repair symbol is equal to that of the source symbol,
it is necessary to restrict the content length of the source packet to prevent
the content length of the repair packet from exceeding the MTU limit.</t>
        <t>SRC_SYMBOL_ID Frame Structure:</t>
        <figure anchor="fig-src-symbol-id-frame">
          <name>SRC_SYMBOL_ID Frame</name>
          <artwork><![CDATA[
SRC_SYMBOL_ID Frame {
  Type (i) = 0xfec5,
  Flow ID (i),
  Explicit Source Payload ID(i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Flow ID (i): A variable-length integer that identifies which data stream the symbol belongs to.</t>
          </li>
          <li>
            <t>Explicit Source Payload ID (SID): A variable-length integer that serves as a unique identifier
for the source symbol. It MUST includes the block id and the symbol index of current source symbol.
This can be formatted as follows.</t>
          </li>
        </ul>
        <figure anchor="fig-explicit-source-payload-id">
          <name>Explicit Source Payload ID</name>
          <artwork><![CDATA[
       3 bytes            1 byte
+---------------------+------------+
|      block id       | symbol idx |
+---------------------+------------+
]]></artwork>
        </figure>
      </section>
      <section anchor="Repair-Symbol-Frame">
        <name>Repair Symbol Frame</name>
        <t>In contrast to the SID Frame mentioned above, the Repair Frame SHOULD include not only the identification
but also the encoded content of the source symbols.</t>
        <t>Repair symbol frame SHOULD incorporate the following informations:</t>
        <figure anchor="fig-repair-symbol-frame">
          <name>REPAIR_SYMBOL Frame</name>
          <artwork><![CDATA[
REPAIR_SYMBOL Frame {
  Type (i) = 0xfec6,
  Repair ID {
    Flow ID(i),
    Expilicit Repair payload id (4 bytes),
  }
  Repair Key (4 bytes),
  Repair Symbol Payload (E),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Repair ID(i):
      - Flow ID(i): A variable-length integer that identifies which data stream the symbol belongs to;
      - Explicit Repair Payload ID (4 bytes): A variable-length integer that serves as a unique identifier
   for the repair symbol. It MUST includes the block id and the symbol index of current repair symbol.</t>
          </li>
          <li>
            <t>Repair Key (4 bytes): An optional key generated by fec scheme, and is used for FEC decoding.</t>
          </li>
          <li>
            <t>Repair Symbol Payload: The content of repair symbol, whose length is typically aligns with the
block's longest symbol. This can be formatted as Figure above.</t>
          </li>
        </ul>
      </section>
      <section anchor="Repair-ACK-Frame">
        <name>Repair ACK Frame</name>
        <t>The Repair ACK frame is an OPTIONAL mechanism that allows the receiver to notify the sender
which QUIC packets have been successfully received through FEC recovery.
Its semantics mirror those of the standard QUIC ACK frame (see <xref target="QUIC-TRANSPORT"/> Section 19.3):
the receiver acknowledges packet numbers using the same packet number space,
but the acknowledgment is triggered by FEC decoding rather than direct network reception.</t>
        <t>When the sender receives a Repair ACK, it can determine that the data carried in those packets
has been successfully delivered to the remote endpoint via FEC recovery, and therefore
SHOULD suppress any pending retransmissions for those packets, avoiding bandwidth waste.</t>
        <t>Support for sending and processing Repair ACK frames is OPTIONAL. An endpoint that does not
implement Repair ACK MUST silently ignore received Repair ACK frames.</t>
        <section anchor="distinction-from-standard-ack">
          <name>Distinction from Standard ACK</name>
          <t>Although the Repair ACK frame conveys the same packet number information as a standard
ACK frame, it MUST be treated differently by the sender:</t>
          <ul spacing="normal">
            <li>
              <t>An endpoint MUST NOT use a Repair ACK frame to update RTT estimates or to trigger
loss detection. RTT estimation and loss recovery MUST rely solely on standard QUIC
ACK frames as specified in <xref target="QUIC-RECOVERY"/>.</t>
            </li>
            <li>
              <t>An endpoint MUST NOT update its congestion window or pacing rate upon receiving a
Repair ACK frame. A recovered packet was never successfully received by the network
in the normal sense, so its timing carries no meaningful congestion signal.</t>
            </li>
            <li>
              <t>The sender MUST NOT remove packets from its loss detection state solely based on a
Repair ACK. Instead, it SHOULD only cancel scheduled retransmissions for those packets.</t>
            </li>
          </ul>
          <t>The separate frame type (0xfec7) ensures that existing QUIC implementations and
congestion control modules can unambiguously distinguish Repair ACK from standard ACK.</t>
        </section>
        <section anchor="repair-ack-frame-structure">
          <name>Repair ACK Frame Structure</name>
          <t>The Repair ACK frame follows the same range-encoding structure as the standard QUIC ACK
frame, but omits the ACK Delay field (which is used for RTT calculation and is not
applicable here) and the ECN Counts field.</t>
          <figure anchor="fig-repair-ack-frame">
            <name>REPAIR_ACK Frame</name>
            <artwork><![CDATA[
REPAIR_ACK Frame {
  Type (i) = 0xfec7,
  Largest Acknowledged (i),
  ACK Range Count (i),
  First ACK Range (i),
  ACK Range (..) ...,
}

ACK Range {
  Gap (i),
  ACK Range Length (i),
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Largest Acknowledged (i): A variable-length integer representing the largest packet
number among the packets recovered via FEC and being acknowledged in this frame.
The semantics are identical to the Largest Acknowledged field in a standard ACK frame.</t>
            </li>
            <li>
              <t>ACK Range Count (i): A variable-length integer specifying the number of ACK Range
fields that follow.</t>
            </li>
            <li>
              <t>First ACK Range (i): A variable-length integer indicating the number of contiguous
packets recovered, counting down from Largest Acknowledged (inclusive).
A value of zero means only the packet with number Largest Acknowledged was recovered.</t>
            </li>
            <li>
              <t>ACK Range: Each entry describes a contiguous range of recovered packet numbers
preceded by a gap of unacknowledged packet numbers:  </t>
              <ul spacing="normal">
                <li>
                  <t>Gap (i): The number of unacknowledged packets between the end of the previous
acknowledged range and the start of this one, minus one.</t>
                </li>
                <li>
                  <t>ACK Range Length (i): The number of contiguous packets recovered in this range,
minus one.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="sender-behavior-upon-receiving-repair-ack">
          <name>Sender Behavior upon Receiving Repair ACK</name>
          <t>Upon receiving a Repair ACK frame, the sender SHOULD:</t>
          <ol spacing="normal" type="1"><li>
              <t>Identify the QUIC packets whose packet numbers are covered by the acknowledged ranges.</t>
            </li>
            <li>
              <t>Cancel any pending retransmission scheduled for those packets.</t>
            </li>
            <li>
              <t>Not alter the congestion control state, RTT estimates, or loss detection timers as a
result of processing the Repair ACK.</t>
            </li>
          </ol>
          <t>If a packet number acknowledged by a Repair ACK has already been acknowledged by a
standard QUIC ACK frame, the Repair ACK SHOULD be silently ignored for that packet number.</t>
        </section>
      </section>
    </section>
    <section anchor="operation-management-consideration">
      <name>Operation &amp; Management Consideration</name>
      <t>The QUIC-FEC protocol are expected to be a universal solution against packet loss.</t>
      <t>When implemented, the QUIC packets will be finally divided into different FEC blocks according to the
stream size or fixed size. Since that, the FEC Framework only needs to focus on whether the symbols
within the block satisfy the encoding/decoding conditions, regardless of the upper layer protocols.</t>
      <t>It's important for FEC Framework to determine how to group QUIC packets into blocks, which needs to consider
the optimisation effects at the application layer and the FEC scheme support.</t>
      <t>For example, dividing data into fixed-size blocks is a more convenient approach and allows better control over
the packet repair rate.</t>
      <t>However, this may result in some repair packets arriving too late for the source packets to be protected,
just as for source packet 4 belows, repair packet of packet 4 will not be send until stream 2 finish the sending:</t>
      <figure anchor="fig-fix-block-implementation-steps">
        <name>FIXED BLOCK Implementation Steps</name>
        <artwork><![CDATA[
              +-------------------------------------------------+
              |                Application Data                 |
              +-------------------------------------------------+
                                   |
                                   |
                                   v
              +----------+ +----------+ +----------+ +----------+
   Stream 1   | Source   | | Source   | | Source   | | Source   |
              | packet 1 | | packet 2 | | packet 3 | | packet 4 |
              +----------+ +----------+ +----------+ +----------+

              +----------+ +----------+
   Stream 2   | Source   | | Source   |
              | packet 1 | | packet 2 |
              +----------+ +----------+
                                   |
                                   |
                             +-----v-----+        +-----------+
   block size = 3 ---------> | FEC       <--------> FEC       |
                             | Framework |        | Scheme    |
                             +-----|-----+        +-----------+
                                   |
                                   v
              +----------+ +----------+ +----------+    +----------+
   Block 1    | Source   | | Source   | | Source   |    | Repair   |
              | packet 1 | | packet 2 | | packet 3 |    | packet 1 |
              +----------+ +----------+ +----------+    +----------+

              +----------+ +----------+ +----------+    +----------+
   Block 2    | Source   | | Source   | | Source   |    | Repair   |
              | packet 4 | | packet 1 | | packet 2 |    | packet 2 |
              +----------+ +----------+ +----------+    +----------+
]]></artwork>
      </figure>
      <t>Dividing the block according to the QUIC Stream can avoid the problem of long time difference
between the generation of repair packets and the arrival of protected packets.</t>
      <t>But not all the fec schemes supports variable-length block codecs. It requires the fec scheme to carry
the block size information with the FEC frame. For instance, certain algorithms employ a repair key field
to specify the number of packets and their indices within a block, enabling the receiver to determine
when decoding is possible. Without this information, the receiver cannot support encoding schemes with
flexible block sizes.</t>
      <figure anchor="fig-flex-block-implementation-steps">
        <name>FLEXIBLE BLOCK Implementation Steps</name>
        <artwork><![CDATA[
              +------------------------------------------------+
              |               Application Data                 |
              +------------------------------------------------+
                                   |
                                   |
                                   v
              +----------+ +----------+ +----------+ +----------+
   Stream 1   | Source   | | Source   | | Source   | | Source   |
              | packet 1 | | packet 2 | | packet 3 | | packet 4 |
              +----------+ +----------+ +----------+ +----------+

              +----------+ +----------+
   Stream 2   | Source   | | Source   |
              | packet 1 | | packet 2 |
              +----------+ +----------+
                                   |
                                   |
                             +-----v-----+        +-----------+
   block size = 3 ---------> | FEC       <--------> FEC       |
                             | Framework |        | Scheme    |
                             +-----|-----+        +-----------+
                                   |
                                   v
              +----------+ +----------+ +----------+ +----------+    +----------+
   Block 1    | Source   | | Source   | | Source   | | Source   |    | Repair   |
              | packet 1 | | packet 2 | | packet 3 | | packet 4 |    | packet 1 |
              +----------+ +----------+ +----------+ +----------+    +----------+

              +----------+ +----------+    +----------+
   Block 2    | Source   | | Source   |    | Repair   |
              | packet 1 | | packet 2 |    | packet 2 |
              +----------+ +----------+    +----------+
]]></artwork>
      </figure>
      <t>In short, the FEC scheme determines which block partitioning method can be chosen,
and the application layer optimization effect determines which partitioning method should be chosen.
And the specific codec flow and repair key design should be decided by the fec scheme.</t>
      <t>The both steps can be applied to most application layer requests based on the QUIC protocol,
and it's been proven to work with the HTTP/3 and MoQ protocols as the above steps.</t>
      <t>However, FEC should not protect all application layer data without discrimination in the QUIC connection.
In order to reduce the bandwidth overhead, the FEC module should provide the upper layers with an interface
to switch off the FEC module at the Stream level.</t>
      <t>It did make differences on when and how to switch off FEC among different application layer.
We offers an abstract steps as an example here:</t>
      <figure anchor="fig-close-fec-implementation-steps">
        <name>CLOSE FEC Implementation Steps</name>
        <artwork><![CDATA[
      Client-APP                                      Server-APP
          |
          v
set_fec_close_API(stream_id)
          |
          v
stream_state.enable_fec = false
          |
          v
generate close_fec_frame to packet
          |
          v
            --------------------------------------------->
            QUIC_Packet {                                 |
              ...Frames,                                  |
              CLOSE_FEC_FRAME{stream_id}                  |
            }                                             |
                                            parse close_fec_frame from packet
                                                          |
                                                          v
                                            stream_state.enable_fec = false
]]></artwork>
      </figure>
    </section>
    <section anchor="security-consideration">
      <name>Security Consideration</name>
      <t>TBD</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document defines three new transport parameters for the negotiation of enable fec for QUIC, and three new frame types.</t>
      <section anchor="new-transport-parameters">
        <name>New transport parameters</name>
        <t>The following entry in <xref target="transport-parameters"/> should be added to the "QUIC Transport Parameters" registry under the "QUIC Protocol" heading.</t>
        <table anchor="transport-parameters">
          <name>Addition to QUIC Transport Parameters Entries</name>
          <thead>
            <tr>
              <th align="left">Parameter ID</th>
              <th align="left">Parameter name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0xfece01</td>
              <td align="left">fec_encode_schemes</td>
              <td align="left">
                <xref target="transport-params"/></td>
            </tr>
            <tr>
              <td align="left">0xfecd02</td>
              <td align="left">fec_decode_schemes</td>
              <td align="left">
                <xref target="transport-params"/></td>
            </tr>
            <tr>
              <td align="left">0xfecb02</td>
              <td align="left">fec_max_symbol_num</td>
              <td align="left">
                <xref target="transport-params"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="new-frames">
        <name>New frames</name>
        <t>The following frame types defined in <xref target="frame-types"/> should be added to the "QUIC Frame Types" registry under the "QUIC Protocol" heading.</t>
        <table anchor="frame-types">
          <name>Addition to QUIC Frame Types Entries</name>
          <thead>
            <tr>
              <th align="left">Frame ID</th>
              <th align="left">Frame name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0xfec5</td>
              <td align="left">SID Frame</td>
              <td align="left">
                <xref target="SID-Frame"/></td>
            </tr>
            <tr>
              <td align="left">0xfec6</td>
              <td align="left">Repair Frame</td>
              <td align="left">
                <xref target="Repair-Symbol-Frame"/></td>
            </tr>
            <tr>
              <td align="left">0xfec7</td>
              <td align="left">Repair ACK Frame</td>
              <td align="left">
                <xref target="Repair-ACK-Frame"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The specification has been materially improved through technical discussions with Ian Swett.
Thanks to his recommendations with the draft and FEC mechanism.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC-TRANSPORT">
          <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="QUIC-TLS">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="RFC6363">
          <front>
            <title>Forward Error Correction (FEC) Framework</title>
            <author fullname="M. Watson" initials="M." surname="Watson"/>
            <author fullname="A. Begen" initials="A." surname="Begen"/>
            <author fullname="V. Roca" initials="V." surname="Roca"/>
            <date month="October" year="2011"/>
            <abstract>
              <t>This document describes a framework for using Forward Error Correction (FEC) codes with applications in public and private IP networks to provide protection against packet loss. The framework supports applying FEC to arbitrary packet flows over unreliable transport and is primarily intended for real-time, or streaming, media. This framework can be used to define Content Delivery Protocols that provide FEC for streaming media delivery or other packet flows. Content Delivery Protocols defined using this framework can support any FEC scheme (and associated FEC codes) that is compliant with various requirements defined in this document. Thus, Content Delivery Protocols can be defined that are not specific to a particular FEC scheme, and FEC schemes can be defined that are not specific to a particular Content Delivery Protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6363"/>
          <seriesInfo name="DOI" value="10.17487/RFC6363"/>
        </reference>
        <reference anchor="RFC2199">
          <front>
            <title>Request for Comments Summary RFC Numbers 2100-2199</title>
            <author fullname="A. Ramos" initials="A." surname="Ramos"/>
            <date month="January" year="1998"/>
          </front>
          <seriesInfo name="RFC" value="2199"/>
          <seriesInfo name="DOI" value="10.17487/RFC2199"/>
        </reference>
        <reference anchor="RFC9174">
          <front>
            <title>Delay-Tolerant Networking TCP Convergence-Layer Protocol Version 4</title>
            <author fullname="B. Sipos" initials="B." surname="Sipos"/>
            <author fullname="M. Demmer" initials="M." surname="Demmer"/>
            <author fullname="J. Ott" initials="J." surname="Ott"/>
            <author fullname="S. Perreault" initials="S." surname="Perreault"/>
            <date month="January" year="2022"/>
            <abstract>
              <t>This document describes a TCP convergence layer (TCPCL) for Delay-Tolerant Networking (DTN). This version of the TCPCL protocol resolves implementation issues in the earlier TCPCL version 3 as defined in RFC 7242 and provides updates to the Bundle Protocol (BP) contents, encodings, and convergence-layer requirements in BP version 7 (BPv7). Specifically, TCPCLv4 uses BPv7 bundles encoded by the Concise Binary Object Representation (CBOR) as its service data unit being transported and provides a reliable transport of such bundles. This TCPCL version also includes security and extensibility mechanisms.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9174"/>
          <seriesInfo name="DOI" value="10.17487/RFC9174"/>
        </reference>
        <reference anchor="RFC5226">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>Many protocols make use of identifiers consisting of constants and other well-known values. Even after a protocol has been defined and deployment has begun, new values may need to be assigned (e.g., for a new option type in DHCP, or a new encryption or authentication transform for IPsec). To ensure that such quantities have consistent values and interpretations across all implementations, their assignment must be administered by a central authority. For IETF protocols, that role is provided by the Internet Assigned Numbers Authority (IANA).</t>
              <t>In order for IANA to manage a given namespace prudently, it needs guidelines describing the conditions under which new values can be assigned or when modifications to existing values can be made. If IANA is expected to play a role in the management of a namespace, IANA must be given clear and concise instructions describing that role. This document discusses issues that should be considered in formulating a policy for assigning values to a namespace and provides guidelines for authors on the specific text that must be included in documents that place demands on IANA.</t>
              <t>This document obsoletes RFC 2434. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5226"/>
          <seriesInfo name="DOI" value="10.17487/RFC5226"/>
        </reference>
        <reference anchor="RFC9265">
          <front>
            <title>Forward Erasure Correction (FEC) Coding and Congestion Control in Transport</title>
            <author fullname="N. Kuhn" initials="N." surname="Kuhn"/>
            <author fullname="E. Lochin" initials="E." surname="Lochin"/>
            <author fullname="F. Michel" initials="F." surname="Michel"/>
            <author fullname="M. Welzl" initials="M." surname="Welzl"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>Forward Erasure Correction (FEC) is a reliability mechanism that is distinct and separate from the retransmission logic in reliable transfer protocols such as TCP. FEC coding can help deal with losses at the end of transfers or with networks having non-congestion losses. However, FEC coding mechanisms should not hide congestion signals. This memo offers a discussion of how FEC coding and congestion control can coexist. Another objective is to encourage the research community to also consider congestion control aspects when proposing and comparing FEC coding solutions in communication systems.</t>
              <t>This document is the product of the Coding for Efficient Network Communications Research Group (NWCRG). The scope of the document is end-to-end communications; FEC coding for tunnels is out of the scope of the document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9265"/>
          <seriesInfo name="DOI" value="10.17487/RFC9265"/>
        </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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC5510">
          <front>
            <title>Reed-Solomon Forward Error Correction (FEC) Schemes</title>
            <author fullname="J. Lacan" initials="J." surname="Lacan"/>
            <author fullname="V. Roca" initials="V." surname="Roca"/>
            <author fullname="J. Peltotalo" initials="J." surname="Peltotalo"/>
            <author fullname="S. Peltotalo" initials="S." surname="Peltotalo"/>
            <date month="April" year="2009"/>
            <abstract>
              <t>This document describes a Fully-Specified Forward Error Correction (FEC) Scheme for the Reed-Solomon FEC codes over GF(2^^m), where m is in {2..16}, and its application to the reliable delivery of data objects on the packet erasure channel (i.e., a communication path where packets are either received without any corruption or discarded during transmission). This document also describes a Fully-Specified FEC Scheme for the special case of Reed-Solomon codes over GF(2^^8) when there is no encoding symbol group. Finally, in the context of the Under-Specified Small Block Systematic FEC Scheme (FEC Encoding ID 129), this document assigns an FEC Instance ID to the special case of Reed-Solomon codes over GF(2^^8).</t>
              <t>Reed-Solomon codes belong to the class of Maximum Distance Separable (MDS) codes, i.e., they enable a receiver to recover the k source symbols from any set of k received symbols. The schemes described here are compatible with the implementation from Luigi Rizzo. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5510"/>
          <seriesInfo name="DOI" value="10.17487/RFC5510"/>
        </reference>
        <reference anchor="RFC5052">
          <front>
            <title>Forward Error Correction (FEC) Building Block</title>
            <author fullname="M. Watson" initials="M." surname="Watson"/>
            <author fullname="M. Luby" initials="M." surname="Luby"/>
            <author fullname="L. Vicisano" initials="L." surname="Vicisano"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>This document describes how to use Forward Error Correction (FEC) codes to efficiently provide and/or augment reliability for bulk data transfer over IP multicast. This document defines a framework for the definition of the information that needs to be communicated in order to use an FEC code for bulk data transfer, in addition to the encoded data itself, and for definition of formats and codes for communication of that information. Both information communicated with the encoded data itself and information that needs to be communicated 'out-of-band' are considered. The procedures for specifying new FEC codes, defining the information communication requirements associated with those codes and registering them with the Internet Assigned Numbers Authority (IANA) are also described. The requirements on Content Delivery Protocols that wish to use FEC codes defined within this framework are also defined. The companion document titled "The Use of Forward Error Correction (FEC) in Reliable Multicast" describes some applications of FEC codes for delivering content. This document obsoletes RFC 3452. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5052"/>
          <seriesInfo name="DOI" value="10.17487/RFC5052"/>
        </reference>
        <reference anchor="QUIC-RECOVERY">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+09/VPcRpa/66/os6s2UJ6ZNTjJXshm6zDgDbW24YBcNnd1
S/VIPaBYI81KGjAB9m+/99VfkgYGx7mrq9qppMxopO7Xr997/b41Ho+TNm8L
s6PeHOypg4+tKZu8KtWsqtW//3C4l+jptDZXO/QF70myKi31HB7Iaj1rx79c
mvJi/Pdlno5nJh0bO8L45XaS6Rbuu93fPTu4T1L4clHVNzuqabMkyRf1jmrr
ZdNuv3z5Ddysa6N31Fmty2ZR1W1yXdUfLupquZC5f4TveXmh/ozXkg/mBm7I
dtRh2Zq6NO14H8FJkqbVZXaui6qEqW9MkyzyHfVfbZWOVAPD1mbWwF83c/zj
v5NEL9vLqt5JxolSednsqO8n6j9xSfCdl0nf1PdLXV7C/3C5qi921G6RT/VU
w/TpBK6Zuc6LHUXIuJRbJ79cXv5bq6upriZpNfdT/DRRb/Olm+AnXc5NLpce
GHye6+rnfFLczP9N8w3jHG7AoZOkrOq5bvMrswMPIL7GZye770+Pj07OdlQ9
S795+fKl++Xtqb22BddO3ux9/errVzv85/bWN9/In99s/eFL+fOr7e2v7dXt
r7/agf0rZ+GUeM9XWy/tny+/2naAnBzsHf3HwclPds5tAHc8His9bdpap7Bn
Z5d5o4CulnNTtqpZmDSf5aZRWr2p6mtdZ+qgroEg96q6NmmL9LkBpLipHLUl
SK/tpWFSWdQVbHhVjNT1ZZ5e4verPDN0XZ7XFxr2olULnX4wrSqqppkwWPM8
ywoDMD5H2qqrbElPPABl6eFQbcUgXJmavm+p29t4O+7vE7ipWS6QyptHVjhJ
kC1zRMXcAKVmqpopU+tmWRuVVghfAUSlgNM0cBPwzjxvaOLpjWry+bIAdjDV
siluksaUGTJQbbJlmWlYAz210RgDQAoV3N9vThSt1N6W3ihdFNV1Q/gF6Axs
eY1ryAxiE9af4eUKrqoin+etyRCfMvx1DmAvW3Wt8xZnx42qTQjqKOFdSgGR
UwP/lWaWp7mmhRUgNQCEcYP4RWJTTWpKXecV7hcgD1kK1piaEQyri3GbzxEz
8/myzEHkkCyrgc9QnDQA3wejfjTTk7M9Sxyw1GsgDkCQXiyKHICHad0ksFFw
j24UElCFKJ+ZGiAyuBZc+VWVpzAhoGhCInRR6JsmgaXkc9xgRDPskcH9ECTh
k4Qfpr1GAZoBdcuyNkWup3AviDMEd5QAxmsDT1YLWFb+Cz65bOBe83EB4yAY
gAQiL5x6nl9ctoA/WL0BgknrJWFxVuE+tlaqv6v+XW28M1muFW0ZPr5p9wCQ
sajzOSy9uMGpMnqE1w7cavQ8ojKLQ9w6mL2GzUKYce3A2EirAX8pAGBO84ZD
TLqMlcHul8BWl9U1IdTtnmo1bJ6ZwTEDSINNIkZr7YGB3J0aZONTEIuGnvV8
mQsrI3Kv+UkauKFNXGj8Gw4SOBty2DAD51kNZ0cJJ1abM+6msCnGAIdfVwo4
aVHBkE0f+gqGLCu7DFoFYmTGHFQhhYsYAuTCmUdcVM/h3myEUpxHyGM8MOdF
bIuPAtWlS+QQIENAK664SS8NrKoHly6ayg0Ju4UUVZVAHSdmofNa7e79hRHi
5AFdH8P18Ru8DoIBthbO3otL2fRQHBAFwLLz2Q1dR1kDV4EAmmpZA9YtrQM7
4SbNlkXhGMJkiQU/gysopEQGBYJHRhTRCZuDfFMaHEzXNx2R0njW0cCgJPam
sNHA6C2Ar5vWEOkCrwF9LIkl20vd0ky0DCs77H7CeQfbhLxPEg0FwYVp6BYr
hmHvTs7OFF6d08OwCc+fg0gvr2AHECqitX3chJy/3z7P3Ld73DKjQLFRqNk0
6tm7H07Pno34X/X+iP4+OQDaPTnYx79Pv999+9b9wXck8OXoh7fyO/7ln9w7
evfu4P0+PwxXVefSu92f4B+AMXl2dHx2ePR+9+0z5LM2piRAAdMxoQS2gigZ
7jBNWudTFqCv947V1pfJ7e2/kE6x9c39veIv/wpaBXy5BlWJJgOxAKTAXwH9
sGOLhdEo13H7QW1c5C1Q7winaIAZSoU7C7j9EYRc0wBQfutAQCGRALgzPc9B
mta8W/gbc1lVVBci2fIy6Z/NEzj0lc4y2hKgERNIDuLjCkkS6QXIdQwSm7gP
x25AKRqrUyZ3UDCnFehsixwoFNnAqUsVagvppQbyyfBQ6IgTpWK+BeJqQPrW
jWg2wkYLfVNUGogEkRJOSVqMZWoLhRcdIRg4NCjgJIhmdTWn9cHZMc1LugG1
UeBfAxwKcmJglgPWQ3ZEus9gJw1ywbyq3Y3BfTC2U26Ay+E5XYBBAPszVxdw
6MPpwepJAHvjtAuBNSfNnNgc7o2B4lVoALkNJA8PEI5JwHu9i4HzmteOPUlw
kODMRrULUGUXpoAFZrhSRBurQrgyeAYuwGSipfFkTjLvCJbLn5elewA1yGEc
EfQk/ljdTJ1ui3ZBYZBGGnteZciXQNp4ejiyB67ML8qYOSOG5q0scTawyFBS
tTc4C5D8wHYsG1Z8VgHMFIxilQa0Sp0GzWtao6Am1pvyKWHXgvoCr4UpE2hI
44+gUMxhvBoEPc6KEgE2Fw/r1vhNAoLT6SUcbLSSfROvJKadVZSz7rIy85mW
ZRdFNuEay9qjYxG2tcyq6x35N6ByuxAShSiiQ5pgqGGWaDMnZOPs1jAJEi+u
+ghI/So31wmZHW+c5pU3Qkcs6cEYAfIo+CgURWzsLHfQ2W9MPaHTjJVJQIuu
L5gr0yUgFpUYNNdxYIAPjkzQe/PmMkHFndRElJB5Myf1E8+ZC5EOCBeIcGAE
uFoNmHxw8C8bf6rTGVWBtqyncB4APei0RmmV5TNS5Ft+3BoRKBsOrDQmXgr0
S6ck4pb1jw5ciVUYDejTBlUQWl5JWj3CSmq6XdyESCrGtDcrnW6ToNGRXyxr
pqJQhNNul8ZkVrUMjhZRV2l57oBJmNAHF5VZPUhQCgNlzSXq3E6zTvoAE25b
01hasI/36EEdtnAqp7gLeD/ZCZHFCsRBxm6wPpbdkd7LCwgU+AAqbyqgPQb7
t6hKh3aWv4inuS71hZPbGrTAzC7RNBYMEmDWyHNqqZtKRrMatRvHH2ky4siJ
cLoASDYNS4u2SuBkBymV3VgzSY51XqkgE9VLsGMsXDyx6MfMRNd5UTgBz/YX
Kas69edGbMPEW4gABkN3mZ/UT2IoUg8WMJTwEh0y5mPesGglmdAjBMeaYJgh
MKBL6LZljRj5/wLsh5LZZBXPusOsr3UnFrtowCDFFnbPYosAtzAn08AaOJFv
CrgXnyE3CDq40A2SJP/4xz9APvPnxfhXfF64Ye5U/7OLfgfZIeKVgXv44S40
f3tk3uHfPTQPANWbVzRbIs1HHwANVEw7e0Dhc58wb4z2q0fWe/fwHjw23/rQ
3UWDDcm7Tx7s80C2HrlafL54eLDOfLF4WBu64cEe+di7w/W8iAaLf3mx4gs/
9Ef68093tIRTEnd30WB36nt36t3RxdPDfYYDvohZpaJ13HWgDQd7b9UBfp6Q
Zgc7ZpHfHczp4r3BlNo4O960wHxvZV30pTeYqMOdwZ6Cs4c3AC8/QQqtILSA
Ax4XLY99AsgekxfB7w9Dhv/v+cNnT1w+v6dj53dAGNFZswrIJ/HmE3D26z89
SftpJ4sA/GvOl8UHULzXOV+IFcUfgs9vkJYA7Lq55oT0edEjhMHP8O8PH+vw
+WH/+OETfRiaT/u8IH3ldkc9B2uBgrGB6xxjvN89iyT3s3syAL3Aex94u1Eb
8ifasbUSyKM5cF3dPnc2xZhsiuZeXNDeB2+VZetSQk/8oCUi6nFgTaGGh9YY
e1c6vn2E1flHAid4aNGAuliKPe/tmlATDAy5TVbzV4LHXntcC1nD7BJk9x9g
/ZxdH+cWiA1r8dqQ4BKtjJcf4VbzcmtzR+0qMH1Jv7/SNQWAxoUpL4CYyfCF
p4A+eH03djnhKiWUyP4HZ+mR5WyNGLY00WuOMSPGIpre/dWRPyJDbRQ1ebFh
ybYSf5UmjRz3lazaLJ7H4oA9DuvgIHu5vS4O2Ff+NAyEAQWxpcr2EQS4iEwj
kY7A4MsbHxbzVmFye4s812EBMCpi5/HAdIqNXYRogHaQsvvo3GHLBKA6P3i/
d7R/cHJ+uvf9wbuDU+Wo+Px492T33S2sxlKa2sg3R+jGGuDet4zrB+74D10s
gVdIUlGmiCgppwJpPIIKFKwtdbg/cHk7vDyZoIPtPrkn2/N8/2C9VWX/X1YV
CuYOkVjRPAQeEhmMjYKa2WquP56z8+68XM4fYqupsNUKdrJMzh5IpM1pUaUf
VJP/AmIxn5jJiGNhy/lU4njiYATL3mjgCecfoRydTRtSkXG8QJCARh5HHYc4
AYldQlZTive1PjRErllhbF4lz0N+TWELmCqWeZgdIEBy8oSP5oMguKqKpUCD
o4jrNKsoeiveU6XVLP+IcsVhZ0T4wji5A9zH2TgqlhbLzGSSnqAVOqwo0Mjg
j1a7l+hkgZ0xCwx2lq33Sk3U6xt3HIoIbIzzGhc3FPCMHGClFYsqIwdN2kYy
M0RVBMRI0S/kslyWeZaLH1wXib3/9w5g3CDxRc0K89E6hiRui/Oxf5AcL3Ci
60wvWnJJY9S4cW5qimOQLydydpJzr7LOp55fSFxiYZRe3LuR40k1LaiJzSha
P3q1ElQpKGFM1xnsLRAwOeRmOR7ztbkAxJEPg1TLw933u2rD5pup3UYc4u+J
Rxq1S6lkABfpD4ARPzLDdrGEzYLHSQXS8wLd/HGmCiMgdLFZj10cSkC87LNy
Eyx+pPIZOfk5Jv9F46IwcnjBQQN/ICfeWE2Kw+q9WzmAHmGWM6yQRSxFIFPb
+CQ6elxonyILqzTL2+dOARvj+Pehx91pfKvOy8YKxceUu1ECbF4t24LUNBBM
p3LHq8mWO7BRSXZP4HFdFEtMSmttWpdGtFtchdgQzpSjeK/IkV3X+5ya+or0
DP6so9r/KXG397WE725PDg72z0+P3h69O3o/+uvRyX18e6w9fHfbvyM+V77b
eul//uM68Pnbo88QrPHkq0AMV3S/YvQVwH/VM4O8wi9nrSfMLoHLaZscF0Y3
lAoi2QXi0NZpu4QDw/n28Zps/iyvMefNpIWWoLBVaYW1fm+Dhy5G0CR5S5Ka
HNdmon7Eo47ZEmnEsjJnHqyrHo5o1MuqomhGSYGHhRcCJPjxBHd8zCEKjJoP
qO52js7UbOMldJSCDgJcysmFwST+VIMhAgvhvUcq81XKCLzWKAEwwYdtHafm
O3xRchbiyyZ0kn6AS4xuo2RQgHmIYUchetNqWWSCKuWTMvEAhJ3/VlVo/Vzn
jeGnfGynMQWjLvEKy5SyA6pw/76gbDo6E0QbEIkyipf+RRMdTV6zwEMEtuVx
I/N218K2NVLu7+3g71cj1Efvh+2z9R9PguB+n6CdFrjAxF5MjMQj4hLQa2N5
7bIufaScRSEtytlw5w8v775378q1vLoPia21gMcKzMIdvLxvhWTmuSXN9Y1E
i5WeoYEYUBVmeAWGhYvs+pCkBMqZ1woM9NWAl3xBR0zOE+flDMwQjD67I9kH
sVAAEGO1+gJ0XJ9SGXocAYO7YZrcyPGO99Nj9iTfAwu7yFHvpVgOZ/318og4
L5L5jIO1LqOgm3JQdWOsvGgf3pbLKSnxpLJT7BVnJ+vBZAmmK1N+aUP655y0
boGvmgfhermrF6XEcF9urmSJPk0rDCe7LKcgHydJtibW93hKKwITTm2QH5FQ
s0MhAMZSjnnA5lqyIErUj/8OBqTVGlN/kEQ4CrJrUburSFDMxKiAwUn88tyo
/X9U7c0ixxA2io3tScfZueOPCdDqq/lAOsvcYJJYSPGoI3FSWzPqoCBhMSgp
WAF5RIOyDlxHkHQgI/cKptXT4McSyz7cHyVR3olk/VlTUH77YHCxu21Exb0s
lDCrRadioxELgcTlZ4PdshkiDF4iBzmZZ8ItcVKbOl1OG5gBdhMsqs7sIukd
mkhkMA+2HbwkMq/LjiXBYY8g4m2QYTPMckeSDozsDjx/pskKBIbHi2bpGMv5
nLKr0RoM6D9Ypk0edGzQIJaICidOgFiYR0NPStoTFZsULM0k7wlMoYr0cYf+
kZouWzywbVp64rN18axtKUuwL3NiZiLxAtoLMnGUISw4dQIyiZGzYpGoGv4q
J/vA50XyWLghDPCv87n7DWCMxl8Lit7nb51BwmWRqO58TpiUMvU7n+kdBDvW
h0R3J/qUQXofOwjjmiM8qwLhAx9+7M6SAH8DjQZIePf4EIZff3coXeIqeuxO
iCqa5anA/S187C4i00/FWfTlk0Y8jUXKgyNG9w6OFpKWCJPPAKN8HoIxDhz2
toYcUAMfeewufExGvItc0GuDyo+Fcf4ujHcrYFz1iZOLIhjdnJ/0WX+vm1VD
PIV6bEBY1IEVn85dD474u44qNjRe757PR4+Dj/GI9sB4LKOn87GP3YWP3SUs
lCRD5ZQrb9aUZ3fylAj/mh9Lwsns54kw2pSDz3KWdU+QqLrigU90XzzI1adC
8r+vkCj1nksM/w9h7HrpEJwxlslZLx0WfKs3eCHwzD1/bunxyAYW4Npzrqoi
q2bsy+tks8gOCb3MqMZiPigYolLKdrPgzF/SLmzwh8o5XcnwBDVk1EQoCA+3
sB/Q1n2gQVKISc3DoeOgNs2yIO8hQOcUfl+KtmzzQsID5LYDEycoymLHxYpy
gsZ6oa5Q4Rc/E4bvAqAQcSleTsXaHyU2AgaQgcGcuqT61hV4BnWR+AhVK9hU
6zdh9W7LlUN0N7nMSqq+DWp1aUoOj0YxMqm0pQK55+qQNf6b4aIMJ5qT5LCX
EW05kRBl9y3cFalYRBA2VpVab1rURwaKFHBqAmBDzp1DFx8S7wDPjOFEc8MG
FNsvmCPhPQ+JRBAQHxMXEMV4FpAyGbOXplh0KioLXVsv6KA7IwkiIM4q8nGJ
sfqRi9913TrSzila0wRWMWePw56gf6jku3OfNS+lI64CwI7KvgvrNmOvBQ8e
RJN7JjbMU1TlBRp1nLZfUwkV+nW/aEiTAxvWogTrAGV8fzyz1Sf+8D6r04oo
1RgGsIks3v9HOFggijPGHMYtrWfHxf6ce9KG14PpyyyhnbuqiitbTNVHv3L1
iLyZsNjXoXtYT0FlxWrFBr3vQfGb92XYnfVzCwtVKYCVBLVnpkzrm0Xo5A44
wxv2gTfS1jejC8vWOsbuQK4m4R1Ab5fDusc4TzBKMgMCCAMMHFN1EUGUMFhN
hN6pBZYi2BYNRFZuqqhegMeU8ClHfRu/e5LCILxkN9sWXJuPqTFMLu/OflAb
7/THfL6cs3vWZmb+UObtJncpAHnulm4dLIhsWoR4idTBR7Q8QToI/3unVlyH
UwWlLeIsbSS/wMLrCp9g6V80TkwEda2AhDcY+jbqa5GMfw6dTegU65TjBe54
8fH59CYT6qFY7yJ+PXQ8O+dI7Aruc4Cjvkly6Ovi/YyrBF6YqGf33Uk2wBay
+kWJp1VAVCQopz+btO3iLF7JSpSdhYWSDkbLFOh91XWNq8OGFFMfYIrc1iOv
E7AP1rcD8K5J8krVeNS1HQHtI9Ukg1+7xJEd9T2oMnOKvVus2+OL8z5imWKL
++05rsl3vCTBsAQyxkQUhtQFF7T0RuBUEHJkphTpj+qBnbxBnQZrhV2fjwJZ
WbIqAnB9BVbHD2h9oUH9sDjaXAkylrNvWF/v5o6K6BV/dB7dx/Zj2SxxN7Bt
TlDwZrNtLNY6ND9Ee5j00UnfA1az9kqgVxILHgv1BG4G4b3DsiNXR+HRB1t8
Yfrns0jgC+vY9YtpYNKmd957tz1HKs7cDLKkZj1f8rcYR+g9jOcURrpbCqJ2
q0OBAIz3BFu+chum59UStel+EWq/5NondiW+30V/yxsbOsK4mnO/qzPUpzng
Q9pKmFVZG87UlcOEfP5R9g9XXD8U4bHhGe9P122rAaDMxrY6DPttSGoyZDSS
C4QIFrhjR5TfBkygF4107whjCS0Rs8sBK26+dTVuK5t2WB4ZaNRDedTdxhxJ
vzEHnbKX+gob8JhyRZ8O1evTwRZZF7m8bbfPAcfSPYR3D4+TNye77w48hvwJ
4uJnHeEfAWoxLHkWnSAXmY8WW5IhaEeR+JpX3gD2Uwer3xhWvyKlZ0DVdGqS
VTL51MfaW5uW5p8gtV/a0uBtc1FNYoUm4hjKsCYbk0hQuyOxE1gcMFysZedt
pbLtTBWhVM4ybFKSrH4kCq+wvGeNy4o4VLpEsUpOT/bOT3969/ro7bnHMNXg
Y78IDsMM3YOZuMjsmHGrvuNM1q/woCM3AHIt59auVsvohjjhtqnTMaNrnGdj
2Th2MQzAwMm2wXwPZdFyRNFqTTZdnLjddku6HLR9xg9pliSaHp2WUkwaLsfv
xKEpu8wefRHBUBV2qOE2Aavkmc+DCKPRQdV+PJhN7hV1gLW/NqqKwFTAoIz2
Fch8VECDzxZdWuFgehH7jMSv5cAV75QDN/u40lXVGSkkECNbMebVjcVjBNRi
6WT1ZolPKj4LrPiTHkp81QnCQylexmNXzhcvh+ZcGI04RBtxFJ40kaSyFgqa
PpQG1RekCQZgqfGTE5Im6xoJvb4usa4468xZ1YuqtvmZg24JmxN5cnC8e3gi
7PUAf3+NDC2TAhokGZ/5z6XSwwbkvANOweMdgD3a+JKJim6994P9BVXP8Ld4
k+webhz0JAbLOis0IokxsCqWGG4FKDJ8cmewkt9AkHwbTORoVCAJBYrFwq8W
KkoFKnWoLf5KudJRPceDewjQByUEaDx4AwRUScz4YzWSM0zCUp1YZxkPk8JO
t0aok7ZyjYls9ljE6iFnIeoivygb16cgEREFZn7BRaMOTSvlpZixxPWTUKag
ktcRKL4pG9u8vR5uXG1hm3gF7VS4Pcy6WiJTYRTyWK0hcqg/dLiK2niDvgP0
VoMx2eYp6Pg5OWBbQqcVQ5Irz7P1utH1eq3YbO6tbyavgN/ibJv0Q1ldFya7
oGRKUlhKSdKX/ic2LyT6lf1UIxKb5KVz41ArLqoXI6uO6S3KRgEqvGQmKsUe
t10cCa6FZAsGCb5l5hN8kd38Jro0V2cqdTyY1o1BNi8i0WYEXQIh9TcnM0XO
6rvLS5pjWqQrqLFavd0w17OE3bM20cg13kOnwMJ1E40a74l4CIAarWzBh4qi
ZNxSylyQ9xikSnWJmxw5lrQnKBLcOqSCx3bss+GScAiSUU1ekGXFWUvGU29v
LvHD7UsFjUsiPLXkCrcmyW6BPU4vLsPD2pNwGBwYILqo3w1Z8zJ2Eph3uUhX
9NPDcUBGhU2JhHVMQ7Ylv1OIFts/kDwfug8g+kQW2Ks57F/IMR0kGKZ5kGnU
5s11Opt0uh3SvtEtlox44hrDU01VGErVjhkdBg32Fb160v4oC1os+R4tk9Ur
Y/jztgl7xNguWWS2CJca7grkE2u11wwcLEBWgdFrAyUaDS0UMMOiTzZB2J4b
e9EFypbDzcFEctDGEErs54ruHeJkpFcQ0hqLW2HQcAlYY6QLWviZFxtu3cjJ
V53MPhw+3ipEemvsJrhE9Xjl2PkQmFJnRG022ICaZYqdsQo6W9E5022tM8Dz
1hdrm5oJnZHmR0rfHzZj975rIsTduDqBToy6DDTctA2HUsrE1fMpHKHU6lgq
3i6WeXMZ7y2gpwlYV9i7d9I6W3XF+SrGjWdpMvzHzg/R2OeRpgePtyTIkazm
uThtcYZ9U2hQZnJTgG7q8oadJoNMF7qGRdNBgSdpcli4h6J702ldB3vv1R47
62jcSaShBwrGgHr+B9Sc32L7NtBidv3JmllbHB8/Ib8HTWEvv6FyGP9j7+6N
yWQTawpQ+U78ZYThz3rRvz+sxR1U14H0BnV1tz5W1Fet5SHdGGag2nkXlStk
EMksVlaY63kld1iW7PvOcFem3D86BMH2ZZRwixJ+t0oThQhIFU+tU8gMr4VJ
h7sKBrRuB0YR2t+yh1bf6T3gXcxuHHQ34KzCzcwe3PmyTwbrlSV3pkKeZ/ZO
VB+3Iyzl4d3JMCxEjL5io9E+aUBgbyKOERIsAYcZfjE1C+HG29MuRA4gCiyD
o17rAJgYxTvqgMul2/rGNWlrKJpjV+Tdhr0zR9RWXDNFrfmY0eoCOATuB6kX
ghE/hFbo2PIS2zYen4NPNr7JNTkMMhdrrc1VzrhXMdUy6M68ayXZgCi5KkHA
wTG3pD8nBM4QP3dhCzDT5yLLJjQxOweCKUicS4LQawPGSg4ikw78E3fge2me
JD90dIEBz3qgrfOhyIEYl7SCv0cm0nVwEjq7g9p1yxJEUejjEc7N7Yna4+N2
tZIdnMQDJ++riXpfoZFnvdcDJyfpA6NY3aO6m47egOk8NbsDENOSzYTZBV4/
j3Ve2IJDLEKOddxoqUTAAZ7RaNEFtm6+YeOld3eywjocdRXuoCIiVvEtpnQb
Q0aBJhfxU79T76g3JFkNe5LIoO3rH6SxpfXtU04W7it24yc/v2RNoOcEq9up
hEaSAIbfN0HmoNN2UI71qUnSc2Y55Slg4XzO8U6qordlUQgU+RwAl2la1eyW
p1MiEQ8S9XbAykiqrcJvE2VjErodKhkjOegClLMqJTZzbWG8Q6dJgiQO6ZUQ
hDP7ZXdhNVJtLmBrC8lbwfvBKMR3SVDjJItpRNchZgn59ypYx05Q41YFNjM1
zq+4wizGKeGOsWUjZ26VNn0lsQE3YDpp2y3RdbHEda9ro5WCQQhbKhW71Z+0
iXRacVIWYhd3ZUx7JPvIb/2oarEgS4rvwqx1hQcKTiaOHBDaLVWzSh/6K4Fe
aE28WKiIx0HdvJuj2OCLIzp1NGigXDExVfQ2jm5gwQUQ43cbjJKfl42Urtad
gNOX5MK8pr0Po0q+uPFLpnt0bnN5U6bwfC+sN3Qb+QG1eyudAcKduGEnf56e
t9rtXtbLpQ3LXvYHyl46acGfA4bBT3eaT7/pajXAq7sDxl+ogxvvzZYK0vm5
WeE6X3poF1LYovvky3b45VX45cuH0L72KtYdIlju9kPLXXdRT5n3sc/noIvB
mqioBSQ+H/QM+g52w/34JylK4c8f/WV/8ZH57wKhfucvcpOlteG/ewT+xz6/
JfN07sRBOFdsS5a6Dv+ooBXiJ7NQ587Ps5zPjJTtz4+UL0M89DAU3vkE/nx4
OVHJQ/5xTPwzjr1d46Y1i8Y1bDz868G+ev32CJTbw/htAqd4H7o09q0y4ZWv
rgrI6o8ILHSXkUve5l6CHT7Hs7cg3wW+P8vqlalJQovQJw4G0TGnKIj2QwqD
LsRKiJKFUYd7vWzpWMdiCcmt6fbxa3ruAd/sK20o1OgyUeMhSIEDAG6SQBFF
8RQ62V03cdcynluF+ReJpabG5KSgUYsygPzqxr9CAaOP5PJIOg1LvBnbQUwu
3g2f8awZwhF327I7GIbknDKbUBM0pz5j+zGwIPIpNY2RN6yRQhcsdBQPB9uO
eLc9TryvUpCPQCXcxKsIcddMPote9Zha9dtrVf9Uqv6pVK2c97HPP5Wq/w9K
1efXsD6/uhUpIJ3HfoNVrz3kSnQ9ont9KlLCH5+iYXXhjJQqOL7W0areHvz1
8PXbg0cUq8MSq0zqttswp98gmHmWejvhEL7jqE314R5YI5fJ3XceySs+Q1dT
f56hGQBEbN/jJpkku913hpHi5JOjAxVG3g7mx+CyWOej9qqVhHSnFShPjEz7
Dix5ayq+WAffatpfGlWiNBhdCGvgOq9tojgm+vfIBYyNp/itMCStnMr2/dnZ
8e9f0SrwPabOOWjjrFxYR/CFvi7aO14j6kCil5IO2gc3em1tlmPEZi6vxFPh
e21818kJkgoo3La2yTV89gkv6JS7pOB6XDNiwbId7TruT8kp06V/pQ8pnHA1
xdTsWXc4cU7KMUoFPeQ4hYVkao4tD71ub525HEQWd2kwNAUrKaDp/cw9dE3w
PYwV/szlhPJSZ6ERHfXRxKh05KXj1onj3ePjVQdB/OF+cXh/IC5C0XGVNKal
rnBpAcxwvnt8uMEuw/M821z9EN9CYZEJ977FQeAAnumiMSufc82geDac16XU
uNDw8KPhssZP+fwpehQp8VxaLtw+ir+ulJ1MJqQSNKNHH+09u/f26PTgHNt1
U0XHrUPz/WPPDtzwhHkf/lBHqt52UDy4tyFP/TwNkvjTVWge/jxGj+GZR2ul
DgoPHXm0W8TRq047jJumS+xV2Yl8nb3ep5ehY/vj6Jdm1aubfVXWyg6+nCnl
23NSm1RKXcF14h1I2TYRMSry4vYKnCP7fsUcfFj5/HQOv1NOWaf/Ot1+fx8c
gTrLfKrkMxL1A83Zm2fSIBpf/sgloe72YzmWnikU+Vwm5bu6H+6ru6DJe2l7
04BWFb6sLYm4frD7ytDFxPX75zEHumne9bEAGEjs6xiCBzutNR96cBo92GlU
v+JBJOGh7bBEawu0la3pG9oHdVBi58dGKjHeu1rALg0ExONe30EUQT+M6YfH
CCGoR3zi/vOT/DIp5d4F5Tb/M+//V35MV1qi/ES3t74yT/bva/djVG3inxgq
ZpFn/9B91qeURc8GLxNn8eURv3LLA4xHOx0k4HDz+Kj6W0szcFEnMcGhzil+
DkISdUufqQ6a4GXJDVJA11tKSiN3fAfd5fTatNSRQJcfKMhJySe2U4UkKPq3
7dILGe0LFf2bPpPkfwDvgx7aaoUAAA==

-->

</rfc>
