<?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.39 (Ruby 2.6.10) -->


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

<!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 RFC9256 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9256.xml">
<!ENTITY I-D.dawra-idr-bgp-sr-service-chaining SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.dawra-idr-bgp-sr-service-chaining.xml">
<!ENTITY RFC8300 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8300.xml">
]>


<rfc ipr="trust200902" docName="draft-ietf-spring-srv6-service-programming-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>SRv6 Service Programming</title>

    <author initials="A." surname="Abdelsalam" fullname="Ahmed Abdelsalam" role="editor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Italy</country>
        </postal>
        <email>ahabdels@cisco.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="D." surname="Bernier" fullname="Daniel Bernier">
      <organization>HPE</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>daniel.bernier@hpe.com</email>
      </address>
    </author>
    <author initials="C." surname="Li" fullname="Cheng Li">
      <organization>Huawei</organization>
      <address>
        <email>chengli13@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>

    <date year="2026" month="July" day="06"/>

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

    <abstract>


<?line 178?>

<t>This document defines data plane functionality required to implement service segments and achieve service programming in SRv6 networks.</t>



    </abstract>



  </front>

  <middle>


<?line 182?>

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

<t>Segment Routing (SR) <xref target="RFC8402"/> is an architecture based on the source routing paradigm that seeks the right balance between distributed intelligence and centralized programmability. SR can be used with an MPLS data plane (SR-MPLS) or an IPv6 data plane (SRv6). This document defines the service programming specifications for the SRv6 dataplane. The specifications for the SR-MPLS dataplane are defined in a different document.</t>

<t>In SRv6, packets can be steered through an ordered list of instructions, called segments. These segments may encode simple routing instructions for forwarding packets along a specific network path, but also steer them through Virtual Network Functions (VNFs) or physical service appliances available in the network.</t>

<t>In an SRv6 network, each of these services, running either on a physical appliance or in a virtual environment, are associated with a segment identifier (SID). These service SIDs are then leveraged as part of a SID-list to steer packets through the corresponding services.  Service SIDs may be combined together in a SID-list to achieve service programming, but also with other types of segments as defined in <xref target="RFC8402"/>.  SRv6 thus provides a fully integrated solution for overlay, underlay and service programming. Furthermore, SRv6 <xref target="RFC8986"/> supports metadata transportation in the Segment Routing Header <xref target="RFC8754"/>, either natively in the tag field or with extensions such as TLVs.</t>

<t>This document describes how a service can be associated with a SID, including legacy services with no SR capabilities, and how these service SIDs are integrated within an SR policy. The definition of an SR Policy and the traffic steering mechanisms are covered in <xref target="RFC9256"/> and hence outside the scope of this document.</t>

<t>The definition of control plane components, such as service segment discovery, is outside the scope of this data plane document.  For reference, the option of using BGP extensions to support SR service programming is proposed in <xref target="I-D.dawra-idr-bgp-sr-service-chaining"/>.</t>

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

<t>This document leverages the terminology proposed in <xref target="RFC8402"/>, <xref target="RFC8754"/>, <xref target="RFC8986"/> and <xref target="RFC9256"/>.  It also introduces the following new terms.</t>

<t>Service segment: A segment associated with a service. The service may either run on a physical appliance or in a virtual environment such as a virtual machine or container.</t>

<t>SR-aware service: A service that is fully capable of processing SR traffic. An SR-aware service can be directly associated with a service segment.</t>

<t>SR-unaware service: A service that is unable to process SR traffic or may behave incorrectly due to presence of SR information in the packet headers. An SR-unaware service can be associated with a service segment through an SR proxy function.</t>

</section>
<section anchor="classification-and-steering"><name>Classification and Steering</name>

<t>Classification and steering mechanisms are defined in section 8 of <xref target="RFC9256"/> and are independent from the purpose of the SR policy.  From the perspective of a headend node classifying and steering traffic into an SR policy, there is no difference whether this policy contains IGP, BGP, peering, VPN or service segments, or any combination of these.</t>

<t>As documented in the above reference, traffic is classified when entering an SR domain.  The SR policy headend may, depending on its capabilities, classify the packets on a per-destination basis, via simple FIB entries, or apply more complex policy routing rules requiring to look deeper into the packet.  These rules are expected to support basic policy routing such as 5-tuple matching.  In addition, the IPv6 SRH tag field defined in <xref target="RFC8754"/> can be used to identify and classify packets sharing the same set of properties.  Classified traffic is then steered into the appropriate SR policy and forwarded as per the SID-list(s) of the active candidate path.</t>

<t>SR traffic can be re-classified by an SR endpoint along the original SR policy (e.g., DPI service) or a transit node intercepting the traffic.  This node is the head-end of a new SR policy that is imposed onto the packet as SRv6 encapsulation.</t>

</section>
<section anchor="service-segments"><name>Service Segments</name>

<t>In the context of this document, the term service refers to a physical appliance running on dedicated hardware, a virtualized service inside an isolated environment such as a Virtual Machine (VM), container or namespace, or any process running on a compute element.  A service may also comprise multiple sub-components running in different processes or containers.  Unless otherwise stated, this document does not make any assumption on the type or execution environment of a service.</t>

<t>The execution of a service can be integrated as part of an SR policy by assigning a segment identifier, or SID, to the service and including this service SID in the SR policy SID-list.  Such a service SID may be of local or global significance. In the former case, other segments, such as prefix or adjacency segments, can be used to steer the traffic up to the node where the service segment is instantiated. In the latter case, the service is directly reachable from anywhere in the routing domain.  This is realized with SRv6 by advertising the SID locator in the routing protocol (<xref target="RFC8986"/>).  It is up to the network operator to define the scope and reachability of each service SID.  This decision can be based on various considerations such as infrastructure dynamicity, available control plane or orchestration system capabilities.</t>

<t>This document categorizes services in two types, depending on whether they are able to behave properly in the presence of SR information or not. These are respectively named SR-aware and SR-unaware services.</t>

<section anchor="sr-aware-services"><name>SR-Aware Services</name>

<t>An SR-aware service can process the SR information in the packets it receives. This means being able to identify the active segment as a local instruction and move forward in the segment list, but also that the service&#39;s own behavior is not hindered due to the presence of SR information.  For example, an SR-aware firewall filtering SRv6 traffic based on its final destination must retrieve that information from the last entry in the SRH rather than the Destination Address field of the IPv6 header.</t>

<t>An SR-aware service is associated with a locally instantiated service segment, which is used to steer traffic through it.</t>

<t>If the service is configured to intercept all the packets passing through the appliance, the underlying routing system only has to implement a default SR endpoint behavior (e.g., SRv6 End behavior), and the corresponding SID will be used to steer traffic through the service.</t>

<t>If the service requires the packets to be directed to a specific virtual interface, networking queue or process, a dedicated SR behavior may be required to steer the packets to the appropriate location.  The definition of such service-specific functions is out of the scope of this document.</t>

<t>SR-aware services also enable advanced network programming functionalities such as conditional branching and jumping to arbitrary SIDs in the segment list. In addition, SRv6 provides several ways of passing and exchanging information between services (e.g., SID arguments, tag field and TLVs). An example scenario involving these features is described in <xref target="IFIP18"/>, which discusses the implementation of an SR-aware Intrusion Detection System.</t>

<t>Examples of SR-aware services are provided in section <xref target="sec-implem-aware"/>.</t>

</section>
<section anchor="sr-unaware-services"><name>SR-Unaware Services</name>

<t>Any service that does not meet the above criteria for SR-awareness is considered as SR-unaware.</t>

<t>An SR-unaware service is not able to process the SR information in the traffic that it receives.  It may either drop the traffic or take erroneous decisions due to the unrecognized routing information.  In order to include such services in an SR policy, it is thus required to remove the SR information as well as any other encapsulation header before the service receives the packet, or to alter it in such a way that the service can correctly process the packet.</t>

<t>In this document, we define the concept of an SR proxy as an entity, separate from the service, that performs these modifications and handle the SR processing on behalf of a service.  The SR proxy can run as a separate process on the service appliance, on a virtual switch or router on the compute node or on a different host.</t>

<t>An SR-unaware service is associated with a service segment instantiated on the SR proxy, which is used to steer traffic through the service. <xref target="sec-proxies"/> describes several SR proxy behaviors to handle the encapsulation headers and SR information under various circumstances.</t>

</section>
</section>
<section anchor="sr-service-policies"><name>SR Service Policies</name>

<t>An SR service policy is an SR policy, as defined in <xref target="RFC9256"/>, that includes at least one service. This service is represented in the SID-list by its associated service SID. In case the policy should include several services, the service traversal order is indicated by the relative position of each service SID in the SID-list. Using the mechanisms described in <xref target="RFC9256"/>, it is possible to load balance the traffic over several services, or instances of the same service, by associating with the SR service policy a weighted set of SID-lists, each containing a possible sequence of service SIDs to be traversed. Similarly, several candidate paths can be specified for the SR service policy, each with its own set of SID-lists, for resiliency purposes.</t>

<t>Furthermore, binding SIDs (BSIDs) <xref target="RFC8402"/> can be leveraged in the context of service policies to reduce the number of SIDs imposed by the headend, provide opacity between domains and improve scalability. For example, a network operator may want a policy in its core domain to include services that are running in one of its datacenters. One option is to define an SR policy at ingress edge of the core domain that explicitly includes all the SIDs needed to steer the traffic through the core and in the DC, but that may result in a long SID-list and requires to update the ingress edge configuration every time the DC part of the policy is modified. Alternatively, a separate policy can be defined at the ingress edge of the datacenter with only the SIDs that needs to be executed there and its BSID included in the core domain policy. That BSID remains stable when the DC policy is modified and can even be shared among several core domain policies that would require the same type of processing in the DC.</t>

<t>This section describes how services can be integrated within an SRv6 service policy.</t>

<figure title="SR service policy" anchor="fig-policy"><artwork><![CDATA[
     +------------------------------------------+
     |               SR network                 |
     |                                          |
+----+----+          +---------+           +----+-----+
|    H    +----------+    S    +-----------+    E     |
|(headend)|          |(service)|           |(endpoint)|
+----+----+          +---------+           +----+-----+
     |  =====================================>  |
     |     P1(H,E,C)                            |
     +------------------------------------------+
]]></artwork></figure>

<t><xref target="fig-policy"/> illustrates a basic SR service policy instantiated on a headend node H towards an endpoint E and traversing a service S. The SR policy may also include additional requirements, such as traffic engineering or VPN. On the head-end H, the SR policy P1 is created with a color C and endpoint E and associated with an SR path that can either be explicitly configured, dynamically computed on H or provisioned by a network controller.</t>

<t>In its most basic form, the SR policy P1 would be resolved into the SID-list &lt; SID(S), SID(E) &gt;. This is assuming that SID(S) and SID(E) are directly reachable from H and S, respectively, and that the forwarding path meets the policy requirement. However, depending on the dataplane and the segments available in the network, additional SIDs may be required to enforce the SR policy.</t>

<t>This model applies regardless of the SR-awareness of the service. If it is SR-unaware, then S simply represents the proxy that takes care of transmitting the packet to the actual service.</t>

<t>Traffic can then be steered into this policy using any of the mechanisms described in <xref target="RFC9256"/>.</t>

<section anchor="sec-policy-srv6"><name>SRv6 Data Plane</name>

<figure title="Packet walk in an SRv6 network" anchor="fig-policy-srv6"><artwork><![CDATA[
     +-----------------------------------------------+
     |                 SRv6 network                  |
     |                                               |
+----+----+   ------>   +---------+   ------>   +----+-----+
|    H    +-------------+    S    +-------------+    E     |
|(headend)|             |(service)|             |(endpoint)|
+----+----+             +---------+             +----+-----+
     |    (1)         (2)         (3)         (4)    |
     |+---------+ +---------+ +---------+ +---------+|
     ||IP6(H,..)| |IP6(H, S)| |IP6(H,..)| |IP6(H, E)||
     |+---------+ +---------+ +---------+ +---------+|
     ||SRH(E,..,| |SRH(E,..,| |SRH(E,..,| |SRH(E,..,||
     ||    S,..;| |    S,..;| |    S,..;| |    S,..;||
     ||    SL=i)| |    SL=j)| |    SL=k)| |    SL=0)||
     |+---------+ +---------+ +---------+ +---------+|
     ||Inner pkt| |Inner pkt| |Inner pkt| |Inner pkt||
     |+---------+ +---------+ +---------+ +---------+|
     +-----------------------------------------------+
]]></artwork></figure>

<t>In an SRv6 network, the SR Policy is encoded into the packet as an IPv6 header possibly followed by a Segment Routing Header (SRH) <xref target="RFC8754"/>.</t>

