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


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

<!ENTITY RFC8200 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml">
<!ENTITY RFC8402 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml">
<!ENTITY RFC8754 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml">
<!ENTITY RFC8986 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8986.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC7942 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml">
<!ENTITY RFC9252 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9252.xml">
<!ENTITY RFC9259 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9259.xml">
<!ENTITY RFC9350 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9350.xml">
<!ENTITY RFC9352 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9352.xml">
<!ENTITY RFC9513 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9513.xml">
<!ENTITY RFC9514 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9514.xml">
<!ENTITY I-D.ietf-6man-sids SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-6man-sids.xml">
<!ENTITY I-D.ietf-idr-bgp-ls-sr-policy SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-idr-bgp-ls-sr-policy.xml">
<!ENTITY I-D.ietf-idr-sr-policy-safi SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-idr-sr-policy-safi.xml">
<!ENTITY I-D.ietf-pce-segment-routing-ipv6 SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-pce-segment-routing-ipv6.xml">
]>


<rfc ipr="trust200902" docName="draft-ietf-spring-srv6-srh-compression-14" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>Compressed SRv6 Segment List Encoding</title>

    <author initials="W." surname="Cheng" fullname="Weiqiang Cheng" role="editor">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>chengweiqiang@chinamobile.com</email>
      </address>
    </author>
    <author initials="C." surname="Filsfils" fullname="Clarence Filsfils">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Belgium</country>
        </postal>
        <email>cf@cisco.com</email>
      </address>
    </author>
    <author initials="Z." surname="Li" fullname="Zhenbin Li">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>lizhenbin@huawei.com</email>
      </address>
    </author>
    <author initials="B." surname="Decraene" fullname="Bruno Decraene">
      <organization>Orange</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>bruno.decraene@orange.com</email>
      </address>
    </author>
    <author initials="F." surname="Clad" fullname="Francois Clad" role="editor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>fclad.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2024" month="March" day="18"/>

    <area>General</area>
    <workgroup>SPRING</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 237?>

<t>Segment Routing over IPv6 (SRv6) is the instantiation of Segment Routing (SR) on the IPv6 dataplane. This document specifies new flavors for the SR segment endpoint behaviors defined in RFC 8986, which enable the compression of an SRv6 segment list. Such compression significantly reduces the size of the SRv6 encapsulation needed to steer packets over long segment lists.</t>



    </abstract>



  </front>

  <middle>


<?line 241?>

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

<t>The Segment Routing (SR) architecture <xref target="RFC8402"/> describes two data plane instantiations of SR: SR over MPLS (SR-MPLS) and SR over IPv6 (SRv6).</t>

<t>SRv6 Network Programming <xref target="RFC8986"/> defines a framework to build a network program with topological and service segments (also referred to by their Segment Identifier (SID)) carried in a Segment Routing Header (SRH) <xref target="RFC8754"/>.</t>

<t>Some SRv6 applications such as strict path traffic engineering may require long segment lists. Compressing the encoding of these long segment lists in the packet header can significantly reduce the header size. This document specifies new flavors to the SR segment endpoint behaviors defined in <xref target="RFC8986"/> that enable a compressed encoding of the SRv6 segment list.</t>

<t>The flavors defined in this document leverage the SRv6 data plane defined in <xref target="RFC8754"/> and <xref target="RFC8986"/>, and are compatible with the SRv6 control plane extensions for IS-IS <xref target="RFC9352"/>, OSPF <xref target="RFC9513"/>, and BGP <xref target="RFC9252"/>.</t>

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

<t>This document leverages the terms defined in <xref target="RFC8402"/>, <xref target="RFC8754"/>, and <xref target="RFC8986"/>. The reader is assumed to be familiar with this terminology.</t>

<t>This document introduces the following new terms:</t>

<t><list style="symbols">
  <t>Locator-Block: The most significant bits of a SID locator that represent the SRv6 SID block. The Locator-Block is referred to as &quot;B&quot; in Section 3.1 of <xref target="RFC8986"/>.</t>
  <t>Locator-Node: The least significant bits of a SID locator that identify the SR segment endpoint node instantiating the SID. The Locator-Node is referred to as &quot;N&quot; in Section 3.1 of <xref target="RFC8986"/>.</t>
  <t>Compressed-SID (C-SID): A compressed encoding of a SID. The C-SID includes the Locator-Node and Function bits of the SID being compressed.</t>
  <t>C-SID container: A 128-bit container holding a list of one or more C-SIDs.</t>
  <t>C-SID sequence: A group of one or more consecutive segment list entries carrying the common Locator-Block and at least one C-SID container.</t>
  <t>Uncompressed SID sequence: A group of one or more consecutive uncompressed SIDs in a segment list.</t>
  <t>Compressed segment list encoding: A segment list encoding that reduces the packet header length thanks to one or more C-SID sequences. A compressed segment list encoding also contains zero, one, or more uncompressed SID sequences.</t>
  <t>Global Identifiers Block (GIB): The pool of C-SID values available for global allocation.</t>
  <t>Local Identifiers Block (LIB): The pool of C-SID values available for local allocation.</t>
</list></t>

<t>In this document, the length of each constituent part of a SID is referred to as follows.</t>

<t><list style="symbols">
  <t>LBL is the Locator-Block length of the SID.</t>
  <t>LNL is the Locator-Node length of the SID.</t>
  <t>FL is the Function length of the SID.</t>
  <t>AL is the Argument length of the SID.</t>
</list></t>

<t>In addition, LNFL is the sum of the Locator-Node length and the Function length of the SID. It is also referred to as the C-SID length.</t>

<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; 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>

</section>
</section>
<section anchor="basic-concepts"><name>Basic Concepts</name>

<t>In an SR domain, all SRv6 SIDs instantiated from the same Locator-Block share the same most significant bits. In addition, when the combined length of the SRv6 SID Locator, Function, and Argument is smaller than 128 bits, the least significant bits of the SID are padded with zeros.
The compressed segment list encoding seeks to decrease the packet header length by avoiding the repetition of the same Locator-Block and reducing the use of padding bits.</t>

<t>The compressed segment list encoding is fully compatible with and builds upon the mechanisms specified in <xref target="RFC8754"/> and <xref target="RFC8986"/>. The compressed encoding is achieved by combining a compressed segment list encoding logic on the SR source node (<xref target="sec-source-node"/>) with new flavors of the base SRv6 segment endpoint behaviors that decode this compressed encoding (<xref target="sec-endpoint"/>).</t>

<t>A segment list can be encoded in the packet header using any combination of compressed and uncompressed sequences. The C-SID sequences leverage the flavors defined in this document, while the uncompressed sequences use behaviors and flavors defined in other documents, such as <xref target="RFC8986"/>. An SR source node constructs and compresses the SID-list depending on the SIDs instantiated on each SR segment endpoint node that the packet should traverse, as well as its own compression capabilities.</t>

<t>The compressed segment list encoding works with any Locator-Block allocation. For example, each routing domain within the SR domain can be allocated a /48 Locator-Block from a global IPv6 block available to the operator, or from a prefix allocated to SRv6 SIDs as discussed in Section 5 of <xref target="I-D.ietf-6man-sids"/>.</t>

</section>
<section anchor="sec-endpoint"><name>SR Segment Endpoint Flavors</name>

<t>This section defines two SR segment endpoint flavors, NEXT-C-SID and REPLACE-C-SID, for the End, End.X, End.T, End.B6.Encaps, End.B6.Encaps.Red, and End.BM behaviors of <xref target="RFC8986"/>.
This section also defines a REPLACE-C-SID flavor for the End.DX6, End.DX4, End.DT6, End.DT4, End.DT46, End.DX2, End.DX2V, End.DT2U, and End.DT2M behaviors of <xref target="RFC8986"/>.
A counterpart NEXT-C-SID flavor is not defined for these SIDs because they can be included within a C-SID sequence that uses the NEXT-C-SID flavor without any modification of the procedure defined in <xref target="RFC8986"/>.
Future documents may extend the applicability of the NEXT-C-SID and REPLACE-C-SID flavors to other SR segment endpoint behaviors (see <xref target="sec-future"/>).</t>

<t>The use of these flavors, either individually or in combination, enables the compressed segment list encoding.</t>

<t>The NEXT-C-SID flavor and the REPLACE-C-SID flavor both leverage the SID Argument to determine the next segment to be processed, but employ different segment list compression schemes.
With the NEXT-C-SID flavor, each C-SID container is a fully formed SRv6 SID with the common Locator-Block for all the C-SIDs in the C-SID container, a Locator-Node and Function that are those of the first C-SID, and an Argument carrying the subsequent C-SIDs.
With the REPLACE-C-SID flavor, only the first element in a C-SID sequence is a fully formed SRv6 SID. It has the common Locator-Block for all the C-SIDs in the C-SID sequence, and a Locator-Node and Function that are those of the first C-SID. The remaining elements in the C-SID sequence are C-SID containers carrying the subsequent C-SIDs without the Locator-Block.</t>

<t>SRv6 is intended for use in a variety of networks that require different prefix lengths and SID numbering spaces. Each of the two flavors introduced in this document comes with its own recommendations for Locator-Block and C-SID length, as specified in <xref target="sec-next"/> and <xref target="sec-replace"/>. These flavors are best suited for different environments, depending on the requirements of the network. For instance, larger C-SID lengths may be more suitable for networks requiring ample SID numbering space, while smaller C-SID lengths are better for compression efficiency. The two compression flavors allow the compressed segment list encoding to adapt to a range of requirements, with support for multiple compression levels. Network operators can choose the flavor that best suits their use case, deployment design, and network scale.</t>

<t>The SIDs of both flavors can co-exist in the same SR domain, on the same SR segment endpoint node, and even in the same segment list. However, it is RECOMMENDED, for ease of operation, that a single compressed encoding flavor be used in a given routing domain. In a multi-domain deployment, different flavors may be used in different routing domains of the SR domain.</t>

<t>In the remainder of this document, the term &quot;a SID of this document&quot; refers to any End, End.X, End.T, End.B6.Encaps, End.B6.Encaps.Red, or End.BM SID with the NEXT-C-SID or the REPLACE-C-SID flavor, and with any combination of Penultimate Segment Pop (PSP), Ultimate Segment Pop (USP), and Ultimate Segment Decapsulation (USD) flavor, or any End.DX6, End.DX4, End.DT6, End.DT4, End.DT46, End.DX2, End.DX2V, End.DT2U, or End.DT2M with the REPLACE-C-SID flavor. All the SIDs introduced in this document are listed in <xref target="tbl-iana-endpoint-behaviors"/>.</t>

<t>In the remainder of this document, the terms &quot;NEXT-C-SID flavor SID&quot; and &quot;REPLACE-C-SID flavor SID&quot; refer to any SID of this document with the NEXT-C-SID flavor and with the REPLACE-C-SID flavor, respectively.</t>

<section anchor="sec-next"><name>NEXT-C-SID Flavor</name>

<t>A C-SID sequence using the NEXT-C-SID flavor comprises one or more C-SID containers. Each C-SID container is a fully formed 128-bit SID structured as shown in <xref target="fig-next-struct"/>. It carries a Locator-Block followed by a series of C-SIDs. The Locator-Node and Function of the C-SID container are those of the first C-SID, and its Argument is the contiguous series of subsequent C-SIDs. The second C-SID is encoded in the most significant bits of the C-SID container Argument, the third C-SID is encoded in the bits of the Argument that immediately follow the second C-SID, and so on. When all C-SIDs have the same length, a C-SID container can carry up to K C-SIDs, where K is computed as floor((128-LBL)/LNFL) (floor(x) is the greatest integer less than or equal to x <xref target="GKP94"/>). Each C-SID container for NEXT-C-SID is independent, such that contiguous C-SID containers in a C-SID sequence can be considered as separate C-SID sequences.</t>

<t>When a C-SID sequence comprises at least two C-SIDs, the last C-SID in the sequence is not required to have the NEXT-C-SID flavor. It can be bound to any behavior and flavor(s), including the REPLACE-C-SID flavor, as long as the updated destination address resulting from the processing of the previous C-SID in the sequence is a valid form for that last SID. Line S12 of the first pseudocode in <xref target="sec-source-compression"/> provides sufficient conditions to ensure this property.</t>

<figure title="Structure of a NEXT-C-SID flavor SID (scaled for a 48-bit Locator-Block, 16-bit combined Locator-Node and Function, and 64-bit Argument)" anchor="fig-next-struct"><artwork><![CDATA[
+------------------------------------------------------------------+
|     Locator-Block      |Loc-Node|            Argument            |
|                        |Function|                                |
+------------------------------------------------------------------+
 <-------- LBL ---------> < LNFL > <------------- AL ------------->
]]></artwork></figure>

<t>An implementation MUST support a 32-bit Locator-Block length (LBL) and a 16-bit C-SID length (LNFL) for NEXT-C-SID flavor SIDs, and may support any other Locator-Block and C-SID length.</t>

<t>A deployment should use a consistent Locator-Block length and C-SID length for all SIDs of the SR domain. Heterogeneous lengths, while possible, may impact the compression efficiency.</t>

<t>The Argument length (AL) for NEXT-C-SID flavor SIDs is equal to 128-LBL-LNFL.</t>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as a SID with the NEXT-C-SID flavor, the SR segment endpoint node applies the procedure specified in the following subsection that corresponds to the SID behavior. If the SID also has the PSP, USP, or USD flavor, the procedure is modified as described in <xref target="sec-next-flavors"/>.</t>

<t>An SR segment endpoint node instantiating a SID of this document with the NEXT-C-SID flavor MUST accept any Argument value for that SID.</t>

<t>At high level, for any SID with the NEXT-C-SID flavor, the SR segment endpoint node determines the next SID of the SID list as follows. If the Argument value of the active SID is non-zero, the SR segment endpoint node constructs the next SID from the active SID by copying the entire SID Argument value to the bits that immediately follow the Locator-Block, thus overwriting the active SID Locator-Node and Function with those of the next C-SID, and filling the least significant LNFL bits of the Argument with zeros. Otherwise (if the Argument value is 0), the SR segment endpoint node copies the next 128-bit Segment List entry from the SRH to the Destination Address field of the IPv6 header.</t>

<section anchor="sec-next-end"><name>End with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End SID with the NEXT-C-SID flavor, the procedure described in Section 4.1 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The below pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.1 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
]]></artwork></figure>

<aside>
  <t>Notes:</t>

  <t><list style="symbols">
    <t><spanx style="verb">DA.Argument</spanx> identifies the value contained in the bits <spanx style="verb">[(LBL+LNFL)..127]</spanx> in the Destination Address of the IPv6 header.</t>
    <t>The value in the Segments Left field of the SRH is not modified when <spanx style="verb">DA.Argument</spanx> in the received packet has a non-zero value.</t>
  </list></t>
</aside>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-end-complete"/>.</t>

</section>
<section anchor="sec-next-endx"><name>End.X with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.X SID with the NEXT-C-SID flavor, the procedure described in Section 4.2 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-next-end"/> of this document is modified by replacing line N08 as shown below.</t>

<figure><artwork><![CDATA[
N08.   Submit the packet to the IPv6 module for transmission to the
         new destination via a member of J.
]]></artwork></figure>

<aside>
  <t>Note: the variable J is defined in Section 4.2 of <xref target="RFC8986"/>.</t>
</aside>

<t>The resulting pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.1 of <xref target="RFC8986"/> after applying the modification described in Section 4.2 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-endx-complete"/>.</t>

</section>
<section anchor="sec-next-endt"><name>End.T with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.T SID with the NEXT-C-SID flavor, the procedure described in Section 4.3 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-next-end"/> of this document is modified by replacing line N08 as shown below.</t>

<figure><artwork><![CDATA[
N08.1.   Set the packet's associated FIB table to T.
N08.2.   Submit the packet to the egress IPv6 FIB lookup for
           transmission to the new destination.
]]></artwork></figure>

<aside>
  <t>Note: the variable T is defined in Section 4.3 of <xref target="RFC8986"/>.</t>
</aside>

<t>The resulting pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.1 of <xref target="RFC8986"/> after applying the modification described in Section 4.3 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-endt-complete"/>.</t>

</section>
<section anchor="sec-next-endb6"><name>End.B6.Encaps with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT-C-SID flavor, the procedure described in Section 4.13 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-next-end"/> of this document is modified by replacing line N08 as shown below.</t>

<figure><artwork><![CDATA[
N08.1.   Push a new IPv6 header with its own SRH containing B.
N08.2.   Set the outer IPv6 SA to A.
N08.3.   Set the outer IPv6 DA to the first SID of B.
N08.4.   Set the outer Payload Length, Traffic Class, Flow Label,
           Hop Limit, and Next Header fields.
N08.5.   Submit the packet to the egress IPv6 FIB lookup for
           transmission to the next destination.
]]></artwork></figure>

<aside>
  <t>Note: the variables A and B, as well as the values of the Payload Length, Traffic Class, Flow Label, Hop Limit, and Next Header are defined in Section 4.13 of <xref target="RFC8986"/>.</t>
</aside>

<t>The resulting pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.13 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-endb6-complete"/>.</t>

<t>Similar to the base End.B6.Encaps SID defined in Section 4.13 of <xref target="RFC8986"/>, the NEXT-C-SID flavor variant updates the Destination Address field of the inner IPv6 header to the next SID in the original segment list before encapsulating the packet with the segment list of SR Policy B. At the endpoint of SR Policy B, the encapsulation is removed and the inner packet is forwarded towards the exposed destination address, which already contains the next SID in the original segment list.</t>

</section>
<section anchor="sec-next-endb6red"><name>End.B6.Encaps.Red with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.B6.Encaps.Red SID with the NEXT-C-SID flavor, the procedure described in Section 4.14 of <xref target="RFC8986"/> is executed with the same modifications as in <xref target="sec-next-endb6"/> of this document.</t>

</section>
<section anchor="sec-next-endbm"><name>End.BM with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.BM SID with the NEXT-C-SID flavor, the procedure described in Section 4.15 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-next-end"/> of this document is modified by replacing line N08 as shown below.</t>

<figure><artwork><![CDATA[
N08.1.   Push the MPLS label stack for B.
N08.2.   Submit the packet to the MPLS engine for transmission.
]]></artwork></figure>

<aside>
  <t>Note: the variable B is defined in Section 4.15 of <xref target="RFC8986"/>.</t>
</aside>

<t>The resulting pseudocode is inserted between lines S01 and S02 of the SRH processing in Section 4.15 of <xref target="RFC8986"/>. In addition, this pseudocode is executed before processing any extension header that is not an SRH, a Hop-by-Hop header or a Destination Option header, or before processing the upper-layer header, whichever comes first.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-next-endbm-complete"/>.</t>

</section>
<section anchor="sec-next-flavors"><name>Combination with PSP, USP and USD flavors</name>

<t>PSP: The PSP flavor defined in Section 4.16.1 of <xref target="RFC8986"/> is unchanged when combined with the NEXT-C-SID flavor.</t>

<t>USP: The USP flavor defined in Section 4.16.2 of <xref target="RFC8986"/> is unchanged when combined with the NEXT-C-SID flavor.</t>

<t>USD: The USP flavor defined in Section 4.16.3 of <xref target="RFC8986"/> is unchanged when combined with the NEXT-C-SID flavor.</t>

</section>
</section>
<section anchor="sec-replace"><name>REPLACE-C-SID Flavor</name>

<t>A C-SID sequence using the REPLACE-C-SID flavor starts with a C-SID container in fully formed 128-bit SID format. The Locator-Block of this SID is the common Locator-Block for all the C-SIDs in the C-SID sequence, its Locator-Node and Function are those of the first C-SID, and its Argument carries the index of the current C-SID in the current C-SID container. The Argument value is initially 0. When more segments are present in the segment list, the C-SID sequence continues with one or more C-SID containers in packed format carrying the subsequent C-SIDs in the sequence. Each container in packed format is a 128-bit Segment List entry split into K &quot;positions&quot; of LNFL bits, where K is computed as floor(128/LNFL). If LNFL does not divide into 128 perfectly, a zero pad is added in the least significant bits of the C-SID container to fill the bits left over. The second C-SID in the C-SID sequence is encoded in the least significant bit position of the first C-SID container in packed format (position K-1), the third C-SID is encoded in position K-2, and so on.</t>

<t>The last C-SID in the C-SID sequence is not required to have the REPLACE-C-SID flavor. It can be bound to any behavior and flavor(s), including the NEXT-C-SID flavor, as long as it meets the conditions defined in <xref target="sec-source-node"/>.</t>

