<?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.6.17 (Ruby 2.6.8) -->


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

<!ENTITY RFC4303 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4303.xml">
<!ENTITY RFC5996 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5996.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 I-D.pwouters-ipsecme-multi-sa-performance SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.pwouters-ipsecme-multi-sa-performance.xml">
<!ENTITY SELF "[RFCXXXX]">
]>


<rfc ipr="trust200902" docName="draft-ponchon-ipsecme-anti-replay-subspaces-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="IPsec anti-replay subspaces">IPsec and IKE anti-replay sequence number subspaces for multi-path tunnels and multi-core processing</title>

    <author initials="P." surname="Ponchon" fullname="Paul Ponchon">
      <organization>Cisco Meraki</organization>
      <address>
        <email>pponchon@cisco.com</email>
      </address>
    </author>
    <author initials="M." surname="Shaikh" fullname="Mohsin Shaikh">
      <organization>Cisco Meraki</organization>
      <address>
        <email>mohsisha@cisco.com</email>
      </address>
    </author>
    <author initials="P." surname="Pfister" fullname="Pierre Pfister">
      <organization>Cisco Meraki</organization>
      <address>
        <email>ppfister@cisco.com</email>
      </address>
    </author>
    <author initials="G." surname="Solignac" fullname="Guillaume Solignac">
      <organization>Cisco Meraki</organization>
      <address>
        <email>gsoligna@cisco.com</email>
      </address>
    </author>

    <date year="2022" month="October" day="24"/>

    <area>Applications</area>
    <workgroup>ipsecme</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document discusses the challenges of running IPsec with anti-replay in environments where packets may be re-ordered (e.g., when sent over multiple IP paths, traffic-engineered paths and/or using different QoS classes) as well as when processed on multiple cores. Different approaches to solving this problem are discussed, and a new solution based on splitting the anti-replay sequence number space into multiple different sequencing subspaces is proposed. Since this solution requires support on both parties, an IKE extension is proposed in order to negotiate the use of the Anti-Replay sequence number subspaces.</t>



    </abstract>



  </front>

  <middle>


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

<t>The IPsec and IKE protocol suite is very commonly used in secure overlay networks, often interconnecting thousands or tens of thousands of sites. Each of these sites often have two or more ways to connect to the internet (e.g., multiple fiber/cable, cellular or MPLS uplinks), with the promise that leveraging the different paths between nodes could bring greater throughput, availability and quality of service.</t>

<t>Such scale and multi-paths requirements conflict with how anti-replay currently works. This document first describes the problems related to running IPsec with anti-replay in multi-core and multi-paths environments, as well as their existing solutions. A new solution where the IPsec sequence number sequencing space is divided into multiple subspaces is then specified. Finally, implementation, security and operational considerations are discussed.</t>

</section>
<section anchor="problem"><name>Problem Statement</name>

