<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.13 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mboned-ambi-03" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <front>
    <title abbrev="AMBI">Asymmetric Manifest Based Integrity</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mboned-ambi-03"/>
    <author initials="J." surname="Holland" fullname="Jake Holland">
      <organization>Akamai Technologies, Inc.</organization>
      <address>
        <postal>
          <street>150 Broadway</street>
          <city>Cambridge, MA 02144</city>
          <country>United States of America</country>
        </postal>
        <email>jakeholland.net@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Rose" fullname="Kyle Rose">
      <organization>Akamai Technologies, Inc.</organization>
      <address>
        <postal>
          <street>150 Broadway</street>
          <city>Cambridge, MA 02144</city>
          <country>United States of America</country>
        </postal>
        <email>krose@krose.org</email>
      </address>
    </author>
    <date year="2022" month="March" day="07"/>
    <area>Ops</area>
    <workgroup>Mboned</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines Asymmetric Manifest-Based Integrity (AMBI).
AMBI allows each receiver or forwarder of a stream of multicast packets to check the integrity of the contents of each packet in the data stream.
AMBI operates by passing cryptographically verifiable hashes of the data packets inside manifest messages, and sending the manifests over authenticated out-of-band communication channels.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="problems" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Multicast transport poses security problems that are not easily addressed by the same security mechanisms used for unicast transport.</t>
      <t>The "Introduction" sections of the documents describing TESLA <xref target="RFC4082" format="default"/>, and TESLA in SRTP <xref target="RFC4383" format="default"/>, and TESLA with ALC and NORM <xref target="RFC5776" format="default"/> present excellent overviews of the challenges unique to multicast authentication for use cases like wide scale software or video distribution with a high data transfer rate. The challenges are briefly summarized here:</t>
      <ul spacing="normal">
        <li>A MAC based on a symmetric shared secret cannot be used because each packet has multiple receivers that do not trust each other, and using a symmetric shared secret exposes the same secret to each receiver.</li>
        <li>Asymmetric per-packet signatures can handle only very low bit-rates because of the transport and computational overhead associated with signature transmission and verification.</li>
        <li>An asymmetric signature of a larger message comprising multiple packets requires reliable receipt of all such packets, something that cannot be guaranteed in a timely manner even for protocols that do provide reliable delivery, and the retransmission of which may anyway exceed the useful lifetime for data formats that can otherwise tolerate some degree of loss.</li>
      </ul>
      <t>Aymmetric Manifest-Based Integrity (AMBI) defines a method for receivers or middle boxes to cryptographically authenticate and verify the integrity of a stream of packets by comparing the data packets to a stream of packet "manifests" (described in <xref target="ref-manifest" format="default"/>) received via an out-of-band communication channel that provides authentication and verifiable integrity.</t>
      <t>Each manifest contains a message digest (described in <xref target="ref-digests" format="default"/>) for each packet in a sequence of packets from the data stream, hereafter called a "packet digest".
The packet digest incorporates a cryptographic hash of the packet contents and some identifying data from the packet, according to a defined digest profile for the data stream.</t>
      <t>Upon receipt of a packet digest inside a manifest conveyed in a secure channel and verification that the packet digest of a received data packet matches, the receiver has proof of the integrity of the contents of the data packet corresponding to that digest.</t>
      <t>This document defines the "ietf-ambi" YANG <xref target="RFC7950" format="default"/> model in <xref target="ref-yang" format="default"/> as an extension of the "ietf-dorms" model defined in <xref target="I-D.draft-ietf-mboned-dorms" format="default"/>.
Also defined are new URI schemes for transport of manifests over TLS or DTLS, and a new media type for transport of manifests over HTTPS.
The encodings for these are defined in <xref target="ref-transport" format="default"/>.</t>
      <section anchor="comparison-with-tesla" numbered="true" toc="default">
        <name>Comparison with TESLA</name>
        <t>AMBI and TESLA <xref target="RFC4082" format="default"/> and <xref target="RFC5776" format="default"/> attempt to achieve a similar goal of authenticating the integrity of streams of multicast packets.
AMBI imposes a higher overhead than TESLA imposes, as measured in the amount of extra data required.
In exchange, AMBI relaxes the requirement for establishing an upper bound on clock synchronization between sender and receiver, and allows for the use case of authenticating multicast traffic before forwarding it through the network, while also allowing receivers to authenticate the same traffic.
By contrast, this is not possible with TESLA because the data packets can't be authenticated until a key is disclosed, so either the middlebox has to forward data packets without first authenticating them so that the receiver has them prior to key disclosure, or the middlebox has to hold packets until the key is disclosed, at which point the receiver can no longer establish their authenticity.</t>
        <t>The other new capability is that because AMBI provides authentication information out of band, authentication can be retrofitted into some pre-existing deployments without changing the protocol of the data packets under some restrictions outlined in <xref target="ref-security" format="default"/>.
By contrast, TESLA requires a MAC to be added to each authenticated message.</t>
      </section>
      <section anchor="terminology" numbered="true" toc="default">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119" format="default"/> and <xref target="RFC8174" format="default"/> when, and only when, they appear in all capitals, as shown here.</t>
      </section>
      <section anchor="notes-for-contributors-and-reviewers" numbered="true" toc="default">
        <name>Notes for Contributors and Reviewers</name>
        <t>Note to RFC Editor: Please remove this section and its subsections before publication.</t>
        <t>This section is to provide references to make it easier to review the development and discussion on the draft so far.</t>
        <section anchor="venue" numbered="true" toc="default">
          <name>Venues for Contribution and Discussion</name>
          <t>This document is in the Github repository at:</t>
          <t><eref target="https://github.com/GrumpyOldTroll/ietf-dorms-cluster">https://github.com/GrumpyOldTroll/ietf-dorms-cluster</eref></t>
          <t>Readers are welcome to open issues and send pull requests for this document.</t>
          <t>Please note that contributions may be merged and substantially edited, and as a reminder, please carefully consider the Note Well before contributing: <eref target="https://datatracker.ietf.org/submit/note-well/">https://datatracker.ietf.org/submit/note-well/</eref></t>
          <t>Substantial discussion of this document should take place on the MBONED working group mailing list (mboned@ietf.org).</t>
          <ul spacing="normal">
            <li>Join: <eref target="https://www.ietf.org/mailman/listinfo/mboned">https://www.ietf.org/mailman/listinfo/mboned</eref></li>
            <li>Search: <eref target="https://mailarchive.ietf.org/arch/browse/mboned/">https://mailarchive.ietf.org/arch/browse/mboned/</eref></li>
          </ul>
        </section>
        <section anchor="non-obvious-doc-choices" numbered="true" toc="default">
          <name>Non-obvious doc choices</name>
          <ul spacing="normal">
            <li>TBD: we need a way to assert that we provide the full set of packets for an (S,G) on all UDP ports and non-UDP protocols. Naively authenticating UDP  for specified ports and ignoring other ports means that an attacker could attack a separate UDP port by injecting traffic directed at it, potentially hitting a different application that listens on 0.0.0.0, so an (S,G) with legitimately authenticated UDP traffic on one port could be used to transport UDP-based attacks to apps on another port or protocol unless they are firewalled.  Passing traffic for an (S,G) subscription would open a new channel to such targets that otherwise would not be reachable from the internet for users behind e.g. a CPE with nat or connection-state-based firewalling.</li>
            <li>Dropped intent to support DTLS+FECFRAME in this spec because RFC 6363 seems incomprehensible on a few points, most notably demux strategy between repair and source ADUs, which as written seems to require specifying another layer.  So support for this will have to be a later separate RFC.  However, for future extensibility made manifest-stream into a list instead of a leaf-list so that it can be an augment target for a later YANG extension with FEC selection from the likewise-very-confusing semi-overlapping registries at <eref target="https://www.iana.org/assignments/rmt-fec-parameters/rmt-fec-parameters.xhtml">https://www.iana.org/assignments/rmt-fec-parameters/rmt-fec-parameters.xhtml</eref> defined by RFCs 5052 and 6363. See also RFC 6363, RFC 6681, and RFC 6865</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="threat-model" numbered="true" toc="default">
      <name>Threat Model</name>
      <t>AMBI is designed to operate over the internet, under the Internet Threat Model described in <xref target="RFC3552" format="default"/>.</t>
      <t>AMBI aims to provide Data Integrity for a multicast data stream, building on the security anchors described in <xref target="anchors" format="default"/> to do so.
The aim is to enable receivers to subscribe to and receive multicast packets from a trusted sender without damage to the Systems Security (Section 2.3 of <xref target="RFC3552" format="default"/>) for those receivers or other entities.</t>
      <t>Thus, we assume there might be attackers on-path or off-path with the capability to inject or modify packets, but that the attackers have not compromised the sender or discovered any of the sender's secret keys.
We assume that an attacker may have compromised some receivers of the multicast traffic, but still aim to provide the above security properties for receivers that have not been compromised.</t>
      <t>Those sending multicast traffic to receivers that include untrusted receivers should avoid transmitting sensitive information that requires strong confidentiality guarantees, due to the risk of compromise from those receivers.
Since multicast transmits the same packets to potentially many receivers, in the presence of potentially compromised receivers confidentiality of the content cannot be assured.</t>
      <t>However, any protocol that provides encryption of the packet data before generating the packet digest can provide confidentiality against on-path passive observers who do not possess the decryption key.
This level of confidentiality can be provided by any such protocols without impact on AMBI's operation.</t>
      <section anchor="anchors" numbered="true" toc="default">
        <name>Security Anchors</name>
        <t>Establishing the desired security properties for the multicast data packets relies on secure delivery of some other information:</t>
        <ul spacing="normal">
          <li>Secured unicast connections (providing Data Integrity) to one or more trusted DORMS <xref target="I-D.draft-ietf-mboned-dorms" format="default"/> servers that use the AMBI extensions to the DORMS YANG model as defined in <xref target="ref-yang" format="default"/></li>
          <li>Secure delivery (providing Data Integrity) of a stream of manifests (<xref target="ref-manifest" format="default"/>)</li>
        </ul>
        <t>The secured unicast connection to the DORMS server provides the Peer Entity authentication of the DORMS server that's needed to establish the Data Integrity of the data it sends.</t>
        <t>Note that DORMS provides a method for using DNS to bootstrap discovery of the DORMS server.
In contexts where secure DNS lookup cannot be provided, it's still possible to establish a secure connection to a trusted DORMS server as long as the trusted DORMS server's hostname is known to the receivers (removing the need to use DNS for that discovery).
Once the server name is known, the ordinary certificate verification of that hostname while establishing a secure https connection provides the needed security properties to anchor the rest.</t>
        <t>Receiving unauthenticated data packets and knowing how to generate packet digests from the manifest profile provided by the AMBI extensions in the DORMS metadata allows the receiver to generate packet digests based on the contents of the received packet, which can be compared against the packet digests that were securely received.</t>
        <t>Comparing the digests and finding the same answer then provides Data Integrity for the data packets that relies on one more property of the digest generation algorithm:</t>
        <ul spacing="normal">
          <li>the difficulty of generating a collision for the packet digests contained in the manifest.</li>
        </ul>
        <t>Taken together, successful validation of the multicast data packets proves within the above constraints that someone with control of the manifest URI streams provided by the DORMS server has verified the sending of the packets corresponding to the digests sent in that stream of manifests.</t>
        <section anchor="alternatives-and-their-requirements" numbered="true" toc="default">
          <name>Alternatives and Their Requirements</name>
          <t>Other protocols that can provide authentication could also be used for manifest delivery if defined later in another specification.
For example a protocol that asymmetrically signs each packet, as the one defined in Section 3 of <xref target="RFC6584" format="default"/> does, would be a viable candidate for a delivery protocol for manifests that could be delivered over a multicast transport, which could have some important scalability benefits.</t>
          <t>Other methods of securely transmitting metadata equivalent to the metadata provided by the "ietf-ambi" YANG model could also be used to provide the same security guarantees with the manifest channels.
Defining other such possibilities is out of scope for this document.</t>
        </section>
      </section>
      <section anchor="system-security" numbered="true" toc="default">
        <name>System Security</name>
        <t>By providing the means to authenticate multicast packets, AMBI aims to avoid giving attackers who can inject or modify packets the ability to attack application vulnerabilities that might be possible to exercise if those applications process the attack traffic.