<t>The structure of a SID with the REPLACE-C-SID flavor is shown in <xref target="fig-replace-struct"/>. The same structure is also that of the C-SID container for REPLACE-C-SID in fully formed 128-bit SID format.</t>

<figure title="Structure of a REPLACE-C-SID flavor SID (scaled for a 48-bit Locator-Block, 32-bit combined Locator-Node and Function, and 48-bit Argument)" anchor="fig-replace-struct"><artwork><![CDATA[
+-------------------------------------------------------------------+
|     Locator-Block      |  Locator-Node  |        Argument         |
|                        |   + Function   |                         |
+-------------------------------------------------------------------+
 <-------- LBL ---------> <---- LNFL ----> <--------- AL ---------->
]]></artwork></figure>

<t>The structure of a C-SID container for REPLACE-C-SID in packed format is shown in <xref target="fig-replace-container"/>.</t>

<figure title="Structure of a C-SID container for REPLACE-C-SID using a 32-bit C-SID length (K = 4)" anchor="fig-replace-container"><artwork><![CDATA[
+-------------------------------------------------------------------+
|  Fourth C-SID  |  Third C-SID   |  Second C-SID  |  First C-SID   |
|  (position 0)  |  (position 1)  |  (position 2)  |  (position 3)  |
+-------------------------------------------------------------------+
 <---- LNFL ----> <---- LNFL ----> <---- LNFL ----> <---- LNFL ---->
]]></artwork></figure>

<t>The REPLACE-C-SID flavor SIDs support any Locator-Block length (LBL), depending on the needs of the operator, as long as it does not exceed 128-LNFL-ceiling(log_2(128/LNFL)) (ceiling(x) is the least integer greater than or equal to x <xref target="GKP94"/>), so that enough bits remain available for the C-SID and Argument. A Locator-Block length of 48, 56, 64, 72, or 80 bits is recommended for easier reading in operation.</t>

<t>This document defines the REPLACE-C-SID flavor for 16-bit and 32-bit C-SID lengths (LNFL). An implementation MUST support a 32-bit C-SID length for REPLACE-C-SID flavor SIDs.</t>

<t>A deployment should use a consistent Locator-Block length and C-SID length for all SIDs of the SR domain. Heterogeneous C-SID lengths, while possible, may impact the compression efficiency.</t>

<t>The Argument length (AL) for REPLACE-C-SID flavor SIDs is equal to 128-LBL-LNFL. The index value is encoded in the least significant X bits of the Argument, where X is computed as ceiling(log_2(128/LNFL)).</t>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as a SID with the REPLACE-C-SID flavor, the SR segment endpoint node applies the procedure specified in the following subsection that corresponds to the SID behavior. If the SID also has the PSP, USP, or USD flavor, the procedure is modified as described in <xref target="sec-replace-flavors"/>.</t>

<t>At high level, at the start of a C-SID sequence using the REPLACE-C-SID flavor, the first C-SID container in fully formed 128-bit SID format is copied to the Destination Address of the IPv6 header. Then, for any SID with the REPLACE-C-SID flavor, the SR segment endpoint node determines the next SID of the SID list as follows. When an SRH is present, the SR segment endpoint node decrements the index value in the Argument of the active SID if the index value is not 0 or, if it is 0, decrements the Segments Left value in the SRH and sets the index value in the Argument of the active SID to K-1. The updated index value indicates the position of the next C-SID within the C-SID container in packed format at the &quot;Segment List&quot; index &quot;Segments Left&quot; in the SRH. The SR segment endpoint node then constructs the next SID by copying this next C-SID to the bits that immediately follow the Locator-Block in the Destination Address field of the IPv6 header, thus overwriting the active SID Locator-Node and Function with those of the next C-SID. If no SRH is present, the SR segment endpoint node ignores the index value in the SID Argument (except End.DT2M, see <xref target="sec-replace-enddx"/>) and processes the upper-layer header as per <xref target="RFC8986"/>. The C-SID sequence ends with a last C-SID in the last C-SID container that does not have the REPLACE-C-SID flavor, or with the special C-SID value 0, or when reaching the end of the segment list, whichever comes first.</t>

<section anchor="sec-replace-end"><name>End with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End SID with the REPLACE-C-SID flavor, the SRH processing described in Section 4.1 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>Line S02 of SRH processing in Section 4.1 of <xref target="RFC8986"/> is replaced as follows.</t>

<figure><artwork><![CDATA[
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
]]></artwork></figure>

<t>Lines S09 to S15 are replaced by the following pseudo code.</t>

<figure><artwork><![CDATA[
R01. If (DA.Arg.Index != 0) {
R02.   If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.     Send an ICMP Parameter Problem to the Source Address,
           Code 0 (Erroneous header field encountered),
           Pointer set to the Segments Left field,
           interrupt packet processing and discard the packet.
R04.   }
R05.   Decrement DA.Arg.Index by 1.
R06.   If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.     Decrement Segments Left by 1.
R08.     Decrement IPv6 Hop Limit by 1.
R09.     Update IPv6 DA with Segment List[Segments Left]
R10.     Submit the packet to the egress IPv6 FIB lookup for
          transmission to the new destination.
R11.   }
R12. } Else {
R13.   If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.     Send an ICMP Parameter Problem to the Source Address,
           Code 0 (Erroneous header field encountered),
           Pointer set to the Segments Left field,
           interrupt packet processing and discard the packet.
R15.   }
R16.   Decrement Segments Left by 1.
R17.   Set DA.Arg.Index to (floor(128/LNFL) - 1).
R18. }
R19. Decrement IPv6 Hop Limit by 1.
R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits
       [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
       header.
R21. Submit the packet to the egress IPv6 FIB lookup for
       transmission to the new destination.
]]></artwork></figure>

<aside>
  <t>Notes:</t>

  <t><list style="symbols">
    <t><spanx style="verb">DA.Arg.Index</spanx> identifies the value contained in the bits <spanx style="verb">[(128-ceiling(log_2(128/LNFL)))..127]</spanx> in the Destination Address of the IPv6 header.</t>
    <t><spanx style="verb">Segment List[Segments Left][DA.Arg.Index]</spanx> identifies the value contained in the bits <spanx style="verb">[DA.Arg.Index*LNFL..(DA.Arg.Index+1)*LNFL-1]</spanx> in the SRH Segment List entry at index Segments Left.</t>
  </list></t>
</aside>

<t>The upper-layer header processing described in Section 4.1.1 of <xref target="RFC8986"/> is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-end-complete"/>.</t>

</section>
<section anchor="sec-replace-endx"><name>End.X with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.X SID with the REPLACE-C-SID flavor, the procedure described in Section 4.2 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-replace-end"/> of this document is modified by replacing lines R10 and R21 as shown below.</t>

<figure><artwork><![CDATA[
R10. Submit the packet to the IPv6 module for transmission to the
       new destination via a member of J.
]]></artwork></figure>

<figure><artwork><![CDATA[
R21. Submit the packet to the IPv6 module for transmission to the
       new destination via a member of J.
]]></artwork></figure>

<aside>
  <t>Note: the variable J is defined in Section 4.2 of <xref target="RFC8986"/>.</t>
</aside>

<t>The SRH processing in Section 4.2 of <xref target="RFC8986"/> is replaced with the resulting pseudocode. The upper-layer header processing is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-endx-complete"/>.</t>

</section>
<section anchor="sec-replace-endt"><name>End.T with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.T SID with the REPLACE-C-SID flavor, the procedure described in Section 4.3 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-replace-end"/> of this document is modified by replacing lines R10 and R21 as shown below.</t>

<figure><artwork><![CDATA[
R10.1. Set the packet's associated FIB table to T.
R10.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
]]></artwork></figure>

<figure><artwork><![CDATA[
R21.1. Set the packet's associated FIB table to T.
R21.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
]]></artwork></figure>

<aside>
  <t>Note: the variable T is defined in Section 4.3 of <xref target="RFC8986"/>.</t>
</aside>

<t>The SRH processing in Section 4.3 of <xref target="RFC8986"/> is replaced with the resulting pseudocode. The upper-layer header processing is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-endt-complete"/>.</t>

</section>
<section anchor="sec-replace-endb6"><name>End.B6.Encaps with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.B6.Encaps SID with the REPLACE-C-SID flavor, the procedure described in Section 4.13 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-replace-end"/> of this document is modified by replacing lines R10 and R21 as shown below.</t>

<figure><artwork><![CDATA[
R10.1. Push a new IPv6 header with its own SRH containing B.
R10.2. Set the outer IPv6 SA to A.
R10.3. Set the outer IPv6 DA to the first SID of B.
R10.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
R10.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
]]></artwork></figure>

<figure><artwork><![CDATA[
R21.1. Push a new IPv6 header with its own SRH containing B.
R21.2. Set the outer IPv6 SA to A.
R21.3. Set the outer IPv6 DA to the first SID of B.
R21.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
R21.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
]]></artwork></figure>

<aside>
  <t>Note: the variables A and B, as well as the values of the Payload Length, Traffic Class, Flow Label, Hop Limit, and Next Header are defined in Section 4.13 of <xref target="RFC8986"/>.</t>
</aside>

<t>The SRH processing in Section 4.13 of <xref target="RFC8986"/> is replaced with the resulting pseudocode. The upper-layer header processing is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-endb6-complete"/>.</t>

</section>
<section anchor="sec-replace-endb6red"><name>End.B6.Encaps.Red with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.B6.Encaps.Red SID with the REPLACE-C-SID flavor, the procedure described in Section 4.14 of <xref target="RFC8986"/> is executed with the same modifications as in <xref target="sec-replace-endb6"/> of this document.</t>

</section>
<section anchor="sec-replace-endbm"><name>End.BM with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.BM SID with the REPLACE-C-SID flavor, the procedure described in Section 4.15 of <xref target="RFC8986"/> is executed with the following modifications.</t>

<t>The pseudocode in <xref target="sec-replace-end"/> of this document is modified by replacing lines R10 and R21 as shown below.</t>

<figure><artwork><![CDATA[
R10.1. Push the MPLS label stack for B.
R10.2. Submit the packet to the MPLS engine for transmission.
]]></artwork></figure>

<figure><artwork><![CDATA[
R21.1. Push the MPLS label stack for B.
R21.2. Submit the packet to the MPLS engine for transmission.
]]></artwork></figure>

<aside>
  <t>Note: the variable B is defined in Section 4.15 of <xref target="RFC8986"/>.</t>
</aside>

<t>The SRH processing in Section 4.15 of <xref target="RFC8986"/> is replaced with the resulting pseudocode. The upper-layer header processing is unchanged.</t>

<t>A rendering of the complete pseudocode is provided in <xref target="sec-replace-endbm-complete"/>.</t>

</section>
<section anchor="sec-replace-enddx"><name>End.DX and End.DT with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.DX6, End.DX4, End.DT6, End.DT4, End.DT46, End.DX2, End.DX2V, or End.DT2U SID with the REPLACE-C-SID flavor, the corresponding procedure described in Sections 4.4 through 4.11 of <xref target="RFC8986"/> is executed.</t>

<t>These SIDs differ from those defined in <xref target="RFC8986"/> by the presence of an Argument as part of the SID structure. The Argument value is ignored by the SR segment endpoint node.</t>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.DT2M SID with the REPLACE-C-SID flavor, the procedure described in Section 4.12 of <xref target="RFC8986"/> is executed with the following modification.</t>

<t>For any End.DT2M SID with the REPLACE-C-SID flavor, the value of <spanx style="verb">Arg.FE2</spanx> is 16-bit long. The SR segment endpoint node obtains the value <spanx style="verb">Arg.FE2</spanx> from the 16 most significant bits of <spanx style="verb">DA.Argument</spanx> if <spanx style="verb">DA.Arg.Index</spanx> is zero, or from the 16 least significant bits of the next position in the current C-SID container (<spanx style="verb">Segment List[Segments Left][DA.Arg.Index-1]</spanx>) otherwise (<spanx style="verb">DA.Arg.Index</spanx> is non-zero).</t>

</section>
<section anchor="sec-replace-flavors"><name>Combination with PSP, USP, and USD flavors</name>

<t>PSP:
When combined with the REPLACE-C-SID flavor, the additional PSP flavor instructions defined in Section 4.16.1.2 of <xref target="RFC8986"/> are inserted after lines R09 and R20 of the pseudocode in <xref target="sec-replace-end"/>, and the first line of the inserted instructions after R20 is modified as follows.</t>

<figure><artwork><![CDATA[
R20.1.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
             Segment List[0][DA.Arg.Index-1] == 0)) {
]]></artwork></figure>

<aside>
  <t>Note: <spanx style="verb">Segment List[Segments Left][DA.Arg.Index-1]</spanx> identifies the value contained in the bits <spanx style="verb">[(DA.Arg.Index-1)*LNFL..DA.Arg.Index*LNFL-1]</spanx> in the SRH Segment List entry at index Segments Left.</t>
</aside>

<t>USP:
When combined with the REPLACE-C-SID flavor, the line S03 of the pseudocode in <xref target="sec-replace-end"/> are substituted by the USP flavor instructions S03.1 to S03.4 defined in Section 4.16.2 of <xref target="RFC8986"/>. Note that S03 is shown in the complete pseudocode in <xref target="sec-replace-end-complete"/>.</t>

<t>USD:
The USD flavor defined in Section 4.16.3 of <xref target="RFC8986"/> is unchanged when combined with the REPLACE-C-SID flavor.</t>

</section>
</section>
</section>
<section anchor="c-sid-allocation"><name>C-SID Allocation</name>

<t>The C-SID value of 0 is reserved. It is used to indicate the end of a C-SID container.</t>

<t>In order to efficiently manage the C-SID numbering space, a deployment may divide it into two non-overlapping sub-spaces: a Global Identifiers Block (GIB) and a Local Identifiers Block (LIB).</t>

<t>The C-SID values that are allocated from the GIB have a global semantic within the Locator-Block, while those that are allocated from the LIB have a local semantic on an SR segment endpoint node and within the scope of the Locator-Block.</t>

<t>The concept of LIB is applicable to SRv6 and specifically to its NEXT-C-SID and REPLACE-C-SID flavors. The shorter the C-SID, the more benefit the LIB brings.</t>

<t>The opportunity to use these sub-spaces, their size, and their C-SID allocation policy depends on the C-SID length relative to the size of the network (e.g., number of nodes, links, service routes). Some guidelines for a typical deployment scenario are provided in the below subsections.</t>

<section anchor="global-c-sid"><name>Global C-SID</name>

<t>A global C-SID is a C-SID allocated from the GIB.</t>

<t>A global C-SID identifies a segment defined at the Locator-Block level. The tuple (Locator-Block, C-SID) identifies the same segment across all nodes of the SR domain. A typical example is a prefix segment bound to the End behavior.</t>

<t>A node can have multiple global C-SIDs under the same Locator-Block (e.g., one per IGP flexible algorithm (<xref target="RFC9350"/>)). Multiple nodes may share the same global C-SID (e.g., anycast).</t>

</section>
<section anchor="local-c-sid"><name>Local C-SID</name>

<t>A local C-SID is a C-SID allocated from the LIB.</t>

<t>A local C-SID identifies a segment defined at the node level and within the scope of a particular Locator-Block. The tuple (Locator-Block, C-SID) identifies a different segment on each node of the SR domain. A typical example is a non-routed Adjacency segment bound to the End.X behavior.</t>

<t>Let N1 and N2 be two different physical nodes of the SR domain and I a local C-SID value, N1 may allocate value I to SID S1 and N2 may allocate the same value I to SID S2.</t>

</section>
<section anchor="sec-c-sid-lib-recommendation"><name>GIB/LIB Usage</name>

<t>GIB and LIB usage is a local implementation and/or configuration decision, however, some guidelines for determining usage for specific SID behaviors and recommendations are provided.</t>

<t>The GIB number space is shared among all SR segment endpoint nodes using SRv6 locators under a Locator-Block space.  The more SIDs assigned from this space, per node, the faster it is exhausted.  Therefore its use is prioritized for global segments, such as SIDs that identify a node.</t>

<t>The LIB number space is unique per node. Each node is able to fully utilize the entire LIB number space without consideration of assignments at other nodes.  Therefore its use is prioritized for local segments, such as SIDs that identify services (of which there may be many) at nodes, cross-connects, or adjacencies.</t>

<t>While a longer C-SID length permits more flexibility in which SID behaviors may be assigned from the GIB, it also reduces the compression efficiency.</t>

<t>Given the previous Locator-Block and C-SID length recommendations, the following GIB/LIB usage is recommended:</t>

<t><list style="symbols">
  <t>NEXT-C-SID:
  <list style="symbols">
      <t>GIB: End</t>
      <t>LIB: End.X, End.T, End.DT4/6/46/2U/2M, End.DX4/6/2/2V (including large-scale pseudowire), End.B6.Encaps, End.B6.Encaps.Red, End.BM</t>
    </list></t>
  <t>REPLACE-C-SID:
  <list style="symbols">
      <t>GIB: End, End.X, End.T, End.DT4/6/46/2U/2M, End.DX4/6/2/2V, End.B6.Encaps, End.B6.Encaps.Red, End.BM</t>
      <t>LIB: End.DX2/2V for large-scale pseudowire</t>
    </list></t>
</list></t>

<t>Any other allocation is possible but may lead to a suboptimal use of the C-SID numbering space.</t>

</section>
<section anchor="sec-c-sid-installation"><name>Recommended Installation of C-SIDs in FIB</name>

<t>Section 4.3 of <xref target="RFC8754"/> defines how an SR segment endpoint node identifies a locally instantiated SRv6 SID. To ensure that any valid argument value is accepted, an SR segment endpoint node instantiating a NEXT-C-SID or REPLACE-C-SID flavor SID should install a corresponding FIB entry that matches only the Locator and Function parts of the SID (i.e., with a prefix length of LBL + LNL + FL).</t>

<t>In addition, an SR segment endpoint node instantiating NEXT-C-SID flavor SIDs from both GIB and LIB may install combined &quot;Global + Local&quot; FIB entries to match a sequence of global and local C-SIDs in a single longest prefix match (LPM) lookup.</t>

<t>For example, let us consider an SR segment endpoint node 10 instantiating the following two NEXT-C-SID flavor SIDs according to the C-SID length, Locator-Block length, and GIB/LIB recommendations in this section.</t>

<t><list style="symbols">
  <t><spanx style="verb">2001:db8:b1:10::</spanx> bound to the End behavior with the NEXT-C-SID flavor is instantiated from GIB with
  <list style="symbols">
      <t>Locator-Block length (LBL) = 48 (Locator-Block value <spanx style="verb">0x20010db800b1</spanx>),</t>
      <t>Locator-Node length (LNL) = 16 (Locator-Node value <spanx style="verb">0x0010</spanx>),</t>
      <t>Function length (FL) = 0, and</t>
      <t>Argument length (AL) = 64.</t>
    </list></t>
  <t><spanx style="verb">2001:db8:b1:f123::</spanx> bound to the End.X behavior for its local IGP adjacency <spanx style="verb">123</spanx> with the NEXT-C-SID flavor is instantiated from LIB with
  <list style="symbols">
      <t>Locator-Block length (LBL) = 48 (Locator-Block value <spanx style="verb">0x20010db800b1</spanx>),</t>
      <t>Locator-Node length (LNL) = 0,</t>
      <t>Function length (FL) = 16 (Function value <spanx style="verb">0xf123</spanx>), and</t>
      <t>Argument length (AL) = 64.</t>
    </list></t>
</list></t>

<t>For SID <spanx style="verb">2001:db8:b1:10::</spanx>, Node 10 would install the FIB entry <spanx style="verb">2001:db8:b1:10::/64</spanx> bound the End SID with the NEXT-C-SID flavor.</t>

<t>For SID <spanx style="verb">2001:db8:b1:f123::</spanx>, Node 10 would install the FIB entry <spanx style="verb">2001:db8:b1:f123::/64</spanx> bound the End.X SID for adjacency <spanx style="verb">123</spanx> with the NEXT-C-SID flavor.</t>

<t>In addition, Node 10 may also install the combined FIB entry <spanx style="verb">2001:db8:b1:10:f123::/80</spanx> bound the End.X SID for adjacency <spanx style="verb">123</spanx> with the NEXT-C-SID flavor.</t>

<t>As another example, let us consider an SR segment endpoint node 20 instantiating the following two REPLACE-C-SID flavor SIDs according to the C-SID length, Locator-Block length, and GIB/LIB recommendations in this section.</t>