<t>A common approach to leverage multiple paths between IPsec peers is to allocate one Child SA per path, but given the quadratic number of paths that may exist between peers (&#39;number of uplinks of peer 1&#39; x &#39;number of uplinks of peer 2&#39;), this shows scalability issues in both IKE and IPsec implementations:</t>

<t><list style="symbols">
  <t>Increased number of IKE negotiations and re-key operations.</t>
  <t>Increased IKE memory usage.</t>
  <t>Data-plane performance degradation due to the use of a larger number of keys.</t>
  <t>Data-plane reduced number of connected peers, due to a hard limit to the number of supported Child SAs.</t>
</list></t>

<t>On the other hand, using a single Child SA per peer on multiple paths comes with challenges related to the anti-replay mechanism. Packets traveling on different paths may arrive out-of-order. A packet could travel on a slower network path, compared to another faster path, and arrive too late for the anti-replay window to be able to check whether the packet is a replay or not, causing the packet to be dropped.</t>

<t>The same problem may also be observed when multiple QoS policies are used: Packets may be re-ordered, and a lower priority queue could have its packets arrive too late compared to others for the anti-replay mechanism to function properly.</t>

<t>Finally, anti-replay implementations also suffer from performance issues when multiple threads are involved in sending or receiving encrypted packets for the same Child SA. This is discussed in <xref target="I-D.pwouters-ipsecme-multi-sa-performance"/>, which mainly focuses on high-throughput IPsec tunnels, but the problem also arises with small tunnels since multiple inner flows processed by multiple threads often need to be transmitted on the same tunnel (causing multiple threads to need to access shared resources).</t>

<section anchor="solution-space"><name>Solution Space</name>

<t>The solution detailed in <xref target="I-D.pwouters-ipsecme-multi-sa-performance"/> proposes to use one Child SA per core, and could be extended to provide a solution involving one SA per path as well. But allocating one SA per path, as well as per core, would further multiply the number of Child SAs. For example, with 6 paths between two peers (one peer has 2 uplinks, the other has 3), and 4 cores to process the IPsec packets, the number of Child SAs would be multiplied by 24. This will divide by 24 the number of peers that an IPsec concentrator supports.</t>

<t>Alternatively, a single Child SA per peer could be used with a very large anti-replay window (e.g., 128k bits), in order to mitigate the risk of packets being dropped when packets are sent on multiple paths. But this solution has some serious drawbacks:</t>

<t><list style="symbols">
  <t>The window size is guessed based on the expected throughput and delay difference between the best and the worst path, but the best value depends on many factors, and hence cannot be guessed.</t>
  <t>The window size can get very large, even more so as the throughput increases.</t>
  <t>Large window sizes cause performance degradation and scalability limitations by increasing the amount of memory accessed by the data-plane.</t>
</list></t>

</section>
</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>

<t>The key words &quot;<bcp14>MUST</bcp14>&quot;, &quot;<bcp14>MUST NOT</bcp14>&quot;, &quot;<bcp14>REQUIRED</bcp14>&quot;, &quot;<bcp14>SHALL</bcp14>&quot;, &quot;<bcp14>SHALL
NOT</bcp14>&quot;, &quot;<bcp14>SHOULD</bcp14>&quot;, &quot;<bcp14>SHOULD NOT</bcp14>&quot;, &quot;<bcp14>RECOMMENDED</bcp14>&quot;, &quot;<bcp14>NOT RECOMMENDED</bcp14>&quot;,
&quot;<bcp14>MAY</bcp14>&quot;, and &quot;<bcp14>OPTIONAL</bcp14>&quot; in this document are to be interpreted as
described in BCP14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

</section>
<section anchor="solution"><name>Multiple sequence number subspaces</name>

<t>The problems of using a single Child SA on multiple paths and processing the packets associated with a single Child SA on multiple cores both suffer from limitations due to the anti-replay mechanism.</t>

<t>As a result, this section describes a solution which modifies the anti-replay mechanism by allowing the 32 bits or 64 bits (with ESN) anti-replay sequence number space into multiple subspaces. Each path, or core, or combination of both, can then use their own unique anti-replay sequence number subspace. The changes needed to the ESP header and IPsec protocol are described in <xref target="SN-subspace"/>, <xref target="sender-spec"/> and <xref target="receiver-spec"/>.</t>

<t>Since this specification requires both IPsec peers to implement this specification, an IKE extension is presented in <xref target="ike-negotiation"/>, allowing peers to coordinate on the use, or not, of this specification.</t>

<section anchor="SN-subspace"><name>Sequence number subspace encoding in IPSec</name>

<t>The 32-bit sequence number field of the ESP header is split into two sub-fields:</t>

<t><list style="symbols">
  <t>The higher order 8 bits contain the new sequence number subspace ID.</t>
  <t>The lower order 24 bits continue to be used as the explicit part of the sequence number.</t>
</list></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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               Security Parameters Index (SPI)                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Subspace ID  |                Sequence Number                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Rest of the ESP payload

]]></artwork></figure>

</section>
<section anchor="sender-spec"><name>Sender Behavior</name>

<t>The sender <bcp14>MAY</bcp14> set the sequence number subspace ID to any value. For example, the sender would use different values per path or per processing core.</t>

<t>The sender <bcp14>MUST</bcp14> maintain one sequence number counter per sequence number subspace that it makes use of. But the sender <bcp14>MAY</bcp14> use only some (and as few as a single one) of the available 256 subspaces.</t>