<t>In the example shown on <xref target="fig-policy-srv6"/>, the SR policy should steer the traffic from the head-end H to the endpoint E via a service S. This translates into Segment-List that includes at least a segment SID(S) to the service, or service proxy, S and a segment SID(E) to the endpoint E. The Segment-List may also include additional intermediate SIDs if these are required for traffic engineering (e.g., the encode a low latency path between H and S and / or between S and E) or simply for reachability purposes. Indeed, the service SID locator may or may not be advertised in the routing protocol and, in the latter case, one or more SIDs might be needed before SID(S) in order to bring the packet up to node S, where SID(S) can be interpreted. The same applies for the segment SID(E) at the SR policy endpoint.</t>

<t>When the packet arrives at S, this node determines how to process the packet based on the semantic locally associated to the active segment SID(S). If S is an SR-aware service, then SID(S) may provide additional context or indication on how to process the packet (e.g., a firewall SID may indicate which rule set should be applied onto the packet). If S is a proxy in front of an SR-unaware service, SID(S) indicates how and to which service attached to this proxy the packet should be transmitted. At some point in the process, the SRv6 End function is also applied in order to make the next SID, which may be SID(E) or another intermediate SID, active.</t>

<t>The &quot;Inner pkt&quot; on <xref target="fig-policy-srv6"/> represents the SRv6 payload, which may be an encapsulated IP packet, an Ethernet frame or a transport-layer payload, for example.</t>

</section>
</section>
<section anchor="sec-proxies"><name>SR Proxy Behaviors</name>

<t>This section describes several SR proxy behaviors designed to enable SR service programming through SR-unaware services.  A system implementing one of these behaviors may handle the SR processing on behalf of an SR-unaware service and allows the service to properly process the traffic that is steered through it.</t>

<t>A service may be located at any hop in an SR policy, including the last segment.  However, the SR proxy behaviors defined in this section are dedicated to supporting SR-unaware services at intermediate hops in the segment list.  In case an SR-unaware service is at the last segment, it is sufficient to ensure that the SR information is ignored (IPv6 routing extension header with Segments Left equal to 0) or removed before the packet reaches the service (SRv6 decapsulation behavior or PSP flavor).</t>

<t>As illustrated on <xref target="fig-proxy"/>, the generic behavior of an SR proxy has two parts.  The first part is in charge of passing traffic from the network to the service.  It intercepts the SR traffic destined for the service via a locally instantiated service segment, modifies it in such a way that it appears as non-SR traffic to the service, then sends it out on a given interface, IFACE-OUT, connected to the service.  The second part receives the traffic coming back from the service on IFACE-IN, restores the SR information and forwards it according to the next segment in the list.  IFACE-OUT and IFACE-IN are respectively the proxy interface used for sending traffic to the service and the proxy interface that receives the traffic coming back from the service.  These can be physical interfaces or sub-interfaces (VLANs) and, unless otherwise stated, IFACE-OUT and IFACE-IN can represent the same interface.</t>

<figure title="Generic SR proxy" anchor="fig-proxy"><artwork><![CDATA[
           +----------------------------+
           |                            |
           |           Service          |
           |                            |
           +----------------------------+
                    ^  Non SR   |
                    |  traffic  |
                    |           v
              +-----------+----------+
           +--| IFACE OUT | IFACE IN |--+
SR traffic |  +-----------+----------+  | SR traffic
---------->|          SR proxy          |---------->
           |                            |
           +----------------------------+
]]></artwork></figure>

<t>In the next subsections, the following SR proxy mechanisms are defined:</t>

<t><list style="symbols">
  <t>Static proxy</t>
  <t>Dynamic proxy</t>
  <t>Shared-memory proxy</t>
  <t>Masquerading proxy</t>
</list></t>

<t>Each mechanism has its own characteristics and constraints, which are summarized in the below table.  It is up to the operator to select the best one based on the proxy node capabilities, the service behavior and the traffic type.  It is also possible to use different proxy mechanisms within the same service policy.</t>

<figure title="SR proxy summary" anchor="fig-proxy-sum"><artwork><![CDATA[
                                        +-----+-----+-----+-----+
                                        |     |     |     |  M  |
                                        |     |     |  S  |  a  |
                                        |     |     |  h  |  s  |
                                        |     |     |  a  |  q  |
                                        |     |     |  r  |  u  |
                                        |     |  D  |  e  |  e  |
                                        |  S  |  y  |  d  |  r  |
                                        |  t  |  n  |     |  a  |
                                        |  a  |  a  |  m  |  d  |
                                        |  t  |  m  |  e  |  i  |
                                        |  i  |  i  |  m  |  n  |
                                        |  c  |  c  |  .  |  g  |
+---------------------------------------+-----+-----+-----+-----+
|                |                      |     |     |     |     |
|   SR flavors   |     Inline SRv6      |  P  |  P  |  P  |  Y  |
|                |                      |     |     |     |     |
|                |  SRv6 encapsulation  |  Y  |  Y  |  Y  |  -  |
+----------------+----------------------+-----+-----+-----+-----+
|     Chain agnostic configuration      |  N  |  N  |  Y  |  Y  |
+---------------------------------------+-----+-----+-----+-----+
|     Transparent to chain changes      |  N  |  Y  |  Y  |  Y  |
+----------------+----------------------+-----+-----+-----+-----+
|                |   DA modification    |  Y  |  Y  |  Y  | NAT |
|                |                      |     |     |     |     |
|                | Payload modification |  Y  |  Y  |  Y  |  Y  |
|                |                      |     |     |     |     |
|Service support |  Packet generation   |  Y  |  Y  |cache|cache|
|                |                      |     |     |     |     |
|                |   Packet deletion    |  Y  |  Y  |  Y  |  Y  |
|                |                      |     |     |     |     |
|                |  Packet re-ordering  |  Y  |  Y  |  Y  |  Y  |
|                |                      |     |     |     |     |
|                |  Transport endpoint  |  Y  |  Y  |cache|cache|
+----------------+----------------------+-----+-----+-----+-----+
|                |       Ethernet       |  Y  |  Y  |  Y  |  -  |
|   Supported    |                      |     |     |     |     |
|    traffic     |         IPv4         |  Y  |  Y  |  Y  |  -  |
|                |                      |     |     |     |     |
|                |         IPv6         |  Y  |  Y  |  Y  |  Y  |
+----------------+----------------------+-----+-----+-----+-----+
]]></artwork></figure>

<t>Note: The use of a shared memory proxy requires both the service (VNF) and the proxy to be running on the same node.</t>

<section anchor="sec-proxies-static"><name>Static SR Proxy</name>

<t>The static proxy is an SR endpoint behavior for processing SRv6 encapsulated traffic on behalf of an SR-unaware service. This proxy thus receives SR traffic that is formed of SRv6 encpasulation on top of an inner packet, which can be Ethernet, IPv4 or IPv6.</t>

<t>A static SR proxy segment is associated with the following mandatory parameters</t>

<t><list style="symbols">
  <t>INNER-TYPE: Inner packet type</t>
  <t>NH-ADDR: Next hop Ethernet address (only for inner type IPv4 and IPv6)</t>
  <t>IFACE-OUT: Local interface for sending traffic towards the service</t>
  <t>IFACE-IN: Local interface receiving the traffic coming back from the service</t>
  <t>CACHE: SR information to be attached on the traffic coming back from the service, including at least
  <list style="symbols">
      <t>CACHE.SA: IPv6 source address (SRv6 only)</t>
      <t>CACHE.LIST: Segment list expressed as IPv6 address</t>
    </list></t>
</list></t>

<t>A static SR proxy segment is thus defined for a specific service, inner packet type and cached SR information.  It is also bound to a pair of directed interfaces on the proxy.  These may be both directions of a single interface, or opposite directions of two different interfaces. The latter is recommended in case the service is to be used as part of a bi-directional SR service policy.  If the proxy and the service both support 802.1Q, IFACE-OUT and IFACE-IN can also represent sub-interfaces.</t>

<t>The first part of this behavior is triggered when the proxy node receives a packet whose active segment matches a segment associated with the static proxy behavior.  It removes the SR information from the packet then sends it on a specific interface towards the associated service.  This SR information corresponds to the encapsulation IPv6 header with any attached extension header.</t>

<t>The second part is an inbound policy attached to the proxy interface receiving the traffic returning from the service, IFACE-IN.  This policy attaches to the incoming traffic the cached SR information associated with the SR proxy segment. With the SRv6 data plane, CACHE is defined as a source address, an active segment and an optional SRH (tag, segments left, segment list and metadata).  The proxy encapsulates the packets with an IPv6 header that has the source address, the active segment as destination address and the SRH as a routing extension header.  After the SR information has been attached, the packets are forwarded according to the active segment, which is represented by the IPv6 Destination Address. An IPv6 Hop Limit value may also be configured in CACHE. If it is not, the proxy should set these values according to the node&#39;s default setting for IPv6 encapsulation.</t>

<t>In this scenario, there are no restrictions on the operations that can be performed by the service on the stream of packets.  It may operate at all protocol layers, terminate transport layer connections, generate new packets and initiate transport layer connections.  This behavior may also be used to integrate an IPv4-only service into an SRv6 policy.  However, a static SR proxy segment can be used in only one service policy at a time.  As opposed to most other segment types, a static SR proxy segment is bound to a unique list of segments, which represents a directed SR service policy.  This is due to the cached SR information being defined in the segment configuration.  This limitation only prevents multiple segment lists from using the same static SR proxy segment at the same time, but a single segment list can be shared by any number of traffic flows.  Besides, since the returning traffic from the service is re-classified based on the incoming interface, an interface can be used as receiving interface (IFACE-IN) only for a single SR proxy segment at a time.  In the case of a bi-directional SR service policy, a different SR proxy segment and receiving interface are required for the return direction.</t>

<t>The static proxy behavior may also be used for sending traffic through &quot;bump in the wire&quot; services that are transparent to the IP and Ethernet layers. This type of processing is assumed when the inner traffic type is Ethernet, since the original destination address of the Ethernet frame is preserved when the packet is steered into the SR Policy and likely associated with a node downstream of the policy tail-end. In case the inner type is IP (IPv4 or IPv6), the NH-ADDR parameter may be set to a dummy or broadcast Ethernet address, or simply to the address of the proxy receiving interface (IFACE-IN).</t>

<section anchor="sec-proxies-static-srv6"><name>SRv6 Pseudocode</name>

<section anchor="static-proxy-for-inner-type-ethernet"><name>Static Proxy for Inner Type Ethernet</name>

<t>When processing an IPv6 packet matching a FIB entry locally instantiated as an
SRv6 static proxy SID for Ethernet traffic, the following pseudocode is
executed.</t>

<figure title="SID processing for SRv6 static proxy
(Ethernet)" anchor="code-static-srv6-eth-sid"><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0) {
S03.     Proceed to process the next header in the packet.
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_last_entry = (Hdr Ext Len / 2) - 1
S09.   If ((Last Entry > max_last_entry) or
           (Segments Left > (Last Entry + 1))) {
S10.     Send an ICMP Parameter Problem message to the Source Address,
         Code 0 (Erroneous header field encountered),
         Pointer set to the Segments Left field,
         Interrupt packet processing and discard the packet.
S11.   }
S12.   Decrement Hop Limit by 1.
S13.   Decrement Segments Left by 1.
S14.   Copy Segment List[Segments Left] from the SRH to the
       Destination Address of the IPv6 header.
S15.   If (Upper-layer header type != 143 (Ethernet)) {
S16.     Resubmit the packet to the IPv6 module for transmission to
         the new destination.
S17.   }
S18.   Perform IPv6 decapsulation.
S19.   Submit the frame to the Ethernet module for transmission via
       interface IFACE-OUT.
S20. }
]]></artwork></figure>

<t>S15: 143 (Ethernet) refers to the value assigned by IANA for &quot;Ethernet&quot; in the
&quot;Internet Protocol Numbers&quot; registry.</t>

<t>When processing the Upper-layer header of a packet matching a FIB entry locally
instantiated as an SRv6 static proxy SID for Ethernet traffic, the following
pseudocode is executed.</t>

<figure title="Upper-layer header processing for SRv6
static proxy (Ethernet)" anchor="code-static-srv6-eth-ulh"><artwork><![CDATA[
S01. If (Upper-layer header type != 143 (Ethernet)) {
S02.   Process as per [RFC8986] Section 4.1.1
S03. }
S04. Perform IPv6 decapsulation.
S05. Submit the frame to the Ethernet module for transmission via
     interface IFACE-OUT.
]]></artwork></figure>

<t>When processing an Ethernet frame received on the interface IFACE-IN and with a
destination MAC address that is neither a broadcast address nor matches the
address of IFACE-IN, the following pseudocode is executed.</t>