<t><list style="symbols">
  <t><spanx style="verb">2001:db8:b2:20:1::</spanx> from GIB with Locator-Block length (LBL) = 48, Locator-Node length (LNL) = 16, Function length (FL) = 16, Argument length (AL) = 48, and bound to the End behavior with the REPLACE-C-SID flavor.</t>
  <t><spanx style="verb">2001:db8:b2:20:123::</spanx> from GIB with Locator-Block length (LBL) = 48, Locator-Node length (LNL) = 16, Function length (FL) = 16, Argument length (AL) = 48, and bound to the End.X behavior for its local IGP adjacency <spanx style="verb">123</spanx> with the REPLACE-C-SID flavor.</t>
</list></t>

<t>For SID <spanx style="verb">2001:db8:b2:20:1::</spanx>, Node 20 would install the FIB entry <spanx style="verb">2001:db8:b2:20:1::/80</spanx> bound the End SID with the REPLACE-C-SID flavor.</t>

<t>For SID <spanx style="verb">2001:db8:b2:20:123::</spanx>, Node 20 would install the FIB entry <spanx style="verb">2001:db8:b2:20:123::/80</spanx> bound the End.X SID for adjacency <spanx style="verb">123</spanx> with the REPLACE-C-SID flavor.</t>

</section>
</section>
<section anchor="sec-source-node"><name>SR Source Node</name>

<t>An SR source node may learn from a control plane protocol (see <xref target="sec-control-plane"/>) or local configuration the SIDs that it can use in a segment list, along with their respective SR segment endpoint behavior, flavors, structure, and any other relevant attribute (e.g., the set of L3 adjacencies associated with an End.X SID).</t>

<section anchor="segment-validation-for-compression"><name>Segment Validation for Compression</name>

<t>As part of the compression process or as a preliminary step, the SR source node MUST validate the SID structure, if known, of each SID of this document in the segment list. The SR source node does so regardless of whether the segment list is explicitly configured, locally computed, or advertised by a controller (e.g., via BGP <xref target="I-D.ietf-idr-sr-policy-safi"/> or PCEP <xref target="I-D.ietf-pce-segment-routing-ipv6"/>).</t>

<t>A SID structure is valid for compression if it meets all the following conditions.</t>

<t><list style="symbols">
  <t>The Locator-Block length is not 0.</t>
  <t>The sum of the Locator-Node length and Function length is not 0.</t>
  <t>The Argument length is equal to 128-LBL-LNL-FL.</t>
</list></t>

<t>When compressing a segment list, the SR source node MUST treat an invalid SID structure as unknown, and treats the SID as incompressible.</t>

<t><xref target="sec-control-plane"/> discusses how the SIDs of this document and their structure can be advertised to the SR source node through various control plane protocols.</t>

</section>
<section anchor="sec-source-compression"><name>Segment List Compression</name>

<t>An SR source node MAY compress a segment list when it includes NEXT-C-SID and/or REPLACE-C-SID flavor SIDs in order to reduce the packet header length.</t>

<t>It is out of the scope of this document to describe the mechanism through which an uncompressed segment list is derived. As a general guidance for implementation or future specification, such a mechanism should aim to select the combination of SIDs that would result in the shortest compressed segment list. For example, by selecting a C-SID flavor SID over an equivalent non-C-SID flavor SID or by consistently selecting SIDs of the same C-SID flavor within each routing domain.</t>

<t>The segment list that the SR source node pushes onto the packet MUST comply with the rules in <xref target="sec-source-next"/> and <xref target="sec-source-replace"/> and result in the same set of possible forwarding paths as the original segment list.</t>

<t>If an SR source node chooses to compress the segment list, one method is described below for illustrative purposes. Any other method producing a compressed segment list of equal or shorter length than the uncompressed segment list is compliant.</t>

<t>This method walks the uncompressed segment list and compresses each series of consecutive NEXT-C-SID flavor SIDs and each series of consecutive REPLACE-C-SID flavor SIDs.</t>

<t><list style="symbols">
  <t>When the compression method encounters a series of one or more consecutive compressible NEXT-C-SID flavor SIDs, it compresses the series as follows. A SID with the NEXT-C-SID flavor is compressible if its structure is known to the SR source node and its Argument value is 0.</t>
</list></t>

<figure><artwork><![CDATA[
S01. Initialize a C-SID container equal to the first SID in the
       series, and initialize the remaining capacity of the C-SID
       container to the AL of that SID
S02. For each subsequent SID in the series {
S03.   If the current SID Locator-Block matches that of the C-SID
         container and the current SID LNFL is lower than or equal to
         the remaining capacity of the C-SID container {
S04.     Copy the current SID Locator-Node and Function to the most
           significant remaining Argument bits of the C-SID container
           and decrement the remaining capacity by LNFL
S05.   } Else {
S06.     Push the C-SID container onto the compressed segment list
S07.     Initialize a new C-SID container equal to the current SID in
           the series, and initialize the remaining capacity of the
           C-SID container to the AL of that SID
S08.   } // End If
S09. } // End For
S10. If at least one SID remains in the uncompressed segment list
       (following the series of compressible NEXT-C-SID flavor SIDs){
S11.   Set S to the next SID in the uncompressed segment list
S12.   If S is advertised with a SID structure, and the Locator-Block
         of S matches that of the C-SID container, and the sum of the
         Locator-Node, Function, and Argument length of S is lower
         than or equal to the remaining capacity of the C-SID
         container {
S13.     Copy the Locator-Node, Function, and Argument of S to the
           most significant remaining Argument bits of the C-SID
           container
S14.   } // End If
S15. } // End If
S16. Push the C-SID container onto the compressed segment list
]]></artwork></figure>

<t><list style="symbols">
  <t>When the compression method encounters a series of REPLACE-C-SID flavor SIDs of the same C-SID length in the uncompressed segment list, it compresses the series as per the following high-level pseudo code. A compression checking function ComCheck(F, S) is defined to check if two SIDs F and S share the same SID structure and Locator-Block value, and if S has either no Argument or an Argument with value 0. If the check passes, then ComCheck(F,S) returns true.</t>
</list></t>

<figure><artwork><![CDATA[
S01. Initialize the first C-SID container in full SID format equal to
       the first SID in the series
S02. Initialize the second C-SID container in packed format if there
       are more than one SIDs, and initialize the remaining capacity
       of the C-SID container to 128 bits
S03. For each subsequent SID in the uncompressed segment list {
S04.   Set S to the current SID in the uncompressed segment list
S05.   If ComCheck(First SID, S) {
S06.     If the LNFL of S is lower than or equal to
           the remaining capacity of the C-SID container {
S07.       Copy the Locator-Node and Function of S to the least
             significant remaining bits of the C-SID container
             and decrement the remaining capacity by LNFL  // Note
S08.     } Else {
S09.       Push the C-SID container onto the compressed segment list
S10.       Initialize a new C-SID container in packed format with all
             bits set to 0
S11        Copy the Locator-Node and Function of S to the least
             significant remaining bits of the C-SID container
             and decrement the remaining capacity by LNFL  // Note
S12.     }
S13.     If S is not a REPLACE-C-SID flavor SID, then break
S14.   } Else {
S15.     Break
S16.   } // End If
S17. } // End For
S18. Push the C-SID container (if it is not empty) onto the
       compressed segment list
]]></artwork></figure>

<aside>
  <t>Note: When the last C-SID is an End.DT2M SID with the REPLACE-C-SID flavor, if there is 0 or at least two C-SID positions left in the current C-SID container, the C-SID is encoded as described above and the value of the Arg.FE2 argument is placed in the 16 least significant bits of the next C-SID position. Otherwise (if there is only one C-SID position left in the current C-SID container), the current C-SID container is pushed onto the segment list (the value of the C-SID position 0 remains zero) and the End.DT2M SID with the REPLACE-C-SID flavor is encoded in full SID format with the value of the Arg.FE2 argument in the 16 most significant bits of the SID Argument.</t>
</aside>

<t><list style="symbols">
  <t>In all remaining cases (i.e., when the compression method encounters a SID in the uncompressed segment list that is not handled by any of the previous subroutines), it pushes this SID as is onto the compressed segment list.</t>
</list></t>

<t>Regardless of how a compressed segment list is produced, the SR source node writes it in the IPv6 packet as described in Sections 4.1 and 4.1.1 of <xref target="RFC8754"/>. The text is reproduced below for reference.</t>

<blockquote>
  <t>A source node steers a packet into an SR Policy. If the SR Policy
results in a Segment List containing a single segment, and there is
no need to add information to the SRH flag or add TLV; the DA is set
to the single Segment List entry, and the SRH MAY be omitted.</t>

  <t>When needed, the SRH is created as follows:</t>

  <t>The Next Header and Hdr Ext Len fields are set as specified in
  <xref target="RFC8200"></xref>.</t>

  <t>The Routing Type field is set to 4.</t>

  <t>The DA of the packet is set with the value of the first segment.</t>

  <t>The first element of the SRH Segment List is the ultimate segment.
  The second element is the penultimate segment, and so on.</t>

  <t>The Segments Left field is set to n-1, where n is the number of
  elements in the SR Policy.</t>

  <t>The Last Entry field is set to n-1, where n is the number of
  elements in the SR Policy.</t>

  <t>TLVs (including HMAC) may be set according to their specification.</t>

  <t>The packet is forwarded toward the packet&#39;s Destination Address
  (the first segment).</t>

  <t>When a source does not require the entire SID list to be preserved
in the SRH, a reduced SRH may be used.</t>

  <t>A reduced SRH does not contain the first segment of the related SR
Policy (the first segment is the one already in the DA of the IPv6
header), and the Last Entry field is set to n-2, where n is the
number of elements in the SR Policy.</t>
</blockquote>

</section>
<section anchor="sec-source-next"><name>Rules for segment lists containing NEXT-C-SID flavor SIDs</name>

<t><list style="numbers">
  <t>If a Destination Option header would follow an SRH with a segment list of more than one segment compressed as a single NEXT-C-SID container, the SR source node MUST NOT omit the SRH.</t>
  <t>When the last Segment List entry (index 0) in the SRH is a C-SID container representing more than one segment, the PSP operation is performed at the segment preceding the first segment of this C-SID container in the segment list. If the PSP behavior should instead be performed at the penultimate segment along the path, the SR source node MUST NOT compress the ultimate segment of the segment list into a C-SID container.</t>
  <t>If a Destination Option header would follow an SRH with a last Segment List entry being a NEXT-C-SID container representing more than one segment, the SR source node MUST ensure that the PSP operation is not performed before the penultimate SR segment endpoint node along the path.</t>
</list></t>

</section>
<section anchor="sec-source-replace"><name>Rules for segment lists containing REPLACE-C-SID flavor SIDs</name>

<t><list style="numbers">
  <t>All SIDs compressed in a REPLACE-C-SID sequence MUST share the same Locator-Block and the same compression scheme.</t>
  <t>All SIDs except the last one in a C-SID sequence for REPLACE-C-SID MUST have the REPLACE-C-SID flavor. If the last C-SID container is fully filled (i.e., the last C-SID is at position 0 in the C-SID container) and the last SID in the C-SID sequence is not the last segment in the segment list, the last SID in the C-SID sequence MUST NOT have the REPLACE-C-SID flavor.</t>
  <t>When a REPLACE-C-SID flavor C-SID is present as the last SID in a container that is not the last Segment List entry (index 0) in the SRH, the next element in the segment list MUST be a REPLACE-C-SID container in packed format carrying at least one C-SID.</t>
</list></t>

<t>The SR source node determines the compression scheme of REPLACE-C-SID flavor SIDs as follows.</t>

<t>When receiving a SID advertisement for a REPLACE-C-SID flavor SID with LNL=16, FL=0, AL=128-LBL-NL-FL, and the value of the Argument is all 0, the SR source node marks both the SID and its locator as using 16-bit compression. All other SIDs allocated from this locator with LNL=16, FL=16, AL=128-LBL-NL-FL, and the value of the Argument is all 0 are also marked as using 16-bit compression. When receiving a SID advertisement for a REPLACE-C-SID flavor SID with LNFL=32, AL=128-LBL-NL-FL, and the value of the Argument is all 0, the SR source node marks both the SID and its locator as using 32-bit compression.</t>

</section>
<section anchor="sec-source-checksum"><name>Upper-Layer Checksums</name>

<t>The Destination Address used in the IPv6 pseudo-header (Section 8.1 of <xref target="RFC8200"/>) is that of the ultimate destination.</t>

<t>At the originating node, that address will be the Destination Address as it is expected to be received by the ultimate destination. When the last element in the compressed segment list is a C-SID container, this address can be obtained from the last element in the uncompressed segment list or by repeatedly applying the segment behavior as described in <xref target="sec-operations-icmp-error"/>. This applies regardless of whether an SRH is present in the IPv6 packet or omitted.</t>

<t>At the recipient(s), that address will be in the Destination Address field of the IPv6 header.</t>

</section>
</section>
<section anchor="inter-domain-compression"><name>Inter-Domain Compression</name>

<t>Some SRv6 traffic may need to cross multiple routing domains, such as different Autonomous Systems (ASes) or different routing areas within an SR domain. Different routing domains may use different addressing schema and Locator-Blocks.</t>

<t>A property of a C-SID sequence is that all C-SIDs in the sequence share the same Locator-Block. Therefore, a segment list that spans across multiple routing domains using different Locator-Blocks may need a separate C-SID sequence for each domain.</t>

<t>This section defines an OPTIONAL solution to improve the efficiency of C-SID compression in multi-domain environments by enabling a C-SID sequence to combine C-SIDs having different Locator-Blocks.</t>

<t>The solution leverages two new SR segment endpoint behaviors, &quot;Endpoint with SRv6 Prefix Swap&quot; (&quot;End.PS&quot; for short) and &quot;Endpoint with L3 cross-connect and SRv6 Prefix Swap&quot; (&quot;End.XPS&quot; for short), that enable modifying the Locator-Block for the next C-SID in the C-SID sequence at the routing domain boundary.</t>

<section anchor="endps-prefix-swap"><name>End.PS: Prefix Swap</name>

<t>The End.PS behavior is a variant of the End behavior that modifies the Locator-Block of the active C-SID sequence. This document defines the End.PS behavior with the NEXT-C-SID flavor and the End.PS behavior with the REPLACE-C-SID flavor.</t>

<t>An End.PS SID is used to transition to a new Locator-Block when the routing domain boundary is on the SR segment endpoint node.</t>

<t>Each instance of an End.PS SID is associated with a target Locator-Block B2/m, where B2 is an IPv6 address prefix and m is the associated prefix length. The target Locator-Block is a local property of the End.PS SID on the SR segment endpoint node.</t>

<aside>
  <t>Note: a local SID property is an attribute associated with the SID when it is instantiated on the SR segment endpoint node. When the SR segment endpoint node identifies the destination address of a received packet as a locally instantiated SID, it also retrieves any local property associated with this SID. Other examples of local SID properties include the set of L3 adjacencies of an End.X SID (Section 4.2 of <xref target="RFC8986"/>) and the lookup table of an End.DT6 SID (Section 4.6 of <xref target="RFC8986"/>).</t>
</aside>

<t>The means by which an SR source node learns the target Locator-Block associated with an End.PS SID are outside the scope of this document. As examples, it could be learnt via configuration or signaled by a controller.</t>

<section anchor="sec-next-endps"><name>End.PS with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.PS SID with the NEXT-C-SID flavor and associated with the target Locator-Block B2/m, the SR segment endpoint node applies the procedure specified in <xref target="sec-next-end"/> with the lines N05 to N06 replaced as follows.</t>

<figure><artwork><![CDATA[
N05.1. Initialize an IPv6 address A equal to B2.
N05.2. Copy DA.Argument into the bits [m..(m+AL-1)] of A.
N06.   Copy A to the Destination Address of the IPv6 header.
]]></artwork></figure>

</section>
<section anchor="sec-replace-endps"><name>End.PS with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.PS SID with the REPLACE-C-SID flavor and associated with the target Locator-Block B2/m, the SR segment endpoint node applies the procedure specified in <xref target="sec-replace-end"/> with the line R20 replaced as follows.</t>

<figure><artwork><![CDATA[
R20.1. Initialize an IPv6 address A equal to B2.
R20.2. Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [m..m+LNFL-1] of the Destination Address of the IPv6 header.
R20.3. Copy A to the Destination Address of the IPv6 header.
]]></artwork></figure>

</section>
</section>
<section anchor="endxps-l3-cross-connect-and-prefix-swap"><name>End.XPS: L3 Cross-Connect and Prefix Swap</name>

<t>The End.XPS behavior is a variant of the End.X behavior that modifies the Locator-Block of the active C-SID sequence. This document defines the End.XPS behavior with the NEXT-C-SID flavor and the End.XPS behavior with the REPLACE-C-SID flavor.</t>

<t>An End.XPS SID is used to transition to a new Locator-Block when the routing domain boundary is on a link adjacent to the SR segment endpoint node.</t>

<t>Each instance of an End.XPS SID is associated with a target Locator-Block B2/m and a set, J, of one or more L3 adjacencies. The target Locator-Block and set of adjacencies are local properties of the End.XPS SID on the SR segment endpoint node.</t>

<t>The means by which an SR source node learns the target Locator-Block associated with an End.XPS SID are outside the scope of this document. As examples, it could be learnt via configuration or signaled by a controller.</t>

<section anchor="sec-next-endxps"><name>End.XPS with NEXT-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.XPS SID with the NEXT-C-SID flavor and associated with the target Locator-Block B2/m, the SR segment endpoint node applies the procedure specified in <xref target="sec-next-endx"/> with the lines N05 to N06 (of the pseudocode in <xref target="sec-next-end"/>) replaced as follows.</t>

<figure><artwork><![CDATA[
N05.1. Initialize an IPv6 address A equal to B2.
N05.2. Copy DA.Argument into the bits [m..(m+AL-1)] of A.
N06.   Copy A to the Destination Address of the IPv6 header.
]]></artwork></figure>

</section>
<section anchor="sec-replace-endxps"><name>End.XPS with REPLACE-C-SID</name>

<t>When processing an IPv6 packet that matches a FIB entry locally instantiated as an End.XPS SID with the REPLACE-C-SID flavor and associated with the target Locator-Block B2/m, the SR segment endpoint node applies the procedure specified in <xref target="sec-replace-endx"/> with the line R20 (of the pseudocode in <xref target="sec-replace-end"/>) replaced as follows.</t>