<t>When transmitting a packet, the sender <bcp14>MUST</bcp14> use the sequence number counter associated with the sequence number subspace in use for that packet. The lower-order 24 bits of the sequence number counter are placed in the sequence number field, as specified in <xref target="RFC4303"/>.</t>

</section>
<section anchor="receiver-spec"><name>Receiver Behavior</name>

<t>The receiver <bcp14>MUST</bcp14> maintain one anti-replay window and counter for each sequence number subspace being used.</t>

<t>When receiving a packet, the receiver <bcp14>MUST</bcp14> use the anti-replay window and counter associated with the sequence number subspace identified with the subspace ID field.</t>

<t>Note: Since the sender may decide to only use a subset of the available subspace values, receivers <bcp14>SHOULD NOT</bcp14> allocate 256 anti-replay windows per peer by default. Two mitigation mechanisms may be used to reduce the number of anti-replay windows:</t>

<t><list style="symbols">
  <t>The receiver <bcp14>SHOULD</bcp14> limit the number of allocated anti-replay windows to the number of subspaces negotiated during the IKE Child SA creation exchange, as specified in <xref target="ike-negotiation"/>.</t>
  <t>The receiver <bcp14>MAY</bcp14> reactively allocate an anti-replay window when receiving the first packet for a given subspace, since the sender may decide to not use all of the available values. When doing so, the receiver <bcp14>SHOULD</bcp14> first check the authenticity of the packet before allocating the new anti-replay window.</t>
</list></t>

</section>
<section anchor="ESN"><name>Extended Sequence Numbers (ESN) considerations</name>

<t>When using Extended Sequence Numbers (ESNs), the sender and receiver <bcp14>MUST</bcp14> consider the 8 bits at indices 24 to 31 of the sequence number 64 bits long counter to be implicit.</t>

<t>Note that the reduction of the sequence number space to 24 bits specified in this document has some implications over the speed at which the explicit part of the sequence number will loop. At a 10Gbps rate, with 1500B ethernet frames, the 24 bits sequence number space will loop every 20 seconds.</t>

<t>As a result:</t>

<t><list style="symbols">
  <t>The peers <bcp14>SHOULD</bcp14> use ESN, unless the tunnel is known to run at low speed rates.</t>
  <t>Any outage lasting longer than 20 seconds might cause a resync (as defined in appendix A3 of <xref target="RFC4303"/>).</t>
</list></t>

<t>Note: A peer may unilaterally enforce the use of ESN by specifying the IKE ESN transform with the value &quot;1&quot; (implying that the peer suggests to use ESN) in its  CHILD_SA proposal, while ommitting to include the IKE ESN transform with the value &quot;0&quot; (implying that disabling ESN is not accepted).</t>

<t>Authors&#39; note: Is it too much of a problem ? Should we consider adding a new 32 bits field in the ESP header to contain the subspace ID, as well as future ESP extensions ?</t>

</section>
<section anchor="ike-negotiation"><name>Negotiating sequence-number subspaces using IKE</name>

<t>A mechanism will be needed to:</t>

<t><list style="symbols">
  <t>Make sure both parties agree to use sequence-number subspaces when creating a Child SA.</t>
  <t>Let the sender express a preferred number of subspaces it wants to use, as well as the maximum number of subspaces it is capable of using.</t>
  <t>Let the receiver peer decide on a number of subspaces to be used by the sender, between zero (meaning that subspaces should not be used), and the maximum number of subspaces that the sender supports.</t>
</list></t>

<t>This document will specify such negotiation.</t>

<t>The authors would like to request the ipsecme working group for input on how to best implement the negotiation of this new functionality in IKEv2 <xref target="RFC5996"/>.</t>

</section>
<section anchor="solution-analysis"><name>Solution Analysis</name>

<t>As described in <xref target="problem"/>, anti-replay comes with implementation and scalability challenges when running in environments where IPsec peers may leverage multiple paths to send packets or multiple cores to process them.</t>

<t>Since the anti-replay mechanism seems to be the source cause of these observed challenges, this document provides a solution which relies on a small and optional change at the anti-replay level.</t>

<t>By using sequence number subspaces, IPsec peers may:</t>