<figure title="Inbound policy for SRv6 static proxy
(Ethernet)" anchor="code-static-srv6-eth-inbound"><artwork><![CDATA[
S01. Retrieve the CACHE entry associated with IFACE-IN.
S02. If the CACHE entry is not empty {
S03.   Remove the preamble or Frame Check Sequence (FCS).
S04.   Perform IPv6 encapsulation with an SRH
         Source Address of the IPv6 header is set to CACHE.SA,
         Destination Address of the IPv6 header is set to
         CACHE.LIST[0],
         Next Header of the SRH is set to 143 (Ethernet),
         Segment List of the SRH is set to CACHE.LIST.
S05.   Submit the packet to the IPv6 module for transmission to the
       next destination.
S06. }
]]></artwork></figure>

<t>S04: CACHE.LIST[0] represents the first entry in CACHE.LIST. Unless a local
configuration indicates otherwise, the SIDs in CACHE.LIST should be encoded
in the Segment List field in reversed order, the Segment Left and Last Entry
values should be set of the length of CACHE.LIST minus 1. If CACHE.LIST contains
a single entry, the SRH can be omitted and the Next Header field of the IPv6
header set to 143 (Ethernet).</t>

</section>
<section anchor="static-proxy-for-inner-type-ipv4"><name>Static Proxy for Inner Type IPv4</name>

<t>When processing an IPv6 packet matching a FIB entry locally instantiated as an
SRv6 static proxy SID for IPv4 traffic, the following pseudocode is executed.</t>

<figure title="SID processing for SRv6 static proxy
(IPv4)" anchor="code-static-srv6-ipv4-sid"><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0) {
S03.     Proceed to process the next header in the packet.
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_last_entry = (Hdr Ext Len / 2) - 1
S09.   If ((Last Entry > max_last_entry) or
           (Segments Left > (Last Entry + 1))) {
S10.     Send an ICMP Parameter Problem message to the Source Address,
         Code 0 (Erroneous header field encountered),
         Pointer set to the Segments Left field,
         Interrupt packet processing and discard the packet.
S11.   }
S12.   Decrement Hop Limit by 1.
S13.   Decrement Segments Left by 1.
S14.   Copy Segment List[Segments Left] from the SRH to the
       Destination Address of the IPv6 header.
S15.   If (Upper-layer header type != 4 (IPv4)) {
S16.     Resubmit the packet to the IPv6 module for transmission to
         the new destination.
S17.   }
S18.   Perform IPv6 decapsulation.
S19.   Submit the packet to the IPv4 module for transmission on
       interface IFACE-OUT via NH-ADDR.
S20. }
]]></artwork></figure>

<t>When processing the Upper-layer header of a packet matching a FIB entry locally
instantiated as an SRv6 static proxy SID for IPv4 traffic, the following
pseudocode is executed.</t>

<figure title="Upper-layer header processing for SRv6
static proxy (IPv4)" anchor="code-static-srv6-ipv4-ulh"><artwork><![CDATA[
S01. If (Upper-layer header type != 4 (IPv4)) {
S02.   Process as per [RFC8986] Section 4.1.1
S03. }
S04. Perform IPv6 decapsulation.
S05. Submit the packet to the IPv4 module for transmission on
     interface IFACE-OUT via NH-ADDR.
]]></artwork></figure>

<t>When processing an IPv4 packet received on the interface IFACE-IN and with a
destination address that does not match any address of IFACE-IN, the following
pseudocode is executed.</t>

<figure title="Inbound policy for SRv6 static proxy
(IPv4)" anchor="code-static-srv6-ipv4-inbound"><artwork><![CDATA[
S01. Retrieve the CACHE entry associated with IFACE-IN.
S02. If the CACHE entry is not empty {
S03.   Decrement the TTL and adjust the checksum accordingly.
S04.   Perform IPv6 encapsulation with an SRH
         Source Address of the IPv6 header is set to CACHE.SA,
         Destination Address of the IPv6 header is set to
         CACHE.LIST[0],
         Next Header of the SRH is set to 4 (IPv4),
         Segment List of the SRH is set to CACHE.LIST.
S05.   Submit the packet to the IPv6 module for transmission to the
       next destination.
S06. }
]]></artwork></figure>

<t>S04: CACHE.LIST[0] represents the first entry in CACHE.LIST. Unless a local
configuration indicates otherwise, the SIDs in CACHE.LIST should be encoded
in the Segment List field in reversed order, the Segment Left and Last Entry
values should be set of the length of CACHE.LIST minus 1. If CACHE.LIST contains
a single entry, the SRH can be omitted and the Next Header field of the IPv6
header set to 4 (IPv4).</t>

</section>
<section anchor="static-proxy-for-inner-type-ipv6"><name>Static Proxy for Inner Type IPv6</name>

<t>When processing an IPv6 packet matching a FIB entry locally instantiated as an
SRv6 static proxy SID for IPv6 traffic, the following pseudocode is executed.</t>

<figure title="SID processing for SRv6 static proxy
(IPv6)" anchor="code-static-srv6-ipv6-sid"><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0) {
S03.     Proceed to process the next header in the packet.
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_last_entry = (Hdr Ext Len / 2) - 1
S09.   If ((Last Entry > max_last_entry) or
           (Segments Left > (Last Entry + 1))) {
S10.     Send an ICMP Parameter Problem message to the Source Address,
         Code 0 (Erroneous header field encountered),
         Pointer set to the Segments Left field,
         Interrupt packet processing and discard the packet.
S11.   }
S12.   Decrement Hop Limit by 1.
S13.   Decrement Segments Left by 1.
S14.   Copy Segment List[Segments Left] from the SRH to the
       Destination Address of the IPv6 header.
S15.   If (Upper-layer header type != 41 (IPv6)) {
S16.     Resubmit the packet to the IPv6 module for transmission to
         the new destination.
S17.   }
S18.   Perform IPv6 decapsulation.
S19.   Submit the packet to the IPv6 module for transmission on
       interface IFACE-OUT via NH-ADDR.
S20. }
]]></artwork></figure>

<t>When processing the Upper-layer header of a packet matching a FIB entry locally
instantiated as an SRv6 static proxy SID for IPv6 traffic, the following
pseudocode is executed.</t>

<figure title="Upper-layer header processing for SRv6
static proxy (IPv6)" anchor="code-static-srv6-ipv6-ulh"><artwork><![CDATA[
S01. If (Upper-layer header type != 41 (IPv6)) {
S02.   Process as per [RFC8986] Section 4.1.1
S03. }
S04. Perform IPv6 decapsulation.
S05. Submit the packet to the IPv6 module for transmission on
     interface IFACE-OUT via NH-ADDR.
]]></artwork></figure>

<t>When processing an IPv6 packet received on the interface IFACE-IN and with a
destination address that does not match any address of IFACE-IN, the following
pseudocode is executed.</t>

<figure title="Inbound policy for SRv6 static proxy
(IPv6)" anchor="code-static-srv6-ipv6-inbound"><artwork><![CDATA[
S01. Retrieve the CACHE entry associated with IFACE-IN.
S02. If the CACHE entry is not empty {
S03.   Decrement the Hop Limit.
S04.   Perform IPv6 encapsulation with an SRH
         Source Address of the IPv6 header is set to CACHE.SA,
         Destination Address of the IPv6 header is set to
         CACHE.LIST[0],
         Next Header of the SRH is set to 41 (IPv6),
         Segment List of the SRH is set to CACHE.LIST.
S05.   Submit the packet to the IPv6 module for transmission to the
       next destination.
S06. }
]]></artwork></figure>

<t>S04: CACHE.LIST[0] represents the first entry in CACHE.LIST. Unless a local
configuration indicates otherwise, the SIDs in CACHE.LIST should be encoded
in the Segment List field in reversed order, the Segment Left and Last Entry
values should be set of the length of CACHE.LIST minus 1. If CACHE.LIST contains
a single entry, the SRH can be omitted and the Next Header field of the (outer)
IPv6 header set to 41 (IPv6).</t>

</section>
</section>
</section>
<section anchor="sec-proxies-dynamic"><name>Dynamic SR Proxy</name>

<t>The dynamic proxy is an improvement over the static proxy that dynamically learns the SR information before removing it from the incoming traffic.  The same information can then be re-attached to the traffic returning from the service.  As opposed to the static SR proxy, no CACHE information needs to be configured.  Instead, the dynamic SR proxy relies on a local caching mechanism on the node instantiating this segment.</t>

<t>Upon receiving a packet whose active segment matches a dynamic SR proxy function, the proxy node applies the SRv6 End behavior, then compares the updated SR information with the cache entry for the current segment.  If the cache is empty or different, it is updated with the new SR information.  The SR information is then removed and the inner packet is sent towards the service.</t>

<t>The cache entry is not mapped to any particular packet, but instead to an SR service policy identified by the receiving interface (IFACE-IN). Any non-link-local IP packet or non-local Ethernet frame received on that interface will be re-encapsulated with the cached headers as described in <xref target="sec-proxies-static"/>.  The service may thus drop, modify or generate new packets without affecting the proxy.</t>

<section anchor="srv6-pseudocode"><name>SRv6 Pseudocode</name>

<t>When processing an IPv6 packet matching a FIB entry locally instantiated as an
SRv6 dynamic proxy SID, the same pseudocode as described in
<xref target="code-static-srv6-eth-sid"/>, <xref target="code-static-srv6-ipv4-sid"/> and
<xref target="code-static-srv6-ipv6-sid"/>, respectively for Ethernet, IPv4 and IPv6 traffic,
is executed with the following addition between lines S17 and S18.</t>

<figure title="SID processing for SRv6 dynamic proxy" anchor="code-dynamic-srv6-sid"><artwork><![CDATA[
(... S17.     })
S17.1.   Copy the IPv6 encapsulation in a CACHE entry associated with
         the interface IFACE-IN.
(S18.     Perform IPv6 decapsulation...)
]]></artwork></figure>

<t>An implementation may optimize the caching procedure by copying information into
the cache only if it is different from the current content of the cache entry.
A Hop Limit margin can be configured to prevent constant cache updates when
multiple equal-cost paths with different hop counts are used towards the SR
proxy node.  In that case, a Hop Limit difference smaller than the configured
margin should not trigger a cache update. Similarly, the Flow Label value can be
ignored when comparing the current packet IPv6 header with the cache entry. In
this case, the Flow Label should be re-computed by the proxy node when it
restores the IPv6 encapsulation from the cache entry.</t>

<t>When processing the Upper-layer header of a packet matching a FIB entry locally
instantiated as an SRv6 dynamic proxy SID, process the packet as per
<xref target="RFC8986"/> Section 4.1.1.</t>

<t>When processing an Ethernet frame, an IPv4 packet or an IPv6 packet received on
the interface IFACE-IN and with a destination address that does not match any
address of IFACE-IN, the same pseudocode as in <xref target="code-static-srv6-eth-inbound"/>,
<xref target="code-static-srv6-ipv4-inbound"/> or <xref target="code-static-srv6-ipv6-inbound"/>,
respectively, is executed.</t>

</section>
</section>
<section anchor="shared-memory-sr-proxy"><name>Shared Memory SR Proxy</name>

<t>The shared memory proxy is an SR endpoint behavior for processing SRv6 encapsulated traffic on behalf of an SR-unaware service. This proxy behavior leverages a shared-memory interface with a virtualized service (VNF) in order to hide the SR information from an SR-unaware service while keeping it attached to the packet.  We assume in this case that the proxy and the VNF are running on the same compute node.  A typical scenario is an SR-capable vrouter running on a container host and forwarding traffic to VNFs isolated within their respective container.</t>

</section>
<section anchor="masquerading-sr-proxy"><name>Masquerading SR Proxy</name>

<t>The masquerading proxy is an SR endpoint behavior for processing SRv6 traffic on behalf of an SR-unaware service.  This proxy thus receives SR traffic that is formed of an IPv6 header and an SRH on top of an inner payload.  The masquerading behavior is independent from the inner payload type.  Hence, the inner payload can be of any type but it is usually expected to be a transport layer packet, such as TCP or UDP.</t>

<t>A masquerading SR proxy segment is associated with the following mandatory parameters:</t>

<t><list style="symbols">
  <t>NH-ADDR: Next hop Ethernet address</t>
  <t>IFACE-OUT: Local interface for sending traffic towards the service</t>
  <t>IFACE-IN: Local interface receiving the traffic coming back from the service</t>
</list></t>