<figure><artwork><![CDATA[
R20.1. Initialize an IPv6 address A equal to B2.
R20.2. Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [m..m+LNFL-1] of the Destination Address of the IPv6 header.
R20.3. Copy A to the Destination Address of the IPv6 header.
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="sec-control-plane"><name>Control Plane</name>

<t>This document does not require any new extensions to routing protocols.</t>

<t>Section 8 of <xref target="RFC8986"/> provides an overview of the control plane protocols used for signaling of the SRv6 SIDs introduced by that document.
The SRv6 SIDs introduced by this document are advertised using the same SRv6 extensions for various routing protocols, such as</t>

<t><list style="symbols">
  <t>IS-IS <xref target="RFC9352"/></t>
  <t>OSPFv3 <xref target="RFC9513"/></t>
  <t>BGP <xref target="RFC9252"/>, <xref target="RFC9514"/>, <xref target="I-D.ietf-idr-sr-policy-safi"/></t>
  <t>BGP-LS <xref target="I-D.ietf-idr-bgp-ls-sr-policy"/></t>
  <t>PCEP <xref target="I-D.ietf-pce-segment-routing-ipv6"/></t>
</list></t>

<t>The SR segment endpoint node MUST set the SID Argument bits to 0 when advertising a locally instantiated SID of this document in the routing protocol (e.g., IS-IS <xref target="RFC9352"/>, OSPF <xref target="RFC9513"/>, or BGP-LS <xref target="RFC9514"/>).</t>

<t>Signaling the SRv6 SID Structure is REQUIRED for all the SIDs introduced in this document. It is used by an SR source node to compress a segment list as described in <xref target="sec-source-node"/>.
The node initiating the SID advertisement MUST set the length values in the SRv6 SID Structure to match the format of the SID on the SR segment endpoint node. For example, for a SID of this document instantiated from a /48 SRv6 SID block and a /64 Locator, and having a 16-bit Function, the SRv6 SID Structure advertisement carries the following values.</t>

<t><list style="symbols">
  <t>Locator-Block length: 48</t>
  <t>Locator-Node length: 16</t>
  <t>Function length: 16</t>
  <t>Argument length: 48 (= 128-48-16-16)</t>
</list></t>

<t>A local C-SID may be advertised in the control plane individually and/or in combination with a global C-SID instantiated on the same SR segment endpoint node, with the End behavior, and the same Locator-Block and flavor as the local C-SID. A combined global and local C-SID is advertised as follows.</t>

<t><list style="symbols">
  <t>The SID Locator-Block is that shared by the global and local C-SIDs</t>
  <t>The SID Locator-Node is that of global C-SID</t>
  <t>The SID Function is that of the local C-SID</t>
  <t>The SID Argument length is equal to 128-LBL-LNL-FL and the SID Argument value is 0</t>
  <t>All other attributes of the SID (e.g., endpoint behavior or algorithm) are those of the local C-SID</t>
</list></t>

<t>The local C-SID combined advertisement is needed in particular for control plane protocols mandating that the SID is a subnet of a locator advertised in the same protocol (e.g., Section 8 of <xref target="RFC9352"/> and Section 9 of <xref target="RFC9513"/> for advertising Adjacency SIDs in IS-IS and OSPFv3, respectively).</t>

<t>For a segment list computed by a controller and signaled to an SR source node (e.g., via BGP <xref target="I-D.ietf-idr-sr-policy-safi"/> or PCEP <xref target="I-D.ietf-pce-segment-routing-ipv6"/>), the controller provides the ordered segment list comprising the uncompressed SIDs, with their respective behavior and structure, to the SR source node. The SR source node may then compress the segment list as described in <xref target="sec-source-node"/>.</t>

<t>When a node that does not support this specification receives an advertisement of a SID of this document, it handles it as described in the corresponding control plane specification (e.g., Sections 7.2, 8.1, and 8.2 of <xref target="RFC9352"/>, Sections 8, 9.1, and 9.2 of <xref target="RFC9513"/>, and Section 3.1 of <xref target="RFC9252"/>).</t>

</section>
<section anchor="operational-considerations"><name>Operational Considerations</name>

<section anchor="pinging-a-sid"><name>Pinging a SID</name>

<t>An SR source node may ping an SRv6 SID by sending an ICMPv6 echo request packet destined to the SRv6 SID, with or without a segment list. This operation is illustrated in Appendix A.1.2 of <xref target="RFC9259"/>.</t>

<t>When pinging a SID of this document without a segment list, the SR source node places the SID in the destination address of the ICMPv6 echo request and MUST set the Argument of the SID to 0. The Argument value 0 allows the SID SR segment endpoint node (<xref target="sec-endpoint"/>) to identify itself as the ultimate destination of the packet and process the ICMPv6 payload. If the SR source node sets a non-zero Argument value, the SR segment endpoint node would instead attempt to determine the next destination of the packet.</t>

<t>When pinging a SID of this document via a segment list, the SR source node MUST construct the IPv6 packet as described in <xref target="sec-source-node"/> and compute the ICMPv6 checksum as described in <xref target="sec-source-checksum"/>.</t>

</section>
<section anchor="sec-operations-icmp-error"><name>ICMP Error Processing</name>

<t>When an IPv6 node encounters an error while processing a packet, it may report that error by sending an IPv6 error message to the packet source with an enclosed copy of the invoking packet. For the source of an invoking packet to process the ICMP error message, the ultimate destination address of the IPv6 header may be required.</t>

<t>Section 5.4 of <xref target="RFC8754"/> defines the logic that an SR source node follows to determine the ultimate destination of an invoking packet containing an SRH.</t>

<t>For an SR source node that supports the compressed segment list encoding defined in this document, the logic to determine the ultimate destination is generalized as follows.</t>

<t><list style="symbols">
  <t>If the destination address of the invoking IPv6 packet matches a known SRv6 SID, modify the invoking IPv6 packet by applying the SID behavior associated with the matched SRv6 SID;</t>
  <t>Repeat until the application of the SID behavior would result in the processing of the upper-layer header.</t>
</list></t>

<t>The destination address of the resulting IPv6 packet may be used as the ultimate destination of the invoking IPv6 packet.</t>

<t>Since the SR source node that needs to determine the ultimate destination is the same node that originally built the segment list in the invoking packet, it is able to perform this operation for all the SIDs in the packet.</t>

</section>
</section>
<section removeInRFC="true" anchor="implementation-status"><name>Implementation Status</name>

<t>RFC-Editor: Please clean up the references cited by this section before publication.</t>

<t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>

<t>According to <xref target="RFC7942"/>, &quot;this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit&quot;.</t>

<t>This section is provided in compliance with the SPRING working group policies (<xref target="SPRING-WG-POLICIES"/>).</t>

<section anchor="cisco-systems"><name>Cisco Systems</name>

<t>Cisco Systems reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>) and the SR source node efficient SID-list encoding (<xref target="sec-source-node"/>) for NEXT-C-SID flavor SIDs. These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>Cisco NCS 540 Series routers running IOS XR 7.3.x or above <xref target="IMPL-CISCO-NCS540"/></t>
  <t>Cisco NCS 560 Series routers running IOS XR 7.6.x or above <xref target="IMPL-CISCO-NCS560"/></t>
  <t>Cisco NCS 5500 Series routers running IOS XR 7.3.x or above <xref target="IMPL-CISCO-NCS5500"/></t>
  <t>Cisco NCS 5700 Series routers running IOS XR 7.5.x or above <xref target="IMPL-CISCO-NCS5700"/></t>
  <t>Cisco 8000 Series routers running IOS XR 7.5.x or above <xref target="IMPL-CISCO-8000"/></t>
  <t>Cisco ASR 9000 Series routers running IOS XR 7.5.x or above <xref target="IMPL-CISCO-ASR9000"/></t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on January 11, 2023.</t>

</section>
<section anchor="huawei-technologies"><name>Huawei Technologies</name>

<t>Huawei Technologies reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>).
These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>Huawei ATN8XX,ATN910C,ATN980B routers running VRPV800R021C00 or above.</t>
  <t>Huawei CX600-M2 routers running VRPV800R021C00 or above.</t>
  <t>Huawei NE40E,ME60-X1X2,ME60-X3X8X16 routers running VRPV800R021C00 or above.</t>
  <t>Huawei NE5000E,NE9000 routers running VRPV800R021C00 or above.</t>
  <t>Huawei NCE-IP Controller running V1R21C00 or above.</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the REPLACE-C-SID flavor.</t>

<t>This report was last updated on January 11, 2023.</t>

</section>
<section anchor="nokia"><name>Nokia</name>

<t>Nokia reported the following implementations (<xref target="IMPL-NOKIA-20.10"/>) of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>).  These are used as part of its shortest path forwarding (in algorithm 0 and Flex-Algo), remote and TI-LFA repair tunnel, and Traffic Engineering functionalities.</t>

<t><list style="symbols">
  <t>Nokia 7950 XRS 20/20e routers running SROS Release 22.10 or above</t>
  <t>Nokia 7750 SR-12e routers running SROS Release 22.10 or above</t>
  <t>Nokia 7750 SR-7/12 routers running SROS Release 22.10 or above</t>
  <t>Nokia 7750 SR-7s/14s routers running SROS Release 22.10 or above</t>
  <t>Nokia 7750 SR-1/1s/2s routers running SROS Release 22.10 or above</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on February 3, 2023.</t>

</section>
<section anchor="arrcus"><name>Arrcus</name>

<t>Arrcus reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>). These are used as part of its SRv6 shortest path forwarding (in algorithm 0 and Flex-Algo),  TI-LFA, micro-loop avoidance and Traffic Engineering functionalities.</t>

<t><list style="symbols">
  <t>Arrcus running on Ufi Space routers S9510-28DC, S9710-76D, S9600-30DX and S9700-23D with ArcOS v5.2.1 or above</t>
  <t>Arrcus running n Ufi Space routers S9600-72XC and S9700-53DX with ArcOS v5.1.1D or above</t>
  <t>Arrcus running on Quanta router IXA and IXAE with ArcOS v5.1.1D or above</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on March 11, 2023.</t>

</section>
<section anchor="juniper-networks"><name>Juniper Networks</name>

<t>Juniper Networks reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>). These are used as part of its SRv6 shortest path forwarding (in algorithm 0 and Flex-Algo), TI-LFA, micro-loop avoidance, and Traffic Engineering functionalities.</t>

<t>Juniper release 23.3 onwards supports this functionality.</t>

<t>At the time of this report, all the implementations listed above are in development and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on May 30, 2023.</t>

</section>
<section anchor="marvell"><name>Marvell</name>

<t>Marvell reported support in the Marvell Prestera Packet Processor for the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>) and REPLACE-C-SID flavor (<xref target="sec-replace"/>).</t>

<t>This report was last updated on February 15, 2023.</t>

</section>
<section anchor="broadcom"><name>Broadcom</name>

<t>Broadcom reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>) and REPLACE-C-SID flavor (<xref target="sec-replace"/>).  These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities. All implementation of the following list is in general availability for customers using BCM SDK 6.5.26 or above.</t>

<t><list style="symbols">
  <t>88850 (Jericho2c+) series</t>
  <t>88690 (Jericho2) series</t>
  <t>88800 (Jericho2c) series</t>
  <t>88480 (Qunran2a) series</t>
  <t>88280 (Qunran2u) series</t>
  <t>88295 (Qunran2n) series</t>
  <t>88830 (Jericho2x) series</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID and REPLACE-C-SID flavors.</t>

<t>For 78900 (Tomahawk) series-related support, please contact the Broadcom team.</t>

<t>This report was last updated on February 21, 2023.</t>

</section>
<section anchor="zte-corporation"><name>ZTE Corporation</name>

<t>ZTE Corporation reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>). These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>ZTE M6000-18S(BRAS), M6000-8S Plus(BRAS) routers running V5.00.10.09 or above.</t>
  <t>ZTE M6000-18S(SR), M6000-8S Plus(SR) routers running V5.00.10.80 or above.</t>
  <t>ZTE T8000-18 routers running V5.00.10.07 or above.</t>
</list></t>

<t>This report was last updated on March 29, 2023.</t>

</section>
<section anchor="new-h3c-technologies"><name>New H3C Technologies</name>

<t>New H3C Technologies reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>). These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>H3C CR16000-F, SR8800-X routers running Version 7.1.075 or above.</t>
  <t>H3C CR18000, CR19000 routers running Version 7.1.071 or above.</t>
</list></t>

<t>This report was last updated on March 29, 2023.</t>

</section>
<section anchor="ruijie-network"><name>Ruijie Network</name>

<t>Ruijie Network reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>). These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities.</t>

<t><list style="symbols">
  <t>RUIJIE RG-N8018-R, RG-N8010-R routers running N8000-R_RGOS 12.8(3)B0801 or above.</t>
</list></t>

<t>This report was last updated on March 29, 2023.</t>

</section>
<section anchor="ciena"><name>Ciena</name>

<t>Ciena reported the following implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>). These are used as part of its shortest path forwarding (in algorithm 0 and Flex-Algo), remote and TI-LFA repair tunnel, and Traffic Engineering functionalities.</t>

<t>The following platforms support implementation of the above.</t>

<t><list style="symbols">
  <t>Ciena 5162, 5164, 5166, 5168 routers running SAOS 10.10 or above</t>
  <t>Ciena 8110, 8112, 8190 routers running SAOS 10.10 or above</t>
</list></t>

<t>At the time of this report, all the implementations listed above are in production and follow the specification in the latest version of this document, including all the &quot;MUST&quot; and &quot;SHOULD&quot; clauses for the NEXT-C-SID flavor.</t>

<t>This report was last updated on February 6, 2024.</t>

</section>
<section anchor="centec"><name>Centec</name>

<t>Centec reported the following implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>). These are used as part of its SRv6 TI-LFA, micro-loop avoidance, and traffic engineering functionalities. All implementation of the following list is in general availability for customers using Centec SDK 5.6.8 or above.</t>

<t><list style="symbols">
  <t>CTC7132 (TsingMa) Series</t>
  <t>CTC8180 (TsingMa.MX) Series</t>
</list></t>

<t>This report was last updated on February 14, 2024.</t>

</section>
<section anchor="open-source"><name>Open Source</name>

<t>The authors found the following open source implementations of the SR segment endpoint node NEXT-C-SID flavor (<xref target="sec-next"/>).</t>

<t><list style="symbols">
  <t>The Linux kernel, version 6.1 <xref target="IMPL-OSS-LINUX"/></t>
  <t>The Software for Open Networking in the Cloud (SONiC), version 202212 <xref target="IMPL-OSS-SONIC"/>, and Switch Abstraction Interface (SAI), version  1.9.0 <xref target="IMPL-OSS-SAI"/></t>
  <t>The Vector Packet Processor (VPP), version 20.05 <xref target="IMPL-OSS-VPP"/></t>
  <t>A generic P4 implementation <xref target="IMPL-OSS-P4"/></t>
</list></t>

<t>The authors found the following open source implementations of the SR segment endpoint node REPLACE-C-SID flavor (<xref target="sec-replace"/>).</t>

<t><list style="symbols">
  <t>ONOS and P4 Programmable Switch based <xref target="IMPL-OSS-ONOS"/></t>
  <t>Open SRv6 Project <xref target="IMPL-OSS-OPEN-SRV6"/></t>
</list></t>

<t>This section was last updated on January 11, 2023.</t>

</section>
<section anchor="interoperability-reports"><name>Interoperability Reports</name>

<section anchor="bell-canada-ciena-2023"><name>Bell Canada / Ciena 2023</name>

<t>Bell Canada is currently evaluating interoperability between Ciena and Cisco implementations of the NEXT-C-SID flavor defined in this document. Further information will be added to this section when the evaluation is complete.</t>

</section>
<section anchor="eantc-2023"><name>EANTC 2023</name>

<t>In April 2023, the European Advanced Networking Test Center (EANTC) successfully validated multiple implementations of SRv6 NEXT-C-SID flavor (a.k.a., SRv6 uSID) <xref target="EANTC-23"/>.</t>

<t>The participating vendors included Arista, Arrcus, Cisco, Huawei, Juniper, Keysight, Nokia, and Spirent.</t>

</section>
<section anchor="china-mobile-2020"><name>China Mobile 2020</name>

<t>In November 2020, China Mobile successfully validated multiple interoperable implementations of the NEXT-C-SID and REPLACE-C-SID flavors defined in this document.</t>

<t>This testing covered two different implementations of the SRv6 endpoint flavors defined in this document:</t>

<t><list style="symbols">
  <t>Hardware implementation in Cisco ASR 9000 running IOS XR</t>
  <t>Software implementation in Cisco IOS XRv9000 virtual appliance</t>
  <t>Hardware implementation in Huawei NE40E and NE5000E running VRP</t>
</list></t>

<t>The interoperability testing consisted of a packet flow sent by an SR source node N0 via an SR traffic engineering policy with a segment list <spanx style="verb">&lt;S1, S2, S3, S4, S5, S6, S7&gt;</spanx>, where S1..S7 are SIDs instantiated on SR segment endpoint nodes N1..N7, respectively.</t>

<figure><artwork><![CDATA[
N0 --- N1 --- N2 --- N3 --- N4 --- N5 --- N6 --- N7
      (S1)   (S2)   (S3)   (S4)   (S5)   (S6)   (S7)
]]></artwork></figure>

<t><list style="symbols">
  <t>N0 is a generic packet generator.</t>
  <t>N1, N2, and N3 are Huawei routers.</t>
  <t>N4, N5, and N6 are Cisco routers.</t>
  <t>N7 is a generic traffic generator acting as a packet receiver.</t>
</list></t>

<t>The SR source node N0 steers the packets onto the SR policy by setting the IPv6 destination address and creating an SRH (as described in Section 4.1 of <xref target="RFC8754"/>) using a compressed segment list encoding. The length of the compressed segment list encoding varies for each scenario.</t>

<t>All SR segment endpoint nodes execute a variant of the End behavior: regular End behavior (as defined in Section 4.1 of <xref target="RFC8986"/>), End behavior with NEXT-C-SID flavor, and End behavior with REPLACE-C-SID flavor. The variant being used at each SR segment endpoint node varies for each scenario.</t>

<t>The interoperability was validated for the following scenarios:</t>

<t><strong>Scenario 1:</strong></t>

<t><list style="symbols">
  <t>S1 and S2 are associated with the End behavior with the REPLACE-C-SID flavor</t>
  <t>S3 is associated with the regular End behavior (no flavor)</t>
  <t>S4, S5, and S6 are associated with the End behavior with the NEXT-C-SID flavor</t>
  <t>The SR source node imposes a compressed segment list encoding of 3 SIDs.</t>
</list></t>

<t><strong>Scenario 2:</strong></t>

<t><list style="symbols">
  <t>S1, S2..., S6 are associated with the End behavior with the NEXT-C-SID flavor</t>
  <t>The SR source node imposes a compressed segment list encoding of 2 SIDs.</t>
</list></t>

<t><strong>Scenario 3:</strong></t>

<t><list style="symbols">
  <t>S1, S2..., S6 are associated with the End behavior with the REPLACE-C-SID flavor</t>
  <t>The SR source node imposes a compressed segment list encoding of 3 SIDs.</t>
</list></t>

</section>
</section>
</section>
<section anchor="sec-future"><name>Applicability to other SR Segment Endpoint Behaviors</name>

<t>Future documents may extend the applicability of the NEXT-C-SID and REPLACE-C-SID flavors to other SR segment endpoint behaviors.</t>

<t>For an SR segment endpoint behavior that can be used before the last position of a segment list, a C-SID flavor is defined by reproducing the same logic as described in <xref target="sec-next"/> and <xref target="sec-replace"/> of this document to determine the next segment in the segment list.</t>

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

<t>Section 8 of <xref target="RFC8402"/> discusses the security considerations for Segment Routing.</t>

<t>Section 5 of <xref target="RFC8754"/> describes the intra-SR-domain deployment model and how to secure it. Section 7 of <xref target="RFC8754"/> describes the threats applicable to SRv6 and how to mitigate them.</t>

<t>Section 9 of <xref target="RFC8986"/> discusses the security considerations applicable to the SRv6 network programming framework, as well as the SR source node and SR segment endpoint node behaviors that it defines.</t>

<t>This document introduces two new flavors for some of the SR segment endpoint behaviors defined in <xref target="RFC8986"/> and a method by which an SR source node may leverage the SIDs of these flavors to produce a compressed segment list.</t>

<t>An SR source node constructs an IPv6 packet with a compressed segment list as defined in Sections 3.1 and 4.1 of <xref target="RFC8754"/> and Section 5 of <xref target="RFC8986"/>. The paths that an SR source node may enforce using a compressed segment list are the same, from a topology and service perspective, as those that an SR source node could enforce using the SIDs of <xref target="RFC8986"/>.</t>

<t>An SR segment endpoint node processes an IPv6 packet matching a locally instantiated SID as defined in <xref target="RFC8986"/>, with the pseudocode modifications in Section 4 of this document. These modifications change how the SR segment endpoint node determines the next SID in the packet, but not the semantic of either the active or the next SID. For example, an adjacency segment instantiated with the End.X behavior remains an adjacency segment regardless of whether it uses the unflavored End.X behavior defined in Section 4.2 of <xref target="RFC8986"/> or a C-SID flavor of that behavior. This document does not introduce any new SID semantic.</t>

<t>Any other transit node processes the packet as described in Section 4.2 of <xref target="RFC8754"/>.</t>

<t>This document defines a new method of encoding the SIDs inside a segment list at the SR source node and decoding them at the SR segment endpoint node, but it does not change how the segment list itself is encoded in the IPv6 packet nor the semantic of any segment that it comprises. Therefore, this document is subject to the same security considerations that are discussed in <xref target="RFC8402"/>, <xref target="RFC8754"/>, and <xref target="RFC8986"/>.</t>

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

<section anchor="srv6-endpoint-behaviors"><name>SRv6 Endpoint Behaviors</name>