Many of the entries in the Common Vulnerabilities and Exposures (CVE) list at <xref target="CVE" format="default"/> (an extensive industry-wide database of software vulnerabilities) have documented a variety of system security problems that can result from maliciously generated UDP packets.</t>
        <t>TBD: Fold in a mention of how off-path attacks are possible from most places on the internet for interdomain multicast over AMT at an ingest point, and how the multicast fanout downstream of that can make it a good target if multicast sees more use.  A diagram plus a cleaned-up version of the on-list explanation here is probably appropriate: <eref target="https://mailarchive.ietf.org/arch/msg/mboned/CG9FLjPwuno3MtvYvgNcD5p69I4/">https://mailarchive.ietf.org/arch/msg/mboned/CG9FLjPwuno3MtvYvgNcD5p69I4/</eref>.  Nightmare scenario is zero-day RCE by off-path attacker that takes over a significant number of the devices watching a major sports event.</t>
        <t>See also work-in-progress: <eref target="https://squarooticus.github.io/draft-krose-multicast-security/draft-krose-multicast-security.html">https://squarooticus.github.io/draft-krose-multicast-security/draft-krose-multicast-security.html</eref></t>
      </section>
    </section>
    <section anchor="protocol-operation" numbered="true" toc="default">
      <name>Protocol Operation</name>
      <section anchor="overview" numbered="true" toc="default">
        <name>Overview</name>
        <t>In order to authenticate a data packet, AMBI receivers need to hold these three pieces of information at the same time:</t>
        <ul spacing="normal">
          <li>the data packet</li>
          <li>an authenticated manifest containing the packet digest for the data packet</li>
          <li>a digest profile defining the transformation from the data packet to its packet digest</li>
        </ul>
        <t>The manifests are delivered as a stream of manifests over an authenticated data channel.
Manifest contents MUST be authenticated before they can be used to authenticate data packets.</t>
        <t>The manifest stream is composed of an ordered sequence of manifests that each contain an ordered sequence of packet digests, corresponding to the original packets as sent from their origin, in the same order.</t>
        <t>Note that a manifest contains potentially many packet digests, and its size can be tuned to fit within a convenient PDU (Protocol Data Unit) of the manifest transport stream.
By doing so, many packet digests for the multicast data stream can be delivered per packet of the manifest transport.
The intent is that even with unicast-based manifest transport, multicast-style efficiencies of scale can still be realized with only a relatively small unicast overhead, when manifests use a unicast transport.</t>
      </section>
      <section anchor="buffering-of-packets-and-digests" numbered="true" toc="default">
        <name>Buffering of Packets and Digests</name>
        <t>Using different communication channels for the manifest stream and the data stream introduces a possibility of desynchronization in the timing of the received data between the different channels, so receivers hold data packets and packet digests from the manifest stream in buffers for some duration while awaiting the arrival of their counterparts.</t>
        <t>While holding a data packet, if the corresponding packet digest for that packet arrives in the secured manifest stream, the data packet is authenticated.</t>
        <t>While holding an authenticated packet digest, if the corresponding data packet arrives with a matching packet digest, the data packet is authenticated.</t>
        <t>Authenticating a data packet consumes one packet digest and prevents re-learning a digest for the same sequence number with a hold-down time equal to the hold time for packet digests.
The hold-down is necessary because a different manifest can send a duplicate packet digest for the same packet sequence number, either when repeating of packet digests is used for resilience to loss or when rotating authentication keys, so re-learning the packet digest could allow a replay of a data packet.
After authenticating a packet, the digest and any future digests for the same data packet remain consumed if it has been used to authenticate a data packet, ignoring repeated digests for the same sequence number until after the holddown timer expires.</t>
        <t>Once the data packet is authenticated it can be further processed by the receiving application or forwarded through the receiving network.</t>
        <t>If the receiver's hold duration for a data packet expires without authenticating the packet, the packet SHOULD be dropped as unauthenticated.
If the hold duration of a manifest expires, packet digests last received in that manifest MUST be discarded.</t>
        <t>When multiple digests for the same packet sequence number are received, the latest received time for an authenticated packet digest should be used for the expiration time.</t>
        <section anchor="validation-windows" numbered="true" toc="default">
          <name>Validation Windows</name>
          <t>Since packet digests are usually smaller than the data packets, it's RECOMMENDED that senders generate and send manifests with timing such that the packet digests in a manifest will typically be received by subscribed receivers before the data packets corresponding to those digests are received.</t>
          <t>This strategy reduces the buffering requirements at receivers, at the cost of introducing some buffering of data packets at the sender, since data packets are generated before their packet digests can be added to manifests.</t>
          <t>The RECOMMENDED default hold times at receivers are:</t>
          <ul spacing="normal">
            <li>2 seconds for data packets</li>
            <li>10 seconds for packet digests</li>
          </ul>
          <t>The sender MAY recommend different values for specific data streams, in order to tune different data streams for different performance goals.