<t><list style="symbols">
  <t>use different subspaces for different cores, which allows distributing a Child SA between cores to increase performance</t>
  <t>use different subspaces for different QoS classes or different paths, which avoids unwanted drops due to potential reordering of packets, either at the egress or during its flight.</t>
  <t>combine the above per-path and per-core approaches without multiplying the number of required Child SAs.</t>
</list></t>

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

<t>The sequence number is used by the anti-replay mechanism to ensure a packet could not be accepted twice by the receiver. This prevents an attacker from trying to replay one or multiple packets from an IPsec tunnel.</t>

<t>In this proposal, a single Child SA is associated with multiple anti-replay windows and counters. When trying to replay a packet, the sequence number subspace ID must remain the same since the Subspace ID field is authenticated. As a result the receiver will use the same anti-replay state when processing the replayed packet as the one used when the first packet was first received. This ensures that a replayed packet will be detected and dropped by the receiver.</t>

</section>
<section anchor="implementation"><name>Implementation Considerations</name>

<t>When a single sequence number space is used within a given Child SA, encryption and decryption operations must always happen on the same core (locking anti-replay structures or using contended atomic operations has a dramatic performance hit).</t>

<t><list style="symbols">
  <t>On reception, this requires packets which are received (and load-balanced to cores) to be often handoff to a different thread for processing.</t>
  <t>On transmisson, multiple flows, processed by different cores, need to be transmitted using the same Child SA. This requires the packets to be handoff to the thread in charge of the given Child SA.</t>
</list></t>

<t>To avoid the performance degradation caused by packet handoffs, each thread may use its own sequence number subspace:</t>

<t><list style="symbols">
  <t>On transmission, the core will always select the subspace it is assigned when generating the ESP header.</t>
  <t>On reception, the subspace ID could be used to load-balance the packets to their proper thread.</t>
</list></t>

<t>Similarly, when multiple paths are used:</t>

<t><list style="symbols">
  <t>On transmission, a different sequence number subspace is used for each packet path. Ensuring that out-of-order packets are not dropped by the anti-replay mechanism.</t>
  <t>On reception, the 5-tuple based packet steering would provide a decent level of load-balancing between threads, since different IP paths would use different 5-tuples.</t>
</list></t>

<t>If a combination of both multi-path and multi-core load-balancing is needed, the subspace field could be used partly to encode a path ID, partly to encode a core ID. But this is purely implementation specific and does not require coordination between the peers.</t>

<section anchor="initialization-vector-iv-considerations"><name>Initialization Vector (IV) Considerations</name>

<t>Depending on the cryptographic mode of operations, the Initialization Vector (IV) comes with specific requirements.</t>

<t>Some modes (e.g., CBC) make use of random IV values. When implementing this specification, each thread independently generates its independent stream of random values, ensuring the IV randomness property. Care must be taken as to limit the global number of transmitted packets using the same Child SA in order to avoid birthday paradox attacks. A lockless counter, or batched token bucket mechanism, may be used to efficiently implement this process without performance degradation.</t>

<t>Other cryptographic modes (e.g., GCM) do not have randomness requirements over the IV, but the IV values must only be used once. RFC4106 Section 3.1 states that &quot;The most natural way to implement this is with a counter, but anything that guarantees uniqueness can be used, such as a linear feedback shift register (LFSR).  Note that the encrypter can use any IV generation method that meets the uniqueness requirement, without coordinating with the decrypter.&quot; . One simple way to implement this specification is to divide the IV into a subspace field, which reuses the ESP sequence number subspace value, and a variable IV part, which is simply incremented for each encrypted packet.</t>

<t>Author&#39;s note: Are there other cryptographic modes with different requirements over the IV ?</t>

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

<t>TBD</t>

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

<t>TBD</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>

&RFC4303;
&RFC5996;
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References'>

&I-D.pwouters-ipsecme-multi-sa-performance;


    </references>



  </back>