<t>This I-D. requests the IANA to update the reference of the following registrations from the &quot;SRv6 Endpoint Behaviors&quot; registry under the top-level &quot;Segment Routing&quot; registry-group (https://www.iana.org/assignments/segment-routing/) with the RFC number of this document once it is published, and transfer change control to the IETF.</t>

<texttable title="Registration List" anchor="tbl-iana-endpoint-behaviors">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>43</c>
      <c>End with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>44</c>
      <c>End with NEXT-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>45</c>
      <c>End with NEXT-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>46</c>
      <c>End with NEXT-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>47</c>
      <c>End with NEXT-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>48</c>
      <c>End with NEXT-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>49</c>
      <c>End with NEXT-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>50</c>
      <c>End with NEXT-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>52</c>
      <c>End.X with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>53</c>
      <c>End.X with NEXT-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>54</c>
      <c>End.X with NEXT-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>55</c>
      <c>End.X with NEXT-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>56</c>
      <c>End.X with NEXT-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>57</c>
      <c>End.X with NEXT-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>58</c>
      <c>End.X with NEXT-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>59</c>
      <c>End.X with NEXT-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>85</c>
      <c>End.T with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>86</c>
      <c>End.T with NEXT-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>87</c>
      <c>End.T with NEXT-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>88</c>
      <c>End.T with NEXT-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>89</c>
      <c>End.T with NEXT-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>90</c>
      <c>End.T with NEXT-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>91</c>
      <c>End.T with NEXT-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>92</c>
      <c>End.T with NEXT-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>93</c>
      <c>End.B6.Encaps with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>94</c>
      <c>End.B6.Encaps.Red with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>95</c>
      <c>End.BM with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>96</c>
      <c>End.PS with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>97</c>
      <c>End.XPS with NEXT-CSID</c>
      <c>This I-D.</c>
      <c>101</c>
      <c>End with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>102</c>
      <c>End with REPLACE-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>103</c>
      <c>End with REPLACE-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>104</c>
      <c>End with REPLACE-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>105</c>
      <c>End.X with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>106</c>
      <c>End.X with REPLACE-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>107</c>
      <c>End.X with REPLACE-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>108</c>
      <c>End.X with REPLACE-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>109</c>
      <c>End.T with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>110</c>
      <c>End.T with REPLACE-CSID &amp; PSP</c>
      <c>This I-D.</c>
      <c>111</c>
      <c>End.T with REPLACE-CSID &amp; USP</c>
      <c>This I-D.</c>
      <c>112</c>
      <c>End.T with REPLACE-CSID, PSP &amp; USP</c>
      <c>This I-D.</c>
      <c>114</c>
      <c>End.B6.Encaps with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>115</c>
      <c>End.BM with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>116</c>
      <c>End.DX6 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>117</c>
      <c>End.DX4 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>118</c>
      <c>End.DT6 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>119</c>
      <c>End.DT4 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>120</c>
      <c>End.DT46 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>121</c>
      <c>End.DX2 with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>122</c>
      <c>End.DX2V with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>123</c>
      <c>End.DT2U with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>124</c>
      <c>End.DT2M with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>127</c>
      <c>End.B6.Encaps.Red with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>128</c>
      <c>End with REPLACE-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>129</c>
      <c>End with REPLACE-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>130</c>
      <c>End with REPLACE-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>131</c>
      <c>End with REPLACE-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>132</c>
      <c>End.X with REPLACE-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>133</c>
      <c>End.X with REPLACE-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>134</c>
      <c>End.X with REPLACE-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>135</c>
      <c>End.X with REPLACE-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>136</c>
      <c>End.T with REPLACE-CSID &amp; USD</c>
      <c>This I-D.</c>
      <c>137</c>
      <c>End.T with REPLACE-CSID, PSP &amp; USD</c>
      <c>This I-D.</c>
      <c>138</c>
      <c>End.T with REPLACE-CSID, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>139</c>
      <c>End.T with REPLACE-CSID, PSP, USP &amp; USD</c>
      <c>This I-D.</c>
      <c>140</c>
      <c>End.PS with REPLACE-CSID</c>
      <c>This I-D.</c>
      <c>141</c>
      <c>End.XPS with REPLACE-CSID</c>
      <c>This I-D.</c>
</texttable>

</section>
</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>The authors would like to thank Kamran Raza, Xing Jiang, YuanChao Su, Han Li, Yisong Liu, Martin Vigoureux, Joel Halpern, and Tal Mizrahi for their insightful feedback and suggestions.</t>

<t>The authors would also like to thank Andrew Alston, Linda Dunbar, Adrian Farrel, Boris Hassanov, and Alvaro Retana for their thorough review of this document.</t>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">

&RFC8200;
&RFC8402;
&RFC8754;
&RFC8986;
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

&RFC7942;
&RFC9252;
&RFC9259;
&RFC9350;
&RFC9352;
&RFC9513;
&RFC9514;
&I-D.ietf-6man-sids;
&I-D.ietf-idr-bgp-ls-sr-policy;
&I-D.ietf-idr-sr-policy-safi;
&I-D.ietf-pce-segment-routing-ipv6;
<reference anchor="GKP94" >
  <front>
    <title>Concrete Mathematics: A Foundation for Computer Science</title>
    <author initials="R." surname="Graham" fullname="Ronald Graham">
      <organization></organization>
    </author>
    <author initials="D." surname="Knuth" fullname="Donald Knuth">
      <organization></organization>
    </author>
    <author initials="O." surname="Patashnik" fullname="Oren Patashnik">
      <organization></organization>
    </author>
    <date year="1994"/>
  </front>
  <seriesInfo name="ISBN" value="9780201558029"/>
</reference>
<reference anchor="SPRING-WG-POLICIES" target="https://wiki.ietf.org/en/group/spring/WG_Policies">
  <front>
    <title>SPRING Working Group Policies</title>
    <author >
      <organization>SPRING Working Group Chairs</organization>
    </author>
    <date year="2022" month="October" day="14"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-NCS540" target="https://www.cisco.com/c/en/us/td/docs/iosxr/ncs5xx/segment-routing/73x/b-segment-routing-cg-73x-ncs540/configure-srv6.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco NCS 540 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="02"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-NCS560" target="https://www.cisco.com/c/en/us/td/docs/iosxr/ncs560/segment-routing/76x/b-segment-routing-cg-76x-ncs560/m-configure-srv6-usid-ncs5xx.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco NCS 560 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="October" day="14"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-NCS5500" target="https://www.cisco.com/c/en/us/td/docs/iosxr/ncs5500/segment-routing/73x/b-segment-routing-cg-ncs5500-73x/configure-srv6-micro-sid.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco NCS 5500 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="06"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-NCS5700" target="https://www.cisco.com/c/en/us/td/docs/iosxr/ncs5500/segment-routing/75x/b-segment-routing-cg-ncs5500-75x/configure-srv6-micro-sid.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco NCS 5700 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="06"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-8000" target="https://www.cisco.com/c/en/us/td/docs/iosxr/cisco8000/segment-routing/75x/b-segment-routing-cg-cisco8000-75x/configuring-segment-routing-over-ipv6-srv6-micro-sids.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco 8000 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="04"/>
  </front>
</reference>
<reference anchor="IMPL-CISCO-ASR9000" target="https://www.cisco.com/c/en/us/td/docs/routers/asr9000/software/asr9k-r7-5/segment-routing/configuration/guide/b-segment-routing-cg-asr9000-75x/configure-srv6-micro-sid.html">
  <front>
    <title>Segment Routing Configuration Guide for Cisco ASR 9000 Series Routers</title>
    <author >
      <organization>Cisco Systems</organization>
    </author>
    <date year="2022" month="November" day="06"/>
  </front>
</reference>
<reference anchor="IMPL-NOKIA-20.10" target="https://documentation.nokia.com/sr/22-10/books/Segment%20Routing%20and%20PCE%20User%20Guide/segment-rout-with-ipv6-data-plane-srv6.html">
  <front>
    <title>Segment Routing and PCE User Guide</title>
    <author >
      <organization>Nokia</organization>
    </author>
    <date year="2022" month="December"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-LINUX" target="https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=cec9d59e89362809f17f2d854faf52966216da13">
  <front>
    <title>Add NEXT-C-SID support for SRv6 End behavior</title>
    <author initials="P." surname="Abeni" fullname="Paolo Abeni">
      <organization></organization>
    </author>
    <date year="2022" month="September" day="20"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-SONIC" target="https://github.com/sonic-net/SONiC/blob/master/doc/srv6/SRv6_uSID.md">
  <front>
    <title>SONiC uSID</title>
    <author initials="S." surname="Shah" fullname="Shitanshu Shah">
      <organization></organization>
    </author>
    <author initials="R." surname="Sudarshan" fullname="Reshma Sudarshan">
      <organization></organization>
    </author>
    <date year="2022" month="August" day="21"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-SAI" target="https://github.com/opencomputeproject/SAI/pull/1231/commits/02e58d95ad966ca9efc24eb9e0c0fa10b21de2a4">
  <front>
    <title>Added new behaviors to support uSID instruction</title>
    <author initials="A." surname="Agrawal" fullname="Ashutosh Agrawal">
      <organization></organization>
    </author>
    <date year="2021" month="June" day="08"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-VPP" target="https://s3-docs.fd.io/vpp/23.02/cli-reference/clis/clicmd_src_vnet_srv6.html">
  <front>
    <title>Srv6 cli reference</title>
    <author >
      <organization>FD.io</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IMPL-OSS-P4" target="https://github.com/netgroup/p4-srv6-usid">
  <front>
    <title>SRv6 uSID (micro SID) implementation on P4</title>
    <author initials="S." surname="Salsano" fullname="Stefano Salsano">
      <organization></organization>
    </author>
    <author initials="A." surname="Tulumello" fullname="Angelo Tulumello">
      <organization></organization>
    </author>
    <date year="2021" month="January" day="03"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-ONOS" target="https://wiki.opennetworking.org/display/COM/Stratum+CMCC+G-SRv6+Project">
  <front>
    <title>Stratum CMCC G-SRv6 Project</title>
    <author >
      <organization>Open Networking Foundation</organization>
    </author>
    <date year="2021" month="March" day="24"/>
  </front>
</reference>
<reference anchor="IMPL-OSS-OPEN-SRV6" target="http://opensrv6.org.cn/en/srv6-2/">
  <front>
    <title>Open SRv6 Project</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="EANTC-23" target="https://eantc.de/fileadmin/eantc/downloads/events/2023/EANTC-InteropTest2023-TestReport.pdf">
  <front>
    <title>Multi-Vendor MPLS SDN Interoperability Test Report</title>
    <author >
      <organization>European Advanced Networking Test Center (EANTC)</organization>
    </author>
    <date year="2023" month="April" day="18"/>
  </front>
</reference>


    </references>


<?line 1433?>

<section anchor="complete-pseudocodes"><name>Complete pseudocodes</name>

<t>The content of this section is purely informative rendering of the pseudocodes of <xref target="RFC8986"/> with the modifications in this document. This rendering may not be used as a reference.</t>

<section anchor="sec-next-end-complete"><name>End with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address
           with Code 0 (Hop limit exceeded in transit),
           interrupt packet processing, and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15. Submit the packet to the egress IPv6 FIB lookup for
       transmission to the new destination.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-next-endx-complete"><name>End.X with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.X SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address
           with Code 0 (Hop limit exceeded in transit),
           interrupt packet processing, and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the IPv6 module for transmission to the
         new destination via a member of J.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15. Submit the packet to the IPv6 module for transmission
       to the new destination via a member of J.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End.X SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.   Submit the packet to the IPv6 module for transmission to the
         new destination via a member of J.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.X SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-next-endt-complete"><name>End.T with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.T SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address
           with Code 0 (Hop limit exceeded in transit),
           interrupt packet processing, and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Set the packet's associated FIB table to T.
N08.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15.1. Set the packet's associated FIB table to T.
S15.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End.T SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Set the packet's associated FIB table to T.
N08.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.T SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-next-endb6-complete"><name>End.B6.Encaps with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Push a new IPv6 header with its own SRH containing B.
N08.2. Set the outer IPv6 SA to A.
N08.3. Set the outer IPv6 DA to the first SID of B.
N08.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
N08.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15. Push a new IPv6 header with its own SRH containing B.
S16. Set the outer IPv6 SA to A.
S17. Set the outer IPv6 DA to the first SID of B.
S18. Set the outer Payload Length, Traffic Class, Flow Label,
       Hop Limit, and Next Header fields.
S19. Submit the packet to the egress IPv6 FIB lookup for
       transmission to the new destination.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Push a new IPv6 header with its own SRH containing B.
N08.2. Set the outer IPv6 SA to A.
N08.3. Set the outer IPv6 DA to the first SID of B.
N08.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
N08.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-next-endbm-complete"><name>End.BM with NEXT-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.BM SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Push the MPLS label stack for B.
N08.2. Submit the packet to the MPLS engine for transmission.
N09. }
S02. If (Segments Left == 0) {
S03.   Stop processing the SRH, and proceed to process the next
         header in the packet, whose type is identified by
         the Next Header field in the routing header.
S04. }
S05. If (IPv6 Hop Limit <= 1) {
S06.   Send an ICMP Time Exceeded message to the Source Address
         with Code 0 (Hop limit exceeded in transit),
         interrupt packet processing, and discard the packet.
S07. }
S08. max_LE = (Hdr Ext Len / 2) - 1
S09. If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
S10.   Send an ICMP Parameter Problem to the Source Address
         with Code 0 (Erroneous header field encountered)
         and Pointer set to the Segments Left field,
         interrupt packet processing, and discard the packet.
S11. }
S12. Decrement IPv6 Hop Limit by 1.
S13. Decrement Segments Left by 1.
S14. Update IPv6 DA with Segment List[Segments Left].
S15. Push the MPLS label stack for B.
S16. Submit the packet to the MPLS engine for transmission.
]]></artwork></figure>

<t>Before processing the Upper-Layer header or any IPv6 extension header other than Hop-by-Hop or Destination Option of a packet matching a FIB entry locally instantiated as an End.BM SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
N01. If (DA.Argument != 0) {
N02.   If (IPv6 Hop Limit <= 1) {
N03.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
N04.   }
N05.   Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the
         Destination Address.
N06.   Set the bits [(LBL+AL)..127] of the Destination Address to
         zero.
N07.   Decrement IPv6 Hop Limit by 1.
N08.1. Push the MPLS label stack for B.
N08.2. Submit the packet to the MPLS engine for transmission.
N09. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.BM SID with the NEXT-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
         with Code 4 (SR Upper-layer Header Error)
         and Pointer set to the offset of the Upper-Layer header,
         interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-end-complete"><name>End with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.       Submit the packet to the egress IPv6 FIB lookup for
            transmission to the new destination.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.   Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-endx-complete"><name>End.X with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.X SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.       Submit the packet to the IPv6 module for transmission to
             the new destination via a member of J.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.   Submit the packet to the IPv6 module for transmission to the
         new destination via a member of J.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.X SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-endt-complete"><name>End.T with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.T SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.1.     Set the packet's associated FIB table to T.
R10.2.     Submit the packet to the egress IPv6 FIB lookup for
             transmission to the new destination.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.1. Set the packet's associated FIB table to T.
R21.2. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the new destination.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.T SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-endb6-complete"><name>End.B6.Encaps with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.1.     Push a new IPv6 header with its own SRH containing B.
R10.2.     Set the outer IPv6 SA to A.
R10.3.     Set the outer IPv6 DA to the first SID of B.
R10.4.     Set the outer Payload Length, Traffic Class, Flow Label,
             Hop Limit, and Next Header fields.
R10.5.     Submit the packet to the egress IPv6 FIB lookup for
             transmission to the next destination.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.1. Push a new IPv6 header with its own SRH containing B.
R21.2. Set the outer IPv6 SA to A.
R21.3. Set the outer IPv6 DA to the first SID of B.
R21.4. Set the outer Payload Length, Traffic Class, Flow Label,
         Hop Limit, and Next Header fields.
R21.5. Submit the packet to the egress IPv6 FIB lookup for
         transmission to the next destination.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.B6.Encaps SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
<section anchor="sec-replace-endbm-complete"><name>End.BM with REPLACE-C-SID</name>

<t>When processing the SRH of a packet matching a FIB entry locally instantiated as an End.BM SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0 and (DA.Arg.Index == 0 or
           Segment List[0][DA.Arg.Index-1] == 0)) {
S03.     Stop processing the SRH, and proceed to process the next
           header in the packet, whose type is identified by
           the Next Header field in the routing header.
S04.   }
S05.   If (IPv6 Hop Limit <= 1) {
S06.     Send an ICMP Time Exceeded message to the Source Address,
           Code 0 (Hop limit exceeded in transit),
           interrupt packet processing and discard the packet.
S07.   }
S08.   max_LE = (Hdr Ext Len / 2) - 1
R01.   If (DA.Arg.Index != 0) {
R02.     If ((Last Entry > max_LE) or (Segments Left > Last Entry)) {
R03.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R04.     }
R05.     Decrement DA.Arg.Index by 1.
R06.     If (Segment List[Segments Left][DA.Arg.Index] == 0) {
R07.       Decrement Segments Left by 1.
R08.       Decrement IPv6 Hop Limit by 1.
R09.       Update IPv6 DA with Segment List[Segments Left]
R10.1.     Push the MPLS label stack for B.
R10.2.     Submit the packet to the MPLS engine for transmission.
R11.     }
R12.   } Else {
R13.     If((Last Entry > max_LE) or (Segments Left > Last Entry+1)){
R14.       Send an ICMP Parameter Problem to the Source Address,
             Code 0 (Erroneous header field encountered),
             Pointer set to the Segments Left field,
             interrupt packet processing and discard the packet.
R15.     }
R16.     Decrement Segments Left by 1.
R17.     Set DA.Arg.Index to (128/LNFL - 1).
R18.   }
R19.   Decrement IPv6 Hop Limit by 1.
R20.   Write Segment List[Segments Left][DA.Arg.Index] into the bits
         [LBL..LBL+LNFL-1] of the Destination Address of the IPv6
         header.
R21.1. Push the MPLS label stack for B.
R21.2. Submit the packet to the MPLS engine for transmission.
S16. }
]]></artwork></figure>

<t>When processing the Upper-Layer header of a packet matching a FIB entry locally instantiated as an End.BM SID with the REPLACE-C-SID flavor:</t>

<figure><artwork><![CDATA[
S01. If (Upper-Layer header type is allowed by local configuration) {
S02.   Proceed to process the Upper-Layer header
S03. } Else {
S04.   Send an ICMP Parameter Problem to the Source Address
          with Code 4 (SR Upper-layer Header Error)
          and Pointer set to the offset of the Upper-Layer header,
          interrupt packet processing, and discard the packet.
S05. }
]]></artwork></figure>

</section>
</section>

    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
        <name>Contributors</name>
    <contact initials="L." surname="Aihua" fullname="Liu Aihua">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>liu.aihua@zte.com.cn</email>
      </address>
    </contact>
    <contact initials="D." surname="Cai" fullname="Dennis Cai">
      <organization>Alibaba</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>d.cai@alibaba-inc.com</email>
      </address>
    </contact>
    <contact initials="D." surname="Dukes" fullname="Darren Dukes">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>ddukes@cisco.com</email>
      </address>
    </contact>
    <contact initials="J." surname="Guichard" fullname="James N Guichard">
      <organization>Futurewei Technologies Ltd.</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>james.n.guichard@futurewei.com</email>
      </address>
    </contact>
    <contact initials="C." surname="Li" fullname="Cheng Li">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>c.l@huawei.com</email>
      </address>
    </contact>
    <contact initials="R." surname="Raszuk" fullname="Robert Raszuk">
      <organization>NTT Network Innovations</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>robert@raszuk.net</email>
      </address>
    </contact>
    <contact initials="K." surname="Talaulikar" fullname="Ketan Talaulikar">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>ketant.ietf@gmail.com</email>
      </address>
    </contact>
    <contact initials="D." surname="Voyer" fullname="Daniel Voyer">
      <organization>Bell Canada</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>daniel.voyer@bell.ca</email>
      </address>
    </contact>
    <contact initials="S." surname="Zadok" fullname="Shay Zadok">
      <organization>Broadcom</organization>
      <address>
        <postal>
          <country>Israel</country>
        </postal>
        <email>shay.zadok@broadcom.com</email>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+19aXcbx5Xod/yKHvm8N2SMBgFw50R+BhdZtCmSQ1C2Jjk5