The YANG model in <xref target="ref-yang" format="default"/> provides a mechanism for senders to communicate the sender's recommendation for buffering durations.
These parameters are "data-hold-time" and "digest-hold-time", expressed in milliseconds.</t>
          <t>Receivers MAY deviate from the values recommended by the sender for a variety of reasons, including their own memory constraints or local administrative configuration (for example, it might improve user experience in some situations to hold packets longer than the server recommended when there are receiver-specific delays in the manifest stream that exceed the server's expectations).
Decreasing the buffering durations recommended by the server increases the risk of losing packets, but can be an appropriate tradeoff for specific network conditions and hardware or memory constraints on some devices.</t>
          <t>Receivers SHOULD follow the recommendations for hold times provided by the sender (including the default values from the YANG model when unspecified), subject to their capabilities and any administratively configured overrides at the receiver.</t>
        </section>
        <section anchor="preserving-inter-packet-gap" numbered="true" toc="default">
          <name>Preserving Inter-packet Gap</name>
          <t>It's RECOMMENDED that middle boxes forwarding buffered data packets preserve the inter-packet gap between packets in the same data stream, and that receiving libraries that perform AMBI-based authentication provide mechanisms to expose the network arrival times of packets to applications.</t>
          <t>The purpose for this recommendation is to preserve the capability of receivers to use techniques for available bandwidth detection or network congestion based on observation of packet times and packet dispersal, making use of known patterns in the sending.
Examples of such techniques include those described in <xref target="PathChirp" format="default"/>, <xref target="PathRate" format="default"/>, and <xref target="WEBRC" format="default"/>.</t>
          <t>Note that this recommendation SHOULD NOT prevent the transmission of an authenticated packet because the prior packet is unauthenticated.
This recommendation only asks implementations to delay the transmission of an authenticated packet to correspond to the interpacket gap if an authenticated packet was previously transmitted and the authentication of the subsequent packet would otherwise burst the packets more quickly.</t>
          <t>This does not prevent the transmission of packets out of order according to their order of authentication, only the timing of packets that are transmitted, after authentication, in the same order they were received.</t>
          <t>For receiver applications, the time that the original packet was received from the network SHOULD be made available to the receiving application.</t>
        </section>
      </section>
      <section anchor="ref-digests" numbered="true" toc="default">
        <name>Packet Digests</name>
        <section anchor="ref-profile" numbered="true" toc="default">
          <name>Digest Profile</name>
          <t>A packet digest is a message digest for a data packet, built according to a digest profile defined by the sender.</t>
          <t>The digest profile is defined by the sender, and specifies:</t>
          <ol spacing="normal" type="1"><li>A cryptographically secure hash algorithm (REQUIRED)</li>
            <li>A manifest stream identifier</li>
            <li>Whether to hash the IP payload or the UDP payload. (see <xref target="payload-type" format="default"/>)</li>
          </ol>
          <t>The hash algorithm is applied to a pseudoheader followed by the packet payload, as determined by the digest profile.
The computed hash value is the packet digest.</t>
          <t>TBD: As recommended by <eref target="https://tools.ietf.org/html/rfc7696#section-2.2">https://tools.ietf.org/html/rfc7696#section-2.2</eref>, a companion document containing the mandatory-to-implement cipher suite should also be published separately and referenced by this document.</t>
          <section anchor="payload-type" numbered="true" toc="default">
            <name>Payload Type</name>
            <section anchor="udp-vs-ip-payload-validation" numbered="true" toc="default">
              <name>UDP vs. IP payload validation</name>
              <t>When the manifest definition is at the UDP layer, it applies only to packets with IP protocol of UDP (0x11) and the payload used for calculating the packet digest includes only the UDP payload with length as the number of UDP payload octets, as calculated by subtracting the size of the UDP header from the UDP payload length.</t>
              <t>When the manifest definition is at the IP layer, the payload used for calculating the packet digest includes the full IP payload of the data packets in the (S,G).
There is no restriction on the IP protocols that can be authenticated.
The length field in the pseudoheader is calculated by subtracting the IP Header Length from the IP length, and is equal to the number of octets in the payload for the digest calculation.</t>
            </section>
            <section anchor="motivation" numbered="true" toc="default">
              <name>Motivation</name>
              <t>Full IP payloads often aren't available to receivers without extra privileges on end user operating systems, so it's useful to provide a way to authenticate only the UDP payload, which is often the only portion of the packet available to many receiving applications.</t>
              <t>However, for some use cases a full IP payload is appropriate.
For example, when retrofitting some existing protocols, some packets may be predictable or frequently repeated.
Use of an IPSec Authentication Header <xref target="RFC4302" format="default"/> is one way to disambiguate such packets.
Even though the shared secret means the Authentication Header can't itself be used to authenticate the packet contents, the sequence number in the Authentication Header can ensure that specific packets are not repeated at the IP layer, and so it's useful for AMBI to have the capability to authenticate such packets.</t>
              <t>Another example: some services might need to authenticate the UDP options <xref target="I-D.ietf-tsvwg-udp-options" format="default"/>.
When using the UDP payload, the UDP options would not be part of the authenticated payload, but would be included when using the IP payload type.</t>
              <t>Lastly, since (S,G) subscription operates at the IP layer, it's possible that some non-UDP protocols will need to be authenticated, and the IP layer allows for this.
However, most user-space transport applications are expected to use the UDP layer authentication.</t>
            </section>
          </section>
        </section>
        <section anchor="pseudoheader" numbered="true" toc="default">
          <name>Pseudoheader</name>
          <t>When calculating the hash for the packet digest, the hash algorithm is applied to a pseudoheader followed by the payload from the packet.
The complete sequence of octets used to calculate the hash is structured as follows:</t>
          <artwork name="" type="" align="left" alt=""><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Source Address (32 bits IPv4/128 bits IPv6)           |
|                             ...                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Destination Address (32 bits IPv4/128 bits IPv6)        |
|                             ...                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Zeroes    |   Protocol    |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |        Destination Port       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Manifest Identifier                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Payload Data                           |
|                             ...                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          <section anchor="source-address" numbered="true" toc="default">
            <name>Source Address</name>
            <t>The IPv4 or IPv6 source address of the packet.</t>
          </section>
          <section anchor="destination-address" numbered="true" toc="default">
            <name>Destination Address</name>
            <t>The IPv4 or IPv6 destination address of the packet.</t>
          </section>
          <section anchor="zeroes" numbered="true" toc="default">
            <name>Zeroes</name>
            <t>All bits set to 0.</t>
          </section>
          <section anchor="protocol" numbered="true" toc="default">
            <name>Protocol</name>
            <t>The IP Protocol field from IPv4, or the Next Header field for IPv6.
When using UDP-layer authentication, this value is always UDP (0x11) but for IP-layer authentication it can vary per-packet.</t>
          </section>
          <section anchor="length" numbered="true" toc="default">
            <name>Length</name>
            <t>The length in octets of the Payload Data field, expressed as an unsigned 16-bit integer.</t>
          </section>
          <section anchor="source-port" numbered="true" toc="default">
            <name>Source Port</name>
            <t>The source port of the packet.
Zeroes if using IP-layer authentication for a non-UDP protocol.</t>
          </section>
          <section anchor="destination-port" numbered="true" toc="default">
            <name>Destination Port</name>
            <t>The UDP destination port of the packet.
Zeroes if using IP-layer authentication for a non-UDP protocol.</t>
          </section>
          <section anchor="manifest-identifier" numbered="true" toc="default">
            <name>Manifest Identifier</name>
            <t>The 32-bit identifier for the manifest stream.</t>
          </section>
          <section anchor="payload" numbered="true" toc="default">
            <name>Payload Data</name>
            <t>The payload data includes either the IP payload or the UDP payload, as indicated by the digest profile.</t>
          </section>
        </section>
      </section>
      <section anchor="ref-manifest" numbered="true" toc="default">
        <name>Manifests</name>
        <section anchor="manifest-layout" numbered="true" toc="default">
          <name>Manifest Layout</name>
          <artwork name="" type="" align="left" alt=""><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Manifest Stream Identifier                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Manifest sequence number                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 First packet sequence number                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|T|      Packet Digest Count    | TLV Space (present iff T set) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       ... TLVs (Length=TLV Space or 0 if T unset) ...         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ... Packet Digests ...                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          <section anchor="manifest-stream-identifier" numbered="true" toc="default">
            <name>Manifest Stream Identifier</name>
            <t>A 32-bit unsigned integer chosen by the sender.
This value MUST be equal to the "id" field in the manifest-stream in the "ietf-ambi" model.
If a manifest is seen that does not have the expected value from the metadata provided for the manifest, the receiver MUST stop processing this manifest and disconnect from this manifest stream.
It MAY reconnect with an exponential backoff starting at 1s, or it MAY connect to an alternative manifest stream if one is known.</t>
          </section>
          <section anchor="manifest-sequence-number" numbered="true" toc="default">
            <name>Manifest Sequence Number</name>
            <t>A monotonically increasing 32-bit unsigned integer.
Each manifest sent by the sender increases this value by 1.
On overflow it wraps to 0.</t>
            <t>It's RECOMMENDED to expire the manifest stream and start a new stream for the data packets before a sequence number wrap is necessary.</t>
          </section>
          <section anchor="first-packet-sequence-number" numbered="true" toc="default">
            <name>First Packet Sequence Number</name>
            <t>A monotonically increasing 32-bit unsigned integer.
Each packet in the data stream increases this value by 1.</t>
            <t>It's RECOMMENDED to expire the manifest stream and start a new stream for the data packets before a sequence number wrap is necessary.</t>
            <t>Note: for redundancy, especially if using a manifest stream with unreliable transport, successive manifests MAY provide duplicates of the same packet digest with the same packet sequence number, using overapping sets of packet sequence numbers.
When received, these reset the hold timer for the listed packet digests.</t>
          </section>
          <section anchor="t-bit-tlvs-present" numbered="true" toc="default">
            <name>T bit (TLVs Present)</name>
            <t>If 1, this indicates the TLV Length and TLV space fields are present.
If 0, this indicates neither field is present.</t>
          </section>
          <section anchor="packet-digest-count" numbered="true" toc="default">
            <name>Packet Digest Count</name>
            <t>A 15-bit unsigned integer equal to the count of packet digests in the manifest.</t>
          </section>
          <section anchor="tlv-space" numbered="true" toc="default">
            <name>TLV Space</name>
            <t>A 16-bit unsigned integer with the length of the TLVs section.</t>
          </section>
          <section anchor="tlvs" numbered="true" toc="default">
            <name>TLVs</name>
            <t>These are Type-Length-Value blocks, back to back.
These may be extended by future specifications.</t>
            <t>These are composed of 3 fields:</t>
            <ul spacing="normal">
              <li>Type: an 8-bit unsigned integer indicating the type.  Type values in 0-127 have an 8-bit length, and type values in 128-255 have a 16-bit length.</li>
              <li>Length: a 8-bit or 16-bit unsigned integer indicating the length of the value</li>
              <li>Value: a value with semantics defined by the Type field.</li>
            </ul>
            <t>Defined values:</t>
            <table align="center">
              <thead>
                <tr>
                  <th align="left">Type</th>
                  <th align="left">Name</th>
                  <th align="left">Value</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">0</td>
                  <td align="left">Pad</td>
                  <td align="left">Length can be 0-255. Value is filled with 0 and ignored by receiver.</td>
                </tr>
                <tr>
                  <td align="left">128</td>
                  <td align="left">Refresh Deadline</td>
                  <td align="left">Length MUST be 2.  Value is a 16-bit unsigned integer number of seconds.  When this field is absent or zero, it means the current digest profile for the current manifest stream is stable.  A nonzero value means the authentication is transitioning to a new manifest stream, and the set of digest profiles SHOULD be refreshed by receivers before this much time has elapsed in order to avoid a disruption.  See <xref target="transition" format="default"/>.</td>
                </tr>
              </tbody>
            </table>
            <t>1-120 and 129-248 are unassigned
121-127 and 249-255 are reserved for experiments</t>
            <t>Any unknown values MUST be skipped and ignored by the receiver, using the Length field to skip.</t>
            <t>The total size of the manifest in octets is exactly equal to:</t>
            <t>Size of digests * packet count + 14 if T is 0
 Size of digests * packet count + 16 + TLV Length if T is 1</t>
            <t>The total size of the TLV space is exactly equal to:</t>
            <t>(2 + Length) summed for each TLV</t>
            <t>The total size of the TLV space MUST exactly equal TLV Length.
If the TLV space exceeds the TLV Length, the receiver MUST disconnect, and behave as if the Manifest Stream Identifier was wrong.
This state indicates a failed decoding of the TLV space.</t>
          </section>
          <section anchor="packet-digests" numbered="true" toc="default">
            <name>Packet Digests</name>
            <t>Packet digests appended one after the other, aligned to 8-bit boundaries with 0-bit padding at the end if the bit length of the digests are not multiples of 8 bits.</t>
          </section>
        </section>
      </section>
      <section anchor="transition" numbered="true" toc="default">
        <name>Transitioning to Other Manifest Streams</name>
        <t>It's possible for multiple manifest streams authenticating the same data stream to be active at the same time.
The different manifest streams can have different hash algorithms, manifest ids, and current packet sequence numbers for the same data stream.
These result in different sets of packet digests for the same data packets, one digest per packet per digest profile.</t>
        <t>It's necessary sometimes to transition gracefully from one manifest stream to another.
The Refresh Deadline TLV from the manifest is used to signal to receivers the need to transition.</t>
        <t>When a receiver gets a nonzero refresh deadline in a manifest the sender SHOULD have an alternate manifest stream ready and available, and the receiver SHOULD learn the alternate manifest stream, join the new one, and leave the old one before the number of seconds given in the refresh deadline.
After the refresh deadline has expired, a manifest stream MAY stop transmitting and close connections from the server side.
When multiple manifest-streams are provided in the metadata, all or all but one SHOULD contain an expire-time, and new or refreshing receivers SHOULD choose a manifest stream without an expire-time, or with the latest expire-time if all manifests have an expire-time.</t>
        <t>The receivers SHOULD start the refresh after a random time delay between now and one half the number of seconds in the deadline field after the first manifest they receive containing a nonzero refresh deadline.
This time delay is to desynchronize the refresh attempts in order to spread the spike of load on the DORMS server while changing manifest profiles during a large multicast event.</t>
      </section>
    </section>
    <section anchor="ref-transport" numbered="true" toc="default">
      <name>Transport Considerations</name>
      <section anchor="overview-1" numbered="true" toc="default">
        <name>Overview</name>
        <t>AMBI manifests MUST be authenticated, but any transport protocol providing authentication can be used.
This section discusses several viable options for the use of an authenticating transport, and some associated design considerations.</t>
        <t>TBD: add ALTA to the list when and if it gets further along <xref target="I-D.draft-krose-mboned-alta" format="default"/>.
Sending an authenticatable multicast stream (instead of the below unicast-based proposals) is a worthwhile goal, else a 1% unicast authentication overhead becomes a new unicast limit to the scalability.</t>
        <t>TBD: probably should add quic also?  Or maybe https is sufficient?</t>
        <t>TBD: add a recommendation about scalability, like with DORMS, when using a unicast hash stream.
CDN or other kind of fanout solution that can scale the delivery, and still generally hit the time window.</t>
      </section>
      <section anchor="https" numbered="true" toc="default">
        <name>HTTPS</name>
        <t>This document defines a new media type 'application/ambi' for use with HTTPS.  URIs in the manifest-transport list with the scheme 'https' use this transport.</t>
        <t>An HTTPS stream carrying the 'application/ambi' media type is composed of a sequence of binary AMBI manifests, sent back to back in the payload body (payload body is defined in Section 3.3 of <xref target="RFC7230" format="default"/>).</t>
        <t>Complete packet digests from partially received manifests MAY be used by the receiver for authentication of data packets from the multicast channel, even if the full manifest is not yet delivered.</t>
      </section>
      <section anchor="tls" numbered="true" toc="default">
        <name>TLS</name>
        <t>This document defines the new uri scheme 'ambi+tls' for use with TLS <xref target="RFC8446" format="default"/>.  URIs in the manifest-transport list with the scheme 'ambi+tls' use this transport.</t>
        <t>A TLS stream carrying AMBI manifests is composed of a sequence of binary AMBI manifests, transmitted back to back.</t>
        <t>Complete packet Digests from partially received manifests MAY be used by the receiver for authentication, even if the full manifest is not yet delivered.</t>
      </section>
      <section anchor="dtls" numbered="true" toc="default">
        <name>DTLS</name>
        <t>This document defines the new uri scheme 'ambi+dtls' for use with DTLS <xref target="RFC6347" format="default"/>.</t>
        <t>Manifests transported with DTLS have the tradeoff (relative to TLS or HTTPS) that they might be lost and not retransmitted or reordered, but they will not cause head-of-line blocking or delay in processing data packets that arrived later.
For some applications this is a worthwhile tradeoff.</t>
        <t>Note that loss of a single DTLS packet can result in the loss of multiple packet digests, which can mean failure to authenticate multiple data packets.</t>
        <t>DTLS transport for manifests supports one manifest per packet.
It's OPTIONAL to provides for some redundancy in packet digests by providing overlap in the packet sequence numbers across different manifests, thereby sending some or all packet digests multiple times to avoid loss.</t>
        <t>Future extensions might define extensions that can provide more efficient redundancy via FEC.
Those future extensions will require a different URI scheme.</t>
      </section>
    </section>
    <section anchor="examples" numbered="true" toc="default">
      <name>Examples</name>
      <t>TBD: walk through some examples as soon as we have a build running.
Likely to need some touching up of the spec along the way...</t>
    </section>
    <section anchor="ref-yang" numbered="true" toc="default">
      <name>YANG Module</name>
      <section anchor="tree-diagram" numbered="true" toc="default">
        <name>Tree Diagram</name>
        <t>The tree diagram below follows the notation defined in <xref target="RFC8340" format="default"/>.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
module: ietf-ambi

  augment /dorms:dorms/dorms:metadata/dorms:sender/dorms:group
            /dorms:udp-stream:
    +--rw ambi
       +--rw manifest-stream* [id]
          +--rw id                  uint32
          +--rw manifest-stream* [uri]
          |  +--rw uri    inet:uri
          +--rw hash-algorithm      iha:hash-algorithm-type
          +--rw data-hold-time?     uint32
          +--rw digest-hold-time?   uint32
          +--rw expiration?         yang:date-and-time
  augment /dorms:dorms/dorms:metadata/dorms:sender/dorms:group:
    +--rw ambi
       +--rw manifest-stream* [id]
          +--rw id                  uint32
          +--rw manifest-stream* [uri]
          |  +--rw uri    inet:uri
          +--rw hash-algorithm      iha:hash-algorithm-type
          +--rw data-hold-time?     uint32
          +--rw digest-hold-time?   uint32
          +--rw expiration?         yang:date-and-time

]]></artwork>
      </section>
      <section anchor="module" numbered="true" toc="default">
        <name>Module</name>
        <sourcecode name="" type="" markers="true"><![CDATA[ file ietf-ambi@2022-03-07.yang
module ietf-ambi {
  yang-version 1.1;

  namespace "urn:ietf:params:xml:ns:yang:ietf-ambi";
  prefix "ambi";

  import ietf-dorms {
    prefix "dorms";
    reference "I-D.jholland-mboned-dorms";
  }

  import ietf-inet-types {
    prefix "inet";
    reference "RFC6991 Section 4";
  }

  import iana-hash-algs {
    prefix "iha";
    reference "draft-ietf-netconf-crypto-types";
  }

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

  organization "IETF";

  contact
      "Author:   Jake Holland
                 <mailto:jholland@akamai.com>
      ";

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

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

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

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

   This module contains the definition for the AMBI data types.
   It provides metadata for authenticating SSM channels as an
   augmentation to DORMS.";

  revision 2021-07-08 {
    description "Draft version.";
    reference
      "draft-ietf-mboned-ambi";
  }

  grouping manifest-stream-definition {
    description
        "This grouping specifies a manifest stream for
         authenticating a multicast data stream with AMBI";
    leaf id {
      type uint32;
      mandatory true;
      description
          "The Manifest ID referenced in a manifest.";
    }
    list manifest-stream {
      key uri;
      leaf uri {
        type inet:uri;
        mandatory true;
        description
            "The URI for a stream of manifests.";
      }
      description "A URI that provides a location for the
          manifest stream";
    }
    leaf hash-algorithm {
      type iha:hash-algorithm-type;
      mandatory true;
      description
          "The hash algorithm for the packet hashes within
           manifests in this stream.";
    }
    leaf data-hold-time {
      type uint32;
      default 2000;
      units "milliseconds";
      description
          "The number of milliseconds to hold data packets
           waiting for a corresponding digest before
           discarding";
    }
    leaf digest-hold-time {
      type uint32;
      default 10000;
      units "milliseconds";
      description
          "The number of milliseconds to hold packet
           digests waiting for a corresponding data packet
           before discarding";
    }
    leaf expiration {
      type yang:date-and-time;
      description
          "The time after which this manifest stream may
           stop providing authentication for the data stream.
           When not present or empty there is no known expiration.";
    }
  }

  augment
      "/dorms:dorms/dorms:metadata/dorms:sender/dorms:group/"+
      "dorms:udp-stream" {
    description "AMBI extensions for securing UDP multicast.";

    container ambi {
      description "UDP-layer AMBI container for DORMS extension.";
      list manifest-stream {
        key id;
        description "Manifest stream definition list.";
        uses manifest-stream-definition;
      }
    }
  }

  augment
      "/dorms:dorms/dorms:metadata/dorms:sender/dorms:group" {
    description "AMBI extensions for securing IP multicast.";

    container ambi {
      description "IP-layer AMBI container for DORMS extension.";
      list manifest-stream {
        key id;
        description "Definition of a manifest stream.";
        uses manifest-stream-definition;
      }
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="the-yang-module-names-registry" numbered="true" toc="default">
        <name>The YANG Module Names Registry</name>
        <t>This document adds one YANG module to the "YANG Module Names" registry maintained at &lt;https://www.iana.org/assignments/yang-parameters&gt;.
The following registrations are made, per the format in Section 14 of <xref target="RFC6020" format="default"/>:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
      name:      ietf-ambi
      namespace: urn:ietf:params:xml:ns:yang:ietf-ambi
      prefix:    ambi
      reference: I-D.draft-jholland-mboned-ambi
]]></artwork>
      </section>
      <section anchor="the-xml-registry" numbered="true" toc="default">
        <name>The XML Registry</name>
        <t>This document adds the following registration to the "ns" subregistry of the "IETF XML Registry" defined in <xref target="RFC3688" format="default"/>, referencing this document.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
       URI: urn:ietf:params:xml:ns:yang:ietf-ambi
       Registrant Contact: The IESG.
       XML: N/A, the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="media-type" numbered="true" toc="default">
        <name>Media Type</name>
        <t>TBD: Register 'application/ambi' according to advice from: <eref target="https://www.iana.org/form/media-types">https://www.iana.org/form/media-types</eref></t>
        <t>TBD: check guidelines in <eref target="https://tools.ietf.org/html/rfc8126">https://tools.ietf.org/html/rfc8126</eref></t>
        <t>TBD: comments from Amanda: The first is that the current IANA Considerations RFC is RFC 8126 rather than 5226. The other point, which you may be aware of, is that while https://www.iana.org/form/media-types provides guidance, standards-tree registrations submitted through RFCs shouldn't be submitted through that form and (unlike vendor-tree subtypes and standards-tree subtypes documented in other standards organization specs) won't need to be explicitly approved by the IESG-designated experts. Instead, the advice in RFC 6838 is that media type registrations requested by IETF-stream I-Ds be informally reviewed on the media-types@iana.org mailing list, which the IESG-designated experts participate in.</t>
      </section>
      <section anchor="uri-schemes" numbered="true" toc="default">
        <name>URI Schemes</name>
        <section anchor="tls-1" numbered="true" toc="default">
          <name>TLS</name>
          <t>TBD: register 'ambi+tls' as a uri scheme according to advice from: <eref target="https://datatracker.ietf.org/doc/html/rfc7595">https://datatracker.ietf.org/doc/html/rfc7595</eref></t>
        </section>
        <section anchor="dtls-1" numbered="true" toc="default">
          <name>DTLS</name>
          <t>TBD: register 'ambi+dtls' as a uri scheme according to advice from: <eref target="https://datatracker.ietf.org/doc/html/rfc7595">https://datatracker.ietf.org/doc/html/rfc7595</eref></t>
        </section>
      </section>
    </section>
    <section anchor="ref-security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <section anchor="predictable-packets" numbered="true" toc="default">
        <name>Predictable Packets</name>
        <t>Protocols that have predictable packets run the risk of offline attacks for hash collisions against those packets.
When authenticating a protocol that might have predictable packets, it's RECOMMENDED to use a hash function secure against such attacks or to add content to the packets to make them unpredictable, such as an Authentication Header (<xref target="RFC4302" format="default"/>), or the addition of an ignored field with random content to the packet payload.</t>
        <t>TBD: explain attack from generating malicious packets and then looking for collisions, as opposed to having to generate a collision on packet contents that include a sequence number and then hitting a match.</t>
        <t>TBD: follow the rest of the guidelines: https://tools.ietf.org/html/rfc3552</t>
      </section>
      <section anchor="attacks-on-side-applications" numbered="true" toc="default">
        <name>Attacks on Side Applications</name>
        <t>A multicast receiver subscribes to an (S,G) and if it's a UDP application, listens on a socket with a port number for packets to arrive.</t>
        <t>UDP applications sometimes bind to an "unspecified" address ("::" or "0.0.0.0") for a particular UDP port, which will make the appliction receive and process any packet that arrives on said port.</t>
        <t>Forwarding multicast traffic opens a new practical attack surface against receivers that have bound sockets using the "unspecified" address and were operating behind a firewall and/or NAT.
Such applications will receive traffic from the internet only after sending an outbound packet, and usually only for return packets with the reversed source and destination port and IP addresses.</t>
        <t>Multicast subscription and routing operates at the IP layer, so when a multicst receive application subscribes to a channel, traffic with the IP addresses for that channel will start arriving.
There is no selection for the UDP port at the routing layer that prevents multicast IP traffic from arriving.</t>
        <t>When an insecure application with a vulnerability is listening to a UDP port on an unspecified address, it will receive multicast packets arriving at the device and with that destination UDP port.
Although the primary problem lies in the insecure application, accepting multicast subscriptions increases the attack scope against those applications to include attackers who can inject a packet into a properly subscribed multicast stream.</t>
        <t>It's RECOMMENDED that senders using AMBI to secure their traffic include all IP traffic that they send in their DORMS metadata information, and that firewalls using AMBI to provide secure access to multicast traffic block multicast traffic destined to unsecured UDP ports on (S,G)s that have AMBI-based security for any traffic.
This mitigation prevents new forwarding of multicast traffic from providing attackers with a packet inject capability access to new attack surfaces from pre-existing insecure apps.</t>
      </section>
    </section>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>Many thanks to Daniel Franke, Eric Rescorla, Christian Worm Mortensen, Max Franke, Albert Manfredi, and Amanda Baber for their very helpful comments and suggestions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC6347" target="https://www.rfc-editor.org/info/rfc6347">
          <front>
            <title>Datagram Transport Layer Security Version 1.2</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <author initials="N." surname="Modadugu" fullname="N. Modadugu">
              <organization/>
            </author>
            <date year="2012" month="January"/>
            <abstract>
              <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.  This document updates DTLS 1.0 to work with TLS version 1.2.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6347"/>
          <seriesInfo name="DOI" value="10.17487/RFC6347"/>
        </reference>
        <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/rfc7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author initials="R." surname="Fielding" fullname="R. Fielding" role="editor">
              <organization/>
            </author>
            <author initials="J." surname="Reschke" fullname="J. Reschke" role="editor">
              <organization/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC7950" target="https://www.rfc-editor.org/info/rfc7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund" role="editor">
              <organization/>
            </author>
            <date year="2016" month="August"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols.  This document describes the syntax and semantics of version 1.1 of the YANG language.  YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification.  There are a small number of backward incompatibilities from YANG version 1.  This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8340" target="https://www.rfc-editor.org/info/rfc8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund">
              <organization/>
            </author>
            <author initials="L." surname="Berger" fullname="L. Berger" role="editor">
              <organization/>
            </author>
            <date year="2018" month="March"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams.  The purpose of this document is to provide a single location for this definition.  This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <date year="2018" month="August"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="I-D.draft-ietf-mboned-dorms" target="https://www.ietf.org/archive/id/draft-ietf-mboned-dorms-01.txt">
          <front>
            <title>Discovery Of Restconf Metadata for Source-specific multicast</title>
            <author fullname="Jake Holland">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <date month="October" day="31" year="2020"/>
            <abstract>
              <t>   This document defines DORMS (Discovery Of Restconf Metadata for
   Source-specific multicast), a method to discover and retrieve
   extensible metadata about source-specific multicast channels using
   RESTCONF.  The reverse IP DNS zone for a multicast sender's IP
   address is configured to use SRV resource records to advertise the
   hostname of a RESTCONF server that publishes metadata according to a
   new YANG module with support for extensions.  A new service name and
   the new YANG module are defined.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mboned-dorms-01"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC3552" target="https://www.rfc-editor.org/info/rfc3552">
          <front>
            <title>Guidelines for Writing RFC Text on Security Considerations</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <author initials="B." surname="Korver" fullname="B. Korver">
              <organization/>
            </author>
            <date year="2003" month="July"/>
            <abstract>
              <t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak.  This document provides guidelines to RFC authors on how to write a good Security Considerations section.   This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="72"/>
          <seriesInfo name="RFC" value="3552"/>
          <seriesInfo name="DOI" value="10.17487/RFC3552"/>
        </reference>
        <reference anchor="RFC3688" target="https://www.rfc-editor.org/info/rfc3688">
          <front>
            <title>The IETF XML Registry</title>
            <author initials="M." surname="Mealling" fullname="M. Mealling">
              <organization/>
            </author>
            <date year="2004" month="January"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC4082" target="https://www.rfc-editor.org/info/rfc4082">
          <front>
            <title>Timed Efficient Stream Loss-Tolerant Authentication (TESLA): Multicast Source Authentication Transform Introduction</title>
            <author initials="A." surname="Perrig" fullname="A. Perrig">
              <organization/>
            </author>
            <author initials="D." surname="Song" fullname="D. Song">
              <organization/>
            </author>
            <author initials="R." surname="Canetti" fullname="R. Canetti">
              <organization/>
            </author>
            <author initials="J. D." surname="Tygar" fullname="J. D. Tygar">
              <organization/>
            </author>
            <author initials="B." surname="Briscoe" fullname="B. Briscoe">
              <organization/>
            </author>
            <date year="2005" month="June"/>
            <abstract>
              <t>This document introduces Timed Efficient Stream Loss-tolerant Authentication (TESLA).  TESLA allows all receivers to check the integrity and authenticate the source of each packet in multicast or broadcast data streams.  TESLA requires no trust between receivers, uses low-cost operations per packet at both sender and receiver, can tolerate any level of loss without retransmissions, and requires no per-receiver state at the sender.  TESLA can protect receivers against denial of service attacks in certain circumstances.  Each receiver must be loosely time-synchronized with the source in order to verify messages, but otherwise receivers do not have to send any messages.  TESLA alone cannot support non-repudiation of the data source to third parties.</t>
              <t>This informational document is intended to assist in writing standardizable and secure specifications for protocols based on TESLA in different contexts.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4082"/>
          <seriesInfo name="DOI" value="10.17487/RFC4082"/>
        </reference>
        <reference anchor="RFC4302" target="https://www.rfc-editor.org/info/rfc4302">
          <front>
            <title>IP Authentication Header</title>
            <author initials="S." surname="Kent" fullname="S. Kent">
              <organization/>
            </author>
            <date year="2005" month="December"/>
            <abstract>
              <t>This document describes an updated version of the IP Authentication Header (AH), which is designed to provide authentication services in IPv4 and IPv6.  This document obsoletes RFC 2402 (November 1998).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4302"/>
          <seriesInfo name="DOI" value="10.17487/RFC4302"/>
        </reference>
        <reference anchor="RFC4383" target="https://www.rfc-editor.org/info/rfc4383">
          <front>
            <title>The Use of Timed Efficient Stream Loss-Tolerant Authentication (TESLA) in the Secure Real-time Transport Protocol (SRTP)</title>
            <author initials="M." surname="Baugher" fullname="M. Baugher">
              <organization/>
            </author>
            <author initials="E." surname="Carrara" fullname="E. Carrara">
              <organization/>
            </author>
            <date year="2006" month="February"/>
            <abstract>
              <t>This memo describes the use of the Timed Efficient Stream Loss-tolerant Authentication (RFC 4082) transform within the Secure Real-time Transport Protocol (SRTP), to provide data origin authentication for multicast and broadcast data streams.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4383"/>
          <seriesInfo name="DOI" value="10.17487/RFC4383"/>
        </reference>
        <reference anchor="RFC5776" target="https://www.rfc-editor.org/info/rfc5776">
          <front>
            <title>Use of Timed Efficient Stream Loss-Tolerant Authentication (TESLA) in the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) Protocols</title>
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <author initials="A." surname="Francillon" fullname="A. Francillon">
              <organization/>
            </author>
            <author initials="S." surname="Faurite" fullname="S. Faurite">
              <organization/>
            </author>
            <date year="2010" month="April"/>
            <abstract>
              <t>This document details the Timed Efficient Stream \%Loss-Tolerant Authentication (TESLA) packet source authentication and packet integrity verification protocol and its integration within the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) content delivery protocols.  This document only considers the authentication/integrity verification of the packets generated by the session's sender.  The authentication and integrity verification of the packets sent by receivers, if any, is out of the scope of this document.  This document defines an Experimental  Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5776"/>
          <seriesInfo name="DOI" value="10.17487/RFC5776"/>
        </reference>
        <reference anchor="RFC6020" target="https://www.rfc-editor.org/info/rfc6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author initials="M." surname="Bjorklund" fullname="M. Bjorklund" role="editor">
              <organization/>
            </author>
            <date year="2010" month="October"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC6584" target="https://www.rfc-editor.org/info/rfc6584">
          <front>
            <title>Simple Authentication Schemes for the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) Protocols</title>
            <author initials="V." surname="Roca" fullname="V. Roca">
              <organization/>
            </author>
            <date year="2012" month="April"/>
            <abstract>
              <t>This document introduces four schemes that provide per-packet authentication, integrity, and anti-replay services in the context of the Asynchronous Layered Coding (ALC) and NACK-Oriented Reliable Multicast (NORM) protocols.  The first scheme is based on RSA Digital Signatures.  The second scheme relies on the Elliptic Curve Digital Signature Algorithm (ECDSA).  The third scheme relies on a Group- keyed Message Authentication Code (MAC).  Finally, the fourth scheme merges the Digital Signature and group schemes.  These schemes have different target use cases, and they do not all provide the same service.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6584"/>
          <seriesInfo name="DOI" value="10.17487/RFC6584"/>
        </reference>
        <reference anchor="I-D.ietf-tsvwg-udp-options" target="https://www.ietf.org/archive/id/draft-ietf-tsvwg-udp-options-15.txt">
          <front>
            <title>Transport Options for UDP</title>
            <author fullname="Joe Touch">
              <organization>Independent Consultant</organization>
            </author>
            <date month="March" day="3" year="2022"/>
            <abstract>
              <t>   Transport protocols are extended through the use of transport header
   options. This document extends UDP by indicating the location,
   syntax, and semantics for UDP transport layer options.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-udp-options-15"/>
        </reference>
        <reference anchor="I-D.draft-krose-mboned-alta" target="https://www.ietf.org/archive/id/draft-krose-mboned-alta-01.txt">
          <front>
            <title>Asymmetric Loss-Tolerant Authentication</title>
            <author fullname="Kyle Rose">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <author fullname="Jake Holland">
              <organization>Akamai Technologies, Inc.</organization>
            </author>
            <date month="July" day="8" year="2019"/>
            <abstract>
              <t>   Establishing authenticity of a stream of datagrams in the presence of
   multiple receivers is naively achieved through the use of per-packet
   asymmetric digital signatures, but at high computational cost for
   both senders and receivers.  Timed Efficient Stream Loss-Tolerant
   Authentication (TESLA) instead employs relatively cheap symmetric
   authentication, achieving asymmetry via time-delayed key disclosure,
   while adding latency to verification and imposing requirements on
   time synchronization between receivers and the sender to prevent
   forgery.  This document introduces Asymmetric Loss-Tolerant
   Authentication (ALTA), which employs an acyclic graph of message
   authentication codes (MACs) transmitted alongside data payloads, with
   redundancy to enable authentication of all received payloads in the
   presence of certain patterns of loss, along with regularly paced
   digital signatures.  ALTA requires no time synchronization and
   enables authentication of payloads as soon as sufficient
   authentication material has been received.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-krose-mboned-alta-01"/>
        </reference>
        <reference anchor="PathChirp">
          <front>
            <title>pathChirp: Efficient Available Bandwidth Estimation for Network Paths</title>
            <author initials="V.J." surname="Ribeiro" fullname="Vinay J. Ribeiro">
              <organization/>
            </author>
            <author initials="R.H." surname="Riedi" fullname="Rudolf H. Riedi">
              <organization/>
            </author>
            <author initials="R.G." surname="Baraniuk" fullname="Richard G. Baraniuk">
              <organization/>
            </author>
            <author initials="J." surname="Navratil" fullname="Jiri Navratil">
              <organization/>
            </author>
            <author initials="L." surname="Cottrell" fullname="Les Cottrell">
              <organization/>
            </author>
            <author>
              <organization>Department of Electrical and Computer Engineering Rice University</organization>
            </author>
            <author>
              <organization>SLAC/SCS-Network Monitoring, Stanford University</organization>
            </author>
            <date year="2003"/>
          </front>
        </reference>
        <reference anchor="PathRate">
          <front>
            <title>Packet dispersion techniques and a capacity estimation methodology</title>
            <author initials="C." surname="Dovrolis" fullname="Constantinos Dovrolis">
              <organization/>
            </author>
            <author initials="P." surname="Ramanathan" fullname="Parameswaran Ramanathan">
              <organization/>
            </author>
            <author initials="D." surname="Moore" fullname="David Moore">
              <organization/>
            </author>
            <date year="2004" month="December"/>
          </front>
          <seriesInfo name="IEEE/ACM Transactions on Networking, Volume 12, Issue 6, pp. 963-977." value=""/>
        </reference>
        <reference anchor="CVE" target="https://cve.mitre.org/">
          <front>
            <title>Common Vulnerabilities and Exposures</title>
            <author>
              <organization>MITRE</organization>
            </author>
            <date year="1999" month="September"/>
          </front>
        </reference>
        <reference anchor="WEBRC">
          <front>
            <title>Wave and Equation Based Rate Control Using Multicast Round Trip Time: Extended Report</title>
            <author initials="M." surname="Luby" fullname="M. Luby">
              <organization/>
            </author>
            <author initials="V." surname="Goyal" fullname="V. Goyal">
              <organization/>
            </author>
            <date year="2002" month="September"/>
          </front>
          <seriesInfo name="Digital Fountain Technical Report no. DF2002-07-001" value=""/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAP5DJmIAA+19e3MbyZHn//gUHVRciLQBiA89ad/YFEnN0CtKOpEzs77d