<!-- ##markdown-source:
H4sIAEOlVmMAA7VbbXPjRnL+zl8x2f0QySF5knbts1VJLlpJa6tuX3Qr25er
q6urITAkpwQCPAwgLq1zyj8jqUqq8lvyU/xL8nT3zGAAkrvrvGg/LAkCMz09
3U8/3dOYTCajxjaFOVc3t85kSpe5uvntNf5v7KQ260JvlTN/aU2ZGVW2q5mp
lWtnbq0z49S8qtWqLXDrWjdL1bRlaQrHg8jlrKqNWtcVbna2XIz0bFabh26y
ZJIw6CivslKvIFFe63kzWVdltqzKiV3jkZWZJA9N4kOTk5NRrhs8dHZydjY5
PZmcPR/h15XFvFXZbNe0wutvX45GT5VrIOCfdVGVuNjUrRmN7Lrmj645Ozn5
6uRspGujz9XFel3YTDcYwo02i3PlhRjdbzBc2Zi6NM3kiuQc4bZzDJ2PRlmV
Y63nqnUT7TJrR2t7rvD3VGW6xFWjdF1jyUd2rnRRqK1xxwqaXGq3VEtTG8io
JqqpMvngqrqpzdz5b9sVf1F0wzk9jI/hlnOeJjdzDfU73BF+l4fk9pFum2VV
n48U/038/0rZEnfcTtWtqDxel+24xZg7P1U1FnppXVap16bW9zb+YlbaFudq
7ffvnzK6aZpVq/3Tvp6qu6W298vBrK+rJSxn+NtHp13RY26pPzYtrXZuHXZy
uFpratju8MdPWK888bGJv8Z6q8IuSp0NZv66tUWh25XZveGjsy+cPJLMPiqr
egUTfjC04e9eXj5/dvLMf/z8q6++OIf1l/P0npvJ1XS9qVqswkW3E392erI2
Nd8NQMCjIwN3bLbnUZC761cvz9WTP2L0f8bfn56MRpPJROmZa2qdNaPRt0vr
FHwcCywblUPO1jlgSbM0KlvCH0y5wNdqrmrACRzJg8XGAmFSxIBVmPLB1lVJ
Izm1IddRgIN7g28r3DEzqjaTqs7xQ66OzHQxHdNtJSANc1cPxsPXujCYRRGI
uTFwQM/nNptAEFsafpZ/IVz7Ffy0JSiD5PM5fsM4v6vuVFZoWsWx0hDEwKm1
k5k8+GGMquwmI1x0U3UVx9Br3KizpWGnxS4+0BwN6Qo/zAqzAmiYqK58zCCr
VWk2dHdLEKVm2s/jAFtNIyOYD2M5wSdUiUmjcN3K/N00UAf6ItK6wlywYUuD
sZxRjBpPWawPz8D764YkmlXYvbWuG2scyc5BxrxvTEn4nI5J+8pbRooozaJq
LICdF0LQCbugjxe0pncfiU/TkRjfyuZ5AZQHYtdV3mYs5eNTS19/HP1D8kfm
aQahEIIBaasC41oIAlFhN1ts4WpVlcWWpGKh8UyLLSKrIqkQGTZVfY/VVnMs
k3Rs6qxChMz8zlStwxyOoJ/0IEuLF+fKYToYyTXMwi8b6+eLfsilfoBiNhWN
sKJIu9Fbth8/DX0kZVkfqYILxJ2eW+jrV5mGfY1VBrNtC13TaK9vX92pFlZU
3rvjsfgejQRdIKTSbuhGFQZL1YtgZp3ZiLfMoAADKcsqh8RZ1Ra5mtV09wLB
taENXtZVu1iu2wYm8QAA0zMLw92y6v/Sav5MijD1g80MtvOuhS5cpguTkAyZ
zludYAEUMEfkbkTyZbXpOQH2ieTE3vEOTVUfk+a2dkAm47Ia+nFh4eSENE0B
2XNS7cfxKSFBQ3FT6BqnqIHZbA3XQBRhv/NeBSkv+t4ueNdEe91xg8R5xcux
RvtgczbX1OF7vt0wPq5NZueWPPylLQHK27GyK9xL8jIfGou9h92qEBb4ui5I
+Q6zyHfXxy3s4a3HszsMxOPBFb16+87oPfLCu1rESNK9tz3TLaJvdKKSNdBb
FlUR06oyQhLQPnW5tLDGuwvcUfOTYzVrG7VABCxZpbC+nBaQBW3CDGUGNn2K
LrxFcUKZ6ujnn/61e8A7ED+Ln9Xpzz/9m3qvPnjPGe6BxwmiwnAdm3twDNDZ
lrbJA6ow9dyvtr9BDtH5M5DUDM5GCNVNSU8FYJUdwhAIlPdm2+0jwDN9mp5Z
GYAM4R30Tr9e6QZ0oNDQZ0IK4DiLWuc8iMpbE0DIg7dWgJgFBOnkwbxuMB5i
bpv1hPaQRrGYND0OQ2ugYJ2rwq5sxLvuKR+B8FTYcQoKb2WPoUFDrLtENJWY
rhX9Vwztg/Yljd5iCLBKbAW7fcJbEnwYxt6VwX2ldStwTs9SQDUeTEFTk7IG
AEpGhkwBNqlAxibVXKgMAYGwHA+qMgiNAPmLakPKleDjTRuSIvSKULqUZc81
sVR/A3MJmamp4FzkJpTbDVewsWUOLMUwoFYUNTjYLE12T2jE4zJYinSwYK38
kxgME0MULZpObpPRcoT/NeMDRWAHJhyJD+uhcHxbNaNggKUwuYo7QhRsDeqb
gV4w4FBQPo9q3iGDgT6Jtta1rRjJAJit8Vrl4GrxcGCUQwWlWmWdur06i7tO
983bUtgHsR3whC3WGwG2Fzz6vizrdy0ZiJojCPc8zqNCXyUIrkbnog1bPoBR
BppS5mxwNfSRGctEE3Gi3q7Zu/xqw1J4J4I7+EjJgcQDOg35+PjJKcOPPxID
twBxJCzEnuaIukT/oZOlXSwnHSfwqOaLCgLQSSgWlejauuCFbkXZdChCOGam
UR0WV6G6ghC14+Sz7a7ChFuB+OfeNOFfpQO8NEKuo1ZkJnUUbHpnJCaw3u0y
mhGIzhYDcly1Na4cE0W9CxH9jsP049MQ4icclX8kDpv8eQ8JD+WmAXP6H2xE
YNwsJ6PzMDAScRFP8ezNCGXPZU14ntgEoU4QRgxN8Myk8TUwnKl6gW30sXjP
fT0q1Mmw4fnnbc0Y4xW9HYB9B/HqZUUUSpMTefb6xYAgEG32MbviAMahwKmz
EJHHvRjh1LNjUcVzSd68AnhXOw7mvWd8SDK/kFk0TCtGePbcu9YGub9naXJ9
MJKIzBxEB5aD0JgBKRC3qzpEPApzFwXRfk7rGV4OB7e4vZzLCJOVLIeD9b4Y
4FOJ07Mv79UMMAntpIkb3MUuQt4GH70XAiXYMjOcQAvi+zQ5gqzxyfkw3orl
9DNN2heHMEwZgkXmRCXDzQxDCfkhP/HiOvsDE+BF6x0/pMokn3m/FmqRgA9t
dW5owSEswzWj8Szps5O76AuCrWsSIhlveNBFS5RobTipw6J0CdDTGfbKiUEt
eehMlwiQtAdexOmeBVD9cIGQ2W3NWBmirJz9ERyKMSbrsJ7CMcN6xbuZjOg4
IB/mbyRfyj+ZZvmQNNuGwWOhYVW1tHXzQBUF9cTEOUWMDI9w77IqH6h8FCjo
lZnb0kqxdScPGOboRFahdSj1yevv7r59Mpb/1Zu3/Pnd9e++u3l3fUWf7765
ePUqfhj5O+6+efvdq6vuU/fk5dvXr6/fXMnDuKp6l0ZPXl/84Yls3ZO3t9/e
vH1z8eoJGX/TyyLJkiV+cPq9rg1ZmHajkFgyYr+4vP2v/zx9DuT+m3cvL89O
T78CMMuXL09//RxfyD1kNq42yFcocztCPmSQrmMUinuZXmNrCkkmKXMouZYM
RX/2R9LMn87V38+y9enzf/QXaMG9i0FnvYuss90rOw+LEvdc2jNN1Gbv+kDT
fXkv/tD7HvSeXMTf65jQHjyx6ILrnlzzgKnF3J/StQN5wm56QDvWnXwkhBc/
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
gHpFdjb6byQxn2ziQQAA

-->

</rfc>