cQNokh0B3Uh3gxTtaH77u1tVV/UGcBElOfRJRBKo9datu9VdXNdtpEE69nec
vWgyjf0k8UdO/+x6w+n7lxM/TJ2jIEmdg3AYjYLwsuENBrF/vdMYRcPQm0C3
UexdpG7gpxduMo2hiZvE1xvwz5U7lBGDKHQ7a42Rl/o7jSH8exnFtztOko4a
yWwwCajF+e0URjs8OH/VaATTeMdJ41mSdtvt7Xa34cW+t+P84Id+7I0bN1H8
/jKOZtMdp396dnj8Q+O9fwsfjqB/mPpx6KfuPi6r0eBV7zizxPWSYRA0psGO
89c0GjadJIrT2L9I4LfbCf7yt0bDm6VXUbzTcNyG4wRhsuP80nL2rnzYuOPw
fn/xg38GXnipP47iSy8MfvNS2ARA8SoIPedNNAjGPnwZRwhafxSkUQx/+hMv
GO84Q+x6IwN9P8QuE+rRApBBs2E0C1MEEY1mrGav5bwKxskF/F8vaG8M0AmH
vvlNbk1BMoyc/m2S+hPY7mE4bBlrufh+iN/np971x5fBbGJM/pcW4IKe9i+w
h0EQ8kf2fK9nHmzOOfeHV2E0ji4DP8nmGwe/cc/vr6jZvC3vtpx9fxh7cPZ6
7t14Fkbmx/b8JzGA1c+mHGDz1kiafx/R1/l5X8GnQ9+Y+FULQTvSk1KDKEjU
p4vAuPz4L4YwQguvzPeX+EnFUgB54e9gMEttlDxqOb0AgKdXdhTM9Cf2qv5y
fgD3Op7ClvED8xRmLQ+7fP9bSqBoDcO6U9gHYHjZ4e/7YYiQ8IqH3xsHA2/g
ZVONWkMv+N7jj90AAJPb7tt+z55pf/bez/B734sBv/WHd0Dt0Qj7lKP3nhd6
I3OHP7acH2bB8MqLsyP/Ef5NnGPzC3v6V7N0Fvt5ZHeO0pGxjH/gKK2wdSmj
fH+hetVDYs+6b0Ru7nzbhq3xgvfsrOWceclvs/d6xrNo4Mdp9qk97fH5uXPs
p0iLAexhdE2fG1PH1P37mLq3gCZX7/SnlnPujb3ZOHjvxXr+n/zUC+0v7nD4
77F3WnPLDsNRkEPxn6NbPzYQLwz8sf7QnhvI41gjkUY46tG6xh7fD6AFoH4t
0vVbzl+8UZTBvH/l3eqPcjPGkTfiPch0CTRu/YaNvx/Il4VNJkDzxo1GGMUT
GOcaGLDjnL3a2wLGqn5da3fVr5vra+rX7a2NHeDE4UWu5+b2mmq+3V03ft1W
v66ut7NfdYP1zmr2K81y6O7T8bgbEy90k2CUWJ8Go9gdXE7dcQLChDuNxsHw
ttBAf+Mm3kVgfT0d+m7CMowLwkKKokkwvd7ARj/8dLpNa3AckX6+oz8coJbh
MPZT33njpVc+7nwI59RzXgFER3QSDkCEhKUZiBpOfxj4xDfgPy090H+u/NTX
64fYu/Im6lN1x0JvPLK/sjsCWv4UwsB2v33uZ35jdztpOade6iVXYfDe7nqC
1NT+jiQzp7O9vUZ/Jn4MRASPXu3lsL97vONsb261u+3O+jr82IZvWPhyf/nB
PT05Otw7POhbIOWvnV+AQgDsYY8gsTmneFpMovIAA3Sv6LR35QVxYiy12+52
3U4bpUqa0Isv/XTHuUrTabKzsnITvA8ICVow5oofrpC0uMLy6covP/zdWMXh
m9Mjd++wv3fiHu/119fa9h5ECD5jBEL0uAguZ8xOkS+MfMYHIkUwgAMjQC8E
IHXy48qtWuSrsLmOC3Jv6eZublqapa0McXuzZCUdrYBInqwEUfIhXgmHyfqH
Dys59F/ZXP2wMihciuGlC1+42GetvTKUHfokx7eu0sm4CKWNB0Np43GgVI0C
C0Jpo12E0kYVlDYYStBn4tpwcmdAv1wGewXM1tsPBhoM8Vi4tfEgqMFCFkcu
6YBIlsMudxIM4whJfwXMNh8Os80vGmbr82C2fieYbbUfBDDs/ljAuv+1pO9x
KYuDS3exAEbGiFzj6NqPSQzIATMpgWavf7b9MIDCCM72IwL1PhgY85wrXhJv
E1Cji/TGi3364L0bb7rrBUAPzV2tXOKuygEvgy6Op8cnPx323G671amHqxeO
nNO9A+ctCCMM1iqgHUfvUY7PAaucdwJAZjgN7asVYk+CWRKvEDdZGUTR+2RF
FvN/um1ZDvwGC4J/YUnwLy4KftCyLNi5N0F6xegFi/Hc6dgLSxjpSb/vHh0e
v31ngaA3GjnHB+/O3T23f7jvJLMp6O0pYRMZ5A4AJAP/yrsOyJiQBwZLd6ce
6IBOb+CHQR4m7W2AeylYLoO09R7tZmMSmKazwUoynKyMg3D2YYW/wDYroMSN
/Gv84Yb+h7SFnwH4JvDj/wWjl0N/uD1a3/a3tlc3ulvt7YvO5kV3tLW+duFd
rHe3Nza6nY2R11k1wdA/OT7cszHh5DjYc2YAgjKhWutJAah3ydUMNaar3Jdn
fnI18Zz+bOTFoCOFBUBsud1OFSCuZgNGiSgMhrDNdIUWtDIYR4OViQdXM0Y0
WsFDXcFz+TsutTUZWbvqHeaP1h85oX+jDzBx0kgfMY6AYnsaz4Zipyk/3R7s
OI2SK6d3GXs33tjeGRII2Ny8nUVT0FhYf5nG0T/8IWyxdwinPh6vdLqrHTnS
ZKXd9de3Rtvr3gjObuht+xfD7po/2Pbbw/aF12kPup2R3/XWzJ3/fHpqnyaA
yRmOAyf2L/y4QlWie/wK9LaodO3JqouUrHUxghYr19PpSne11e6uwLCuHhb/
SvCf4WT09yQe/v0azu7vpVfv1Fb96HLRESwRzXLg12UnmEzHvqYVDvzvdK0O
IVP/wguhrzdO4Gfu21546cO1PJ+NgfyMx1Hh3OB/q/PODfbDesx0LZM5zX2d
HJ/kNLAUKPhs4uy92dtzfnBpo6d85FWncALIoew6SIczvbew5lW3W6N+IZaF
ehyiK6MgAYJ4u7J38mZFlvYtLu1bXtq32dKyLZ0eHMOXP29Y+6JFFnZjLgNW
gQug44epW8MQuSJBrbsCrQ96x+d7bnfVGvbNbJwG7s9+OAKSCyvoO/39Y35S
gMFibxCMg/TWOfcT4FM+3twqKB7MsIcXwsW/RlvuyAQp9d/zcVhniRaybMN2
FaQnt1N+j2HQdNgCtnMRjH1vNAlC/gho0k04jrxRsuJfw9jJCg60wvuULeDE
NDz+whtoTUcXjVar1Wi4rut4AyBBHoCzkWfHKDY5h6cA8SWEO1wPIGBXPhEt
mD6QS3JR4OPQfBkvDzam/sgXiS22nPMrGEWxZCeZ+sPgAqUkpJMXY+8aqSRy
P+wLgpQwWgfOZxoF8EtGS0f+RRAClIMQDUwOGq+azs1VMLyC1t5g7NMYxnsU
LtUTHFLjAv1IW8A1oJPZMgkuQ1jXELY5vgUyNpoNfd58Evzm40C8PhgJ6JA3
TWZjhkbo+0j1kc6nPoBv6g3f+2nCsBxHABxz5kTOYBKMRmO/0fgGES+ORsIR
Guc4SRlwvXgIzBAuAUhezu+/i0Xv40cASjKMgwEu9iYiuDsEePvQEjq1MySD
vDJCfBjZxV+WSRBTXxkIAKulLSsTMFxEYEnAN2BZvAg4A1oEnkzieM4FfO1T
W4DIYBaMR/ChUAhnyt0dlJ/g+ykZsofemKYHaes6GPoKXImzBEQ2Yo4SM4QH
t3gKQaxBdDiCfxGd4I4hPV92hl4MMjjhiFeA5Gu4S9T07PWyrH9zfe3jR9xm
NJHj9aZTYC8CtQTxxIOfaRwMUzhcXHjsXQCmAB5cwqZ9VECciYdI889ZAKdT
cuj62RXbIiL58tIqiJWU9cI9YFvGKOeKFw8YWoqs1FTaIMoudvEAqHe6d+ah
p1deqi6epy8TtMttruT+MaKrRRjjp9aax0DkYu/Sz0Yx8LuwKjpKQiVjlU36
ABQhWiCcKq6W8U+NSQ9w0ViGBYkXOAodPlKlw7572OcB0c6NA570T1/JJ+ud
VTXF7g+n8mEXm7Xwbp/7MVwVxPJb3HHZ1pjGAOGelMCZbnjT3F4zvz88Zh9Q
gM4dJvCSBCbg2wIQ9ibAzbxY7RjpebamVn5RgdAiWdVFBELMDR4kogytcQfI
l3MUwfWIYnd3HA3f79ACJhFwOwMtnUGQEs3xUM4C5KYejDKxj4iC8+kjwDYD
HI23Y02AuzKJANzGF7svEEh9n6ims9rq4FQmVIxVHkcjnxcJrHTxVQZMWm4r
70cI45pEVm42qgnWJo6pXXEPxwvsIfPWIGVxiXTGZXypqLhuXjY/65dBOBzP
RnKg1pIQkV7NQp5eAUJ2ALiDA2aT0GJoQLwtHqBpjKvodLdc6Jp96FxFY1qL
Rxcdh4zgUgFQJ1Esa0qywRIgmSjW41gk9eY7wMCJP5zhy5RFQWDTKdlakN7f
KtijSgObsdGH7n8qh49j5/aBq3kbGvC888Jmud4Jcx+b4pmHmd+K8l/plX+h
rk12M22WMAZORNfbC98TSS+AXO8HWJGFO+XzEeMVACXObyBVNnHMph40v2Nj
fNjoD6BEA1PPmHPi8FEs/XC4u8x3cRoBxQWY8vKuvfEMxYdrLxgTP0HSe8nD
eGO6l2jKkVtdOvTRXYYe0yjmyI3DHPNpEqAFtDCa75HECPc9SGcIsqkXpxnt
KF5wpp4k8DlHu0dKlraRMxtf0Q5sfVxoTTe2tPEr3VZf5tJ2Pd2uF18qHlRo
h2DwRqMAx2nCQrLRga2olmWLwls2ZxHOYUocKi/VeTwBHxd3Q+75DWhfJFCx
NHjkhZczYJgsOrz3bx30BQM6+uZt//xFk386xyf0+9nBf789PDvYx9/7r3tH
R/oX1aL/+uTt0X72W9YT9NY3B8f73Bk+dXIfven9zwtmwy9OTs8PT457Ry+K
ogtKHMyDA1TLpvjaPMKtKnmd2Pzu3qnTWQOq/x9A9rudzjYIMPzHVmcTpZmb
Kz/kyaIQRD3+E6B1i2KqD4wdKc14DGRwGqQA2SYJq1egJQJxiH2SQna9BKRV
fPL2p2nCR4xKESx2Ahe8SQMoNpwYLA3WeBFHEz5+EOtzuJtc0SbVl6UiABy6
iVC4fkWpByTr5NBECQMyU1PjEwNBoy6AOpnAun3i1iEyIppP3doqRq/4G658
6pG9jkQjpHFwVc8N/bGSOia+z2QWfc1gJr+aJIPCAiJuMFIMCkQfPw2UFl0B
V9woEXvVa5aQAorrxY8Iro3F1gpwupiNAXPy0i9OQupZ4symorlP/CHAMkhA
FFXawjzxmkWNMmEEbzqorCDmjhAMfOAsGcxdNamFyp6Aslc0i0HDIYlr6fff
gfG6/JGLH338uMx7MhUbAe8Aj8fSP0r0G2KvcJg4PN3isv3IvKo7TApnkGPY
qJsNRLlT+kweM2YJP3wokGibijEpAtlisQb7zkQ7/aGtJ83TqshkIraS8kkI
4TLw4GpKBo1ggFiPig62oitb6NEL8wdIPBRN4DyyXkCiLqdLsBzBVQlZrA3V
NzniBF8QV66UzulgjSMAwjgbj1CBB3glPhHLG3Txgp9EIIBsmkYhoKpsDgz8
hW8cGjoSdcdu81c7kzicVyCH+B88NEA3eR/y4iZ0mcYI9B2QDwXFZCDEFWdl
bSs3DVFtTwlQZM8Z8PxaChLFnyyeRGhhNdIN9ncRfDCmgLYZe0AWFiTDGYHA
UGDWWX0punuJLgxbUOaYA3VIrwSrfv/GulqiliYysjIuoX2r7KgFN5vmsxpi
1tnB6VFv74A/aWobI8zexH9a7/jHOf/Y3WgdkGEv92frzB8x86GP3xgXI6+v
WasmMSezi1mLkSWbS2rtv9toyi9r8su5+uRcf7KmG3X1Lz+rL7tvs4XCX3VL
7bHzIAgmKMUagJOVwUbCKNXXXRaayC0c+ENvxnzvVmGkKJojhbZejkrxZZyp
e16cEvvBBaBbM4G7dCFGOEXKp3E0BK4Yl1h+ZFPsp5uRJLLKkT2HZVOx7ImB
X4atQxrTTMbkrt5QtgSigcN8gr1/mUucZzycgagx1g9o1AAI3XUwmnnIqSMS
6gzm0BQjW2KZt6sIkMxXhK+S0EsxcQDby5nb4EstbpGww5Yj/hYfhvX8LOfS
+eC6miBYwHqAsEW3QCsu6OkuzXFK0/Q+vPLRd7rxizLLFRYvBDKnuZOMIfIN
OrDqmBZopE18pTYBxGeUerXeoY2tuSngQtVYTQilWQiO9Pk6F0GMTz9Mdcj6
EGaQtOwVyWzA1yPVlhENg7JjarIWkE3i8+OlU3bfqoFDmtiVl9wfPmoS2d9D
QKQMmMjdEC6ypYoJaajcGSVzgKopS0H9Vs8bQUJaWjgSUoeXlUB67cXAzIhW
yBtGoowxbOvP0Fu4Jgv+LNrgKsPZZMBPBAkIISjAHSAmCxyQpSkao42vJYZw
OCRfhAolp8Q+npwvz7ZsrC7qEaZSzbqhLdgjqcK7rCV7/AC0lDGsVaT7jF4R
8Af4rpnMglRglUHAD6+DOApFGizIb7Gpzcv+BagsDLFsh0g1xufQ2Fo8E/OB
z/YnnF8bc/TJ8AwkXqNUVQZ/Jfwq5dGegveX4pMtDmwSKR+ffNAJ/JYRFk/O
/F6DCI0+CxFqMn2MvCnRT8+hcCWEiwmnJp+56SQ0wedr3J05O1LuMeCWeqdT
Yl1C3Hl4FUWJqRwwDuuTTORVDdF+6KFcDIcHxJvWPPJRj+aLrt7xkqE39oXR
0A2DZRMHUVCgWSPX/4AblotMmq5hdYjsj0sleJ4Wn7qtUey33NfRDTKuJlwN
vMmGuYaFPlLR0XxLQCGGylTJQVVsXK6+Kr5InFueEy8DXIgtpbOBg0/FFRk9
g17TuB4KNoLHatisgT1wZq5QIFNGSkUtUZukNgWrJXJq5wUbJvMtXrDtjWQa
FLXuJQ4DZEQatnitwbdFsi3nYnioWkPKqcGnfoiwnIDmoRWG02jqLJ32T5eb
ztvS797Sdzhs4ft933yth5b7yxk3jRUIHkv8FsCQ9H1Tx8pBMxb+Kty1mvgj
VUJMVzQ7HYzdwAs9rTC5WgIlXesOSILPUAVBEX59wfbNUlGRviYcUihUhmal
SGFIorXAacL4yKjwdWV8y8ZgYxhWG0VrJO6FlpicoDDTb+3FBdCFD1AVKb6U
ZGKFsOr5Qqd6BaP5ybQxi9nYy5ZYOrWL4JLW6nILZK6HqbgrJIYIpQQw5CNs
OvMkVEe/aSQlD4yW0CWUI7/y+ZIq8gLTxsp8LEyDy1k0S4x1FCVXWhIcSKSl
Duifs4RVvhKXrVatQ7D1KoirBzbHyZQWesYFGWmE5iI6Ls2czYXy1hN8Nms5
v6CFGkVfkR3hYhk2bi1IFVZLHA/FUGc2xXvxkwxANm+A+0+O2BVn8g5wMY6i
eGkJcedo92h5Bd9alp0l/viDdr26jH1YPHHR1L8ky3KSsM0bWds/QWfE6T4A
hlG4G2qc5XiLrNC4CiTzspBGQCbrHYHMOPCCpF2maIgBAO16AZAbwXx/6sVI
h/Pvj40Gg7gwir6T+rEWZSwFRTLrewpbtTRgKDtorxDZiUxW+uQK919uHq16
gJ6PipApOmqYPJcSYCxs21D0pIKnJezCI2rVbDoi2xmIT6nibt5ohGIGEjdk
cShlqOcVUZ4NpxmQSGAp+gxKNozqyTggKXwiFhoEHQKJ9KojVNb7na5926eJ
PwMizc4LjmVMNyRK0AdgSdcBeg4kM5F9CTX4KYfEBz9MZrGYzKfkPJkisf7f
//3fxrfug//7tvEvcrW0CSP99y/4jMget5D/9MU3/vtXw2pifaXIZWWLbJBH
2Y7zZ/U7vQfrb75z/swvrd9lLbhZz2hFLQm2v+843+S4Cfu2vnzRV9yHH6ZL
ebuzROI7a2+es8a8y4Jy0+lsiF+HPNNV8homnhtr1FydwPIL5Mhh3ruaXmiV
LuM5q93izOrhbAlpohgXZC2mqgbfE7nM0bRskwmvC2VtPSFccDbi1avJ9Kxj
KEDyaIDKkcdEDkSxsGLd+cG0JUWpSbZE77xGq1p06Yc+XnXRQ5WSOo3gLg7w
eQD3AcD0hqmlWuYUU1bI8s/7S71aQBE3VWxEuJGL0FWU2iBNQDLpMUGeU4je
gLA9vCIJ5tXhLrnl3LJ7BTBc67XGS8RVoloybOoHv9LnHLLfKg8YbQ22LBpE
57TbGkkphh1qGMUoWAIRyzwfydmJyT7wBeOFGO33ykgGugeoHvgPQA1UCGu9
2VIAlGy5Lnnqz2wtrmiCJKzL+9gCzmXl6lydnE33zRvisz9hv8YM8onJWAZ7
fvRS5yq4ZCvwmDVnJdzf+8S00TjJrMZ6FwxnsokY7jLqDHKLlR4e6QTK4yaM
Qpe9k2pXYbw4WqvQ3NcYlZ6qp9qYiG5Gcc4YzgsS/Bmw+aRa0swR1vRqxr7h
N3GgfQaN+auFejkEQ3ynjRgi7EUwHqshiy4QxGJKBWXDA8I5QQp5A3KYsxSU
HgSAvb08F+DTwDxyrSCZyaaYVOgz6J+9VjDdN2SmnshMcKeACMvKiQjxezop
h99Q1Bxtw8DQTD9ETfnjJyBnIc27yA0xH68MoqAeT9cK3p9Elj+gh6FvKMsZ
aTNfyNTb9MBHpDMFPHowB7EMFUk/vfFh/2O6jf12h03U7W7GlV6bwKldXc6t
hyVAa1699oF/gcq1BfbbzMtauUXwFWIpnryTXqOW9TqauoNbF36odiSzmAhy
Mk2zYYg+F2dkgRzkU3fs3aKTqjSm2BG0HYqBnSRkkWCP2x2iRUv7vZa+Av/x
EpDf+R2+7LZAMMSvCYNwgUfBBFD8zy+dDrdYbZHw2Pf5Behw782pcx6AEnnw
YcgxIzBlQs9tworYSUIwvtkwJNA9hGrbWcJ5xjSPrwZBphd7AMt02epCbmfx
bJoq9LZOYESP+F7MT4LcogWLXsNFf4Rf1ls07fTWMfcPgxpk768gKrRaKKp9
2ztyO8t/E1TKllFyk3GWjRYBJjWGklGWW61Od1MNVEoJ0igbH4kWDrjZosmG
bDZ3cmcCNL2DrbZoWsxFZ3mFyJb8Sxqe+uLdB0X8PejyFxKGS/8RpCWVnepH
FM5Q83Cm7RYAEbEIhHUPteKPje+c4wgU+Z3Gd/Cr6/xqgPVX5WyuiCZTWqV2
21aOXxlUJP8ysH5V35dBq4xi4vznehrlYqLCbo78i9Qmt0gZ5Gpq8YY8+XKb
UHbHoR+g15fyeyLBT7FqnpRk7BhND7Gh8qJYO8asPDYpEUU0L0VBb1f1YB8T
5gOtd3M4wYdPxgpg6kdhBt1HYAZler7mhR+LcqQpuw4wqAjfAMkZD80IcHky
eybxGU0m628VQRUGnsljXckNyq4XOvCZBpPrwMO3FR+f8HDFP7ZKL9WOXJo4
oDfBH3Evho9INVwFVJk95il4p+Nd4AMjKjNazLT8XRZEij84D34M+vChnECc
zyEQ6acjEOePQyBWvy4C0TH5PUPwPylULRoygBB+qfJLPGde3X0wt67i1zc2
u16ApJxXkpT8SXxVJKWw+GeSMo+kpOUkRb+PzyEtg41PR1uyNTyORvo1EpnT
WXJFAec3pshre07hzRLZGkfeNcmN0ChKpsQj9HtIOHrcaLWi0X5PURd+ZBEb
lwy9Vux16t1iGgcQtvlB8VxiyvfGQBWbzitU5I882KKl02mVhu09x6h5SEw7
CewJz7f+yShnXtOZTzoTp8fh0ZazvVZytIKyOEDqoODZ3sE1yPw0dPqZwN6Z
wA42bArbh5Mee7G2t6IzV5HaLXbozQpDOSErUB9+tE0WM0IGYaiuvzoL45oY
b7ZRHFzCSGPbDVCgbSQTEYDLbdUE1upFWTw4veotJk3vpWKmFvOr/X1TvjQ9
oChQdRJdS5hRthOZNyBX0hsv5qwm+AsDxP8wjZLyF22VhcUbYyKC2yx0eGFw
lLFSdDWby05j/9NZdnNLeRyuurYQV5WISoOhUoxS8bKUMFETlm/mAXDyCaFX
7R14N5Ctf62CCC6LEu2MkXM5ACXxrd9dRMWhnpxkpmA6WUhr2a3UWgogfRp2
WJj1mR3OZYeTosKxZ3jMEvqr52n2gNXP04l52dWjc6MBrTlRAvyiOGA5lmyU
PkvNQgwTvlRGYO0jUn3RYd1v1aRv509aZv6856T7C09apu3ca1JMXGB5iFnu
qiq2otZjtdTvFqhHnKrI0qJXaljtk8rJ/ctS6yiyJ+/pgqEPiQdCJav6DfuO
HqjKO5aFlJH/QV+jWRxr31O1FPvDLL8L7bv4ig3aH7AsBFlb3D45tES9g1CK
AElUpL3vMomlWbJ9dp0MZypWp867GMckej+S85kXxZTzABQvTwsD7PHIRbDm
6T2ZjgN50vvJeQHCHXv2vUAga2eBOf6rMDx7rtJbKfUaRb4Ej2JMo88TYH4G
IJwXcOPGt0iS6S1oCgofrnJkuPLW527Ioz0MjV4P2fPYGF+v0L+izCG5NKKs
6E1cugRHAagEdetOYUn3+8ntLM9zZjYad02/ZGbPRQfY4l4q3WDLoxAe5Alb
ItEZbrAAs4nvp9qLXHmOWuG7hVwOstXE9mS0BMlS8hgUvO2F1BoO9+dKss5G
VwlpSHCoQDKkfvacC1DbR/ODrXWEdWxi62hf1oIzbJ0nLPz/24xIG6MUmz7S
jmp8YflDpCTGB9zU8oe1nWHtw67wh62KZ1nIJVbcVRd1iZVBLJfYEsReCNcK
dL0C0/UwdI0eFf9ewR1NVVABIsi5QcPog75JavGDVwaBFPzLiGF7mdpkH3Ty
H3TzH6wuPzb+FdDsTh+U4p/BmkpRcP55S4IYhW+22/NPzktnTeNSFT4nltNz
tYN1SZQuprPV3DbLDmKTdc3i2QuJ3YYBLu7QD9ADcWkcXf69mwkHy86S+iaL
bGEuq8JaOM5FsjlVRbZgOUdH0o5Gs8srZvkc6JbL8JbRcTNvFGa/q0rAtrbV
dNY3ms7GWtPZ7JIKuNXmGchmJuHWQiVg8Zh1Fu1doufq8NJCWk2dwKTqyHBA
8XLH1ZacfCIe75RQZyG3+oIXeiWyfEaHd2uLn8jtvfqSVHq+k6DACodWF+bK
iO9KnWuV/PwuLz9XXZVP73ZfHr8k5/SH9bxXBNpyvrdd3iVZFCnaJrVeUENv
1qsFcwRGxo9pwFJ71QtEiTsfImtY4a9/j6O+j8s+R/SFylFQtOa5Ew1VNog0
f91C6w6VOf9fFDsxS2o7uEX4nrMBtJv5iWxHR9sHEtbPqcjvtShUpN0OUw8V
/2ePMEKrtLpHOX0y8+Y3M3/N1S8FaV+YCv4LmfaFtdcXxjZ5kTWJ08jcVR42
YYVIINSzhd8rKKLOfbXK7f9TBVIQIcICH3fBZGACUexXYowVPLKEItM01VkC
mk6WM0qRKBh99AGzGuKyVVolFVaaNz/jRYTPikkZc7TLR9IrxsOiHcH4xJBg
KS+ikvVqDQlEnrPXK2QM3tjMwIsXEZsgYsWYzCmLsNHna5vXqqzqVriHvRbL
xPqEQR91ZNZ6DvlEwR8c6cuPMHfyGyPBlqA1slMWo2rTz4IcbJr58iVQWcRN
iY1oHRLS08e2F4lJlP7a/ttfzfZu52/UZRnDJeg160gelbYp42BnnUywen2D
2xwU+AnFQbFMVnxmx2zIulTQxlm2n6Ujj8rd40F/B8f/4e9HB8uIn7mdfudk
DZd5jLKwjlMPq16QX08cgeQ6uUNIx0EcRywMXxmePCRuUoI+f2THdZxGFNmB
PErPUnTdf3AoyJkKBTnjUJAsuMKCLYdWnHFEh4EpfOLWwuzTl7MnkG4ySLMp
7A2pObbyzUrDPM4w+AL/e0scWPtn0TWqWV3jrNOWo32Q59RCLqdnnY5AtwM4
+dE5GAMzAlB0VhmO90LQbzvLyzjG2r8JhnbWFQw3bAwtRZ/OpvLCsxAYFriU
e8pwXKezjD22WjQ64NM8nOviExLIIX4dhuXw34qlUsDgkCoV4IMksiYSyhCL
VH8V4nPW7bQegsj3dpzOBzjxbu8a4YTqUZWC/JCop18XPp47rtjs+yeyIbQs
JgR3809yor+a2kbJsxxKzYSa1vJUGtGi/LeAeFH/jP9ATwVD3KqNx5ojqj1d
VFa1tPbZArNMkfWuzkiJA5yLc9d2O+VeScTaHiNEa9EALZq0lgR9gkkfOSqs
TpAuwwMtqGo8KPOmUtaBumv8aS5nfTDUnNv5dCFRD7idnypg4QluJ16VO8RH
YZfugxj8XVi8us13XSR0ebpFPnIAV93tL8OzL/32Lxa3NIcKfIbopQeQg08W
wPQ09OB+oUyKMtQEMmGT1dIm1WFM2Gct3+c+QUwLhDDhXOufhG6Uhi8Z1O2e
IBc6VwdyaHJnkEOfJwM5zPWEIP+aI8buFO/1NXCGfMBVTRzOXPbwuaJxHsIl
HiUgx2aSC8XkzAPmE0bmPAR8nyo45wmZLC6wKkxnnqS9QJBOnsHUTjdHZv4M
MUF3iuj5KgheSUgN53I3qictdEc/pdHqQQnpszT0bxe96ZmHDp1T7b1P4OjX
oFdMTniABnUPmIxGqnQUlztQaf/wDb6iurg89/EL/JC9J406OvjqLW466o1d
e9ZWRnzQO71+Sax6z/8UHlhhVhbg0SjvQ4yRsMdXZvWDOyxM5+P8Fa3brw66
v+LE4r6ITqJzfEuiQRYbzGNlA+lskJ2N6mTxuaxjF4WnBl2yOLYGrI8sIVFV
++TUhxQ5Sws/JKDBf5nzDnNWzeJiVWq05Xnhfc2K+L68axuH+DESF2PWqk9W
RWJ6YzM0MBAvoHzshh0nWDSJomSt40Y5QY3w5va28Oa2TnY+TwBo6mB1VpMo
ClcH4ssk1kp5Rpwj5xtoOzng013noW4Od3V0KLDoO6HTHd/S7O7L8jpVeLB6
yMvU23uh25i9VlYXRgJCKfQsxRLcaUbI31YgK4zd6pAvCfyytnC4aYsOhYk8
Ls+Mt6iUOea+hmEsKslT2f193FjU0vgurLzJH/R06VEW60zfLJitzZIb3KRr
YNlSqptqFAH8lOMi2wLYYasQysCVZ6JYMmEoB+0U2OHEC1VZQe5UqMrlmQ7o
6PatggdVztGbiOgkOvyNvelUfIxdLqq2A/3ri84bdeoqq8e3CoARJ0ZEu6wa
qmYpMC47xelKq4k/Qa4/NB04c1FEqvYuF+SqHvwoG5yL1euxI1W+u8JVOxyZ
0yfDaKopZb743TlhM9UFp6DPQ9IOVJlMNuRTgTxyimVvbxZwECng/i9SPFPC
7q6imOM7fBXui79SaOzAD+EipHrfA8QMpRtGFNcwC7FkJ8wqZUcT3zh+GiqI
gbX/5mtGEajiblnNXWDvlBeFg14SFfJihS/EPuZJudZJeXHMTETg8mdLfuuy
1RQkxi8R8LAKIGjvsQ4y3KEAJFas5+Uny6DNRRPfuZwBPjMD5Ciz9HaKwLQi
L4Z+CIpaJLHHmQ5D9JyyO2eO9QnHmgve0yZQRbo0/uYQYAsMOQRuFbtkzMXT
KKYIlVdSRJG956Uq3gwr0y3lcJ4GXs6zLauSmzeMo4Sq5zEwSyJHehpiUjWZ
dyd1F9VAOooVe6Ojpg4xwJ1ydnK4PnS1dCk9EwBIaUeCqCXF2eXsMbIbvW4P
f0DW43+gwure+DKK4epNsFg4EO/t1fX2x4/LgAFv1Ey8OSpLccXB8DKLdQYy
CUjnQxBZWS4U2qXPeZz9OeeYj+SYrR4LnDIBiw63kqh4pIQFwxlmaLKpy53w
wSupExtJdW9WGhZFB2QSdPFGTm/0D6AOIVz4KuRovTPR4wg0u2NOaHLcxYho
ZDpGgc+r24TmK0dQ6neoybXBRZo4Kh65OhvhuodEXqFVX09qtdK4kW/elZt/
uLuC5PItJRFnVWCIJbfdcTBw7fqgoBMgu8JpsMuMuhDAeLm5kDJot0J10sKL
4HIWqySSwyCh+NYrVXExKaFsKoAEWTTPg58q7mGF/XCZ1HwlU5P4CRPAtQu5
JZLPMplHtaYmFJeIEWcVLDGRuB3iZGNGRXXL83XXaPSWQ8hLvKnPNc9Ra8zu
FM7OcgvSAC5USboJ3FaM0UhZFb/yZli1j4eLOZ0Mck0qL4tGqgDJBTAYDinU
QgQL11KSy0t4DRxOwVfmlhB9pEpwHpVABxjmP2e+Xp9kiwjFPqaYO8ckzdJg
jGyOpTsqeFEYUtXQVVW+dL1Gho2kzEilwg6BfdF9K/lmgW0La02cJZiZc46l
FF6nisMCyVzGZQhHJq6CMbkh8MyECz4KVQikFhmKYx7ZLXLlYBF2E1w24QET
ea4cDped57ZxWdaQRxbCXipOSoFtgLOzYa6WdyGg8QeqNCr2Ly4DVl+0KH+J
mjnbj6IV+uIb8aw7jYZrSHI7oNn+CTvsIImkP47kj1yN0P3ztZWNlbWNle7b
FYxkEWslfNZd6f7sLGXJIqigr0tB9qI13QCWLS9SapTfK2CFlnBpL7KsgGn9
4u4wswWA/Xe0NULb0j1hRR9VZ8qQPBHtJayVqqMjrox9j/NtoFAXTbFu6dio
E1+uKkmCISMa+RBtjeOxvpBZuhi0S5psITBaAkModWjZXF8DfVNFLAOhr1U2
LBZeavzMao6fGwXjPI5M5/p1XsFQyzWL8AxqJ8+VR7Krz1bmepDwZgEGhTib
lu/MmGtZeXXhdbmHdkjZlFIzGbbopaDlt5oq3sqqDU6a1u6R861zdIz/YlQ3
qc5ZIrTFd11R04tID1VkNrk+hVPLtrX94IUoEN+ygPlCA4Dk9IgBQEKiBJLB
8oVT4biGtCPVIaWoMlHURNdF52GWjk7fLIv3gJigRXoD7QnEr1miGUwtEDrt
HBxsaoeCWwVkALWiWJXfzmt/zdIYd1YpFQXNSyuBlOsVrayFxPTXbrvd2RkN
tnYGnZ1Oe2fn12q9pK6AF2feyy4THSueKPZhwlRdPO+ls7aVE72Vvb39ARfY
hgW224POrxS+8Sc7YjKrs0dDdTayoeh7PRIOpEbQ90H1fkWd2wRBalEapf/S
2Vhr5cF20emulgHOkNmJDFPSJzbrgC7maZn/V+j/652Be/Q5gNuuhR6CXn+l
50Dw/Lq8EGDpmuHGi2gJqolcpxuLKCLEMkJY6LeysaYPRtDZejwqS4tXugg5
5Hssg3sWFyLO/heGpDcfF/L0V62G1bEkshakKWc1gGRxW+1HWlwPFSWWKe5F
LrvzyWV1loynppjdnW57p4NX3yJ3825jcw79albfr2bV7cFRcScLEO9y63vJ
xpiqfbFbuyd5rXh8KLn0+njlmnUXvvSqZ/FezX+6rluLSYLuupr73/PK5xq4
xRKUSStiAd5MkaeLhnIruuGiT8QhYxbl7UnjaOxMx15I5pQ0GsKfS1m2AWnh
UgvMNqBVcdvsIyKtUsU5XyCp8qFhO+SYfY+SRKk9BpgfCQ0/nJShhDopVGuq
x4Jm5sXB+JlV7Y39sX+Nr/ZeCsIpKFG+spOSocznJ4xVU8E3oxNYFDcCwsSs
qt45f0ZdhHeM57aXqeZEf01nE1NtFycRsiyIORoL9IUeJthM/WmWOsI4LcrY
dM0T+kX/FUpf8j6MboAVwZRkBdUpWCwnuGJa0sz5wpiPcjiQ7eHSi0djiZC8
ufIJsPkh2HiFb0ABPt4pbEB1TKl4KpGRWFSu/TgNEn6Q1ag3Rj8JPiCM2NoF
8vH774fufivw0ws3GMVuErv8IuMm3kWAXn6xc7p3YLWbYk4/XhzZdYEPucH0
egPr3KNR2wIcrlzXRLeOifPBcDpKda0zBpglpyRmdF7yxEG0U6WYaUmjZDbJ
P62ZFNpSESuGyJPn8pxUR25Wj1lvi5TeYkraMlxLMbsaYn8QMnxssHloLxSE
o+czbJ5oxCRHVz3tYIxGiFIaQnHaM0pWciWZXvo6DZiJuNkbXbYISUNqYJMK
Hrc3pNzO0KUxYgmohNIl9u0mLwbjTttk1Sx8X0Zd3/T+R4M9B3N+jadnajR2
+fk30ZX6DGTGgzkbBtnoJ5UT2SFSlyXnR3m0wqqEKdnjrgldGEz5jPEjq4+u
A0Ey0bCTcg0hehXIvvxRgQigqyV5A6D86WDOthgQE839HhoCSDyw3w1QaJil
Rm4wNn8pm66xErHCeAFlIkiAtmdJ3rT3E6Yz0ZyH+TK7kmrKR6/KSepU7KLl
WCaGwa3MxHenYBpC7wKECqbPhXvik/wcFk1ImB3+1kiNNzbH7RuJ7+j5xuou
r2hE04WeqSctyQ9qHgJtvOQOTGcJG6XkigjC0F0nr5Nbw/l2hjEVhWS7/ocU
PWrgIlqfq/zkH+VpxoI2v9gS+mlrphQLIadRDxMVSrBGVZmPwwulqhj7GV5F
UcL2Jn3P8myJH10nwLOiEWOncovkl3FCx/F4BhSFX/CnsxgrliSYM1EJEdId
qARcNsaCqguAnJcoMb5eifeCEGlKUonrq70+dBBYV0YlhJTJb7zx+2ROdwS+
/i5hdEl8ssnBuhDz0M8Td1ll54IBanrVJYN0OZ9bXtKR1eu0H0wJ1eBmqnNz
IpNtVKyV3kaMzfLBxyy/ZUnmenNsDArkejbi+YktHRCTq2AshfTzWcFznREJ
8wtx3nh8MCumc9W8O70yI7r4AimXQd6c5LvPRqPLSrlMSSbx4FLja5P5GqBG
sBKg47e9I27n0XycuolIH6FAlks+W4wC8e+NfluyzvCRi8tr38ihxkKQMoUX
UmVnrpDZupS7pjUcps4NUJ+8Kcn0akSSzQeEMRNuQFLeUL3qqk0UE8EJ7NDR
2PTmND2Es2VorKhJR2+OQmlrdNqYii0BF0GgwA44l41KBNTnhEpGGZn8rjXp
r6AgMISkVbLwFUMba3HWhFwQWhXhNM7cDXOtlELF9P2l2LvF0FhZIe3+8AI+
wpLa6gPA7EYfc1ogM0nFsRspEI7OC9H1EipprFrXkmEIy64F0cu5pGsZjqqj
q5v2qyqAVa+h31E5yfpcCUELv/J0lFMM1bWybmYGYRSYqu9pBvhsoEyFyUYx
b0wzl9Y8r69EsnK60+YVzqVxvgNxc+zL3VnNXe6FlkfryteXdopBBYtccHOA
7K73OdGWhaWYksr+YKP1gDtMzuL3YsfVKkdRMlWa5xxcrWfTUzEkZJcJM+u6
7D5mZuoDPm5uAzB1+B6bXyiqDFraHn649Krp9JfNcDWUDvEbyv56E/F+XnEF
qrw/XU7BDUdOyWONEDJEFcw37AfivGKgUWxFHdGllHyWOmcxr2nqIVRIBbf2
AFuIfVgERrzEM79CksjEhYrMwWam4DzHLJM15GhYEshNZBVFqSsgQ/uL9QVC
AJOAx7eb6e2i3EANUl3IBWvEUC40EkjmSC/VorOWByySbPO1eVSZ2TGcb3aQ
Cr6ElAaHFiQg2cYihjUCzn1EHOHmFXTQFmwM4sfM0Q5WKad/C8o1d5NsHCSG
GE6hmLol5GyrPT1AzFFZGxcQdAoIzjx2PLb3R4CQ5IVt5O/qi68V8ixjYKpE
zUyVwEF18iq5hVCzQex77zN+p46P8y86zq58vVFkh5sFoW2rhh8u6azdVFti
Mk1vlzUGZKpPDa8sBFZp1mmmPL5zPKYihKQLEk9QQieyIW6r62dxCar6AEKz
eJhRW8DKXO8Nomtfy2k6UCdlozHGS2aeU+hexjHXMu9i4Y72ylvOSarDFM0t
k+8Tknu7/SIblYJXVXGUuG40ZY2yi27R8qXC1nNLaGtxnyIoNbgWP91cbYc8
r9V95xyABntl2KqyputaJCjaodsBTGheY5StlPvYooLfQozRrI0JrGk0lgeb
UPMd7WwKPJeNkz4V/UqVwVEXC/QSRox66gxbPLOenMifsNLixoH7aAUflT5l
YKZ3P2FjO31vxmTnqz4YoersXp/Lg0mOjhKlgHeBExfI9IZJMfbJ/588L3/f
+ecMyAqSl561siT1+SBUEeWQ6qhltZizAhfqExiDraviNme9VBgJhrRDnYBK
q250N2EUEFexaA95ko5w64y5hoEDwzkB2S/5sW7knB/9/F/0xX6PHOn9FIbR
8U40WTH6M1MZcTh8ERnAdZgEKYX4Y85XorW4lOz4KIn+kEr7mLG3nCOWveyt
ZDwww+tR7BzAR0cwGKcn4rBPPmKz5AgN8Vc8y267/beWMeaZGNbPb6e+ZCsO
NEtfM1sCBBTu6/LXiV917VnIloMwh+EvfH4KyUJDclG0UvgIY4Em+PCbDSTD
iGCuxpH2Uz/Md7FKA2bLKEmzbGw8dDuqGk2oxtYxbDSGTKxtJxn6GpMYmak/
xQxHPyem5/jrN729ZeVaT0iQc0cKYvutyVxqdUlz48j/MylLIUxjLBUOfdlA
dU+RAF0iQeou0uASSEEKNlHfCHcwVSG2MEgWbI3xr/z8NyKske1i+C3P17O+
1vMJmSjipkJBimakXjCIVIUvbkodFbJ4VcJdJVfW94OyTH8nb5LLhiWqDh26
eXRAeqXDJmuQgZzc6eGKgocMLpGYxLHi8cP2mcGXrkaDKwPUFH2WB0apUiLV
bMQKl38YsrVg9a3B18gXRGipscicAFj2VH98ck5kVeFGC1dui7EloflLHJjf
XjZD+I2wwEzkQiZHRU04JUjJPnhtmAFClzQj1uzHUrxI1UmSZcB4gJnarbCI
h0FSporlhT3NInFm7YNmeOtjuMTAL66jhD6KIxJfcvRHrIO29eJYGKmkNomw
92IA/INwrOpoB34hvOHup1m2dzMao/TEkcRk0JZ66HmIVweiW0ew8JWutlxa
tzqrow1A76l6c8YNJKHKHkyHMHDFPNtgWIyv0l+Z0ncyvAKi1bJmlZI++n4i
9Gn63LTFanS0kHkVei/yCqylP0lZsWCM4rzoDSUKb2rqTOW1pTLtiVEx0yly
+xDU0C01G6mqkj1nPH0T6yGhCWGFwUJvVlXtFk8Ec3YvX94ov5cFaWszU6K1
tFbcPe8MnZpyK66xSekq4NbDFnXTCdls5z67YFsRWevfA6yMOL9weaahH1wz
0SFdTz1K0b44eUFldBX7Mx8fvSS35KOX7abTgz/Ek40c2ZqVRg1tzECduF1K
uSZe/D7h0CalUKt3+7GKzFIBv5KTyoAIX1p2BeHd58Plg2yc/FbIm/qee5E0
H0lEG2ABoXqRj3YMsOrV7mc8gaxmst4c8YG3lPbviNL+kX09mU1yBH4oH0up
27IqH7MkM3ixKYDemVzhtUsqwHHL1PtBV0Rn58B+H9XszEpWiwUiSTBmXyZi
siraG/0pZR03WIFefO3K1slFc9mrFpbEuvrAlxPO8hiVLiIn++WoTY0ppSCf
NBm91arF35LTsZnhymXzVFuV2BcO2DEp+cCKMH3MbfaaLpkXdD350uKcWuxI
3GA4mbp+HEcxm2dUQho/qXBfLtSdLLMOwczaVqFOFcAfTDFDEVW2Lz3Re1Qm
JB/+QzTMufucGMJyJadcMBQUm0q+YlT2lAGHs6DovCS2g6ARGp9lpejN0iiM
Jmi069+CjAzXaKnX9xNy58+aqZGADHmJckJkA5VKqLFfaCzT0grR4T8bTuBE
UcnIY7ziCyuXFZ7GeLT8slWQh9QdRFqTRZAy2kiTOiGtlaUXaOZ1NBo3mXqY
TqIeqEKpsr3Zu8iOB2eYejHezxK5jp4qDUfOLL5JB1MDuE9Ozw9PjntHQFDH
M2WiCyaY7UKsBjoLgA7ltv3YQ96IK0lH/PA6iCNJvwD30A+9wdj0btWLZNdK
jFxTsMYbWbNz5Y+qVopP+bF3iWIGJuPyb2ojOgBZXxyoD7n2GiL9KUcD92+8
6QtnCVu0TvsvWCNAH0uWQXM9j1btRA784l8x3Dt7PLnYBBdJ4KyJky3yq6rh
xstIubgq6pKNRxwA5MViu+CN7ZgLZHDyFxk9JEJN2XkzXdOKMOModM5fmJQs
O7LK0NpLFfpZWog8v5Aax0rzUaW0S0UsUy9UXUQwV/nkKGtxoPCfH2vtXemX
jwoo8+uDFk8q0rhSzhOOfNQZZO0VFQKEnBTTOuSLne92VybKlLXblRdEIvqK
Y0iYO4JqouxpxuBWBgB5dSibyEjJY5JOA/q48Pk7LzyEqlHp9UyNzPvI4qny
0FDynY5xyIVMz1tHJrsskkEC25l1nrysmJuXyUrZc09Vxgl8t86yrWAig2ui
vrd5wBa3y69b8hCq4gZoBQXoBeRUTzEfwrLKAtAynOOQwKV+ZQ0pQ/3m6gpc
SycbYf98Iz/GRn4MIdoTHzkf8AMd6JET4ilWkEFeiocVgXOCf8iT4V4ihvHe
S+NQKG5EwVC8x9D6NZDpU4oLs4MNkW4Hl6Gn3iaNYDIjUzcsg1ZlkCrWHZB2
u4hgyadLzC0wmEMvy65SDWmpvSNK/iVbmk4LbT6FiRittv/xYzYpJ+Y6bq8j
qT1ub9QU/IVGrZyDe47K9TKHzt1uizp0W+wXYyRldqzSls5fJ63W0uTb3pHb
WaZ6lj3sSd4i1FNXQFm0kiO5euRxYU6q9qfEiFKt/LMhhZ1C18ILSo9cjQ+S
G3lxfMAO3UeqhOoQ3kzuWAfVKIBKRY4ehGCOyJM7SNX3SALdMyTQUtnu3QLC
nRlj/ynFu3f3kO/K+9QLeO8+oYTnUVZVxVOzgsJ3F/re3Uvqk8TBwN2bzo/N
fKSTze1r5Dp6rmcJwYpPj31bKAmyzJLmmucLfJ+S67/7Qtj+u7l8/8OnJPPv
vgLO/6GW9S/VZFrPZIflP5qI8G5BGeFpseeLlRIKOERiQh3uWCJGHfr8m0sU
0JlzFZxSrgLJzWjlUBDbYcbT875FqMciN4Xr6ocJeThi8gBhomb6A/38ka8m
IMl1CTUx5P06gPF0bpPSbArM2C80nTZKMKkMj6gOp9p/UtInZvXPzmubWskh
YisLBNtntQmYxjA2j2tSqSAKUNAWc/K17buHfUdl5u5+/AifnfRPX12vyofr
nVX6kFOV4CddbNbUX6/xH7VJTLi/e9TPNxxcTt1xkrWnpounO8nefksvOrs0
SK1I082YCSyGMrDIpSDLRuIqC0plrpk8iFWKlwJwmwRbE7KULEbDRkMUbRZ9
jVQmRjl9M3T77OC/3x6eHUhaJcnhkkcmlVssE0aMShbk7FxIJ2KkHMg9IpS/
VZmpmD4yXktizsBMr1Z8srWOSILupMyEdiwobFxn4MTvxUXAcCafa4Gz8l/w
o3HF8eZTIXrOytpWtqSBlmPhi401xYr4KVmeEjz1mp0FZVZsy4YM+jwoLpUF
EDJsyE2+LBvPjrO2ZXxlJN7ZgWXAN7nUO/JpLoB1hxI5vqRcO2tbLqy/s7Gc
z5avMjtnREk/v5rUEsukAGGd0Y2S3C+BKtVi1HPychUXSkyqQurKT7WZsWfz
qcAI6i13aFIyhrjFZBuUoExOa1ie3DUXnWxxds5khI0Kxmx+h+NM7fLKXZE8
tmSUY8lWrh7qTagZzfU55970jdGN1osnXMoc3s1uWVIIRCbtTaKN6HYaYCaO
hdcx8sRX1SKWHX7jjLLUz+bSicKYJ6FPyr5E6MlEzvfsU6TLMnAqrHKuPvEo
KyORLC/jHWS3SGaDUDTWzLGjcAMI1fLMoCh5ME/ghzv5cjv7ktiDpMvLuFNW
v0E9DTOTwUGYbzeN/HLj22VV1M6m4ipXWSE5GenkSuvU8Romb/ik6cuaJgUZ
c+FLFsvwc0oLlfe1IEYVaHnIcsroUyhueeq9zPsCt5xlEyjNg1KaQQ4pYGpm
H5M3j7tyy4Y48EkmL88QcJMZVfpxpLyC4dKvHn/4tcpCesLOMoZGhgeOciLv
m/zqGPZm4m/7jtgLsPE6cTZb3Sa6FTHJ3TLecpTwo5tuNZ1t1XDbbCgykXkl
Vg1HJZY9KUmhc6LcY5AGmAUYEjJTngZYEFb8xKqyQ05Fl80YOiat4q2jErb3
BvUVf3gVkapBqbtZ4+U3OTMfG48g2CZ2QkxLZt88MU9aLsU6QROfQm+KlZiC
D6DvmxUEYe/bGbZMze0VJZfyyUtd10gtzfLaCRpUvDmSDlcCFTwwS5Qzc06o
oVHeLi1D2iaXw5tsEZUS/RJfIPUhKtboLKJKYYBU748vFDMvcx3LRTbhulW2
SmNvUy6jbgaoWZFtlDFR16jMbWeO9eHG8t0HFokxvZyeTnxWqX++Sry98AXR
AIn0oukQMUEVUcFMUa+IIiwhYjo310xydwoglcNi/RjarZErD1Nn5wDd3ZzT
zObEloFyrzhFQ8VwQrsyg0FDh9pJpTnTkCWbJNKIJCH2heCigwz1ydEEwn36
YgJjUAk/K9+cAFbZimEV4wh50RBtJJGqznkdvefscHSapJEQ8+DObKDPtcJ5
8rhqr6RZjfb5O5zZYZQgL7aUkWEkWW8ZdeDtIhgskF0GQ0cKV+RxSiThImJX
3cqSDZsRnyHH/UiF3mL+S08zS9vlOy8uUFgzPa1kdSZzTNLY20KLh86SB5LK
9+TUACEhNYeht21eusyayunZMgbD/lrVPQc5d1Pia5mradGOylNlZUn+CwvL
kO8qSFNpwEYFKYBokiJr4LJMlMY9Uy7FhdLm8kxTA56sULoNHx0OuAi9L4MU
2VhCSS9ahlCoOiyKwYFRwC8bQSV8BN13MAvGdoyYhE2VUYSmeBapmlQSccSY
mgkPJVYfm0kALbWTkfbh5yxp/L6D4fXRtX8Ywt1++QKz8LwAKgp/uAejANSa
HecUIy3gIsGP0EHXGzoLCfxOnGGQGoZK5dcpAVHT2WCcVdW2PD8x8308EmjR
avCMGMntzKkKAxpalVJ3Vs9qCaSirMHh+JKNM2XUa1Bj8j8G7c3dj70LiRaG
jwdewiYGj94bo4TKT2asqkHkb3N7rYu+144gK3w9VfiVX3Uulz9GpAP358JE
qFIlCXvjAhk+OH+FzdEaqSrJqVtDFjDc+qXyKh7hugkfYUFYSUxOKNSVeflx
Qm0bzeKNzP6Sz0tLjnta0wgoQSosMopFjWDTRAPXCHO9msWo00/IsTikUrbI
JzFF1MAH1gtHwS/RoIkIeWqYYffihw4goHk5ey0Gr8/oNYbOlMBBKgdaDbBM
KqOOxCNpIHqSX2kCYjN9M/CV+KLiCKBBA9DCAzpOkLj2gjFdpgKKxaIaXgC9
AwUQ4XpGlClpiNFd5V3O4MzmjfxQSJL8D5zioWdGZBsY1HReEG6QMz1JvQ7m
l/BvfCn8h8VUoVvjEjTjaaLw5TJ0RlzP2ig0h4RJmJYYeVSsWENVj4Wtx7OQ
k2iwkYxewanWJoZcI+n0UcEWtwAUYBFMDYzKiIMMWchUBuRwAJTFmGviybO3
hoU/ahimlIjK0CFcAaxidZ4qgclATdm1w7tu6Jq25FyZIRETelw7xtSmL/K0
hZNl6AqxKtmsEseITJ6eHR7/YE/INXDR2Ar6BTdwf/nBPT05Otw7POiLxvmN
sxckw0iFFDQa1p8iOPqjnMG2nKRVqwfF9/Ol7C3adIjMMSxdWhoZgWuLOksl
EvsyMY/yWHFS0gD+iP+Kwapc/0iqSFA4P3SPXvVAHAmGceSOo2gKtyziNNgq
YzoHc/ioo/hcr01ltANZKQ3EkM1wPN7rO+trbdD7yexN9UrhTij0PTzpO+/O
nM3WausDWQopE9Dvvx++OT1y9w77eycujAAD0BOSMeTG/CE3aofcKAy53n7o
MtfbhUE3Fxh0vXbQTWvQrfaDBsTuxmg9QLfth40IQ2zzoCrYSHFquud8f5pa
nslfHETpLANUTC/tnJomI1AcQk6ShSUZBCpYjPKiA4dKtGhom8d0ig21iheo
G7/gAIz+65O3R/svQCLyZomEbGObsupE59mWiM1R/NhsOlLvGT964Qwdujqd
ptNtd1eZwLyeeTd+4Jz7w6swQhXEBzJT8uFjEZtSd4sly3+BiN+TkgPZb+/8
eOvduyb82O609+jnVnu3gHg/n53+DLh61u529tptjXqtbKC9dxvttvume4+u
xwdr7YPmm4ONtvuu864rv62+23rX2bjXcHDvYcDjA7pK9xgAzurwVHlMoH1c
9+2c5Xv9wW5Zhbvl/S7aMShbXqNBPxa9TEtCzY5Pfjrsuei0Q0GzD2XorFPU
XC9dzwFTRpilBZYwXFGXV29z0sWx/8HtwYfLTdLwUs6Wx7cTd+qBqJsC0vhj
vpXncisP5txKBtXm9nob6HwfQLnSbfsFFO6fAR8481kv6XYBRBohszE2YYz+
mdvpPqz/5kqneKfvNECy0lkrsrI77WGlk6x07zbGH+xe3of7vfIHMd3KVfNS
9uJ4OAOGxz+fSqBeSNi99x2s5Yt3uoAKKoJhAMW3F4HTp0LkCv362+udttvd
2t9rwu+b8PvmBibn3UYOuNref8cva9sgKbrdVfG77MVDQNZrdEntmJiem7B8
Phx4s/tuzxh4fRXmsUfutDr7NUPDXv575sGJysDO4bseDQg/D2qHer5Lzhsv
Bo3eZm8/zsIAk48f+ykqunCn8p/8MW7XfKFzsduloBMrir2K5b9DXEZiPitQ
aqGs8+0jClkjTAofTdnZ82vDQCDkbRP/ACdhN+NGQ37JsE05NMgu1PenMWzG
jz3nlK378uwXxXphDzOYLKroLM65OuvmhnfjyBsNo0mjoX57UnvQgtubJ2k+
oiJHXmD5QmgXOViorCyADKqQmhhqA7xd7KU1S9JogsyGfZ539944/f2fnI0W
MKwNU91xna2tLRDLln6EJQ2vou7w22WV8R+/29g2vrO+AaXL6GV9tbYFX/33
LIy9sOtZ33SNb2b2N9vr+pvQnmjVmOiD/uqPy8WqkDORl9zNrW2E/Xk08a68
m/cKIq7K0SnkoulM5TEKX4TFRUHftNT3Jne5ul2LV/7l/AAU6hi6EWwajdwH
T2xreVrTK+71Dchwbbez1V/aPev1gavyB1t953Q8S/jDoq1ivdVGDbjV3rYM
FfaA/bPCcPBR9WBb7cJg51s8WM0KNk0qsJi41N22rAH+jfN6dS9ndyv79A+N
DLjZvbMOHRfWmTlDwui+K0Je6MUmCOPtzXXbUMVj4KE18ZdyQ5c1QOehx3c2
C/4R+Eq0bTTsv//QR3b29vDHwwPn7Af3eKvd2XLPmur3tntWgPsx3aWzv5/9
ALpUp9vaWlpd3m1D44eewF7ghx4+iMGPL0Wz+BLMZucWBABHUnzLTDIpuFRA
ygQaBuh6Z6PbxH/X6N8N+rdIEPs9PNV2zl7FQ2x1OnAf4V900YVLuVDnP65Y
cndD1Qah+5qgO75zDwHf6ecflsB8Mhle4IZi/Hpro7VlS/F753ubndUuSIXY
+A1I3X0lQcNXWx2Uu+Wr1pt3+ts7qG5r5mGeTP3Q6dPTOF9Yb5YC6UC8mYX5
M42wsTy7PzpB02XWg3D2wXmPzkpAbdQ12Gh11HvqSb/vHh0ev31HD7TYpR9d
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
1Z5RoNc+sIhqNnGZdox5T66w0Le8sIUJ7F8hmEqlJOdKYdWNxr+cnykFzr8w
a6oOKv+Xc6ZB9y9o4+J/jvx0C39Rm7VV+AgVG0Opx6v+Lyc7MGq3Vt7u/1Kt
00Lr9arWb8tab5S2btLQFV02qycoWfzWnAlKumxXdHlb2WW9XT1Lbb8u92u9
m3cI66tVLcuPYX2tun0ZVNfXK9rXHcX6Rt0kJZvYnDtJSaetyk41gN2um6mu
55YCxPm8I9naqGpZfiRbm9Xty6C7tVXRvu5ItrbrJiluYrs9d5KSTp3KTtWA
3e7WzVTbU+H+7kbrIBx602Te0Wyv5Xu0zvy5hG5bHf3um7lN1dnbyfRLm2qk
n9+20+6YhEQbXcrbdivbliNgp71a06MMmzrttaoedUjYaeeoyZyNbNS0rtrK
Zm2f8lVtVfep307uUtVvp9OuaV2xnU6ntk/pqjrd6j612+kUbsdC28rfjjnN
1aHuv9tYqP2mbr+2UHt1mFjQa5H227r9QuN321n7hSbodvQGugu172btf16o
w6peUfftQh3Wsg4LnVl3M48YGdmc09MSswrYW9Zju6pHHefprLaru1VzkM5q
JV2dy33Qs6ye1JT1Wa3uU7+/tbqOdausIbkL7DEnyyy0x83qPvV73KrrWLfK
Gjo8f49r6kYXCpmUovSaus/FwifF9r/vON+kg7GLmqJONuoatuAgHfsvX5wZ
SiwV4MAUat84vSFmMxv7o0vytEhsbzROlDcO3osJ2wvfOz95E9AWnTPvN6/p
vEP9+EeY+rLp/M/MC/euvMjpz5rOaw9ngQ+DJIImRwF89gZ9fELn5+AymsX+
7EPT+TEChfi1N576cSi+yt7YeRP8FntXgXo3DWIys1xepRezcZbYieycs8tL
fHYHvbxVtnIqIWkvvxeOYv/G6Y2TFNPbHwXhyHP2Z+HAi5tOb4Rvw84rL47R
nXE3igHOr0H19sLomhfYG197cQQ6bwrwNpaI00azyytJkVU0PjYaqP3i0rmQ
CDtwGaZMgT3q3r56Us/liwKwkclUvMeu0WyBJgYja6ExXt4ylyVRzNtMC2ZS
8k5VI1MFZc5cprx4vcxeouvlzint5CqftZISPWwFe2255Bi24kVr9Myp7rSj
vGI6lCx3ySxn9B8vnfay8zt82cWiRfg12c1eR1PAkUmQOn9+6XS4xWqLfGT6
+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
OwokzzLtZ5Rp/z+BJADalt8BAA==

-->

</rfc>