jYsG0ADaanTD3Q1StEb72S9/+ahHo6mRZz0bjoujd0ck0F2VlZWV78wajUaD
Nm+L7Dg5ae5Wq6yt82lymZb5PGva5GXaZLPkomyzRZ23d4N0MqmzG3r28uXF
YFZNy3RFb87qdN6O8qydj1aTqsxmo3Q1yUf7R4NZ2tL3h/uHh/TXaP/ZYEof
LKr67jhp2tlgkK/r46StN017uL//Yv9wkNZZepy8XTeD26r+sKirzfo4ueRB
Bx+yO/pwdszw1GXWjs4w8WDQtGk5+z9pQU8dJ3dZM1jnx8m/tdV0mDRV3dbZ
vKHf7lb45T8Gg3TTLqv6eJCMBgn95GVznPxpnHxXFQWNw5/Juv6Ufsiij6t6
QWv/kK7SPLnOpsuyKqpFntHoF+V0zI80NF3WHicHT/aTl3WVzm7TO/5iSvg7
Tk4JM3U+W2TD5PIk2T88ePxYvq02ZQu0fF/mLaH8qiVENUk1T05WGW1Jyk9l
NHFxnPyF4FoKWGNCwx8X+Hg8rVbRkv5lnLyvmixYz7/cFZn/7J9kMR9qAuiP
/N8xgTQYlFW9Stv8JqMdSt6/Oj08OHihvz49evxMf312eLRvv754Yr8+P3j2
2H49euw+ffz4KX69GJ2Nt2l1RvM1x0SL5bwz89GTJ4f269Pnz/XXx/vP7dPH
R/v+1+dH+uuTZ8+eGsD7hwbE0yfPHxsQPH3b3NwuRpvZelSt27yiLYtAZIy4
81S0Kb5+l7bL02Ver48ZhXpyd9bu4+R8Ps+neVa2yckN4Ted0Ja/JEK5zWft
Mjlv2hxLrMqEFpu8yVocMx622eEh3eHgn5H+axT0Q16mdzgs7/NJltfVPY+9
38yqYp58h+eyWX7fU/l0mdaz5NsxQVgTy9l8uOfJP+V1nrxJb2oCvbjnmddE
YadVSxRbbD/CtH6WrdO6XQE3RIrnRTYFs0uLhNBDr67WG2IryXm5yMuMyLRc
AMIMRHyT1Q3YX++wV69PTh9dnV6NDJuXFZF9hQGGIH2Q1aw7ijFG4pGyq+/x
QbSp79Lph6xNZnmzxou0ZS1Oaf7XDa0UIKfJNF2nOIpJ5veVWPiymuEs333N
jp4S4RGMbV5WTXJW3dRVkTf3PPuOdmmVNbfYrOQ9MY6SAE/Le54+S2/yGSGj
qoXfNITTrMEpo8VdnJ+fPzo5vUyuaawmnfIBSAh8RSIj74eq2Kyy5OCQWFLT
bLLk6TBZr8fJi6dHoxfPno13AlSeZdNsNaH9O9wfAq/gRKc/nMcopU1e0Rw/
bIoyq9NJXuRtrsg8/7iumk2d/cwx4B2/vLh+fy4Dp/UCDHLZtuvm+NGj6U02
XuVEg2BljwLwrrJ1K/AdvHjxgr748fzl+9MYuh/Tm0xg+etG9lLEL0gD+9TS
3iTfNyDMy03REumShH5PvHZGWMzXyXUOtJ9/bLNyhteyNQm/r6GBy3HyejPZ
Jm898+Pk2+ouLbY38Sxf5C2dn1fg92leihjhIyWTJ2U1Ts5e0XaQ/H822t8/
2OnFCR4YDEajUZJOSOYQOQwG18u8SUjF2PCBnWVzOpVNn5Iy6igpyS60k73x
AP8kaVFUt02SpdNlUhON4BTSLoL9ER3P8MecThIkXbrC7yuH2jUfwCZpq2S6
zKYfknaZkWi1aehZfDCljSEIWbzxLPIaPchf01JtdIWoouPM8nByR882vJ/T
+m7dVos6XS+BvuIuITDzec7se5k2SxGfbkADjQR9PsuSlelrdDqbdAEZDjpq
iBAwOl6zR2gcYAAEQVDn0MdmSbVpR9V8NMFLpEasNthEpkDi0GWZFc1YtmeV
z2ZFNhg8ALrrarbhg2v08unBuq4I4lXzeTDwJNriiDM50BGjhTTZdMMYtKcJ
wLRNSPUjemkJiU1OCEhnMzqN2FnCE1bQEDX6d1cZQMsbenuDhyDOGOxwwjHI
KCNuEwC7gzGU3ShGlciI3LJmWucT4Oz6nPh68umTCvzPnwWl8jHt7dX763f6
NUn++OvbnETtyetT/ujN2/eX8iD0gs+fadVZA5LOPk5JVLE0oh25ybNbBxEt
Dd/QRmJNxPBBg54wg80zSU44IGkA7BY5Ka23oIqGKIn+W83bW+CWniKGnFWQ
KHSAJht+mWFNk2W+WAppMfLmRCIg0nFyHYODgUjny+a0Q81mtUrr/G+E/WVW
k/QaJL9JTkgVPE0mfCRp+DTxB7YhaZ+BKqc1nY8pERbt9iST/Ztk0xSLCI8Q
Eb6sek3rsMOr1DKrmFjYdpCXKkJKLduw4UN1/9zZR6HEkKzwOWE5YhRjXpEf
hU7uSGFr8gVJPwgMrIRALelg0Irl6N4lxHWSSd6O9Kjr6nR//YnQE0eqB+8l
cU4QwzJLSbw3TTXN+XzyJrkZ5fVV3rBSgBGEWQg5CMz0ebB49ybzugJCqzZe
wdPXOWPMIdv4S539dZNjjaRVCTNi1KxZgyKiIBpw2wUbq4L2ISwnDbd4sYHO
0Ga0lhxEQdpKRphagbnUSXaTCRUTQyCrrSr8HtMnIFo//4x+AYJlo4FM2rgQ
HwTYLTHRJQ1OTKS8I5OFj1omT9MuzDcFnZJ5BiB4WqZ7Uf4bB7nQ023e4PAV
zLJ5fQTBgqwizFNUDRjjydeKJCfFUtXSeHZP2PSHMNhkUn3MRPBsCYaQc/vN
v9sWTqFQs/0kVortTmsTC5E0ofm2X0p2nOjYSXaVQ8o+fvpEFvXIvv78ec/W
QkDlaQIc/pxgEXTrLjddzuZpm/feLY+Qfp7yFqvcgxAmBUQwK2Q9yxf4pg9i
+aoBwNiAjtQmFBDVZ+U0CzE3r6tVV6APme+RsUY0jM3JoJPvrE1vxyQ7Y5ZA
0Wc0ybSq6fgza0jjPWZpb3xCX3MqBgt10CAhi7A0v8M2CvUaePIKnY4pzSHS
H7sqlDczCAjh87wQ6t/SUgbfrwn34UHfgp+1jjTC/012Z6ebhXTmtrjLoWTP
2y208EyOggLKpHla0sCIwch5Vy0O4oEWQq8pur6om3Wonb6ribHRSg1JwnIY
lPF96icG2WHrHR6uneTPJ2++FeEOJwQJ91VFDMpT2l1aLujTFFtHXIiAMR7l
R2L/w46+afvEI3zBX/H5M2mTRVO5F1h7ym6T799fkOBfZnQMZHedqIFuGyuB
16+vwHPO6N+hWpQYYkUmO7Hou3X2syN8d3397kpInA5MBVQ2RlTEOAFUtCLg
xI2HNQwePGDTmzhSY9oIK1EDVd+dUhWoYvxpqFKlLRkSa5bfdJbzDHYUSb1V
TqIuWVSQqvOItyj3iwhGyL/ptQFUdc9XojeIvgTbwYQ17GBTDuWhIXZ9Rcrs
ppbVY8J0BVOJTYWPhAchSBWys/HgAkSCYwOXGs9Ici/9qISnzzFBMt8iw31C
1joLXJp+syb9hEQHDEJw2KIim6W5K6fLuirzv8nZm5B9nZG4hW0AO4CetQOl
NCAGk3EGUyx7MLgKNXy4nWhwei0z2wrP5DjodbUh7RKjlWLdDyGiif2koGCe
EM8GGl4Vizmnp+lE48HLOz7cNc0OrkBnlf4PygbhvskhLDwpOe1rS+CRmH/I
+klsDtEW5cS2kg/ZHYYlfZlwSQIdCk6S5dALxKZiYU2ymlkRAa0LjycBICQH
k3led3R3ocIVRnUsMeJu/C0pZ9iLisFRWIimhkl1DxTLqpi52WUteG57NTSl
qErrik5CPD00oLIiFaeEruhIDQ/lgfkowhjnn9Ul5h/wSrFvhefjldkOME3f
J+2dA7ZixQEUB8Vh2H0OoE1E7yMp1rZ8vGjdLBnJuhplH8nCYdGYrYvqTmw7
2wY+XsYATOHsNa43fEJ4VJIUUPDUbNy0RczSzCoFR4soU+jPadEpG0cEKkhu
BieNWRwxAaoOI+zxOqtXOTvn7wTT2EgEQppk5/L7q+udofxLlib//v78f31/
8f78DL9ffXfy+rX7xZ64+u7t96/P/G/+zdO3l5fnb87kZfo06Xx0efLnHWET
O2/fXV+8fXPyekd4WygtwfZlkWCwNW0JFpU6+9pQp879kKHDgU9/3xIyZB62
qORPwhCpv8TkiKlDzyDzg0gNHihhts2yui1ZJRPEvalaFYLsPIPFW9WiRL3P
YG8TqxkM8BSgpcmT8xkct8fJuyIDyyNeSwxeFqdOA347J+JoNhPnR1C2t97Q
ETEjTBQIeyvng+mNGbKvoWDypytEmXLxe2R80GuGTgiSZFlRrQWt5YxP70YN
HXUwQUEAC5mnNa/7QfJDVm66KzfYz/wAnx7c4MHPXWUHzFTG/pbOzGZC8BBX
BWYI/S2Z+b83d+eCv0fk6dG39Wa1vntbzK7rqigeec1mNC3IRM/qbwaD9yQp
wd5BH7dZMcXJouVW6wwYasyvDdFEyKTtxcFhZUOkUQAkrVQ3qeT9Y6MtWGvD
5h9R4CojY3cm49KWsaub7ShSclpmgiWTJsQwHbMZxOBaRp4SnGQrFnygofEK
v2WC+TEj8HTf/bzl4jhxyAEvgS/zQ1ZzwIddwgTDKm8fAegRoaB4RGi58nBF
+zvvHCui7w1x9hb0si5S2CeyTZcv3745P0vUb55w1DRBdA1/EdcmK0h0xz8a
HHtjdtb8ifh+APHt7a2HFO+TtveoYF46rx7JEN/gvSs6gtNl8CYexkckOvwI
+ODRpCZtItOXsdoHfDLLUTW5yasNL494cpXTaWCYrl+eHRN1kCRhcwrmO9SB
psnqVvb5NnMnCavHFhHNtJG1VkG1SXavht/usRuKHvn+7F0CtVOIrCQQ+BNz
OYyTNymBH1vYQCCe4gGbdTYlI4bA8sPki5IjPSr+5AvS+kpzapZQTpkIEBal
7ZM/2UoirRfajQEG6zwv/wKWAfGkOtWMJMeU+SedTBIp6womjdDwkqSfeLpm
+Zx5SgsGWUSGFjYwk+DK/pj/x3qMQw8rSkVGZxkhpA4CaF6AZ8Aw28kEWlmO
+e9gQDlDgV4ZiQtQVisa3XrNQKSlx1USOH1I3hYk95TNQ42kld+yWT1GjEw8
5QZJtMM42SRY1uLRZLiYqYg941wNlbirJGijG+S9PPKeOqxqSGV2OjjLOtes
A/O31mD8pHvPkmy8GNNcp+/OBZllygsjvlAK/x81iIArSmxZtBo5hWd1RUKN
lRhsIIO5ZuzAMvvtq/PTV+9PLs+dnAUdOo0KYuvp0dMjIid40uFaWJHAXcLS
nLBHkiCbExZYxyNBuaoaxGWgz5E6ma02H2H5IC3jzhkHxPDTvFZ3w6YmTnNy
9n0zVG2RuOVtDb2r1ElZZLGKo2fkTiwS2ecivSMOmCRXfl2Ond/mdDCXiHup
UkRPw5vizgYtj179rrrN2EDBi/MNuzLVmlZFc5UGYZCR+rBYK0yFA+YlnQIy
1MQDmqXzEX9sqnfemlqJE7tZMMMVQhFSU8DY4PeGPG83bRABXKiod/QCRzwI
awR35YiIYS5u6YbkzAiGY0EnQuyeBXvkIf7aDjdOy1R4aQMnLmuyj+pVO5pn
09Gaw7EEVd9H44/LdlV848xv4i2EyyZ5sv/kkDcWRDMmTq5WmNHRUH57+vxA
RCP/9fzpE8R8rpeE1ja5hKdC7fOclToCTViAxrbEORAemqFq0/jM0nei8Xp0
Q6RfsI9APAH5KlKizqCqew+rbJI3SSM33WSTF2yOqsB0UaSUjGPohJ3J9WNS
RGnCGSwL8XEQDKrKZaX3hpvJqlxowsQcGNY9IUUmklSiF9nMjHEzUWbpCh5M
9kllydUdPUNrvzKgd6+U1A7HR6DnAFl7erSqJov9ynIUwdQR8Wb1dIMDnUGy
IsiO72FLLpZiEKvQAsceIb2EB5nP5Xcme3aweVOPoBXhxW7sagaftAsMkHLk
TVw/Np98cFxmWtUqb9RLrwiBb54UIlAT63DOsSffP2wscEMmES3qx2A1HdkL
bZBnC2dS086hScbecmsI+KQFEa8CBQREyMuZwEgIg5p0CDivIPbuM0xuxRPw
2QAY3hJsmwVtt70rzGaj0YjbFxsCA+lWQkn+AdUW05sqn1nESLSFBswLaU6R
xc0DOkuVTk6FuDRxLfE1p7zJLo5DezrbOBKt8+YD0OfXY2wwIsTx4CqHW30V
h4ZXeRuE4oJgRKjqrLD7bqShWSgSTFVXffB4uM0eJ93lxG7iIF4FMmKP3MCJ
HszvVJU4akEAwIUfeHbNsQ0mpFbCIkPOiXM9xq5vyB6jqS6Q6QKRjdYdRM4Z
oM2ryACteVm3y8rioXB/qRJFTM2BRedjLFZeAYNS9iqeRsWfQsECA0uWAJ+L
yxmLyle0AMDELh06iML5xfQlDd8xqxPlsJ8eGFMdDM5Dx6VA2uQanu09RPGx
jJw0CAxmrFdq1MEChOzSxQEX1heQugSqGUJ29smoXltrkl3BAsCLxcweC7ky
Ex7HoVg5d2dv319e/ZzLPrENY/IxjyRLN6dSNHamZETWNyQ0wP6Tji9d4gt+
OX71X1hCN+HFufR3twJ64nBq7kVVDKwsz58LfPMu45y6lik59uPpWYneBWaI
mmD8qXcs9Dx2hX7otSMNDqwTsu2NcwnI2N7hGMZdRRs7e3PFumdVtVCD107g
3PXBxy56Zhcf4VJkmal0h4GKqvpAprfnI3aaiF9hWSJDnIs6Wp4Pm0XYTTsk
pngiYoBrNhEnce8zNB+x3xZJXFBaPpTwjhnDdixxl51cdhDZ6KZnQJtYkBw+
jospVvbGg7fgtyKFGZZoBonRcegxJRxOcYrn4sWPYoCMXAhEA1EiAnFMw1DC
KnGImIjElFj6mAcrYmA7umoO7b3nxWOCTRmbuhFngQaHJeHBZXWLsZSHd7h3
EBx2AVELsIbstO+wqxiTfSPiTBkEjcFEDvkvTO+ybfpini6gapFhMeKU3Us2
AJQrlTJbsqkxp4sj9cIJYgjI0zifQN8B8ohXufQzFu0k62/FBgh2sEeP305M
EN3EOD0YMHNf3WnPCESamqhlx8+ionGXK2H68hC0KZIm/FogllPCBpnljeVU
9aBC8wx8QM82HOpb+iHDASOTkRORSHJOSRQj2+SGROwsYnr3SDNgJRMpaxFD
1i7hgCTuBAtekAHJBjSwJj7V3FAb24iQY8Ea1ewSYsRNEDiS0xno32wvhepM
0xcz91vOSW25KpI94kWd0ycFrD9OsxcyueaI0nsf3GwGg7fiIYrTgUIlqRsS
El0Xhqw5pLCDDhNOLOZzJ0TFoM+9Q0r9e+bBf4UQ68d0hXyotKP6+eQq1jZh
ADdhHsnQGDP2KJDaZrl5uw1lAaQZzCqo1LfmUkuRQAMRQWuegXQyNXDdQhw8
4ToNUTaMPg3mwEKjq3nDGeMYAr/E9omkmKzwbQq/My3SrLwJHZd5zpspeyQC
lbmN4w6RteGYGjaYDoK6uJhQ7asucW6lWIgG1LPLHVsszhH11oq3WH3Kists
PcP+eB+uaLwsoy1BPG8sIElS0NIiOuEIKL1sqTvdd4BYoFfDZMVpuR3e3vIP
aPDfXB5iwy1EZnnrGWo/zsR9ZrfyD2eem+c5cBDfdDLhmXycEyBSVD5m9RSG
XT5Xsy4Yh9nL1OwOncfF6i8Dwz0rxdGl3O1rEvKT3dMfzvfEi0fQffpEf9KJ
2fUZNWzJzkgDqu9GnPkKoppo0oLLf+2sdU9o3XaQgw03JMgyzQaRvbwnVxlo
J9Bo30T2r4jBTxHOIOo3KS2ec5dAMuDAxivE5jlJCpOqQIB24Xwr5jEHyG4D
ZBJ4bjnw05iwj3zS/MesWiET35MUn/yTy+tEPCJ5KQlg8AaLh491m0gkzYkj
wg1F6pzn427dFq9Mk0VVzcxJmodZMw2OHEtoOqTjJDkhIZEuahpoXWw45a2g
g0CGESnLN1rcogRCVi7vdPaRVloKlbKanTORTdhtTaRHkr/OuYzgK4JQq2Zh
EajTb1+8ev2Xd7ebsjq6bG/+fLN4Mz17sn764uLxo28I1Dcg/hWQ30wzUmHz
CjP/Laur0Sy9S96fnoNJdXZLDRcOzVmCPQsFFifE8MoN1zmYmpLdINyV3CKt
TTSPVfoXjjBx/Aj5sGApzjmLyN4oJ/u/rhZIig8W3fyVmBwZL6TRNGONx+bV
o6iGzPbF5Sn8zNdjdh3D4/vOpMxbM++Z0b3VhPUBzKGKqyi6PC0NFRuXzGRW
h9kZnKrScq5Yu0RW7TrPplLrEPqm1HEoKUCocvHKnJ8EH7HzPsqk6GSI9rtf
epROHq2bLjkzSdFaEreHMU4Q1fHhFIVaF84mNrUX2WkdCmoORfcZ50JV3fXx
ZCrKmNP61bIRwIkhWwlO6pLiSJsaAiZNo00MddNxDLfBmDdsQ1Rsgcw55xf0
wPaYz6LtKCisKemO3PdKrHkP+3VP0u0XObLmndGmeqjtRl7rM85jyETEE0ae
grQnmXjL/9iFySWD5H/LDJHtRmMhpCaZIp9KgmzJdZnvzr5Pdt3BYvMHdbJ7
W+q7j6daZi7pE7OKXbjVsA+i+5xlulcKoSc25AvqCPdOLpEPjU1aPhdn7LNO
pT4hjW1uvz5MAv7SogA50wrVaS4HXcpUAJu4RyT6WnBdCU/BKUApp0K2EqFv
VgjomzvKkjCHnCcU0Bq8GGlvVRDxsJcbRMzVyHkX2PxngsvBQErtfGS9vzLK
47xzMqw+IdyBXAuR2BfldUzWOMgY7uRqKsUSxwtssThB2iK2ZtgqpAobB/o9
12Vuu+Xj+FlfhoM9mTDOZMlSC7FRO1vzOW/T3Hm407qGvq9w57WUhWc1inDB
TX7kVwCTpjCE8iI3z3x46PuYdmpKs8znVUtzWnaWMdzi0XkTc8dt0LpMN4Lj
HljDGQwyrbVamdjvjPMVgJ3EqSlpJ6O9RPCrkRSNCFe8zzXrFXCZj0j9qkvL
HIlEoFpQyodVb7EiMULIaMZuRJTO0ENpYZxYJLlV1MQ0JSzEv41UXYj5Bh5C
S2QIc1g8K04lUxnfbsTcuE92B8GjLvxDS9pl/lBn60zQtyVlAJlzHtBm0tnk
YdqKa31gYskQVasbELshEIbUM+dR3BPtUTsWNWLga6TpasVOsJ3jwQkXlqTd
LbcjEji8OIeNpIGmRnSlAaMmpJQ6YyNBCWYGCs6l3I7Dkr26QPeAWuKToNOV
ljRfpiRNreaVGdk4ioK/ZY3wI7wL5mT+0okI0jbmm9p8RtOobLR23t7Q8A0q
gMGlfYa6f1xz1QmWi4jzimMdnNSYn7pmAkB1HS5c1lN7EG6jvqXZuBDRmhKU
Nl0f9digiUFg6nHHRqcfdsm7gBx0AsR8de41Uxbh7GfMMCvMSl8X2LvH/YeO
9VqbS5YJj1sIgGMXX+awFsoOPXvsS8AqNXhNI1nyq/e1/piXRFskySXs3EFG
yubpRhx4UCjEiiu7VNdo8CZIhVYfJychNN4t75JXvQoificR4JJ81lv71KhP
wHaC86Lau7X6FyeB2J/c+USTMLbtdfpOjcO23gzvTYiFwJsvWcuWD0byk3UV
DDpx+lJQh8IZS0FUXtc2raScy9QdUVlX4SBQeCJNpHWOZ3ae847FT/ggemTC
5F1x4zK5LMM+dEFDEoU7SSZdCjeOk1/xkjArrE2yBg+hUhAaG18zqqDx1wf7
0fcxSBZH5ayWy5M/YwLSJjPO6DapR8qSpW2bKzpUHiXpwVnbsDOCl8MHBUD3
FWn5bKYCoyiGUnkcOFa79WpRwFTr7AUuJXlUpjptOAt27mHjl+aZo992Y1gC
Q4NjYBlrvME7WMeIVQVsxo7UGggWg4+HOPzaHgDerhxxG8G+C/BhSKAa3hZ2
oJtiq3h2cAYtBmSDhJ8HzkDCakMwDzXhRlk4bMtbNFxZITM+DNHQ+0XFnWVm
dPJzPk/5jaZ2LIxn7859hAE8Rh2v+YqjQJxiimWi4wa2jtbJZ6jJ2416XbvF
Plqt47iYhnfClbL+0rJHLTj69chTHJlZd003vmVGgFh/vpzahZoB6FSK2Js9
+NSnQJoJux4C6Mc/w0tYxstW9qbJRaSBeaVZc8qCnE3vEoSlN8uq+Tw+SirP
sQmzXEBg9ydJOuuP0LeVpVV9s88uoi6V1/OKNTlVEQLal4MYcJZunEPpbTci
K8eSjB8Y3QYHlndxU7qM9D2EGyccBhB9HOaW5eaZRx0aYkyQUtrAJKkxolqO
fVwMppL1HXKtataNOIXTWiF8m65JR+oVkVE5e1AWKPTQjbivZYLMu7ZtikW6
dqau733SUW7NwBPD23FxKYKY1GntIhzKEdkraYnqsSZvQaWgzQgHQeDo4mmN
mszKlQ0OShAk491FSFT0rDc1D+EiSB1uaYVCASKCHEtmRUHGKacQ+aZQzLdc
16+J6/o1I/46NbU3OAZgqlwTavkDklLmNEpzYopUDF0F3JIqLeCE4pIT7W0h
OSZrlOPWZWCJs+4xHpwLrxOvDytDHnZLZVTtJM7HdW3P0GdF/kRTJOu68ukT
d1PiXGHv0etDr693M3PYu3KDBhL36aNhIamUZXrDZEtPv+6ZX1xZzYcGXL5g
Fcqzcua8fxc8LIZNvTNLXGru/LnJ73//livosxuNXLm4rRZMsRenN2eLq9+g
7jvvi1ZdtFZNMdnUUTaJxoNIc5x+KO58gX2mZbtf2A0bQEOwogFF/Q3M0Wvt
nCKYh4L12JMWZZakvqdKKzVhW5Z31edAFgc6Z8YEKvSrIOs3YgFDg8ER6JYD
m3fEqfqO89uZ9QYi1zv4sx6ldXVsXXF3ajc5dW4mnx6EjTCEv8t3iPlwsEMe
0dAHPXLS7QLR021jyxKW3Pt2qx1FT1ylKxaVY3YezZv+p7XjlQrEhnX2g3Fy
0tNBxZLK0GjD5Qclu1Y3u0dvHuLNLQeoNN3Is5qeOBonZBqzywFaWKoJiheI
+N4VFSpNxEqVIDB/NE52m4wQ+0n/HqHHgsuy7MAD9GIT1RWTrJtsM6uWXEKp
KofHge6MjjuUXNGWC4f9QzEmxQiQ3kPo4ITZWeMQJ3/HQLX49cmW3uYikW2F
KjoXeEUM8VE9nz57+uLpA62DHR2OD78ZcjhktSbs0vl21Y2dAB0hn8iItLFR
W40cs0ym+VpyNHK041lGCSFcf9ssOY4k5UNgtlyHofW2iopu4gYfD9m0a3S9
+PQg2iB55AHv5E0zDvfYJ3appyTSmSVcaHJdTzxG4ZIoVvllixtlUVXUNIAn
CgrU8ebu/seDgz3HnQ0O5xchCp9uivvSzFXINp4jBtRphYDlol1a+pKPW4cP
VtOWNfC0cfM5xwR373NZf4iLqcjAAEa9xtfCQWXi8Vfj8cKh8b+CCHzFBaTh
we1ttMefcbkhnxzJSCirsDWAZWUE+xbki3SjsHIAFd/EVQqXVBgd9fznkEyz
fSePvtaxDL1AEX+kkcomdtn7zZUNddMrHlxU3GoUFKMqUnAkLisyI5T+X8Vo
hJaHEkESrmiyEckqr8Sag1TaoZBOdUOsaSEJLhl3cgOEa0vRlKwc8bGzU07b
eQVpYL5kOPRe9xG8Zb7lBioLZDyIKOF2NUe0hKAepSNvm7BqxEXKfIO+dIvg
hNWb+RplHg4tZqG9LpwnzfW4cJQ21AYYpm5J/TspVjOiTgYbTu9a1DbO4RXH
/XjwvbZ3KQmoq2yanMQ6n1KXNjvcRwOeXIJMimmyB5Crt9hwj7SgIxyp/DeM
V+dej/vwWaF0ds+U0p8lb5usmN+bpBDskKU9DFUxiB3SSt73TkUE13B7PXbu
mtsgdD9CU3Xxji0+JOWyEV1i+zn1hXWEbYOuu5YYeYMTzUxVYjhWBxCMcLhl
xV9kuTRbSAGpa2tprUzp7zsNu4mZ7sb5a6JT0h0rKpRGNNfOSdfG0PfhqHGZ
rcp51RHlZwyOA4QuLf512hCZmiu4p9DbNVLd2gneAp+9aAnT20X/4mg3DHY5
tO8xaEPH3ZFy2iN30jk7D+xq1KzRmyHo8RgmSqZcuryWkn4z4UO1oGN2mO8l
EAkqIrsSjjW43rz1of/+F+uXKhLiNnNehyyyNovSd1Sk2Il1IsyDIoGGzbTd
aN6TTArV/T//8z8HyX6y/XPQ89lhz2dHeP2AvjpKHidPkqfJs+R58uLv+Wzw
29F/8X+Dnxw4V1pELy1tk92jQ/QGbYisbh4/Ojh87v56uhcs4qdghL6f8Xj8
xe8xwj9uFWdwFmlC5t+zkH+mVfzvrIbDAWPS/7scLP3b/age9WthMnEE8Q7s
wc9hv4SoDh75B8MQ/Li8wQtn4v7qe9HzY0YY58Td//PPQVHgUWI7xqdbjHkc
COhbOArWQ0M7WsdapRmgPcerZ6RZ8NQXhxNKJw0CCXWcoijuwn1n8Crx2yT+
NIgpwpwec7s+c29IRzdtSZ9RsCL1Ab1f+gSZtulzLoa0uEWcKTBqoSfIkL0D
WLLHDbKGfCdmW5Ac2kFoVCFcKmJIcRQRGK8hDCRKl85Nqe0sDp6OCHPSI9Ji
IA/Ck6tBXfnAGmSGW6HsJp8rau5bmHjNuspJH2X4afFkSA2/3vw9zEFAODoU
BHmecU8qZNfJIufbeVk+a2hEv5VqXjPQg3aLX/StsTcCBYdTs5P7XF6DYD3m
BHXlzqJpueW+Tu9gmX564NrKFPzJ5//39BP34xZ/JS7PL8qDX0sWOCC6Btx/
GwyvuFXnPXlNvw4M1wpF5KdPTrldLOZIrl//kFyxZbFrNwjk83lyDc6+9w/F
A+QnzUbqnfDU/+mnpnO3D35yDTaJeUNZ+yvqBpimE8Hol/L/WMl+/3FAOET5
nxMYKinQzY62pxvMuPbSz/LsIm/cTj7bid2A2+2s9EFfHMnZAJwSGCSPcd/J
TJP7XITNuR+c9SnA+HzvrWrMLjvv9N/mZTRttbakS7FE88aDYi0rpXLf5gqf
MAlx0bq8KHlWco5LjrmXUoaRTIgEkNfRtGkt2bBtctCwhpLL+/Y2F/6TjuFq
jbejOXN2YVnfgi1pd2XH/g0fe2z4qiJEVqWGkTRLBWDcQwnjTpd6PrRx6keY
6uLogx45QJsFzsiYI7cEpSR1um5MhdvOtqg06bM3a4c9U8CZdsTTj3tr7TWx
Lt3iewAgSt02lAm31OP5j0Obhda37tH5EtL+aTCDPIRjzSOfbcpZWk7vSNlk
t6LgwbSydAsoLaxxd14ExTTaVCAkaMlyM/e3S5N3Sm+Yo6v6kKuG/mLSvIAH
GtRGdY2q0v0vNGoGRDm/3P6JbY9lUCPgNUVuTtmtQTHCuobpkuyyLHonMm+P
s7EPrOe36nviQ4aYUtOd+wrQn+KKY66qFbUyDLPM/a1RStU2lQ03/nFTYLeE
Mwj84Em/IIj4+9Q6v28n/oaE6dZuMpcneNo/gdtHNXh0xxlhGnINxhODUtvy
I9A5EmyNfpADhH7xyKvj4u2K/7UsTQ0mZHa32MTVGkRNEzTLSacI6wKPdBOk
chOTH4NBP+9fl+6Iq7SEQziR2KwmxRHW9kcHh89ErLmRwnBXGz9+cPh8dPjk
ib5gKLWoIwElyCCwdCyi0Pvw3oEvxj5PiQEZrcecSQr8yiU+2QqdfqdbWQy8
OMYR4fBMvxPogbOf5IGfkjc4sT/J2Ph4n5XDd2QT/WTEr8HGfSx3LE+ClskC
Kqykbt83rxUQghuPfgKq6L/vszlR/5Lsz3SGfud+AtNfDmlT3PDpvdjycUZL
0U0SDfIyWHrW0gnLR0I7qq0lIdbFh6abWtKc++8vsa97qlO5oZAUoZOFi6F1
P/zgXT9DIxyXI84uZYVvxujWkll8QNsPx9A1Qb5OLciMkR0k7UMl4ow4ZAeh
ECcrSNxL/psvsOY+EMieaeoNx0DQVpUzSjzAnAV3QGdD9vjg8MXo8PFzqXYo
pY1oNhscHB7w8cEjh49f8MmQfGBOPBTdT5KPtSXLSXlHA0iGn54qo4PmQy7V
KjFNhcriMAj1vA5D3uibSa9rsk9b4T7BMG3Aa7XOmYM49sd0ihimcVgckSt9
yxjrb3xUEJz3t8nBYzFd6P39r3n8Kf0nkCn27sF9oHqBcw+Eu4c0ooy2x7en
GZ6h7tDbPz8wYzwe2kPoSoP885Kp3RWPfXq819KFqieZMMrGyhu/4Bq45Y7A
FVI8tX4EgR4vVtNknubgPbNM7ojZWlivgCWie9cp2SEyY/kDzd0XkdnNb4Xr
QyscnK9CkbRf4Xr86TqdzdR2YHOonNkSvUCIG0r54K8VQrEaJNEOvaShyzCk
O04HaXA5BSdVtVXf5QMp6FZq1eE1TV8NWTf32YKYU7Z4ul0TxppPt1VlaTPI
RXY34TNx0LAZBudxpgXwxnvv0Qp7qhDN5rs2/RDZ7nS+/bQdTfPnChphApbe
2+er2vHrlg/wQjoMWgEqX1rHKc7Ww1xSjRY1Eab0/2e7lbuOdcshKuseJcjd
kpmg8O2K6twHRvluvqLb29V34vMAWWpU6k8utzFPnVxTIUPHTGePi8oCs1MF
kylPZidvL5D+M5MkOpf9Et68p3DocFzyKhL1vgGHyV8q1XghUAmnMhy9qu4J
2AhAdVDPtqVAoBdS5urju8u2ytm+70S2sj0Il/HWemFKsUsj6mHFZI5Lc6Iu
oW5ftWwFV0SMOwWTHR+OGSHqYDHdXz0vQ76noOIsA46GAA+K26BbhoDPhVCC
PMZkbWuNr1Ky15cV92zqtTW5QrUzbhVaF1K3GXzPSeUEpLdBjZSCh1Smb8Ei
9na4O5pvnRDOZ8BpzgU3Reo70pcolS6FMpZpMb+HLsxZYLstOoaXFHIHU3gi
nDYWJqDef6RUwgUQ5pq775s3ZPHa5G6yJtLkmnUtt4bBgMKFrVzflLomjlF3
Pumt4O4t6vaYbFBTJVDzzZ5B8w9rJKTyiWNEp3qXieajSAzE38nW6e/DyUuB
p6GvnYxk+CAfLrjp16KJvv9Z/y1Om8bVSthlOXoHCt8UDOdDYc3wLAEpvJts
qzpCL4kwh4m7MjG4TlU61rtbXbzpigxn0g6Sk9fXJ2a3czcqTlZKS6uUZ75r
FecpN2INW/9qXyXp/UusMIVOfqUtFWNoeV1B4yw5lLvBbQWsmGRwAsatVpAv
WDVp0eyJ9XVLy10KqaDIc0gWBB/4g//hOqB0azns8roJMrpZTwMnsaeLfJW7
Vn1BD0BDlOvGZWnYhDiUd3A+9h+S5C13XZ9Y91Zs8EZbv7R/CJCddotk0gkY
UjDj0C41Jn7EJ2MYZo/5Di+srJhycXr2xje+/4BrOgiZ2tmsqYqNb3rOTSa4
CY3wjvCCWWlJI2XHeuOKuCTAAG65vlwUQL4J8b5rI7fuVXwY5IQ9giv/obvF
mVcp9yom6OC55SHyh1Vp0znz+NrH5CHj+6Fmlpkxq41vTkoZ27cEqus7Uyd7
oApg7nZ6itK9JtLuN2YXQ/V4Bw6lbo7xpJqhV3X4Vx71uXYdM4O7Dp4dHu1/
/rynzWc59ayviQ1SE8XX6ipqYp+pu3s6tlUlHr5V9xT5gr1O586uNt0ZSnMk
NSk41TfU+2BF3GWtb8Kk9sPre4nHdCVi8m6LsTm/bYumQza40FOuUXv8+Ckx
nV9IQH70fhrieboE1JEUv4Rawvqz2Au5tdFnv9JG/7LdO/sl2zfb3r8zt4FP
jx4/Y0+Oz1ZwW2BOPH7ahfVc0fOuNcoC+vSKVz7ze4mVnd35Hp9FpWE6yW0O
t4BVSm3NZld4oN6NU2ZxaQfXQkKC4I5n1rfYh8wGfm3qURlGB7e7OktvJO3G
K6nvIq7DpFm74DOScrbgqOhT2vQwvdF89BQjyTw7vmunHgl7vHPxue/w5ptl
w13IfoyN3G643cGVG6TEHfN4dn/c4l69ehtSE1uW3nodi6VqFy0GRQ5BBy4f
XWJUx2xwEvaf1SuHPAfuN9fTaQ2kbLsJJKu+zlCCorqM3K8g9kpnaocRZ1qL
91LvTH8VXeLE9/UxRcqpia5D6LZ+5jpSayLXhgjApeOvzk/HepPKfGsOJl27
qipsOOVvTWZt2QqVVUu5TQviRdokSKsvtJIZ/QYr6CwN7tLR2AJfN5TUm7Lk
sufXpLxIdRcb9Y1ce7iRHmCbtYvT4VovUSbx5216Nx4zNFz3f1nNNq4ok9t0
qN8pIxqX5qrqPsQn1m5VFEdNrBZWVEnFcXyXBETG0eN95jhIf1jxbMeJSzVA
OaVdi/WIr7M45v/q72bB6p/iZdA/+DrCQZikoV+gBEGkyDF//dvRqCYrD7Pp
g/JJx4b+TfJv+ew/ggHlKaKtrZ9NXrZHh1uPbg9IzDkc8Sd7EkybfghR7TH9
vjUSNM6Rz6nnn3yZHsefcxnh1rtxp5M/fAngbv+TP9z/qG+K9Af3DcjlGE3E
R8ToeYD/4m7+//36794vS0pSPiB///707dl58vL824s3V98kUh5tB/aPh/uH
h6P9o9H+szHG0yPtH0g+DWSmkXVgPhgf/A7nHNdxSPhgZ1OXx3jjmNv0NMcf
V8Vx2RwzgD4N6Xf00pr4Uv4x2dEP6BNpIJ/4m2B5Rv+k3Hv/O/7MVegmOzCj
/0KYK7D28P4cfvRzd2RsNe9Xd3h8sT06VKsXLw6cWfF4e9S0pG1WetgadJlu
jxnc90NzoqHKSIrOBa5+uBnzfXDji164EwB+bC3TWShwIu11PElVL1LXQXTn
4vz6lWwHu7emrRLgDqrgcNVxkvwJ/by/E4RHbJp/fo+u2m11bFvyx/RDSh/h
zt9vbCweX1p2sIeG/to5rdZ3NYv03elecrh/8CIBLCSwNqpwshJCpMfXoFgw
CVnYGDZl8FwOy7SacQgX4huDNi5QiSs0k+Q9malNfNExdFNumSS59whpidWB
zi/Q7Li1LEr5nQ+U2+f7dg8NwFNdeL2pm03KVxcM7TJhbbeDEcRRNCU9Aw1Z
QOvhTSESb7tCFbus8eXVWfJaH28y3pM5FNvQ4H08ntrqPeJIHXydLdIC2fo3
fFNJI8u3OrBKHj5TK4S/3XUV+nxLUNAcXUEeodf2nmBS0hTDnuz0t3Ue2kgD
Bqv5A1H+K/1Ek+Dayno+HWV8lzZPw9cH02d4du93SE7kZeF1qe1UBIi9VfAC
S7Q0535LDFR46/lDeCEfDuVf9HLB79a9Ab/zZefuFwygD4kD2v/mX3b5Yviz
c/H5wyGGeEiG5EPZ+4emkj/8+rvPMUTU1ebl6TtEpHeBBdyCvie/4gL0vd77
z5XOvv4KdNtN3TjX1lq8XK6k3rypbI2z/cJsaYz3L4Jb7lx+aNdqJrq7urr0
DZG5jkIO8cJ1uAFS2Hc3FnaBrjNMYySnDkhIjfafKyMMGEmyc8a3mys9jrt8
0RjQ9o1rTi4xT2SlJfSdqyYxCtCwNbnjhTuMRTeG6zHSE02ZC0ORn63Orf1d
uZkRAfm6OlxOC+3ok47EzjfRHn6nH7nmGLj4K7NP+2Bn6IPg/cVZ2A0jig8a
dj8LFHkQKLEMZAMJZ5HUK5uYIYbq9cnNKx5DVcN+5z7uB/w+0BV4GGdSotJ3
q9COjfJ5Gw0k5vjt+LrGlJvzhbQfzNnZ0RgnWGdHhYx26R5V8hdvW6dkt1Pc
i2/dZVEh2gIvnF0ZLU7x7dXESu2XaM660h3u7+/bZ5sSpWU7YfvFna9Ylo/b
hW+6boad1prux5qLCy102m1LkF+CxuFL2ss2d0pVuPiOmv41yz/Y/9XXL0uP
FyFOlS9iILy7wv9oGP1LaAj66EYI2DZDvmJtjEcJuIrvrC/dH4GhEEgrIuiP
FEbJ2BbeCd7miLs2EbMUQoRc78RfpX1aJHPNrzU8DJ8D94bJlF9iFz/a+a0T
SR0Xx06fdOveBigtVqcSzkVxm5MYKjUTp1fWiTPitob1JZg8gX8F40to2U3q
+ecXOb7w/HzWy7KTncvO/gZyFcP6SRLo5c0X5HDMzf+Rm/P378DFL92Ai/9u
/J95fMedwGPG/wvx/1k9DaQNX32jnojk4uTNyXYyAaxn9Uwus8hzicTlhiwV
vuv+rhstSWcz8YOHpoZVRm0Ns0NKjIyToJG9Glok4//996EZAmDkEihOe2WD
6BEb3r7r8L9/I5lb4iOV3JmFNki1fh1otjdkxzwHhfjKn9BUIzXeXee3f7j/
+bO1sOAfuFOO5VfvTvVfsaflOPkqT4u+Jq4CHjP41Ol1x4lPReh6Uvh58yVh
3f96+frLm9Leixy3PyVtCNnDbk/UbGXnQzTBzpbX+ejp8+do42nAuxKyoEGb
RyWUub8PVTY1TPdT8YAc87ovzq++dVKEYDxO3jw6scRYdCTlC9xId8y5Khyr
cLs19t44Do/DA6OhApmOKKUnlh73QJyhhw/HL4PbvCKqBaE94gC8OIq+0Tmm
y2z6IVlsckQhS6lu+LkufM8PDp+69znZwoKnJ6yVClIkPcou+QkT6/tOO9vv
8g+GT+jzpXWffnJ4+HTMY0oCht43JyrBXbWxipJUWi/Ph25WCe59FUK8Sg9k
oL/5EMllyPmdNSMOhMSHmYhU/TkWzSHgG01gQaupSdbzDIPF/YJhkO9uSs5G
uSEBU9UyC1qyMUBaThZC4L4LbhpEKhijxT0bu+1gYjZ7yW0FmILuRLgUL5/m
rV2Bd+Nj2qDnkSQ2cY4T5+636FYoqURC2kp1ND87FJ8fPXd4DzI9YqT540BT
4UibbCIu04ijg1mixN+RNpa5PLZgs/5o2wiWXUhT5saRxBeWIOH9ab6WpHKJ
uONkXnHArpGyfYnAg7xrfwRdHgPfqhZE4L/iKEKXQJ+9D1ntjxPtoW9s+eTF
k2+0c+q9s89+9enddaP9mX12p58I5XdBNzi982oweBf3KuQgZtg2zuL19Ubz
bbUhezWfc9DfbqzkZuewWN01yk1wrXTVZD4wLonMWzfbRHfsSkD4Pmj6LuWo
9MYv6YS1KUU6a7tXg4RbrBnIldTVzGbWOs5kWtDFm++7pM9WZO4FgAx1JBYP
/T3ldoOWeXuujwrKD5ymVrqCGUlVZWeQpsH2guR6ySq98T2Z8OPIpavM0oM7
rd3FpL6PnbjeS76s3oxJv2PsRqzWkrgjXeuUTv01J8E92ZXLOXBXDvLmWTvv
7WJZN//SkqvlQixbUNRNv3E9Tby4O05+RtYdPXlyyNR+YrtMqhoyB06CnBIu
THb+OJcR5K5W0bvjte+cS/18iJMMyywQ70OpYi15IlpwJZ2c5c4sjvjo0v29
IDI6p77QujvjNUFJwiSXxt4EyU7Q73/Hdf/Z3Tk+3gFp7eyP+X87e+oeELa5
KdJa+qQEdz1zHoTRtU7NJGm50HJfmFzpG1wzGGTsyM0IaT5LNCvsle/uH90y
jUQNtOorLQ1yzc1L+XYModlmU88RbbQTGhZCGD/iUh5FbRPUkvUjBeBzW27f
OXSSLXO+R4x0nOwWjnN66BEh6s3J9XhwxUc53AJNFRF02DJc1p+7d1caurO7
o/EJvtWmFYCtCbYEpOSuIX5FCsNbUmXjlr9C9lg8Z4q42NVWqx98SPaprpgD
JZc+jThsk8gdkAkizgG6t2UibpmV6hLZPb8P0b1ZnfPhkx4NRW4VIXD+rj59
XtCrhfegp1yKx7y7pskKta7M/WNE7G6n0DWJpa0uXr3izlMggRHtnp9NhRDK
SExEBAvV4xteGs2pqXLUXVWoA4oRHV7JYavnQtaImrau+3ZA2dLkshEhY8En
OnkEJGDTjgcnRdBddV3nq7R2l1UnRXDVdt8qh9BEsnUbH9qQeprOZSx2ZPka
9Fi4xxl7lRcB911Y7q91K6UDZQ3yLKL7rbqp8b0dHsLLuIQ1WM9VXXLL9wMY
HTjApAuvfeyTI/kOL0Fbbg4bF/0K7iUOrhoxrtIFwJLWDPdTuSW96uGRnDvZ
87nsu3YLLe1aS6MA5sMspEJ2GVxs4m4wl4vW7vy97BIcJF1kYXee6OkBlw4u
a6nmPVBJ4q132fpNVrlnW8tbHbS89SjANLEIsHzeOhu5/sYh3XKxZXIyhS+3
yGaLTGuT+YZ52J0feOAzsqSIx7wiPeoD6WnnNcH7PiOarYt0mJwuawxNdPgj
bLpLZNTSHLSbl+lH99JJQRK7ReBsDp1Ptlps5eRlatJcKATlAskyK9Zo+eus
a8kSWOglKwB9NBpxPvNg8H8BETJhVHe1AAA=

-->

</rfc>