<t>A masquerading SR proxy segment is thus defined for a specific service and bound to a pair of directed interfaces or sub-interfaces on the proxy.  As opposed to the static and dynamic SR proxies, a masquerading segment can be present at the same time in any number of SR service policies and the same interfaces can be bound to multiple masquerading proxy segments.  The only restriction is that a masquerading proxy segment cannot be the last segment in an SR service policy.</t>

<t>The first part of the masquerading behavior is triggered when the proxy node receives an IPv6 packet whose Destination Address matches a masquerading proxy SID.  The proxy inspects the IPv6 extension headers and substitutes the Destination Address with the last SID in the SRH attached to the IPv6 header, which represents the final destination of the IPv6 packet.  The packet is then sent out towards the service.</t>

<t>The service receives an IPv6 packet whose source and destination addresses are respectively the original source and final destination.  It does not attempt to inspect the SRH, as RFC8200 specifies that routing extension headers are not examined or processed by transit nodes. Instead, the service simply forwards the packet based on its current Destination Address.  In this scenario, we assume that the service can only inspect, drop or perform limited changes to the packets.  For example, Intrusion Detection Systems, Deep Packet Inspectors and non-NAT Firewalls are among the services that can be supported by a masquerading SR proxy.  Flavors of the masquerading behavior are defined in <xref target="sec-proxies-am-nat"/> and <xref target="sec-proxies-am-cache"/> to support a wider range of services.</t>

<t>The second part of the masquerading behavior, also called de-masquerading, is an inbound policy attached to the proxy interface receiving the traffic returning from the service, IFACE-IN.  This policy inspects the incoming traffic and triggers a regular SRv6 endpoint processing (End) on any IPv6 packet that contains an SRH.  This processing occurs before any lookup on the packet Destination Address is performed and it is sufficient to restore the right active SID as the Destination Address of the IPv6 packet.</t>

<section anchor="srv6-masquerading-proxy-pseudocode"><name>SRv6 Masquerading Proxy Pseudocode</name>

<t>Masquerading: When processing an IPv6 packet matching a FIB entry locally
instantiated as an SRv6 masquerading proxy SID, the following pseudocode is
executed.</t>

<figure title="SID processing for SRv6 masquerading proxy" anchor="code-masquerading-sid"><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (Segments Left == 0) {
S03.     Proceed to process the next header in the packet.
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_last_entry = (Hdr Ext Len / 2) - 1
S09.   If ((Last Entry > max_last_entry) or
           (Segments Left > (Last Entry + 1))) {
S10.     Send an ICMP Parameter Problem message to the Source Address,
         Code 0 (Erroneous header field encountered),
         Pointer set to the Segments Left field,
         Interrupt packet processing and discard the packet.
S11.   }
S12.   Decrement Hop Limit by 1.
S13.   Decrement Segments Left by 1.
S14.   Copy Segment List[0] from the SRH to the Destination Address
       of the IPv6 header.
S15.   Submit the packet to the IPv6 module for transmission on
       interface IFACE-OUT via NH-ADDR.
S16. }
]]></artwork></figure>

<t>When processing the Upper-layer header of a packet matching a FIB entry locally
instantiated as an SRv6 masquerading proxy SID, process the packet as per
<xref target="RFC8986"/> Section 4.1.1.</t>

<t>De-masquerading: When processing an IPv6 packet received on the interface
IFACE-IN and with a destination address that does not match any address of
IFACE-IN, the following pseudocode is executed.</t>

<figure title="Inbound policy for SRv6 masquerading proxy" anchor="code-masquerading-inbound"><artwork><![CDATA[
S01. When an SRH is processed {
S02.   If (IPv6 Hop Limit <= 1) {
S03.     Send an ICMP Time Exceeded message to the Source Address,
         Code 0 (hop limit exceeded in transit),
         Interrupt packet processing and discard the packet.
S04.   }
S05.   If (Segments Left != 0) {
S06.     max_last_entry = (Hdr Ext Len / 2) - 1
S07.     If ((Last Entry > max_last_entry) or
             (Segments Left > Last Entry)) {
S08.       Send an ICMP Parameter Problem message to the Source Address,
           Code 0 (Erroneous header field encountered),
           Pointer set to the Segments Left field,
           Interrupt packet processing and discard the packet.
S09.     }
S10.     Copy Segment List[Segments Left] from the SRH to the
         Destination Address of the IPv6 header.
S11.   }
S12.   Decrement Hop Limit by 1.
S13.   Submit the packet to the IPv6 module for transmission to the
       next destination.
S14. }
]]></artwork></figure>

</section>
<section anchor="sec-proxies-am-nat"><name>Destination NAT Flavor</name>

<t>Services modifying the destination address in the packets they process, such as
NATs, can be supported by reporting the updated Destination Address back into
the Segment List field of the SRH.</t>

<t>The Destination NAT flavor of the SRv6 masquerading proxy is enabled by adding
the following instruction between lines S09 and S10 of the de-masquerading
pseudocode in <xref target="code-masquerading-inbound"/>.</t>

<figure><artwork><![CDATA[
(... S09.     })
S09.1.   Copy the Destination Address of the IPv6 header to the
         Segment List[0] entry of the SRH.
(S10.     Copy Segment List[Segments Left] from the SRH to the
          Destination Address of the IPv6 header...)
]]></artwork></figure>

</section>
<section anchor="sec-proxies-am-cache"><name>Caching Flavor</name>

<t>Services generating packets or acting as endpoints for transport connections can be supported by adding a dynamic caching mechanism similar to the one described in <xref target="sec-proxies-dynamic"/>.</t>

<t>The caching flavor of the SRv6 masquerading proxy is enabled by:</t>

<t><list style="symbols">
  <t>Adding the following instruction between lines S14 and S15 of the masquerading
pseudocode in <xref target="code-masquerading-sid"/>.</t>
</list></t>

<figure><artwork><![CDATA[
(... S14.   Copy Segment List[0] from the SRH to the Destination
            Address of the IPv6 header.
S14.1. Copy the IPv6 encapsulation in a CACHE entry associated with
       the interface IFACE-IN.
(S15.   Submit the packet to the IPv6 module for transmission on
        interface IFACE-OUT via NH-ADDR.)
]]></artwork></figure>

<t><list style="symbols">
  <t>Updating the de-masquerading pseudocode such that, in addition to the SRH
processing in <xref target="code-masquerading-inbound"/>, the following pseudocode is
executed when processing an IPv6 packet (received on the interface IFACE-IN and
with a destination address that does not match any address of IFACE-IN) that
does not contain an SRH.</t>
</list></t>

<figure><artwork><![CDATA[
S01. Retrieve the CACHE entry associated with IFACE-IN.
S02. If the CACHE entry is not empty {
S03.   If (IPv6 Hop Limit <= 1) {
S04.     Send an ICMP Time Exceeded message to the Source Address,
         Code 0 (hop limit exceeded in transit),
         Interrupt packet processing and discard the packet.
S05.   }
S06.   Decrement Hop Limit by 1.
S07.   Update the IPv6 encapsulation according to the retrieved CACHE
       entry.
S08.   Submit the packet to the IPv6 module for transmission to the
       next destination.
S09. }
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="metadata"><name>Metadata</name>

<section anchor="srh-tlv-objects"><name>SRH TLV Objects</name>

<t>The IPv6 SRH TLV objects are designed to carry all sorts of metadata. TLV objects can be imposed by the ingress edge router that steers the traffic into the SR service policy.</t>

<t>An SR-aware service may impose, modify or remove any TLV object attached to the first SRH, either by directly modifying the packet headers or via a control channel between the service and its forwarding plane.</t>

<t>An SR-aware service that re-classifies the traffic and steers it into a new SR service policy (e.g.  DPI) may attach any TLV object to the new SRH.</t>

<t>Metadata imposition and handling will be further discussed in a future version of this document.</t>

<section anchor="opaque-metadata-tlv"><name>Opaque Metadata TLV</name>

<t>This document defines an SRv6 TLV called Opaque Metadata TLV. This is a fixed-length container to carry any type of Service Metadata. No assumption is made by this document on the structure or the content of the carried metadata. The Opaque Metadata TLV has the following format:</t>

<figure><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Type     |     Length    |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
|                                                               |
|                       Service Metadata                        |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>where:</t>

<t><list style="symbols">
  <t>Type: to be assigned by IANA.</t>
  <t>Length: 14.</t>
  <t>Service Metadata: 14 octets of opaque data.</t>
</list></t>

</section>
<section anchor="nsh-carrier-tlv"><name>NSH Carrier TLV</name>

<t>This document defines an SRv6 TLV called NSH Carrier TLV. It is a container to carry Service Metadata in the form of Variable-Length Metadata as defined in <xref target="RFC8300"/> for NSH MD Type 2. The NSH Carrier TLV has the following format:</t>

<figure><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Type     |     Length    |     Flags     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//            Service Metadata                                 //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>where:</t>

<t><list style="symbols">
  <t>Type: to be assigned by IANA.</t>
  <t>Length: the total length of the TLV.</t>
  <t>Flags: 8 bits.  No flags are defined in this document.  SHOULD be set to 0 on transmission and MUST be ignored on receipt.</t>
  <t>Service Metadata: a list of Service Metadata TLV as defined in <xref target="RFC8300"/> for NSH MD Type 2.</t>
</list></t>

</section>
</section>
<section anchor="srh-tag"><name>SRH Tag</name>

<t>The SRH tag identifies a packet as part of a group or class of packets <xref target="RFC8754"/>.</t>

<t>In the context of service programming, this field can be used to encode basic metadata in the SRH. An example use-case is to leverage the SRH tag to encode a policy ID. This policy ID can then be used by an SR-aware function to identify a particular processing policy to be applied on that packet.</t>

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

<t>This section is to be removed prior to publishing as an RFC.</t>

<section anchor="sec-implem-aware"><name>SR-Aware Services</name>

<t>Specific SRv6 support has been implemented for the below open-source services:</t>

<t><list style="symbols">
  <t>Iptables (1.6.2 and later) <xref target="IPTABLES"/></t>
  <t>Nftables (0.8.4 and later) <xref target="NFTABLES"/></t>
  <t>Snort <xref target="SNORT"/></t>
</list></t>

<t>In addition, any service relying on the Linux kernel, version 4.10 and later, or FD.io VPP for packet forwarding can be considered as SR-aware.</t>

</section>
<section anchor="proxy-behaviors"><name>Proxy Behaviors</name>

<t>The static SR proxy is available for SRv6 on various Cisco hardware and software platforms.  Furthermore, the following proxies are available on open-source software.</t>

<figure title="Open-source implementation status table" anchor="tab-implem"><artwork><![CDATA[
                                        +-------------+-------------+
                                        |     VPP     |    Linux    |
+---+-----------------------------------+-------------+-------------+
|   |           Static proxy            |  Available  | In progress |
| S |                                   |             |             |
| R |           Dynamic proxy           |  Available  |  Available  |
| v |                                   |             |             |
| 6 |        Shared memory proxy        | In progress | In progress |
|   |                                   |             |             |
|   |        Masquerading proxy         |  Available  |  Available  |
+---+-----------------------------------+-------------+-------------+
]]></artwork></figure>

</section>
</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 allocate, within the &quot;SRv6 Endpoint Behaviors&quot; sub-registry belonging to the top-level &quot;Segment-routing with IPv6 dataplane (SRv6) Parameters&quot; registry, the following allocations:</t>

<figure><artwork><![CDATA[
Value      Description                               Reference
--------------------------------------------------------------
TBA1-1     End.AN - SR-aware function (native)       [This.ID]
TBA1-2     End.AS - Static proxy                     [This.ID]
TBA1-3     End.AD - Dynamic proxy                    [This.ID]
TBA1-4     End.AM - Masquerading proxy               [This.ID]
TBA1-5     End.AM - Masquerading proxy with NAT      [This.ID]
TBA1-6     End.AM - Masquerading proxy with Caching  [This.ID]
TBA1-7     End.AM - Masquerading proxy with NAT &    [This.ID]
                    Caching
]]></artwork></figure>

</section>
<section anchor="segment-routing-header-tlvs"><name>Segment Routing Header TLVs</name>

<t>This I-D requests the IANA to allocate, within the &quot;Segment Routing Header TLVs&quot; registry, the following allocations:</t>

<figure><artwork><![CDATA[
Value      Description               Reference
----------------------------------------------
TBA2-1     Opaque Metadata TLV       [This.ID]
TBA2-2     NSH Carrier TLV           [This.ID]
]]></artwork></figure>

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

<t>The security requirements and mechanisms described in <xref target="RFC8402"/>, <xref target="RFC8754"/> and <xref target="RFC8986"/> also apply to this document.</t>

<t>This document does not introduce any new security vulnerabilities.</t>

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

<t>The authors would like to thank Thierry Couture, Ketan Talaulikar, Loa Andersson, Andrew G.  Malis, Adrian Farrel, Alexander Vainshtein and Joel M.  Halpern for their valuable comments and suggestions on the document.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

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

&RFC8402;
&RFC8754;
&RFC8986;
&RFC9256;


    </references>

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

&I-D.dawra-idr-bgp-sr-service-chaining;
&RFC8300;
<reference anchor="IFIP18" >
  <front>
    <title>SEgment Routing Aware Firewall For Service Function Chaining scenarios</title>
    <author initials="A." surname="Abdelsalam">
      <organization></organization>
    </author>
    <author initials="S." surname="Salsano">
      <organization></organization>
    </author>
    <author initials="F." surname="Clad">
      <organization></organization>
    </author>
    <author initials="P." surname="Camarillo">
      <organization></organization>
    </author>
    <author initials="C." surname="Filsfils">
      <organization></organization>
    </author>
    <date year="2018" month="May"/>
  </front>
  <seriesInfo name="IFIP Networking conference" value=""/>
</reference>
<reference anchor="IPTABLES" target="https://netfilter.org/projects/iptables/files/changes-iptables-1.6.2.txt">
  <front>
    <title>iptables-1.6.2 changes</title>
    <author >
      <organization></organization>
    </author>
    <date year="2018" month="February"/>
  </front>
</reference>
<reference anchor="NFTABLES" target="https://netfilter.org/projects/nftables/files/changes-nftables-0.8.4.txt">
  <front>
    <title>nftables-0.8.4 changes</title>
    <author >
      <organization></organization>
    </author>
    <date year="2018" month="May"/>
  </front>
</reference>
<reference anchor="SNORT" target="https://github.com/SRouting/SR-Snort">
  <front>
    <title>SR-Snort</title>
    <author >
      <organization></organization>
    </author>
    <date year="2018" month="March"/>
  </front>
</reference>


    </references>

</references>


    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
        <name>Contributors</name>
    <contact initials="F." surname="Clad" fullname="Francois Clad">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>fclad.ietf@gmail.com</email>
      </address>
    </contact>
    <contact initials="P." surname="Camarillo" fullname="Pablo Camarillo">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>Spain</country>
        </postal>
        <email>pcamaril@cisco.com</email>
      </address>
    </contact>
    <contact initials="X." surname="Xu" fullname="Xiaohu Xu">
      <organization>China Mobile</organization>
      <address>
        <email>xuxiaohu@cmss.chinamobile.com</email>
      </address>
    </contact>
    <contact initials="S." surname="Ma" fullname="Shaowen Ma">
      <organization>Mellanox</organization>
      <address>
        <email>mashaowen@gmail.com</email>
      </address>
    </contact>
    <contact initials="C." surname="Yadlapalli" fullname="Chaitanya Yadlapalli">
      <organization>AT&amp;T</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>cy098d@att.com</email>
      </address>
    </contact>
    <contact initials="W." surname="Henderickx" fullname="Wim Henderickx">
      <organization>Nokia</organization>
      <address>
        <postal>
          <country>Belgium</country>
        </postal>
        <email>wim.henderickx@nokia.com</email>
      </address>
    </contact>
    <contact initials="S." surname="Salsano" fullname="Stefano Salsano">
      <organization>Universita di Roma "Tor Vergata"</organization>
      <address>
        <postal>
          <country>Italy</country>
        </postal>
        <email>stefano.salsano@uniroma2.it</email>
      </address>
    </contact>
    <contact initials="B." surname="Peirens" fullname="Bart Peirens">
      <organization>Proximus</organization>
      <address>
        <postal>
          <country>Belgium</country>
        </postal>
        <email>bart.peirens@proximus.com</email>
      </address>
    </contact>
    <contact initials="D." surname="Steinberg" fullname="Dirk Steinberg">
      <organization>Lapishills Consulting Limited</organization>
      <address>
        <postal>
          <country>Cyprus</country>
        </postal>
        <email>dirk@lapishills.com</email>
      </address>
    </contact>
    <contact initials="G." surname="Dawra" fullname="Gaurav Dawra">
      <organization>LinkedIn</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>gdawra@linkedin.com</email>
      </address>
    </contact>
    <contact initials="S." surname="Bryant" fullname="Stewart Bryant">
      <organization>Futurewei Technologies Inc</organization>
      <address>
        <email>stewart.bryant@gmail.com</email>
      </address>
    </contact>
    <contact initials="H." surname="Assarpour" fullname="Hamid Assarpour">
      <organization>Broadcom</organization>
      <address>
        <email>hamid.assarpour@broadcom.com</email>
      </address>
    </contact>
    <contact initials="H." surname="Shah" fullname="Himanshu Shah">
      <organization>Ciena</organization>
      <address>
        <email>hshah@ciena.com</email>
      </address>
    </contact>
    <contact initials="L. M." surname="Contreras" fullname="Luis M. Contreras">
      <organization>Telefonica I+D</organization>
      <address>
        <postal>
          <country>Spain</country>
        </postal>
        <email>luismiguel.contrerasmurillo@telefonica.com</email>
      </address>
    </contact>
    <contact initials="J." surname="Tantsura" fullname="Jeff Tantsura">
      <organization>Individual</organization>
      <address>
        <email>jefftant@gmail.com</email>
      </address>
    </contact>
    <contact initials="M." surname="Vigoureux" fullname="Martin Vigoureux">
      <organization>Nokia</organization>
      <address>
        <email>martin.vigoureux@nokia.com</email>
      </address>
    </contact>
    <contact initials="J." surname="Bhattacharya" fullname="Jisu Bhattacharya">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>jisu@cisco.com</email>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
H4sIAHanS2oAA+19a3MbR5Lgd/yKXjlijzwDECnJGpm3dogSKZOzFM0TaM1M
eH0bBXQBaKvRjekHSYyki/sb9/ful1y+6tXdAEE9PJ4dcXdoCuiuysrKyndm
DQaDXpVUqT6IRq+uHkcjXVwlEx1dFPmsUItFks16cT7J1AKeiAs1rQaJrqaD
clnAV4OyuHo8KPmdwdK9M9jb68Wq0ge9Cfye5cXqICqruFfW40VSlkmeXa6W
MOLp8eWLXi9ZFgdRVdRl9WBv79u9Bz1VaHUQ/aAzXai0d50Xb2ZFXi8BxotX
p+c/9N7oFXwYw/tZpYtMV4MjBK3Xm+QxzH4Q1eVAlZMk6S2Tg+jnKp/0ozIv
qkJPS/hrtcA/fun1VF3N8+KgFw16UZRk5UF0OIwOx7FOS5WqBXzICz+cL3Qc
fpEXM5Ulf1MVrOUgep6UkzwarcpKL2CG02wyhGeKHPGq46TKC/inXqgkPYjU
XNFATyf40nCS43CTvM4qxNJppdKVB9DzYfQiScsp/M+C8zwFBGWwS94328Aj
AEym3VM/0+ksqRfe5EdD+LDIEl3YuY9gFp16H4cTn1wcu4lienY45mefzpe6
OeVzlalYhcs9S9xC5zqb8QeNaWp1rRNvSfhgmuw/fDqnb3geO+qzYXSkJ4UC
grJjPyvqLPc/Dmf4sVDZTLsZxvj4MJbHn+b0dXM5L+DTiUYyhH8n47oKievF
ELcutiDQ43lSmk/vsIfTCbwyxKP4dIafrIHEzX0Bc6uFKpI0zS0AF2qc5sHn
dwBhOeH3uolptFRJ5s3/52H059pO/OdE5fOaP2lMOU8yFb3Mx0nqYf+mvqE3
nk4WZTmc4DMLeqSx0aNh9FLZWUZzlV/rjD8Kp3mp01Rl+Y2bYqFKftxHqE+X
f1FxqpYqTX36VEmlspUKvwynOrz810uPUld73z6Jn6qqamLsp9GhN+GfhtGJ
zmJdJJM3N3bCPyWL8ONwqvP8TaLcXNfJYji3Tz/N8NvbDz3gcKSAz2WOTkaV
nsK/vc/DeX/KkitdlICLKE6iV/lCRfcu8yJ6reGxSt1zIJU80rDkkZ7WWVLA
4w+GSbWJC8IBvtAJMD3HBJ+povI+DAEC8XWTLOrSO7/w+HDJjz9dytdbcUBY
fJIBD5s5HpgUb4KPw8nP1DIp53Cg4GDnWVmnVUJcbJFUOva4I4zyNLXPtljj
alngAiwoPwATU9eFI+8fVF2oK/thA4gke6Pj08zNN4vxwacpfZFkLfLLEDxY
FgjsMsqn0eEC6UaFlPGsWKms8gnjGvfBfhwC8aKu6kIDP44u9WSe5Wk+S2Bw
4CMBReAQwzEN0Xn4TkAol6UqlnntBNGJWiRx8Hk497MiVzGvUWaa4xtDZd54
OpYn2rMB45i7iZKFykrgVvJpk0XqzDtyc2Aic+CI8GFj2DNgTUMkCNBCCuXo
+KwGAdD4JpziUqd6mmewF9Hp10durhTeXCSzWiO+5OVFTZz8aWXfuY0x/3EY
XQLiy9qjrD/q6dT/NITnNIuTqySuQTWzsPwKb1Tr9g9W9zqZAcp17VjZS9j0
JAu+2MjMFvT88Mo877MzfzHP5sBb1WSugJ7cgpKybn5zB1H3K7zeLebWnppe
lhcLGPsKdOAoevXi+ZNHew/Mn3/45pH589snj+XPbx98A3/2kmzqv3k6OBrS
wR0kcTEYz5agc1uNG9aSZKjwymAP9/bonRenF/tP8K8osiou/gy6lVz3TcD7
3cdOcXGfNRQK90WosUaRMS+OZwudVSAdauKHh3DqUYMF/gBiM3oB4sIYHy/q
bIK7QvIV1xeVEzhQRZLziLB8YCOIqANaa3SuKzQS8Ek4CVNN2jE9SkYI0Noq
erC3/wRxc3F5+OzseHTgw5YsK9CEdDnYHz4ePgBtEpW70hvghQb9D+jGjAJv
qmKmKzjwVbUsD+7fByMEVgzWyBDo6j4ImF/1pCrvm5Hvw5fwW0YehBMOqxvk
necvOkDLpvLk3vDJ8FEHaN7atobKDNqAKpxLoBqd//jqMgBp9GowAuquAiCK
yXw9GLOkmtdjPDv3R7L/9+0ow+Gw1xsMBpEal1WhJmDGXc6BJ4LZWRPFxHqa
ZHC6YCoVLUFt09FUKESlSbWKCv3XGugojqo8ShbLVNNrckjgv0R4ZaSyOILj
n+grbb/0bFagXraBM6amchgxXCA1YlBGe1+huVnkcU1T93ojHVL0zujVbvT2
rZz19++jBOeMEDXAJCYoCkENKQFOIO1qDkAAJwMYCnl/qQoVJ7MFfKcQfP2m
pMeKZDav4M0UVfpoDNBpUGrjpGQbA8ZLwAwG1XNGRiEuE44LoDJN/gZfmiUq
0JcBW3DCX0UTgGuswUyG769hcxDOlxdnIx/HsJwBfrYLnBK/P70A3ITfXz3e
BenRuVm0vg4kl0s9SabAIRGHZQS8jh4lxOPgNDYOqtc/OrCgMiTISHheREWE
SuiUmEBl4cK9POX97QOiJ280EIRgAVi+JuqZw07MCBd5EdNHKSAZuTowtqrg
fQfhMAGGBV8awiJoS4/QFnAkYSvyGD4jerRb7I9DC4L/AR+MefsZKpXm8C9l
l2/oER6o5v0IdhweKXMGGzGysJC/TooKxLLhh5aRltHO6/MXJe3kcr4qAaep
3R21XKYJkhZMfQXiDlkAohFxLVMPCXkqPB/9SMNpQuxUsnwaD/ADpjJxbQ2U
BSDmuCV2WjsdAkO7dSVQ6wz+yjPEYZ/2FFS1fJKoyhKpQXGUxPAbkAOj74xO
j3bdFvCa4LOShgAAsiiFE1+oGQyjSjxltKUKHxrQBlcGmWYLDD4RBZO8KHS5
zDPaJLPIYWSlFc2FWz7GhxdjIsMqBwaIi6cV+jNt4EDe5tJ6cxqhWi1ZtXCM
rPTJ3eM4CBXuEHDbEgcGLQ13Fdhlmq6IS8BUiM4yT2uSsEiDOWAnVat+VKOp
CH8RC+mADwR7XSBMi7zQfZ6KZwctBvhdWS+XwNEBG7pSxCmACWUlfkZn2FBV
k3GeaAUTy1CgG71/3ze0k5EiRMDTq5WaRbDtaYzUQ0jSNxWYdETkZQ30CMi5
PHtdDttSpJwAvwR8zPNrIiVenzCBNq3BpvVh2kla086neqYmK0sA/BTaxMhN
l8xcE6R+RB5OUXVTpLcLOEQi5ypa5mkyWTHno91NCGVIqfT9BX1PoxMiCjVF
5kCEi/AtNIpxsAh4mgnuqkcgqF3CFhFwJCYA9yWQBzPqSb7UfJI9lBEKm8CQ
pZGnIgOA3uFkIFH2LfYbchcFFQEDBAaDb5jWiRbHtUkvLLSodH16LV8aYOoS
V/7shwufCvA0MyEi2joFPR2OZV4a/GylZMPx6qEScAn0n5Atu2rSmGE0LP4q
92BjPntg+yHR+4cJd8rbOUDFqfCGRLQQmWaagwZ+jevK9DVNisQ/CncBlH67
IV1slR4WsStvkhTjUwgM/UO4uCUJ9+0C2V9GbyElAWZBNwVoXw0U2QMyOYPL
cJA2BFhmJkZnLSWqAZwCDogEYKPlQIBpg8clHM4c8hi0xEkFo6xFgUESw1Rn
t0IFjyA4QHQCjgcLrpIFw1xd4cknWUIAxLW8AzyCsDjF96zt53gliyQ4s8gi
S7O6BmDrmVjzMHo6DvKcIr9ZWWWayRsMPcCpUbuIDEfCY3q9ji/XMSBPQpWa
zbknuMwmN2KeGOslOioBwmmRL3jldYFHRhQMn0VGL+wzgJMljn6lWaYTnmDU
DJWvCUO7QugCUM3+wEnKA/ZLDAYBKpG1GzUS8Hc9Z3FOnIqfNQRcRqc/XPSR
C4FmyRP0o9cX57j7TRukz7r0ShQFZRgZyQrA/6FjJow6XKQaA/sMmKABvzRL
THDHUdXBFwteL64qzhcAIWDs0segxdICpT6jHt9BqiO12BdnBokeNZbCDHQx
AKlamXWAbZPAC1eJMmrvi9NnCFFBA+HKgWusItQeSHKk+sZAZBTkogb7Uww6
2qk8SvP8DQAJUBa8YQ4QXhjQCL+GpKRvkB7YFjRiAAGbNGcyvOmbQVUjrHDs
kDXNkNHC6uKYRB5LHDJ9Rq9OPPWjpYARCw8MK7RGWU9lsW0xabBYzhUvErmu
WiCZVMLYYLGIfgDmudthb99JrzWGi8UK4BdeLZADeLuNc4udISqwFktK1NId
tAz4lCk+S7CMOEHTnowOYoZ2dlliAZLRgTZeCcUBKS3zBKUMmTEkr8GABRpJ
PZB29HA27EdHF6fmiLCVyQpjUvH5RVUJDORlZZBkeTwbnfwQS0Ek6QHSNLEB
lIRuNsOrgShzNr8DKkKUkC4Lp0styzpVwg2/cjq+nF+yg9gqANhuqpbO1LeS
3559OriklnTKT2MswQGC7UHOChACYcTI4PtOdJItb8YEroNKFKA8AVWeXumW
u8YifClyd+f1y92+E72IdPSQloAJbZmTkWQeaIoObA0Eodm9AntwGKgKpJrg
Q0UCB3KBUQ88VmU9Hjgt0Q6ZZJ6RLvOhleOpBUj8P2UpAkKG0DWOW6KjNe6H
SIc/NFJDBYC80bQEIMx6IXqiWA6rJakd+kZP2PbxMUZUY9Qg1nvdg/6Xhvw9
Nd43Kj1ZQmcCzseMFtxluxLCycwQerQmeRZ7lget1bMjrBllZzIHGe0/2vrg
cbFNAbw0R9qDSWdpPkYXAAKH0jxD5U9IG1UQoIyJKpEiSOo58WUoCxSXaXJD
BBP/CrSTkWlknmpwQeupsDykXpol0xm+JqHrY8AiqySfiQKMIa4tkEDzlQXS
fxHJwmh5BTooSD0jpQLogicS/BlJ4AlJnA7Fjxw3UqKINeBexlfIlEvDjBC1
iNCKNWB/RCDoKp+AlbTjafS7rMKjzuhWL44a5Pc0EHzOksUzkJAaZCnkwcOd
JNeLt8kG+lhPEjSDzBZYf+MVus/rEo8Xso5CnGpmP0HzLBT7ptBNGa+AKyQT
mKzvOYVC2w89B8UExG/Fg0UlBU8C9aFlhUs6EGDXknRJ2LvO2dHR0Eec3qVX
7BMSbVt0ahaVzj+wQaFGVpdXxlOEY6Ffh5VHGADZYOwsB9J7W4o2Luirr/AL
Dl+IfAC5sM7qMLxUDuxaDR+wUAFAEw3QlOJUXWgQhrBS4h+ybqtReNLaGXZw
8vmMe45GWsoCVUhRAszE5jXkHJ7riaSld6T+3//5v8CBrzNGeYLUzsx2jmo7
6h9izGzGv9jy+kah4tdnVikIm5ooEAcr2KJDP5awC0vFqJ5OSZfwFc9FXSLu
UM+8MpaZh2drUYC6UpE+unIs9CQC6mUKU/zZkTfyYRwXuHvicpo6bZANsmH3
xqPjv2WK0cYQpTp+1uR3fSD4BE4kMomQeQomjP2WoIV6Om2yPox+JbPaxEKM
/hQhbn1aW6pS+JhzdFqVhBkqOwPJdrIqMx/wPINVzFUZhlsUMi4FYj/QAi3N
iMZH23oMBGm+2O1bl1boaUX2ep0A3G1B0sCFh4M2UiQ2VAbLJ/4hcoJH9tzt
xlVB2JuSXpS5+OJfa10T75OD3aeFG70Nlm5XLGLXD045QehB0lTcSabwgWm7
34hfG8+UBXlq/fzsYTOUutav16TYko++ZmcGSDqkg9hFHjznmR96w2QOI0Em
uG/8RTTG7LO5Mbt/BU1MbDlVjBPYvmLF/tAORjQMrS+iF+vJLsm/lkbXakUe
cUPGOIu+oTAmK5fu8JtwmV2oIUQgL1XMatFYnGGHY6EDeZd8LcKubAAaxr7K
0yvRAUCOTLVCiUmYNy5m41WkMDz69fhQoyO0JjUXF21Pjgr8vLIvGGmsSZAf
6UrcJ5ycALt3zECVzGRbO1log7HA+/L2Lfw14Gn5HfJosjj7SeScL9Css5tZ
qlOyta48xwQsGXm2oliCASdDrpk4dYPVZCdQLeNserJEtjSdauvFp+MGyPZ9
GYralufEjOGEBW+guoX2gi7ACtCoHBntqfRFWp3BkDkoyqgRukCeL9hOJWLI
TBf1dh2cVKL00M+UVGy51mXAIQpNkrpjuYC+aw3sEIU8bA0r5oHFKjIJSH6a
N9RpgxSP95DxgUcSJS6Bk8lZxuPV0gJImXH+S39fxBcjtnFgDF9rX50FYiBp
5Awl8j/SilAuk7pZaoyDV9qJbYGgzzCBuodIKeX8LfLYixFTeAN+pRaFnpM4
ZxUmnYbWnnOOETS4TvR3kzJlgTHrNZH7Zuy0z0aykR0lyHyMjRZEMBwDZQyw
EU1WTy6hUWcIz/Oy2nQybvfvBspFnnlYuFltrVz4AlXYBmVM6vL9ey+OZrix
RZ0RfSTWvG3ootJSNOyAxknncKZKUgAd4XpY8UZ/zCtXoYAHKbGqtwv0sEnM
uRfegesImrIXum80Rjq38BrGcVBTBKbgR0Y8I5xsRFZ1PT+tjfKCsZhUwW4F
ltppRnYrnx2GtpzndRo73iGYdSF1n+hguzDblix5xBfZyEYDGbNlUOiUIqcw
QWmVh6bR2AR8GP1krVvPm98Qax7imInBFGUi/DrNVWxTVQJme0V+hOa6yHaW
LbZaC7tC5dCPXbQGYSO6F6pubDkwLo2pMoRv4jJmYaXkKohvif0xFuwS+K+x
WYJwLauJgm50PoySBZjCoBX37VJCT6nLKWHVTMde2koDXoGJFoTkgiZWG+4p
xT9LsKfJxyJBETwOQSx+nFitGVScZ/ifMBdJ4HKpEEnLkRmAh6odySMMNLKv
ol6MkZNNRXcTZ6oQnIQU+kb1iHIQC+issPlK5GXhYw/vFijmSrCIbFpSaB22
XSMoyq8VWRrmjEu8AqUdDx8IYCN76XiTve+cj3i2Ma+n4rjzhOImoDP8mNn4
clJ63pjAsUfcYkaGoY5nNkIVwIFz6pslYrIio89wF7HECIeZ1vE6F1kjB8U4
BdlEfc72Os2CeAFY0PKiQCz53S0vYueRsYHyqF4SsZIG6q/BWI7MiJFKYF+T
hZb5rIfTY1rooSDpi0fjENUIk63RD0SnRMskBCs8WLSLLjy6DZE0GLQ3Lc5o
zYg4cz7ZT0v5W9qgCbb1GTM4QrtH7W6LXMIFDEhPF5pJtKQ0SA6omeW3lswh
HUW44iM/V6TmLnLKExL20JwwMQR5TRxftsbxPXZTB8Ftu+nGm2Y0+jClxdJ7
20PtJ5qAPRXyIRj1f6//4dTerwdb/3zNb7yLwh84PeZEN3/edb+x4eddjwDi
X+5jB6X3YeQeBdhokpPGkujpUXOd9OmxzPduRxjcrgfmux0TvPJhf7djvB+7
Hw6nwch32/x838Dhxf7OSf+4/3x3Mw4bsGyxs5vo5O1B9BVwkIGJuWGu8Hf3
WlLv3vte7+1b9yCmyaZpTU5kylXjYG2HQtfQbBux/hPgBujcFFtC3E/H7Fxi
CW7CMCLhh42guA1iGQFivBBwjOWYNoIghlVrdDtIagFWPV2coyAJw5In/UbM
5mKf7ONC++r8JE9hgOfs0AgX0dL9WSIpUodUxayILV1iilb0OJ9g3/j1yQ8p
tggh80Q8Wldk/ko81x5Y8fun5O88ZaG7yEsTWEf9vWN1zODIA1bm6ZUfp7bS
6d/wz53RLvljdo53o++HNgpDITxWR2F5/BwbDfwoJZmsCfWc8IP9wMVvPI0i
eoLUW8AiujVKX755mz6MTvJrZOmN8IQRV5KHLI5Ml6i5Jp+279OWnz/quwI0
GkYTHSLWiACQQlqiyJQvMYOVcKjUZMt4fpg8cImCATIVzd1ZmbR/QFGcubFy
5o1ghOw7Rp16QzKmYHmN8fpFUtkQvYTUjV9zwuawC6x6SQQ0o5d/LeThEmxq
ce6tzAq2MEqMRwvE3BEmFF7Qzrz9ioxYGpaK1t9/WqHX4NqNHz9rei0jvoP4
k9dC2cIwfB81xUvj842CcLBOFm4jDaN1AnEbkdgCu/F5Uy5G0c6+E287D7y/
H3p/P9plgPk1f4Yt/javvTu9eAwCdTiEVcnf0cj9HXx+vPvuY2cbvTrZOYZR
+zDq7X/b12jf4KP/8S7a4u/wtbPvkl3z9dl3v3p/v/H+3vv4tZ1mmHSyfFMh
xm79++Nmu/vx3V69IR5idJwLZnnXKn0TJa0yCVR4uoonhK1fWMOCK0Y8Kemy
k0z1jTh4xXOxktRfI67XpNXvALHs+klqQ5vFZKMbc3Q+UIygsUZ2j/mSXVxV
bYPV+mudzmPEgKfKYHZgQwlLShYjKWmAtHxZyuCMiia63XMuo0Z0gzCJpu/n
X4r/c8SaVPDi8W4bSlENfSA2aYcUKVzomPPuyDliimI4zUCEOrmCOnRGCUmJ
qxS1WbTirzHJhZ0+qJ4YP4qoNvT7Pq7RfMEfHVMinUhxdh55mSPWfYRFvJoT
qYIaBZvRguuV/2A8Zqxt/ouzplvpLgodQElHhk7O+SKU+cn6Dte0aeMCkZiF
7GTixVPGRUO14OwZUvpHfUkdkvc8y7cA/YUShi6NZW2UJeOQaxCBaIWO0A05
wHH5k/EEmCNZFBRNQb1UctEInlhzzr9Y5I34lbwclgDqBRo1E5sd4Kn5Tofy
kzx4qaTEjayXO4wBGmWOkYJbaJxyHtFax19hvMeSLLcecqFT5fI1THqZ8T9L
hAHTccmXKcxibLDfyr30FyJaZkIZG5kLEzUjIX1HJjyrlPRkhDKGwAZoqOLb
IJMLP278XGYPRKvLkj8LvskXaAskFFYxajDH/JlSJJXBRMRpEcgizFp9MqbM
RDYBbipO+mNIRfMXKqQMTI7tNblKXyhB0hPvWTl5bw3nbirxHEtXK/TRN2Yn
m9kEaQDy0wsbJYSvjhEeEFywL3iQXKIuZlcPUrWi0jkZd+rcuDZmc0FIf2bD
Q6KOS0xprVdrQ4AJHkpmmTGUyMRaU+xj/KhdyVyUw8pJLTYcz5adcUaW2psU
kbVldLEzgkfCByV2WB7Lh43T2PxTF0a2y1adKuUAhUm4Y0kfYQcrWk7zfNkR
fPZySyUtytS9RM7S9WOHAeptFK3y942LPkwcyqXfczZXC/nsRfdIHCBdkxFi
I2bdaE1Kw7z9lZjoVFkjEhMqfkFaKetCOydAM6cAIJhlOWJ5hzQuI+JsfZnR
wTg11Bj6Z3paRSDmgVhhkj06xxzKj/1wvLAcEsmNGukdroDWfqTUphLB/1+M
LqJpqq7yYpfrRJzXLPbOP+6V0dlm2D8Ns+fsMGHcnVK4rnNy7ZcSBgfODigk
Zz+FFbHhQMGueZsz1tT3jGUb6l+S7WpS0GwKh3mdE/i8AJnBBGuI22XLiTO+
XJO/AJ8CL9aqoJrZLM8GHgBNdZFkJnDLmEajLCr0Ms4S9O97yWCnLw6fHw9+
/OmS8ugzm0IWrp3UDo1JUYzNIAPDllLkxKLGQBatdAecnac6PSc/FmhlujMR
xqvvINDVZJKzX8tmGd/YY2HVMzlZZjE0ipmvnR3rnEAWE5xEMCUtmx1i3Zi1
brHm+7RFd8aLrfkRZc+WVNiBqYwA6w68T3Zenx2el7usodbrqgrWYINSQows
daEaO/w2EZSmj6PTAPVdJtGGn3frnjTJEbc/uXnM7eG0P/8ris5z4i6Nsfzp
zQavf8L+XDWeCEIza4CBz9/xtkW4ieZv2MJ3+KR3+N+tHxDBcE/23Dffe+BZ
Jupg9x78LEjfyjvB2i37JX4Q/m9gFU+E4wj1WGS3aLSuktgur7uo86DXG1DP
Iyyrw+fgn0ccWrD/HlE4dLAAKVis7KcvVfnXWmOfE7Yb4cPeMaZB2IlILJl8
CJQ+oPXCMkBYTDh5AFMKYXMSCsWwFkvaQL3AbkR/c+bpWKMRTbHcjtILv+Si
1CkgQl6SzJ/ATGNkcFFpUB3p8zkrZ5s1+hjTtRCQheCnzAAbDWuhQrRL7LaZ
GHOH4O0WP197pyD4vfUI77p+v1x30LcYYUS/1UeMMKff5UeMoOj3Xz9ihIJ+
1x80whH91vb3XUZg7K3od2whucsIFf3OGti4ywjK+72wkNwdhoWHh+SOIyTe
74Vd0V1GmHi/h/R7ZoMvW/ysP1ktwbBGUnSerIjCMBEJIjYLSvvFaZZiyhIZ
FOb5i9bvv5gRPh6G5qPtYlo7Y/h70InJNai9DZPULC5SYL6hrGgkNBnQzr3f
DpJPtpuX5BVRhVib1DrE9GxrwNDExifDQ2Pbjg6DHGn5uLUX54eXn4seLtg1
FILRSQ+fiiZt8xNpAIBEz6Y32cQGEcG8E7TJ5fdnOhcGiBjUjU178TnP5oVx
QQzINYlq2G8Ow6XxHbqQy4a9+EznAn+sY9N+vIZHEadlYgKl8IPxYM2fYITT
i6tH/ggbYOhcxd1g6B6BnF0bYfhEPGprK2YACr2XRcZ6MSv5ZMmc59h4Et0s
dSnNXyQD0zc5XO7rOK/mocft9fmL3YZzgjNKvb4HVu1G3V9yS9jusW7twJk9
KOnb9+yjLz0TyVUktIsjp66e0Na+Bv54m0V/q5NZAqomzEHlReJh8X1fpqcS
1vrHXEfGcy6Vldm4/HwpMyUcbZCgAJtd4oExp6jPlAxrQWpi37TFleyfK+tv
5rOFBugC9gWtsxV1xVxgXK1Eo/P0/Pz41eDyLxfH2IfYgUQ2Fnx/fjI4PDp6
dRCdo4WLzm97xpXU8u5QPvGU4l6Z9NdjyMnpA6Dv4kTGFXQQneWBe2mNy4vd
bx6B2UFOz9tj8KY0+pps9HvBcM8Pn58cHzTdf0yzNtBl2l1sMaQfCDBhdVCN
/ztPNBwdHjBfkD6lFoFEK4jFXe/ps9MR4GrkOe4xCRFf4No/GkmGuIU0iGxN
mGFK4SZb6uqB3th9ScgmJLRKzz3be5zXmdT8LlVCXnFbCez7ED3L3/ocJcZC
vIRforIz5j6AxlT7nmJ0uS+pAEc3nka3u7P53awcrpbQOVUZwf4tsDMWeTVs
2ZAX+uDtr8tmd8txMrBzcgyt4TmIIimVlio8m7wo3gxco1Ggnuw9GO7/z40O
UsKt85KG/leJWXrRBVOU7DcVqIpkNqMQl0299xwvlo8ps+vXc+wP1oiPUx8n
XXpZHl2cJuDMBgamE47bdHraXW8yIbswZJD5hOr5uT3e0K4JM507GlO5YvjS
5af4FpWfECQJwSvHBZrxKtkAPyLB8ijJ+DzY0hY/Xt722XfzrUJXdUEis81i
DJGYdYYT2cVhc7xFwFGxXKPrNHfuZ5ONDKM/ua+CvsV95ldcry21KEQtAZOj
uHezvQaGbzMpD6IjdRLtVGrWdwm/qZ5W9p+RLcAx/VB3JTDEoHoSPmxPYPK7
/S0miU0Ru7luwdqRJkLljq6RheHd5pQj7LTsdQFOjI1PK110HQMEY4wpR4Za
+gH41NHD9RtrRqNCQL2iVL+kUqrKCAMdDTmoNp++PAERT1drRFcqrb1WVGPt
d8MA5sliyiU/Z7l06xLCkbw2PtbAV2i8siOaBszov5W22wW8QAicit7T6iJm
qqJNCwHTYxDRlOUU2SsSIxoyzzfN3UxNbv9Ym9Jnhx4vVMhMrdBqwbFa2gpX
A88jasoKSFOXsUXJG0hBlLdElWHWOOPEDolxcpRAzGdNDdbsflNhWkIx2k2v
Gw4QdMgwe2U75pmqJTkAjwakrrnGZ6ZjI+ayGEFmUxbUWrXCb0lF9X8wqFfg
65X2Kap7Q/ovWXwzYFTwELTDMg2L1k+Ki3XaRp0lf6217Snu2mVJ0pTL1lFO
I+mS26ZCwmtS0M0puXVQkLDhOETgIDOjpniUjPpP+ShY3ob1Hrahm8fcSub3
ta0a5gjFGmwoL3aKKJaeQ0ZxCrimKaNli466C668ClSbg4DJNAD7M41dJrA0
JzGFx04mtRIWgjLuoIuhH/OxEsnT6JSXCRCQlCo90ege2THSbzeyVoddcBeC
LPGZPoPKGLe36XP9oJNAe2yqA21D2E5QtbhzOuuww5xdf4o77SPJWbo3rhdL
Q4nXMP69jjrdKvSisiDg7FZjzDHfMtnDHTWTUj/k65Ji7nlBOXzMWa+OdmzH
yi4RKrUojaQ4srk1riVQX1lP9JK3XA1U0NI7Td7ozr7EnFeaX2eOudPAUmWn
khRTrcOmAp5dm6DhRblM1jDfZaknlrKzr41xU3L5DlBTvVhQEjBflIS5VU1j
uu8lGxvxHqLJeGE2nQ3yq0jRzkWp6zinJOgux4op3vnqK+eJYTcMyV9aOF4t
aSGV5F2PNIxiJXtj+r7Cgk272lV39hEl4ve4gtY/CZgEi7Nb5AiJNYPqS7e0
pOyZsuVbIrijvX3QZXEJJPVOpHn5hO3qt/D9g2FEptxOmI323XeYh4YPPByS
V+8C32JZ5mcZUiqAKJlBR7ohvPoIX30Pf3xjJmkoXf/2XbTPszzmWUaateTT
5y8vokssID++mXCO9wKmVDMrskasxIpG13cxueeIob1oB703JI+wtxMPgQBy
h9hd7wW6BbSol5XZ02C3Y2q8hH3vwrX9waztCf6xUDf/iemD/8kE8F20cxLD
lgJuzgD396MHu9Eg2oenvzWY2DmjE0GPf994HxMA/SBjY2++j/yXvwYU7hIS
9/c6kHhhDyjs4DjVizsj8tg2OJJ95k5XWGtQI+p07GPzIqczavgAzRBAT29/
LPr39wX9+0S/eA8n95FztAVSfx+ffBg+EAJjHiJKfZ4vV9YFhWUbPwcP/+JU
AGrmTIsz6+hq+9fV8G+0b8/CT0tsgc16rjHTkPf8CxyKRw8B78IQZHPlhLzS
dAtuFTgScjfRIo8xfV6KRTAjnS7MhWccyvngXvvyCSEzJL1PJH3B5oJc3KMD
q2S0T3Q8cpCwGBNALCtbB8wVXc1GP46jW+8QjP8ASPn9rd5+ZIY+Zx/oaj4A
Vc46/oG1etTEHcYa/Lfn8IxxAdifgwb6vRbMuDg2FLk1LyuXp4fnhzT4PfPO
PeGFvXvmimE8fWwznZMaWt7Dslu8hGk1bAsZnKeDPEiT20Lw9NqCp73wbQVP
LxA80V0Ez92pnMXRhQgYaTb+szTB/QUOJyeLPxruD/dZNr1nObORWlH+fDyt
dlLqB5Fonc4NiXagp4Nie8HGhRTboaA0lEtxfXqmSbgQzNjNjMrY85XWl4fP
rUZmgj6ZtAlQnmJnnslIoa9MenrP0+ZcMvIGteZO1PXKtWzV4pXjU9BUg60P
kelL/Nb+G9I2UC+W1copPa9cN70las90cUiBlyMDUp/P9eQNEKQ0f9p58Xy0
a3WegBpDx6vrvnDiGHIogzsEB9kAzOlNdMUTodsJHzeGJ+Nt8OXnvV+8ESn+
dWK5jpF5Dorw7Hpv+vKz+1U359CohqMPFGm+BCZNNJRoqFV+oBQxjm05pqeh
n3srSbL36MBb63/8vPcfvzRrqjiiYXsKe5gxveullKEX5iO50jWbhS4FN9IX
1Y3kVahJiXCvcY8W7RTrdAlmqnO7Mq4964dPosqErMKpnz3xc7pZpAkZvpfq
bFbRHW8ePIskA1WSpYP3sbkOpWcdHISWviUg8ZfkXGJnXdE+pbb6LPeE8juJ
driFHYiW729oA5KhvY39dydG+cX++2L/fbH//pHsv0fsc/uHsPxakDxaC0me
bbD6qHJP3IofbgEmy6tHdzcBCdldyvRvaoht4P6fzwgLSO03Mb8+gGBuJZcP
o5OPtcPWko0EH13F7ocaYIHx5d1ThO2hKWPjVgPrIyjnsxtYjivj85eXZ5wk
Ef9al/zRBI0szOS0YfR09U9kZJmz+V/LvKKj90H2lT1vX2yr351tZWh1S6vq
8W9rVT3+YlV9saq+WFX/5FbVPh+Vf0yzaj0kv41Z9fiDzKrHvwuzah37/4xm
VUBrfx+76naK+Sx21eNPYVd1001DRfhiV21jV1nm/c9kOZnj91/OdHr8wabT
4y+m0+/AdNqhG712ez7lN4mWK0VNS5w1paLSjF9qRWO/f44pzuF7cviG6isp
xgg4LbM/r6t/qlWRdRYvSR86Km+iTMzKKW7N6hvTwIzbXHlVSV7b9kIPmtVC
t9cDtdLqvRW5e8qy3BTpeHP7d764yg5KlS4rraQIJXY4N6mn1PU1z+zduBPF
eolrOSTSRy6dN5qJd/f2TO7N/GmZZ14y67aVaC2gTMtQvwCFZjdNann/Gnel
So86vLhBmV5wfJ9PK/PfFkZRYYBwApPePakLyq12PR9FMPHDKAxJHMHjNqPc
tFM089kJUGtulVtetsmP6jp1ZtsimnMW1HESsinru1VOKzno/noSI/RBReEa
i4zqhYGYQBq6amUsM0iYSCJTPtK6XsTcyu5dobYxZznCCzKxpWCaZG8GTFm2
bSpfNp3JxxuzeZRX/2kvvIWzFdR/h9sZuzv0WhchdNSiv7ftCF2jUC6xLfKl
9FCkze6s7sGpsRkinGxUck0vZiqL7czb/jx+oZA9UjvcynAoT5FrIKT39u26
FEPsktnxrQk/vX+PFNr1vrGkcICgR6KfitcPK8qt9dLzNM2uunfToNl29U6p
mzRYotz2GwzRzfrpznA4jMRwBdN1l4zYfWvGW8UnVBrp4rANimxoKLe19GFv
R2zkjVbycLi7ncoku80I38JqDagDlaTDrHnBLlfBVaBG/03boyRd6CY6xq6w
Y7wUZ7lqXiGMJRs9xx6pkCcxVYSu5MaKOsNeqcN2ZpUWj3MNe4eeR2ahilmS
GT0kvMJb6q+46Z2iOraJ5folFZr0bGkWNaAdTHKqscbLCInA/OtFlxE5p7hG
U0ruHKcdveo5UWRqkKj8sKQr+RzIZkzssbNQeDNQZO9PdwvoycpEh0NeLSXe
eNWRt5DgZkUc4wV27jtTY51Kti4jp2ea8147OWg4ksG6MJlWeXRzC2B1PZLu
vLrGrE7txAoxc1PSeNWU1wRIUvWC/qwdB8wRh08Fv5lbpYN7+t5qd9METN3j
qyK+fYItxAPHRgfArVzVfjN0Sv0Q1xn9vVuN/s4SrDVG//ps1Q4xQdJyU+Yg
8Pc17P+RewSXt05GeOOE11CF3gaUoFzm+JIb1xhzQYruOpra/B1aydgJzA2i
pW24Y3p8+moMbZ3chkw9OcOuO35n/DleTNBhr9CR6e74fT1PgN290Xophkyr
bQE7xKPoT1rqAG27cqmSk2LUsPcFwBZcFOo3APKvbqbG8dVqSX2H3dXw5jIG
ahEKAF7J5c/ecMrYo3i4c2kP4N1E5rVQBmCwyjd3GiDb10nhqR1uOKakoL9q
SEiLVuvVu9LRXUjnA9sQNboeSMsFNNM7uxFRYzlRb4P1+W1FkozvbAuEdDCC
6dB6ojPpBN743vgIpmRikIuYjAo2icqaVFd9s7TNwLEjT6sW3tgj5v7Ay+cX
yD9+OrqgZkmLxt59gpZJ1Kj39p5Iv8t+R9tgZItOQURD2/b8afUNb3QBWuu7
oIhcaOUn3BsgWEOjG4FpltOsjOcbG/yC96bBij4C27EnaEZu73+1a7b6YQcH
ME0I5AyRbut1pGAcU136+pdxQrkjiJxz3iUM7uqJVtviy3m7H9CGQ7xtb6BQ
1WC/TJf72jlnOhZG17R7nVpArcKj7Wt3jXYpvBvYURssldo0dOma2J5cwpN/
Czu2ZGnIMY8XdrSJYE9vs07dd8xbOXjptDzjiCHKQ8t+vbPFbNpm9JpuNHgE
2sqaLrtvE7A19t7rrcVwAxOr6WFfrMWy4j4hNJ7BXB/5KaqtD/b27OXrQrvr
WtyU0oKlovtqiIU4oSfaPqdFEJHRpVmep9FeRmHv2nJobF71RNeUi4HS2c4m
aneJubaqi9VWzJR4wtkMZSz0yZVD0IvxTRkeMLfpPRvoRThfcNv6KRgRNWHm
CMQGn/wR3YsDLOwI1CzTNvSU58uF3tHFhY1jX8h9UIxRvgHbgzfsYlPaPpp0
a10nj0cApavxRsbg9aRvu7/UYgBoZkdO+ysyxOBLd1EN3hySoNZRIM64RYtc
FNTunrUJrD73w0CTTOOZGPhP9f/OjbcCXtbqusXXJROrpe5QekaeVDEjREn0
9MKd4yzeJcUWxJXPGnjHJfYiOpynFdpbkyZwLEoTm8BB0jx/Uy+t4OXRuhhp
UnoNkfjW9/Z9P2KXs0OX7pwTJz0yXrWeS3cwUc/ZGWjZHNrx/Z/+1wfRR3hD
19rz3TLrS8OJL6lx8vMlNe7vlBq315kO18VjzHo2pMN9/myy/e3TGHyes41P
vs2jfstEsnUc8sPcnkfh8m9l6mvzmnof6eL08pp6n74gfzu2v5YjP/xH48ht
aROe9X+xIk2EzdZMW+Jvd2XbHYzbvS2ZiBJm+2RM+0PZ9gcw7g/dp28lmukE
1sfkJN8lK/mOQuMzJZuhsPkQLr1lolk3p0Zt10cUGXpklDXymMTO6vVGxtzj
lALD3rvYW6D4ETe2d59a/2gPZoR/dZmNhTY3i/o5MF3bSr5FG8HtSE1zeYRi
5TXXzNfruOe6hQtd4I5efzZrY/yqF/JlFFVFPekK7+99K+H9PTNPYyuDZFUb
uerabLrffROpcIaAPVO7dL7CDIEt8z2bx6qpCDGT9BG884kO8LYn+LaEAyLy
55IIsI642VPgkbe5RAY3XwgYfRGcHaNKayiX7qiTf8HrhdvtDIm5Fb/1JLcz
1UqOk9tL7DK9KQHIZBi+95KnSEe7O0lTJOEwtpcGb0XW+4+ErL/p8pdsQdOU
ZrNdxssH6+OB/N0sDVAd/CR5NBuyaD6J4n+r5n/LsRiATh6rynHwQUgfbuOI
V6Oy2qfFm/Ql2+T0pOdJ+Ns413YODI4ArFe+d7arKuh9lPYduc6++HDPPiw+
L+Py+j1UE2xU2h/9oynt3xil/fEtKhkr4UTIet2BbXV3L2QzYsarAVYSdkT7
/lw1Bd/epuaBwIpeymUCnDkCLO3y7HX04/hXdOoymycozDc5fyOucul5iHfT
qQJJLMUATFERSZtrCobBiyKpkgXHPSUHClBGJ0HHQBmS50Cnhhodh9c5+z2P
W3HAQ8ofCPM7MFeP5/PTUzlzmM6hg6/lOOeYIoWEpM8dQMzB3nTV0Exl80w4
CObgy8fxDBd5StGTTKdWrPkxGPY4l37yBt0vsWZJctm16zYeooiih4w5usqc
QtWSWt3IVN7RwxkQ4dHF6S733iYENNFir/6+FjZkyIYRm9ibw2GJcYrQm9zj
aV0Q2vD01aX0y1fwcYU5kljEYaOMmP+YT2pJjkdd6selwh73djKACGnSe1Di
Nc5Tg0BLqKTj7aHtdg8gJDc6Hkjxh8ujccRscjMwYC5Ie2lp+jzneNrSBLYX
sOtMzj547i4F0GlwxSZpvpnNWRSJjv0zA592LMBe2uHEGuc4Hdxyde9e1P7Z
7/jsQcdnD/H1ffjqYfQo+iZ6HP0hehJ9e5fPel8PPvL/zHVz1DAAf/jfZ7x9
0dr76+zPu9thuHWE2+a47Wf9CE0C+5wwfPxebBQq13gfCSn4uFcHJn+p0SB3
CN/z5mF/XfxXEwX4eZRPKs3iJOfDQKeDucP56ASsLTw4xR05Q+PNobnQq4sN
tHZGnA0UGAe4XqsiQbNmIKRon1NlGExGf/DDvb3370mWIwgvj5icH/Bxb0D1
T3PUtzzaYFDPyk9Gwvfv+8ve9vjZn/v3f3/HiDSAvFKpV9GInyGFw2OEvwPY
pnFCORsgwaaE0kbaQyiIATcnP/50duTd5bBHUs3XRVHyv/xpdEmanSTVm9K2
ZdV9uJW9uqaFfCT+u5wep7uqGeusZJurmavD8u55C+61m4GySakupEl5lx3J
lH/45hG5DE4zJ7ZvKi+bA62MWaEWC0rGINyxJ9C/zwWQxlWtmMMD+tmiwUso
mwH0PEmhwZcGlFnMN/KZJGnndlAzb0xldDnMM/OTM06PghLLujSX3ziF0pQO
UhIUI2tFqHJlb86KMteEMCVSbaErO7N5DWBUnIbFMtj7py6FP5fa5QLy/ahS
wrcsMAcHw/v1GEhjLu4vgBY2wuzx4JDAts4zdq9xcQ4vCV1rJmmTC58lH8fe
M2ZLebw7asYaqzXypc4GkkFmsnXoCJ4uK+TxZbSzP3w8fMCXrCgs3AU6Ob24
PHx2djx6/x7TY6fmyb3hk+Gj8MnzF96Towyhevt2dP7jq0v4BGnMeDz6pH26
hLl05SWQnyVZfRO9wZzbtG9V6EfD/T03G12l8uJomOTR64sLzr9m8vcsDFcj
hPcdFRzyNKTBGOd0lGeSilQGN/fYFFoUnVcqSSlN3cYBsFc65p7VZfQclP8c
NqCIaffIPMmnFf0DzJwK5RqlkbGxsAAG0nLesBOSU8LsZGg6+Hsmg97iJ7mV
u8vP1x23ENt/bT0KSy/cBfsv3sHI3IG8zX3xm2F5F4UK8Miv6g5hObTIg3+d
Zsy/0PZG1XJ0qxrtVrTmXzDKq+Czo6BaaD0swb9glKtPAstj99moo/bFvhdg
ooWX282LbWDxPnvZdpB7723Ay6ehl02nA4N/wMOEqZpo34/eMWvUQpbE3iPi
exTq4xswngtb4asHhX9zDTon/gVcBa+WGhzR5WG6NLnROAz6LlLMz6iAJ7i6
lejemsHuUdK9uUyDGHs281xyVb4coEBNYQR27Q9MSi+7RS/kgk/yv/D1xLsu
IO5d1NFkUQImrvYWFf01VSHSzxHFW9iLsPnnlZYiyd4W27/hp3f57HB/wAYB
oG94eB4NOhSCHXQkXuldmf1n3KLh6dEv/PoD9/oIX1/Db+xP4/WH7vUjeH0d
i1j3+iP3+kt4fcNh6nz9m1tfJ0rAcG3X64+3e90EApuv/2H72f81nL0LMzLL
bX7er2wc65UQuzQjAV37Q8/f+gF/szPyoWcCd+KBnIEuL1vHvj8Qmm9a6V1U
dstmYEJYXSTVqsUjJS+cv5SLFDmMzRf/SuC21acBTZVHew+4C4G1WyRV3SWi
USI5Ku5yv17ocW24T0wIKkHvdVxP2FeOLmAL4VWdYux6nKSgtVJiOyzucPIm
y69TdOUT6LwqVVdzTMC/pkpovKCQQVDZG7RZNLpanufkFe5H/w57kYE1l6oa
nlSgzZ7lCgwk9KuXqB3DnwUA8sMQJSkYC/BJXCTwzgvYGdSKD1OwpfD56DWm
jM8rnbCZ+sccOP9LrM5T6RJUaGMBJAXVhpOY5VvSK1OFM5thXMW7UNfh7P8D
/Ge6DfHiAAA=

-->

</rfc>

