<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wilton-netconf-yang-push-lite-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="YANG-Push Lite">YANG Datastore Telemetry (YANG Push Lite)</title>
    <seriesInfo name="Internet-Draft" value="draft-wilton-netconf-yang-push-lite-00"/>
    <author fullname="Robert Wilton" role="editor">
      <organization>Cisco Systems</organization>
      <address>
        <email>rwilton@cisco.com</email>
      </address>
    </author>
    <author fullname="Holger Keller">
      <organization>Deuetsche Telekom</organization>
      <address>
        <email>Holger.Keller@telekom.de</email>
      </address>
    </author>
    <author fullname="Benoit Claise">
      <organization>Huawei</organization>
      <address>
        <email>benoit.claise@huawei.com</email>
      </address>
    </author>
    <author fullname="Ebben Aries">
      <organization>Juniper</organization>
      <address>
        <email>Ebben Aries exa@juniper.net</email>
      </address>
    </author>
    <author fullname="James Cumming">
      <organization>Nokia</organization>
      <address>
        <email>james.cumming@nokia.com</email>
      </address>
    </author>
    <author fullname="Thomas Graf">
      <organization>Swisscom</organization>
      <address>
        <email>Thomas.Graf@swisscom.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="03"/>
    <area>Operations and Management</area>
    <workgroup>Network Configuration</workgroup>
    <keyword>YANG Push</keyword>
    <keyword>Observability</keyword>
    <keyword>Network Telemetry</keyword>
    <keyword>Operational Data</keyword>
    <abstract>
      <?line 127?>

<t>YANG Push Lite is a YANG datastore telemetry solution, as an alternative specification to the Subscribed Notifications and YANG Push solution, specifically optimized for the efficient observability of operational data.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://rgwilton.github.io/draft-yp-observability/draft-wilton-netconf-yp-observability.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wilton-netconf-yang-push-lite/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Network Configuration Working Group mailing list (<eref target="mailto:netconf@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netconf/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/netconf/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rgwilton/draft-yp-observability"/>.</t>
    </note>
  </front>
  <middle>
    <?line 131?>

<section anchor="document-status">
      <name>Document Status</name>
      <t><em>RFC Editor: If present, please remove this section before publication.</em></t>
      <t>Based on the feedback received during the IETF 121 NETCONF session, this document has currently been written as a self-contained lightweight protocol and document replacement for <xref target="RFC8639"/> and <xref target="RFC8641"/>, defining a separate configuration data model.</t>
      <t><strong>The comparison between YANG Push and YANG Push Lite is now in <xref target="DifferencesFromYangPush"/>.</strong></t>
      <t><strong>Open issues are either now being tracked inline in the text or in <xref target="OpenIssuesTracker"/> for the higher level issues.</strong></t>
    </section>
    <section anchor="conventions">
      <name>Conventions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>All <em>YANG tree diagrams</em> used in this document follow the notation
defined in <xref target="RFC8340"/>.</t>
    </section>
    <section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="I-D.ietf-nmop-yang-message-broker-integration"/> describes an architecture for how YANG datastore telemetry, e.g., <xref target="RFC8641"/>, can be integrated effectively with message brokers, e.g., <xref target="Kafka"/>, that forms part of a wider architecture for a <em>Network Anomaly Detection Framework</em>, specified in <xref target="I-D.ietf-nmop-network-anomaly-architecture"/>.</t>
      <t>This document specifies "YANG Push Lite", an lightweight alternative to Subscribed Notifications <xref target="RFC8639"/> and YANG Push <xref target="RFC8641"/>. YANG Push Lite is a separate YANG datastore telemetry solution, which can be implemented independently or, if desired, alongside <xref target="RFC8639"/> and <xref target="RFC8641"/>.</t>
      <t>At a high level, YANG Push Lite is designed to solve a similar set of requirements as YANG Push, and it reuses a significant subset of the ideas and base solution from YANG Push.  YANG Push Lite defines a separate data model to allow concurrent implementation of both protocols and to facilitate more significant changes in behavior, but many of the data nodes are taken from YANG Push and have the same, or very similar definitions.</t>
      <t>The following sections give the background for the solution, and highlight the key ways that this specification differs from the specifications that it is derived from.</t>
      <section anchor="background-and-motivation-for-yang-push-lite">
        <name>Background and Motivation for YANG Push Lite</name>
        <t>A push based telemetry solution, as described both in this document and also the YANG Push solution described by <xref target="RFC8639"/> and <xref target="RFC8641"/>, is beneficial because it allows operational data to be exported by publishers more immediately and efficiently compared to legacy poll based mechanisms, such as SNMP <xref target="RFC3411"/>.  Some further background information on the general motivations for push based telemetry, which equally apply here, can be found in the <em>Motivation</em> (section 1.1) of <xref target="RFC8639"/> and the Introduction (section 1) of <xref target="RFC8641"/>.  The remainder of this section is focused on the reasons why a new lightweight version of YANG Push has been specified, and what problems is aims to solve.</t>
        <t>Early implementation efforts of the <xref target="I-D.ietf-nmop-yang-message-broker-integration"/> architecture hit issues with using either of the two common YANG datastore telemetry solutions that have been specified, i.e., <xref target="gNMI"/> or YANG Push <xref target="RFC8641"/>.</t>
        <t>gNMI is specified by the OpenConfig Industry Consortium.  It is more widely implemented, but operators report that some inter-operability issues between device implementations cause problems.  Many of the OpenConfig protocols and data models are also expected to evolve more rapidly than IETF protocols and models - that are expected to have a more gradual pace of evolution once an RFC has been published.</t>
        <t>YANG Push <xref target="RFC8641"/> was standardized by the IETF in 2019, but market adoption has been rather slow.  During 2023/2024, when vendors started implementing, or considering implementing, YANG Push, it was seen that some design choices for how particular features have been specified in the solution make it expensive and difficult to write performant implementations, particularly when considering the complexities and distributed nature of operational data.  In addition, some design choices of how the data is encoded (e.g., YANG Patch <xref target="RFC8072"/>) make more sense when considering changes in configuration data but less sense when the goal is to export a subset of the operational data off the device in an efficient fashion for both devices (publishers) and clients (receivers).</t>
        <t>Hence, during 2024, the vendors and operators working towards YANG telemetry solutions agreed to a plan to implement a subset of <xref target="RFC8639"/> and <xref target="RFC8641"/>, including common agreements of features that are not needed and would not be implemented, and deviations from the standards for some aspects of encoding YANG data.  In addition, the implementation efforts identified the minimal subset of functionality needed to support the initial telemetry use cases, and areas of potential improvement and optimization to the overall YANG Push telemetry solution (which has been written up as a set of small internet drafts that augment or extend the base YANG Push solution).</t>
        <t>Out of this work, consensus was building to specify a cut down version of Subscribed Notifications <xref target="RFC8639"/> and YANG Push <xref target="RFC8641"/> that is both more focussed on the operational telemetry use case, and is also easier to implement, by relaxing some of the constraints on consistency on the device, and removing, or simplifying some of the operational features.  This has resulted in this specification, YANG Push Lite.</t>
        <t>The implementation efforts also gave arise to potential improvements to the protocol and encoding of notification messages.</t>
      </section>
      <section anchor="OperationalModellingComplexities">
        <name>Complexities in Modelling the Operational State Datastore</name>
        <t>The YANG abstraction of a single datastore of related consistent data works very well for configuration that has a strong requirement to be self consistent, and that is always updated, and validated, in a transactional way.  But for producers of telemetry data, the YANG abstraction of a single operational datastore is not really possible for devices managing a non-trivial quantity of operational data.</t>
        <t>Some systems may store their operational data in a single logical database, yet it is less likely that the operational data can always be updated in a transactional way, and often for memory efficiency reasons such a database does not store individual leaves, but instead semi-consistent records of data at a container or list entry level.</t>
        <t>For other systems, the operational information may be distributed across multiple internal nodes (e.g., linecards), and potentially many different process daemons within those distributed nodes.  Such systems generally do not, and cannot, exhibit full consistency <xref target="Consistency"/> of the operational data (which would require transactional semantics across all daemons and internal nodes), only offering an eventually consistent <xref target="EventualConsistency"/> view of the data instead.</t>
        <t>In practice, many network devices will manage their operational data as a combination of some data being stored in a central operational datastore, and other, higher scale, and potentially more frequently changing data (e.g., statistics or FIB information) being stored elsewhere in a more memory efficient and performant way.</t>
      </section>
      <section anchor="complexities-for-consumers-of-yang-push-data">
        <name>Complexities for Consumers of YANG Push Data</name>
        <t>For the consumer of the telemetry data, there is a requirement to associate a schema with the instance-data that will be provided by a subscription.  One approach is to fetch and build the entire schema for the device, e.g., by fetching YANG library, and then use the subscription XPath to select the relevant subtree of the schema that applies only to the subscription.  The problem with this approach is that if the schema ever changes, e.g., after a software update, then it is reasonably likely of some changes occurring with the global device schema even if there are no changes to the schema subtree under the subscription path.  Hence, it would be helpful to identify and version the schema associated with a particular subscription path, and also to encoded the instance data relatively to the subscription path rather than as an absolute path from the root of the operational datastore.</t>
        <t><strong>TODO More needs to be added here, e.g., encoding, on-change considerations.  Splitting subscriptions up.</strong></t>
        <t>This document proposes a new opt-in YANG-Push encoding format to use instead of the "push-update" and "push-change-update" notifications defined in <xref target="RFC8641"/>.</t>
        <ol spacing="normal" type="1"><li>
            <t>To allow the device to split a subscription into smaller child subscriptions for more efficient independent and concurrent processing.  I.e., reusing the ideas from <xref target="I-D.ietf-netconf-distributed-notif"/>.  However, all child subscriptions are still encoded from the same subscription point.</t>
          </li>
        </ol>
        <section anchor="combined-periodic-and-on-change-subscription">
          <name>Combined periodic and on-change subscription</name>
          <t>Sometimes it is helpful to have a single subscription that covers both periodic and on-change notifications.</t>
          <t>There are two ways in which this may be useful:</t>
          <ol spacing="normal" type="1"><li>
              <t>For generally slow changing data (e.g., a device's physical inventory), then on-change notifications may be most appropriate.  However, in case there is any lost notification that isn't always detected, for any reason, then it may also be helpful to have a slow cadence periodic backup notification of the data (e.g., once every 24 hours), to ensure that the management systems should always eventually converge on the current state in the network.</t>
            </li>
            <li>
              <t>For data that is generally polled on a periodic basis (e.g., once every 10 minutes) and put into a time series database, then it may be helpful for some data trees to also get more immediate notifications that the data has changed.  Hence, a combined periodic and on-change subscription, would facilitate more frequent notifications of changes of the state, to reduce the need of having to always wait for the next periodic event.</t>
            </li>
          </ol>
          <t>Hence, this document introduces the fairly intuitive "periodic-and-on-change" update trigger that creates a combined periodic and on-change subscription, and allows the same parameters to be configured.  For some use cases, e.g., where a time-series database is being updated, the new encoding format proposed previously may be most useful.</t>
        </section>
      </section>
      <section anchor="DraftRelationships">
        <name>Relationships to existing RFCs and Internet Drafts</name>
        <t>This document, specifying YANG Push Lite, is intended to be a lightweight alternative for <xref target="RFC8639"/> and <xref target="RFC8641"/>, but that also incorporates various extensions since those RFCs were written.  Often substantial parts of those documents and models have been incorporated almost verbatim, but modified to fit the YANG Push Lite functionality and module structure.</t>
        <t>Hence, the authors of this draft would like to sincerely thank and acknowledge the very significant effort put into those RFCs and drafts by authors, contributors and reviewers.  In particular, We would like to thank the listed authors of these documents: Eric Voit, Alex Clemm, Alberto Gonzalez Prieto, Einar Nilsen-Nygaard, Ambika Prasad Tripathy, Balazs Lengyel, Alexander Clemm, Benoit Claise, Qin Wu, Qiufang Ma, Alex Huang Feng, Thomas Graf, Pierre Francois.</t>
        <t>** Note, an alternative approach, but not proposed at this time, could be to create bis versions of various documents to also cover YANG Push Lite, e.g., <xref target="I-D.draft-netana-netconf-yp-transport-capabilities"/>, and perhaps <xref target="RFC9196"/>.**</t>
        <section anchor="rfc-8639-and-rfc-8641">
          <name>RFC 8639 and RFC 8641</name>
          <t>This document is primarily intended to be a lightweight alternative for <xref target="RFC8639"/> and <xref target="RFC8641"/>, but it intentionally reuses substantial parts of the design and data model of those RFCs.</t>
          <t>YANG Push Lite is defined using a separate module namespace, and hence can be implemented independently or, if desired, alongside <xref target="RFC8639"/> and <xref target="RFC8641"/>, and the various extensions to YANG Push.</t>
          <t>A more complete description of the main differences in YANG Push Lite compares to <xref target="RFC8639"/> and <xref target="RFC8641"/> is given in {#DifferencesFromYangPush}.</t>
        </section>
        <section anchor="i-ddraft-netana-netconf-notif-envelope-and-rfc-5277">
          <name><xref target="I-D.draft-netana-netconf-notif-envelope"/> and RFC 5277</name>
          <t>All of the notifications defined in this specification, i.e., both the datastore update message and subscription lifecycle update notifications (<xref target="LifecycleNotifications"/>) depend on and use the notification envelope format defined in <xref target="I-D.draft-netana-netconf-notif-envelope"/>.</t>
          <t>As such, this specification does not make use of the notification format defined in <xref target="RFC5277"/>.  Of course, devices may also use <xref target="RFC5277"/> notifications for other YANG notifications, e.g., for the "NETCONF" event stream defined in <xref target="RFC5277"/>.</t>
        </section>
        <section anchor="rfc-9196-and-i-ddraft-netana-netconf-yp-transport-capabilities">
          <name>RFC 9196 and <xref target="I-D.draft-netana-netconf-yp-transport-capabilities"/></name>
          <t>This document uses the capabilities concepts defined in <xref target="RFC9196"/>.</t>
          <t>In particular, it augments into the ietf-system-capabilities YANG module, but defines an equivalent alternative capability structure for the ietf-notification-capabilities YANG module, which defines the capabilities for YANG Push <xref target="RFC8641"/>.</t>
          <t>The generic transport capabilities defined in <xref target="I-D.draft-netana-netconf-yp-transport-capabilities"/> have been incorporated into the ietf-yp-lite YANG module, to augment YANG Push Lite transport capabilities and to use the different identities.</t>
        </section>
        <section anchor="i-ddraft-ietf-netconf-https-notif-and-i-ddraft-ietf-netconf-udp-notif">
          <name><xref target="I-D.draft-ietf-netconf-https-notif"/> and <xref target="I-D.draft-ietf-netconf-udp-notif"/></name>
          <t>The ietf-yp-lite YANG module has subsumed and extended the <em>receivers</em> data model defined in the ietf-subscribed-notif-receivers YANG module defined in <xref target="I-D.draft-ietf-netconf-https-notif"/>.</t>
          <t>The overall YANG Push Lite solution anticipates and requires new bis versions of both of these transports documents that augment into the <em>receivers/receiver/transport-type</em> choice statement, and also augment the transport identity defined in the ietf-yp-lite data model.</t>
        </section>
        <section anchor="i-ddraft-ietf-netconf-distributed-notif">
          <name><xref target="I-D.draft-ietf-netconf-distributed-notif"/></name>
          <t><strong>TODO.  It is likely that some of the base support for distributed notifications will be incorporated into this draft.  If so, add acknowledgements to the authors.</strong></t>
        </section>
      </section>
    </section>
    <section anchor="overview">
      <name>YANG Push Lite Overview</name>
      <t>This document specifies a lightweight telemetry solution that provides a subscription service for updates to the state and changes in state from a chosen datastore.</t>
      <t>Subscriptions specify when notification messages (also referred to as <em>updates</em>) should be sent, what data to include in the update records, and where those notifications should be sent.</t>
      <t>A YANG Push lite subscription comprises:</t>
      <ul spacing="normal">
        <li>
          <t>a target datastore for the subscription, where the monitored subscription data is logically sourced from.</t>
        </li>
        <li>
          <t>a set of selection filters to choose which datastore nodes from the target datstore the subscription is monitoring or sampling, as described in <xref target="pathsAndFilters"/>.</t>
        </li>
        <li>
          <t>a choice of how update event notifications for the datastore's data nodes are triggered.  I.e., either periodic sampling of the current state, on-change event-driven, or both.  These are described in <strong>TODO, add reference</strong>.</t>
        </li>
        <li>
          <t>a chosen encoding of the messages, e.g., JSON, or CBOR.</t>
        </li>
        <li>
          <t>a set of one or more receivers for which datastore updates and subscription notifications are sent, as described in <xref target="receivers"/>;  </t>
          <ul spacing="normal">
            <li>
              <t>for configured subscriptions, the receivers parameters are configured, and specify transport, receiver, and encoding parameters.</t>
            </li>
            <li>
              <t>for dynamic subscriptions, the receiver uses the same transport session on which the dynamic subscription has been created.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>If a subscription is valid and acceptable to the publisher, and if a suitable connection can be made to one or more receivers associated with a subscription, then the publisher will enact the subscription, periodically sampling or monitoring changes to the chosen datastore's data nodes that match the selection filter.  Push updates are subsequently sent by the publisher to the receivers, as per the terms of the subscription.</t>
      <t>Subscriptions may be set up in two ways: either through configuration - or YANG RPCs to create and manage dynamic subscriptions.  These two mechanisms are described in <xref target="ConfiguredAndDynamic"/>.</t>
      <t>Changes to the state of subscription are notified to receivers as subscription lifecycle notifications.  These are described in <xref target="LifecycleNotifications"/>.</t>
      <t>NACM <xref target="RFC8341"/> based access control is used to ensure the receivers only get access to the information for which they are allowed.  This is further described in <xref target="security"/>. <strong>TODO Do we need to tie YANG Push Lite to NACM?</strong></t>
      <t>While the functionality defined in this document is transport agnostic, transports like the Network Configuration Protocol (NETCONF) <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/> can be used to configure or dynamically signal subscriptions.  In the case of configured subscription, the transport used for carrying the subscription notifications is entirely independent from the protocol used to configure the subscription, and other transports, e.g., <xref target="I-D.draft-ietf-netconf-udp-notif"/> defines a simple UDP based transport for Push notifications. Transport considerations are described in <xref target="transports"/>. <strong>TODO the reference to draft-ietf-netconf-udp-notif isn't right, it wouldn't be that draft, but a -bis version of it.  James is querying whether we need this at all</strong></t>
      <t><strong>TODO Introduce capabilities and operational monitoring</strong></t>
      <t>This document defines a YANG data model, that includes RPCs and notifications, for configuring and managing subscriptions and associated configuration, and to define the format of a <em>update</em> notification message.  The YANG model is defined in <xref target="yp-lite-yang-module"/> and associated tree view in <xref target="yp-lite-tree"/>.  The YANG data model defined in this document conforms to the Network Management Datastore Architecture defined in <xref target="RFC8342"/>.</t>
    </section>
    <section anchor="terminology">
      <name>Definitions</name>
      <t>This document reuses the terminology defined in <xref target="RFC7950"/>, <xref target="RFC8341"/>, <xref target="RFC8342"/>, <xref target="RFC8639"/> and <xref target="RFC8641"/>.</t>
      <t><strong>TODO, if this document progresses, we should check which of this terminology we actually use/re-use, and what new terminology should be introduced in this document.  And also an action to check that it is used consistently.</strong></t>
      <t>The following terms are taken from <xref target="RFC8342"/>:</t>
      <ul spacing="normal">
        <li>
          <t><em>Datastore</em>: A conceptual place to store and access information.  A datastore might be implemented, for example, using files, a database, flash memory locations, or combinations thereof.  A datastore maps to an instantiated YANG data tree.</t>
        </li>
        <li>
          <t><em>Client</em>: An entity that can access YANG-defined data on a server, over some network management protocol.</t>
        </li>
        <li>
          <t><em>Configuration</em>: Data that is required to get a device from its initial default state into a desired operational state.  This data is modeled in YANG using "config true" nodes.  Configuration can originate from different sources.</t>
        </li>
        <li>
          <t><em>Configuration datastore</em>: A datastore holding configuration.</t>
        </li>
      </ul>
      <t>The following terms are taken from <xref target="RFC8639"/>:</t>
      <ul spacing="normal">
        <li>
          <t><em>Configured subscription</em>: A subscription installed via configuration into a configuration datastore.</t>
        </li>
        <li>
          <t><em>Dynamic subscription</em>: A subscription created dynamically by a subscriber via a Remote Procedure Call (RPC).</t>
        </li>
        <li>
          <t><em>Event</em>: An occurrence of something that may be of interest.  Examples include a configuration change, a fault, a change in status, crossing a threshold, or an external input to the system.</t>
        </li>
        <li>
          <t><em>Event occurrence time</em>: A timestamp matching the time an originating process identified as when an event happened.</t>
        </li>
        <li>
          <t><em>Event record</em>: A set of information detailing an event.</t>
        </li>
        <li>
          <t><em>Event stream</em>: A continuous, chronologically ordered set of events aggregated under some context.</t>
        </li>
        <li>
          <t><em>Event stream filter</em>: Evaluation criteria that may be applied against event records in an event stream.  Event records pass the filter when specified criteria are met.</t>
        </li>
        <li>
          <t><em>Notification message</em>: Information intended for a receiver indicating that one or more events have occurred.</t>
        </li>
        <li>
          <t><em>Publisher</em>: An entity responsible for streaming notification messages per the terms of a subscription.</t>
        </li>
        <li>
          <t><em>Receiver</em>: A target to which a publisher pushes subscribed event records.  For dynamic subscriptions, the receiver and subscriber are the same entity.</t>
        </li>
        <li>
          <t><em>Subscriber</em>: A client able to request and negotiate a contract for the generation and push of event records from a publisher.  For dynamic subscriptions, the receiver and subscriber are the same entity.</t>
        </li>
      </ul>
      <t>The following terms are taken from <xref target="RFC8641"/>:</t>
      <ul spacing="normal">
        <li>
          <t><em>Datastore node</em>: A node in the instantiated YANG data tree associated with a datastore.  In this document, datastore nodes are often also simply referred to as "objects".</t>
        </li>
        <li>
          <t><em>Datastore node update</em>: A data item containing the current value of a datastore node at the time the datastore node update was created, as well as the path to the datastore node.</t>
        </li>
        <li>
          <t><em>Datastore subscription</em>: A subscription to a stream of datastore node updates.</t>
        </li>
        <li>
          <t><em>Datastore subtree</em>: A datastore node and all its descendant datastore nodes.</t>
        </li>
        <li>
          <t><em>On-change subscription</em>: A datastore subscription with updates that are triggered when changes in subscribed datastore nodes are detected.</t>
        </li>
        <li>
          <t><em>Periodic subscription</em>: A datastore subscription with updates that are triggered periodically according to some time interval.</t>
        </li>
        <li>
          <t><em>Selection filter</em>: Evaluation and/or selection criteria that may be applied against a targeted set of objects.</t>
        </li>
        <li>
          <t><em>Update record</em>: A representation of one or more datastore node updates.  In addition, an update record may contain which type of update led to the datastore node update (e.g., whether the datastore node was added, changed, or deleted).  Also included in the update record may be other metadata, such as a subscription ID of the subscription for which the update record was generated.  In this document, update records are often also simply referred to as "updates".</t>
        </li>
        <li>
          <t><em>Update trigger</em>: A mechanism that determines when an update record needs to be generated.</t>
        </li>
        <li>
          <t><em>YANG-Push</em>: The subscription and push mechanism for datastore updates that is specified in <xref target="RFC8641"/>.</t>
        </li>
      </ul>
      <t>This document introduces the following terms:</t>
      <ul spacing="normal">
        <li>
          <t><em>Subscription</em>: A registration with a publisher, stipulating the information that one or more receivers wish to have pushed from the publisher without the need for further solicitation.</t>
        </li>
        <li>
          <t><em>Subscription Identifier</em>: A numerical identifier for a configured or dynamic subscription.  Also referred to as the subscription-id.</t>
        </li>
        <li>
          <t><em>YANG-Push-Lite</em>: The light weight subscription and push mechanism for datastore updates that is specified in this document.</t>
        </li>
      </ul>
      <t>All <em>YANG tree diagrams</em> used in this document follow the notation defined in <xref target="RFC8340"/>.</t>
    </section>
    <section anchor="pathsAndFilters">
      <name>Subscription paths and selection filters</name>
      <t>A key part of a subscription is to select which data nodes should be monitored, and so a subscription must specify both the selection filters and the datastore against which these selection filters will be applied.  This information is used to choose, and subsequently push, <em>update</em> notifications from the publisher's datastore(s) to the subscription's receiver(s).</t>
      <t>Filters can either be defined inline within a configured subscription (<xref target="SubscriptionYangTree"/>), a dynamic subscription's <em>establish-subscription</em> RPC (<xref target="EstablishSubscriptionYangTree"/>), or as part of the <em>datastore-telemetry/filters</em> container (<xref target="FilterContainerYangTree"/>) which can then be referenced from a configured or dynamic subscription.</t>
      <t>The following selection filter types are included in the YANG Push Lite data model and may be applied against a datastore:</t>
      <ul spacing="normal">
        <li>
          <t><em>YPaths</em>: A list of basic YANG path selection filters that defines a path to a subtree of data nodes in the data tree, with some simple constraints on keys. See <xref target="YPaths"/>.</t>
        </li>
        <li>
          <t><em>subtree</em>: A subtree selection filter identifies one or more datastore subtrees.  When specified, <em>update</em> records will only include the datastore nodes of selected datastore subtree(s).  The syntax and semantics correspond to those specified in <xref target="RFC6241"/>, Section 6.</t>
        </li>
        <li>
          <t><em>XPaths</em>: A list of <em>XPath</em> selection filter is a full XPath expression that returns a node set.  (XPath is a query language for selecting nodes in an XML document; see <xref target="XPATH"/> for details.)  When specified, updates will only come from the selected datastore nodes that match the XPath expression.</t>
        </li>
      </ul>
      <t>These filters are used as selectors that define which data nodes fall within the scope of a subscription.  A publisher <bcp14>MUST</bcp14> support basic path filters, and <bcp14>MAY</bcp14> also support subtree or xpath filters.</t>
      <t>XPath itself provides powerful filtering constructs, and care must be used in filter definition.  Consider an XPath filter that only passes a datastore node when an interface is up.  It is up to the receiver to understand the implications of the presence or absence of objects in each update.</t>
      <t>For both path and xpath based filters, each filter may define a list of paths/xpaths.  Each of these filter paths is processed by the publisher independently, and if two or more filter paths end up selecting overlapping data nodes then the publisher <bcp14>MAY</bcp14> notify duplicate values for those data nodes, but the encoded data that is returned <bcp14>MUST</bcp14> always be syntactically valid, i.e., as per section 5.3 of <xref target="RFC8342"/>.</t>
      <section anchor="YPaths">
        <name><em>YPath</em> definition</name>
        <t>A <em>YPath</em> represents a simple path into a YANG schema tree, where some of the list key values may be constrained.</t>
        <t>It is encoded in the similar format to the YANG JSON encoding for instance-identifier, section 6.11 of <xref target="RFC7951"/>, except with more flexibility on the keys, in that keys may be left-out or be bound to a regular expression filter.</t>
        <t>The rules for constructing a YPath are:</t>
        <ul spacing="normal">
          <li>
            <t>A YPath is a sequence of data tree path segment separated by a '/' character.  If the path starts with a '/' then it is absolute path from the root of the schema, otherwise it is a relative path, where the context of the relative path must be declared.</t>
          </li>
          <li>
            <t>Constraints on key values may be specified within a single pair of '[' ']' brackets, where:  </t>
            <ul spacing="normal">
              <li>
                <t>keys may be given in any order, and may be omitted, in which case they match any value.  Key matches are separated by a comma (,) with optional space character either side.</t>
              </li>
              <li>
                <t>key match is given by <em>&lt;key&gt;=&lt;value&gt;</em>, with optional space characters either side of the equals (=), and value is specified as:      </t>
                <ul spacing="normal">
                  <li>
                    <t>'&lt;value&gt;', for an exact match of the key's value.  Single quote characters (') must be escaped with a backslash (\).</t>
                  </li>
                  <li>
                    <t>r'&lt;reg-expr&gt;', for a regex match of the key value using <xref target="RFC9485"/>, and where the regular-expression is a full match of the string, i.e, it implicit anchors to the start and end of the value.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <t>Some examples of YPaths:</t>
        <ul spacing="normal">
          <li>
            <t><em>/ietf-interfaces:interfaces/interface[name='eth0']/ietf-ip:ipv6/ip</em> - which identifies is 'ipv6/ip' data node in the ietf-ip module for the 'eth0' interface.</t>
          </li>
          <li>
            <t><em>/ietf-interfaces:interfaces/interface[name=r'eth.*']/ietf-ip:ipv6/ip</em> - which identifies all interfaces with a name that start with "eth".</t>
          </li>
          <li>
            <t><em>/example:multi-keys-list[first-key='foo', second-key=r'bar.*']</em> - which identifies all entries in the 'multi-keys-list, where the first-key matches foo, and the second-key starts with bar.</t>
          </li>
          <li>
            <t><em>/ietf-interfaces:interfaces/interface</em> - which identifies the <em>interface</em> list data node in the ietf-interfaces module for all interfaces.  I.e., the interface list 'name' key is unrestricted.</t>
          </li>
          <li>
            <t><em>/ietf-interfaces:interfaces/interface[]</em> - alternative form of the previous YPath.</t>
          </li>
        </ul>
      </section>
      <section anchor="the-filters-container">
        <name>The "filters" Container</name>
        <t>The "filters" container maintains a list of all datastore subhttps://rgwilton.github.io/draft-yp-observability/draft-wilton-netconf-yp-observability.html scription filters that persist outside the lifecycle of a single subscription.  This enables predefined filters that may be referenced by more than one configured or dynamic subscription.</t>
        <t>Below is a tree diagram for the "filters" container.  All objects contained in this tree are described in the YANG module in <xref target="ietf-yp-lite-yang"/>.</t>
        <figure anchor="FilterContainerYangTree">
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite
  +--rw datastore-telemetry!
     +--rw filters
        +--rw filter* [name]
           +--rw name             string
           +--rw (filter-spec)?
              +--:(paths)
              |  +--rw paths*     ypath
              +--:(subtree)
              |  +--rw subtree?   <anydata> {ypl:subtree}?
              +--:(xpaths)
                 +--rw xpaths*    yang:xpath1.0 {ypl:xpath}?
]]></sourcecode>
        </figure>
      </section>
      <section anchor="decomposing-subscription-filters">
        <name>Decomposing Subscription Filters</name>
        <t>In order to address the issues described in <xref target="OperationalModellingComplexities"/>, YANG Push Lite allows for publishers to send subtrees of data nodes in separate <em>update</em> notifications, rather than requiring that the subscription data be returned as a single datastore update covering all data nodes matched by the subscription filter.  This better facilitates publishers that internally group some of their operational data fields together into larger structures for efficiency (referred to as an <em>object</em>), and avoids the publishers or receivers having to consume potentially very large notification messages.  For example, each entry in the <em>/ietf-interfaces:interface/interface</em> list could be represents as an object of data internally within the publisher.  In essence, a client specified subscription filter can be decomposed by a publisher into more specific, non-overlapping, filters, that are then used to return the data.</t>
        <t>In particular:</t>
        <ol spacing="normal" type="1"><li>
            <t>A Publisher <bcp14>MAY</bcp14> decompose a client specified subscription filter path into a set of non-overlapping subscription filter paths that collectively cover the same data.  The publisher is allowed to return data for each of these decomposed subscription filter paths in separate update messages, and with separate, perhaps more precise, timestamps.</t>
          </li>
          <li>
            <t>A Publisher <bcp14>MAY</bcp14> split large lists into multiple separate update messages, each with separate timestamps.  E.g., if a device has 10,000 entries in a list, it may return them in a single response, or it may split them into multiple smaller messages, perhaps for 500 interfaces at a time. <strong>TODO We need a mechanism so that the client knows all list entries have been returned, and hence it can delete stale entries?  E.g., something like a <em>more_data</em> flag.</strong></t>
          </li>
          <li>
            <t>A Publisher is allowed to generate on-change notifications at an <em>object</em> level, which hence may contain other associated fields that may not have changed state, rather than restricting the on-change notifications strictly to only those specific fields that have changed state.  E.g., if a subscribers registers on the path <em>/ietf-interfaces:interfaces/interface[name = *]/oper-status</em>, and if interface <em>eth1</em> had a change in the <em>oper-status</em> leaf state, then rather than just publishing the updated <em>oper-status</em> leaf, the publisher may instead publish all the data associated with that interface entry object, i.e., everything under <em>/ietf-interfaces:interface/interface[name = eth1]</em>.  <strong>TODO Does it have to be the entire subtree that is published?  Do we need to add a capability annotation to indicate the object publication paths?</strong></t>
          </li>
        </ol>
        <t>To ensure that clients can reasonably process data returned via decomposed filters then:</t>
        <ol spacing="normal" type="1"><li>
            <t><em>update</em> notifications <bcp14>MUST</bcp14> indicate the precise subtree of data that the update message is updating or replacing, i.e., so a receiver can infer that data nodes no longer being notified by the publisher have been deleted:  </t>
            <ul spacing="normal">
              <li>
                <t>if we support splitting list entries in multiple updates, then something like a <em>more_data</em> flag is needed to indicate that the given update message is not complete.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t><strong>TODO We should consider adding a <em>update-complete</em> message (potentially including an incrementing collection counter) to indicate when a periodic update has completed for a subscription.</strong></t>
      </section>
    </section>
    <section anchor="events">
      <name>Datastore Event Streams</name>
      <t>In YANG Push Lite, a subscription, based on the selected filters, will generate a ordered stream of datastore <em>update</em> records that is referred to as an event stream.  Each subscription logically has a different event stream of update records, even if multiple subscriptions use the same filters to select datastore nodes.</t>
      <t>As YANG-defined event records are created by a system, they may be assigned to one or more streams.  The event record is distributed to a subscription's receiver(s) where (1) a subscription includes the identified stream and (2) subscription filtering does not exclude the event record from that receiver.</t>
      <t>Access control permissions may be used to silently exclude event records from an event stream for which the receiver has no read access.  See <xref target="RFC8341"/>, Section 3.4.6 for an example of how this might be accomplished.  Note that per Section 2.7 of this document, subscription state change notifications are never filtered out. <strong>TODO, filtering and NACM filtering should be dependent on whether it is a configured or dynamic subscription.</strong></t>
      <t>If subscriber permissions change during the lifecycle of a subscription and event stream access is no longer permitted, then the subscription <bcp14>MUST</bcp14> be terminated. <strong>TODO, check this</strong></t>
      <t>Event records <bcp14>SHALL</bcp14> be sent to a receiver in the order in which they were generated.  I.e., the publisher <bcp14>MUST</bcp14> not reorder the events when enqueuing notifications on the transport session, but there is no guarantee of delivery order.</t>
      <section anchor="FullNotificationExample">
        <name>Notification Envelope</name>
        <t>All notifications in the event stream <bcp14>MUST</bcp14> be encoded using <xref target="I-D.draft-netana-netconf-notif-envelope"/> to wrap the notification message, and <bcp14>MUST</bcp14> include the <em>event-time</em>, <em>hostname</em>, and <em>sequence-number</em> leaves in all messages.</t>
        <t>The following example illustrates a fully encoded <em>update</em> notification that includes the notification envelope and additional meta-data fields.  The <em>update</em> notification, i.e., as defined via the <em>notification</em> statement in the yang-push-lite YANG module, is carried in the <em>contents</em> anydata data node.</t>
        <figure>
          <name>Example of update notification including notification envelope</name>
          <sourcecode type="json"><![CDATA[
{
  "ietf-yp-notification:envelope": {
    "event-time": "2024-10-10T08:00:05.22Z",
    "hostname": "example-router",
    "sequence-number": 3219,
    "contents": {
      "ietf-yp-lite:update": {
        "id": 1011,
        "snapshot-type": "periodic",
        "observation-time": "2024-10-10T08:00:05.11Z",
        "updates": [
          {
            "target-path": "ietf-interfaces:interfaces/interface",
            "data": {
              "ietf-interfaces:interfaces": {
                "ietf-interfaces:interface": [
                  {
                    "name": "eth0",
                    "type": "iana-if-type:ethernetCsmacd",
                    "enabled": true,
                    "ietf-interfaces:oper-status": "up",
                    "ietf-interfaces:admin-status": "up"
                  },
                  {
                    "name": "eth1",
                    "type": "iana-if-type:ethernetCsmacd",
                    "enabled": true,
                    "ietf-interfaces:oper-status": "up",
                    "ietf-interfaces:admin-status": "up"
                  }
                ]
              }
            }
          }
        ]
      }
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="EventRecords">
        <name>Event Records</name>
        <t>A single <em>update</em> record is used for all datastore notifications.  It is used to report the current state of a set of data nodes at a given target path for either periodic, on-change, or resync notifications, and also for on-change notifications to indicate that the data node at the given target path has been deleted.</t>
        <t>The schema for this notifications is given in the following tree diagram:</t>
        <figure>
          <name>'update' notification</name>
          <sourcecode type="yangtree"><![CDATA[
    +---n update
       +--ro id?                 subscription-id
       +--ro path-prefix?        string
       +--ro snapshot-type?      enumeration
       +--ro observation-time?   yang:date-and-time
       +--ro updates* [target-path]
       |  +--ro target-path    string
       |  +--ro data?          <anydata>
       +--ro incomplete?         empty
]]></sourcecode>
        </figure>
        <t>The normative definitions for the notifications fields are given in the YANG module in <xref target="ietf-yp-lite-yang"/>.  The fields can be informatively summarized as:</t>
        <ul spacing="normal">
          <li>
            <t><em>id</em> - identifies the subscription the notification relates to.</t>
          </li>
          <li>
            <t><em>path-prefix</em> - identifies the absolute instance-data path to which all target-paths are data are encoded relative to.</t>
          </li>
          <li>
            <t><em>snapshot-type</em> - this indicates what type of event causes the update message to be sent.  I.e., a periodic collection, an on-change event, or a resync collection.</t>
          </li>
          <li>
            <t><em>observation-time</em> - the time that the data was sampled, or when the on-change event occurred that caused the message to be published.</t>
          </li>
          <li>
            <t><em>target-path</em> - identifies the data node that is being acted on, either providing the replacement data for, or that data node that is being deleted.</t>
          </li>
          <li>
            <t><em>data</em> - the full replacement data subtree for the content at the target-path, encoded from the path-prefix.</t>
          </li>
          <li>
            <t><em>incomplete</em> - indicates that the message is incomplete for any reason.  For example, perhaps a periodic subscription expects to retrieve data from multiple data sources, but one of those data sources is unavailable.  Normally, a receiver can use the absence of a field in an update message to implicitly indicate that the field has been deleted, but that should not be inferred if the incomplete-update leaf is present because not all changes that have occurred since the last update are actually included with this update.</t>
          </li>
        </ul>
        <t>As per the structure of the <em>update</em> notification, a single notification <bcp14>MAY</bcp14> provide updates for multiple target-paths.</t>
      </section>
      <section anchor="types-of-subscription-event-monitoring">
        <name>Types of subscription event monitoring</name>
        <t>Subscription can either be based on sampling the requested data on a periodic cadence or being notified when the requested data changes.  In addition, this specification allows for subscriptions that both notify on-change and also with a periodic cadence, which can help ensure that the system eventually converges on the right state, even if on-change notification were somehow lost or mis-processed anywhere in the data processing pipeline.</t>
        <t>The schema for the update-trigger container is given in the following tree diagram:</t>
        <figure>
          <name>'update-trigger' container</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite
  +--rw datastore-telemetry!
     +--rw subscriptions
        +--rw subscription* [id]
           +--rw update-trigger
              +--rw periodic!
              |  +--rw period         centiseconds
              |  +--rw anchor-time?   yang:date-and-time
              +--rw on-change! {on-change}?
                 +--rw sync-on-start?   boolean
]]></sourcecode>
        </figure>
        <t><strong>TODO Minor - is providing the structure from root helpful, or should this just report the update-trigger container.</strong></t>
        <t>The normative definitions for the update-trigger fields are given in the <em>ietf-yp-lite</em> YANG module in <xref target="ietf-yp-lite-yang"/>.  They are also described in the following sections.</t>
      </section>
      <section anchor="periodic-events">
        <name>Periodic events</name>
        <t>In a periodic subscription, the data included as part of an update record corresponds to data that could have been read using a retrieval operation.  Only the state that exists in the system at the time that it is being read is reported, periodic updates never explicitly indicate whether any data-nodes or list entries have been deleted.  Instead, receivers must infer deletions by the absence of data during a particular collection event.</t>
        <t>For periodic subscriptions, triggered updates will occur at the boundaries of a specified time interval.  These boundaries can be calculated from the periodic parameters:</t>
        <ul spacing="normal">
          <li>
            <t>a <em>period</em> that defines the duration between push updates.</t>
          </li>
          <li>
            <t>an <em>anchor-time</em>; update intervals fall on the points in time that are a multiple of a <em>period</em> from an <em>anchor-time</em>.  If an <em>anchor-time</em> is not provided, then the publisher chooses a suitable anchor-time, e.g., perhaps the time that the subscription was first instantiated by the publisher.</t>
          </li>
        </ul>
        <t>The anchor time and period are particularly useful, in fact required, for when the collected telemetry data is being stored in a time-series database and the subscription is setup to ensure that each collection is placed in a separate time-interval bucket.</t>
        <t>Periodic update notifications are expected, but not required, to use a single <em>target-path</em> per <em>update</em> notification.</t>
      </section>
      <section anchor="on-change-events">
        <name>On-Change events</name>
        <t>In an on-change subscription, <em>update</em> records indicate updated values or when a monitored data node or list node has been deleted.  An <em>update</em> record is sent whenever a change in the subscribed information is detected. <em>update</em> records <bcp14>SHOULD</bcp14> be generated at the same subtree as equivalent periodic subscription rather than only the specific data node that is on-change notifiable.  The goal is to ensure that the <em>update</em> message contains a consistent set of data on the subscription path.</t>
        <t>Each entry in the <em>updates</em> list identifies a data node (i.e., list entry, container, leaf or leaf-list), via the <em>target-path</em> that either has changes is state or has been deleted.</t>
        <t>A delete of a specific individual data node or subtree may be notified in two different ways:</t>
        <ul spacing="normal">
          <li>
            <t>if the data that is being deleted is below the <em>target-path</em> then the delete is implicit by the publisher returning the current data node subtree with the delete data nodes missing.  I.e., the receiver must implicitly infer deletion.</t>
          </li>
          <li>
            <t>if the data node is being deleted at the target path.  E.g., if an interface is deleted then an entire list entry related to that interface may be removed.  In this case, the <em>target path</em> identifies the list entry that is being deleted, but the data returned is just an empty object <tt>{}</tt>, which replaces all the existing data for that object in the receiver. <strong>TODO, is this better an a delete flag?</strong></t>
          </li>
        </ul>
        <t>On-change subscriptions also support the following additional parameters:</t>
        <ul spacing="normal">
          <li>
            <t><em>sync-on-start</em> defines whether or not a complete snapshot of all subscribed data is sent at the start of a subscription.  Such early synchronization establishes the frame of reference for subsequent updates.</t>
          </li>
        </ul>
        <section anchor="OnChangeConsiderations">
          <name>On-Change Notifiable Datastore Nodes</name>
          <t>Publishers are not required to support on-change notifications for all data nodes, and they may not be able to generate on-change updates for some data nodes.  Possible reasons for this include:</t>
          <ul spacing="normal">
            <li>
              <t>the value of the datastore node changes frequently (e.g., the in-octets counter as defined in <xref target="RFC8343"/>),</t>
            </li>
            <li>
              <t>small object changes that are frequent and meaningless (e.g., a temperature gauge changing 0.1 degrees),</t>
            </li>
            <li>
              <t>or no implementation is available to generate a notification when the source variable for a particular data node has changed.</t>
            </li>
          </ul>
          <t>In addition, publishers are not required to notify every change or value for an on-change monitored data node.  Instead, publishers <bcp14>MAY</bcp14> limit the rate at which changes are reported for a given data node, i.e., effectively deciding the interval at which an underlying value is sampled.  If a data node changes value and then reverts back to the original value within a sample interval then the publisher <bcp14>MAY</bcp14> not detect the change and it would go unreported.  However, if the data node changes to a new value after it has been sampled, then the change and latest state are reported to the receiver.  In addition, if a client was to query the value (e.g., through a NETCONF get-data RPC) then they <bcp14>MUST</bcp14> see the same observed value as would be notified.</t>
          <t>To give an example, if the interface link state reported by hardware is changing state hundreds of times per second, then it would be entirely reasonable to limit those interface state changes to a much lower cadence, e.g., perhaps every 100 milliseconds.  In the particular case of interfaces, there may also be data model specific forms of more advanced dampening that are more appropriate, e.g., that notify interface down events immediately, but rate limit how quickly the interface is allowed to transition to up state, which overall acts as a limit on the rate at which the interface state may change, and hence also act as a limit on the rate at which on-change notifications could be generated.</t>
          <t>The information about what nodes support on-change notifications is reported using capabilities operational data model.  This is further described in <xref target="ConformanceAndCapabilities"/>.</t>
        </section>
        <section anchor="on-change-considerations">
          <name>On-Change Considerations</name>
          <t>On-change subscriptions allow receivers to receive updates whenever changes to targeted objects occur.  As such, on-change subscriptions are particularly effective for data that changes infrequently but for which applications need to be quickly notified, with minimal delay, whenever a change does occur.</t>
          <t>On-change subscriptions tend to be more difficult to implement than periodic subscriptions.  Accordingly, on-change subscriptions may not be supported by all implementations or for every object.</t>
          <t>Whether or not to accept or reject on-change subscription requests when the scope of the subscription contains objects for which on-change is not supported is up to the publisher implementation.  A publisher <bcp14>MAY</bcp14> accept an on-change subscription even when the scope of the subscription contains objects for which on-change is not supported.  In that case, updates are sent only for those objects within the scope of the subscription that do support on-change updates, whereas other objects are excluded from update records, even if their values change.  In order for a subscriber to determine whether objects support on-change subscriptions, objects are marked accordingly on a publisher.  Accordingly, when subscribing, it is the responsibility of the subscriber to ensure that it is aware of which objects support on-change and which do not.  For more on how objects are so marked, see Section 3.10. <strong>TODO Is this paragraph and the one below still the right choice for YANG Push Lite?</strong></t>
          <t>Alternatively, a publisher <bcp14>MAY</bcp14> decide to simply reject an on-change subscription if the scope of the subscription contains objects for which on-change is not supported.  In the case of a configured subscription, the publisher <bcp14>MAY</bcp14> suspend the subscription.</t>
        </section>
      </section>
      <section anchor="combined-periodic-and-on-change-subscriptions">
        <name>Combined periodic and on-change subscriptions</name>
        <t>A single subscription may created to generate notifications both when changes occur and on a periodic cadence.  Such subscriptions are equivalent to having separate periodic and on-change subscriptions on the same path, except that they share the same subscription-id and filter paths.</t>
      </section>
      <section anchor="streaming-update-examples">
        <name>Streaming Update Examples</name>
        <t><strong>TODO, Generate new JSON based example of a periodic, and delete messages.  Current placeholders are the existing YANG Push Notifications.</strong></t>
        <t>Figure XXX provides an example of a notification message for a subscription tracking the operational status of a single Ethernet interface (per <xref target="RFC8343"/>).  This notification message is encoded XML <em>W3C.REC-xml-20081126</em> over the Network Configuration Protocol
(NETCONF) as per <xref target="RFC8640"/>.</t>
        <figure>
          <name>Example 'update' periodic notification</name>
          <artwork align="left"><![CDATA[
<notification
  xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2017-10-25T08:00:11.22Z</eventTime>
<push-update xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
  <id>1011</id>
  <datastore-contents>
    <interfaces
     xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
      <interface>
        <name>eth0</name>
        <oper-status>up</oper-status>
      </interface>
    </interfaces>
  </datastore-contents>
</push-update>
</notification>
]]></artwork>
        </figure>
        <t>Figure XXX provides an example of an on-change notification message for
the same subscription.</t>
        <figure>
          <name>Example 'update' on-change notification</name>
          <artwork align="left"><![CDATA[
<notification
  xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2017-10-25T08:22:33.44Z</eventTime>
<push-change-update
    xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
  <id>89</id>
  <datastore-changes>
    <yang-patch>
      <patch-id>0</patch-id>
      <edit>
        <edit-id>edit1</edit-id>
        <operation>replace</operation>
        <target>/ietf-interfaces:interfaces</target>
        <value>
          <interfaces
              xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
            <interface>
              <name>eth0</name>
              <oper-status>down</oper-status>
            </interface>
          </interfaces>
        </value>
      </edit>
    </yang-patch>
  </datastore-changes>
</push-change-update>
</notification>
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="ReceiversEtAl">
      <name>Receivers, Transports, and Encodings</name>
      <section anchor="receivers">
        <name>Receivers</name>
        <t>Every subscription is associated with one or more receivers, which each identify the destination host where all the subscription notifications are sent.  Each receiver has the following associated properties:</t>
        <ul spacing="normal">
          <li>
            <t>a <em>name</em> to identify and reference the receiver in configured subscriptions.</t>
          </li>
          <li>
            <t>a <em>transport</em>, which identifies the transport protocol to use to
connect with all subscription receivers.  </t>
            <ul spacing="normal">
              <li>
                <t>Optional transport-specific related parameters, e.g., DSCP.  There are likely to be various data nodes related to establishing appropriate security and encryption.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>an <em>encoding</em> to encode all YANG notification messages to the receiver, i.e., see <xref target="Encodings"/>.</t>
          </li>
          <li>
            <t>optional parameters to identify where traffic should egress the publisher:  </t>
            <ul spacing="normal">
              <li>
                <t>a <em>source-interface</em>, which identifies the egress interface to use from the publisher.</t>
              </li>
              <li>
                <t>a <em>source-address</em> address, which identifies the IP address to stamp on notification messages destined for the receiver.</t>
              </li>
              <li>
                <t>a <em>source-vrf</em>, which identifies the Virtual Routing and Forwarding (VRF) instance on which to reach receivers.  This VRF is a network instance as defined in <xref target="RFC8529"/>.  Publisher support for VRFs is optional and advertised using the <em>supports-vrf</em> feature. <strong>TODO - do we also support inferring the VRF from the source interface?</strong></t>
              </li>
            </ul>
          </li>
        </ul>
        <t>“If none of the above parameters are set, the publisher <bcp14>MAY</bcp14> decide which interface(s) to source notifications from.</t>
        <section anchor="receivers-for-configured-subscriptions">
          <name>Receivers for Configured Subscriptions</name>
          <t>For configured subscriptions, receivers are configured independently from the subscriptions and then referenced from the subscription.</t>
          <t>Configured subscriptions <bcp14>MAY</bcp14> have multiple receivers, but they <bcp14>MUST</bcp14> have the same encoding.  Multiple receivers facilitate redundancy at the receivers.</t>
          <t>Below is a tree diagram for <em>datastore-telemetry/receivers</em> container.  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
          <figure anchor="ReceiversYangTree">
            <name>datastore-telemetry/receivers container</name>
            <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite
  +--rw datastore-telemetry!
     +--rw receivers {configured}?
        +--rw receiver* [name]
           +--rw name                      string
           +--rw encoding?                 encoding
           +--rw dscp?                     inet:dscp
           +---x reset
           +--rw (notification-message-origin)?
           |  +--:(interface-originated)
           |  |  +--rw source-interface?   if:interface-ref
           |  |          {interface-designation}?
           |  +--:(address-originated)
           |     +--rw source-vrf?         leafref {supports-vrf}?
           |     +--rw source-address?     inet:ip-address-no-zone
           +--rw (transport-type)
]]></sourcecode>
          </figure>
          <t>Because there is no explicit association with an existing transport session, configuration operations include additional parameters beyond those of dynamic subscriptions.  These parameters identify each receiver, how to connect with that receiver, and possibly whether the notification messages need to come from a specific egress interface on the publisher.  Receiver-specific transport connectivity parameters <bcp14>MUST</bcp14> be configured via transport-specific augmentations to this specification.  See Section 2.5.7 for details.</t>
          <t>This specification is transport independent.  However, supporting a configured subscription will normally require the establishment of transport connectivity.  Some parameters used for this transport connectivity establishment are transport specific.  As a result, the
YANG module defined in <xref target="yp-lite-yang-module"/> is not able to directly define and expose these transport parameters.</t>
          <t>It is necessary for an implementation to support the connection establishment process.  To support this function, the YANG data model defined in this document includes a YANG choice node where transport-specific parameters for a particular receiver may be augmented.  This node is <em>/datastore-telemetry/receivers/receiver/transport-type</em>.</t>
          <t>A publisher supporting configured subscriptions must obviously support at least one YANG data model that augments transport connectivity parameters on
<em>/datastore-telemetry/receivers/receiver/transport-type</em>.  For an example of such an augmentation, see <xref target="I-D.draft-ietf-netconf-udp-notif"/> <strong>TODO, fix this to a UDP bis document</strong></t>
        </section>
        <section anchor="receivers-for-dynamic-subscriptions">
          <name>Receivers for Dynamic Subscriptions</name>
          <t>For dynamic subscriptions, each subscription has a single receiver that is implicit from the host that initiated the <em>establish-subscription</em> RPC, reusing the same transport session for all the subscription notifications.</t>
          <t>Hence most receiver parameters for a dynamic subscription are implicitly determined, and cannot be explicitly controlled.</t>
          <t>Dynamic subscriptions <bcp14>MUST</bcp14> specify an encoding (see <xref target="Encodings"/>) and <bcp14>MAY</bcp14> specify DSCP Marking (see <xref target="DSCP"/>) for the telemetry notifications in the <em>establish-subscription</em> RPC (see <xref target="EstablishSubscriptionYangTree"/>).</t>
        </section>
      </section>
      <section anchor="transports">
        <name>Transports</name>
        <t>This document describes a transport-agnostic mechanism for subscribing to YANG datastore telemetry.  Hence, separate specifications are required to define transports that support YANG Push Lite.  The requirements for these transport specifications are documented in the following section:</t>
        <section anchor="requirements-for-yang-push-lite-transport-specifications">
          <name>Requirements for Yang Push Lite Transport Specifications</name>
          <t>This section provides requirements for any transport specifications supporting the YANG Push Lite solution presented in this document.</t>
          <t>The transport specification <bcp14>MUST</bcp14> provide a YANG module (to be implemented by publishers) that augments the <em>datastore-telemetry/receivers/transport-type</em> choice statement with a container that both identifies the transport and contains all transport specific parameters.</t>
          <t>Using a secure transport is <bcp14>RECOMMENDED</bcp14>.  Thus, any transport specification <bcp14>MUST</bcp14> provide a mechanism to ensure secure communication between the publisher and receiver in a hostile environment, e.g., through the use of transport layer encryption.  Transport specification <bcp14>MAY</bcp14> also specify a mechanism for unencrypted communications, which can be used when transport layer security is not required, e.g., if the transport session is being secured via another mechanism, or when operating within a controlled environment or test lab.</t>
          <t>Any transport specification <bcp14>SHOULD</bcp14> support mutual receiver and publisher authentication at the transport layer.</t>
          <t>The transport selected by the subscriber to reach the publisher <bcp14>SHOULD</bcp14> be able to support multiple "establish-subscription" requests made in the same transport session.</t>
          <t>Any transport specification <bcp14>SHOULD</bcp14> ensure that the receiver application can be notified of the <em>subscription-started</em> lifecycle notification before any associated <em>update</em> messages.</t>
          <t>A specification for a transport built upon this document can choose whether to use the same logical channel for the RPCs and the event records.  However, the <em>update</em> records and the subscription state change notifications <bcp14>MUST</bcp14> be sent on the same transport session.</t>
          <t>Any transport specification <bcp14>SHOULD</bcp14> provide an extensible mechanism to indicate which encodings are supported, e.g., via an IANA registry or protocol negotiation.  Supported encodings for a given transport are advertised via the ietf-yp-lite-capabilities YANG Model <xref target="yp-lite-yang-capabilities-module"/>.</t>
          <t>Additional transport requirements may be dictated by the choice of transport used with a subscription.</t>
        </section>
        <section anchor="DSCP">
          <name>DSCP Marking</name>
          <t>YANG Push Lite supports <em>dscp</em> marking to differentiate prioritization of notification messages during network transit.</t>
          <t>A receiver with a <em>dscp</em> leaf results in a corresponding Differentiated Services Code Point (DSCP) marking <xref target="RFC2474"/>} being placed in the IP header of any resulting <em>update</em> notification messages and subscription state change notifications.  A publisher <bcp14>MUST</bcp14> respect the DSCP markings for subscription traffic egressing that publisher.</t>
          <t>Different DSCP code points require different transport connections.  As a result, where TCP is used, a publisher that supports the "dscp" feature must ensure that a subscription's notification messages are returned in a single TCP transport session where all traffic shares the subscription's "dscp" leaf value.  If this cannot be guaranteed, any "establish-subscription" RPC request <bcp14>SHOULD</bcp14> be rejected with a "dscp-unavailable" error.  <strong>TODO - Is this text still relevant?</strong></t>
        </section>
      </section>
      <section anchor="Encodings">
        <name>Encodings</name>
        <t>The <em>update</em> notification(<xref target="EventRecords"/>) and subscription lifecycle notifications (<xref target="LifecycleNotifications"/>) can be encoded in any format that has a definition for encoding YANG data.  For a given subscription, all notification messages are encoded using the same encoding.</t>
        <t>Some IETF standards for YANG encodings known at the time of publication are:</t>
        <ul spacing="normal">
          <li>
            <t>JSON, defined in <xref target="RFC7951"/></t>
          </li>
          <li>
            <t>CBOR, defined in <xref target="RFC9254"/>, and <xref target="RFC9595"/> for using compressed schema identifiers (YANG SIDs)</t>
          </li>
          <li>
            <t>XML, defined in <xref target="RFC7950"/></t>
          </li>
        </ul>
        <t>To maximize interoperability, all implementations are <bcp14>RECOMMENDED</bcp14> to support both JSON and CBOR encodings.  Constrained platforms may not be able to support JSON and hence may choose to only support CBOR encoding.  JSON encoding may not be supported in the scenario that another encoding becomes the defacto standard (e.g., as JSON has largely replaced XML as the defacto choice for text based encoding).  Support for the XML encoding and/or CBOR encoding using YANG SIDs is <bcp14>OPTIONAL</bcp14>.</t>
        <t>Encodings are defined in the <em>ietf-yp-lite.yang</em> as YANG identities that derive from the <em>encoding</em> base identity.  Additional encodings can be defined by defining and implementing new identities that derive from the <em>encoding</em> base identity, and also advertising those identities as part of the ietf-yp-lite-capabilities YANG module's transport capabilities <xref target="yp-lite-yang-capabilities-module"/>.</t>
        <t>For configured subscriptions, the encoding is configured as part of the receiver configuration (<xref target="ReceiversYangTree"/>).</t>
        <t>For dynamic subscriptions, the encoding is selected as part of the establish-subscription RPC (<xref target="EstablishSubscriptionYangTree"/>).</t>
        <t><strong>TODO For dynamic subscriptions, Yang Push will infer the encoding from incoming RPC if not provided.  Do we want to preserve the existing behavior or just be explicit and enforce that an encoding must always be specified?</strong></t>
      </section>
    </section>
    <section anchor="ConfiguredAndDynamic">
      <name>Setting up and Managing Subscriptions</name>
      <t>Subscriptions can be set up and managed in two ways:</t>
      <ol spacing="normal" type="1"><li>
          <t>Configured Subscriptions - a subscription created and controlled solely by configuration.</t>
        </li>
        <li>
          <t>Dynamic Subscriptions - a subscription created and controlled via a YANG RPC from a telemetry receiver.</t>
        </li>
      </ol>
      <t>Conformant implementations <bcp14>MUST</bcp14> implement at least one of the two mechanisms above for establishing and maintaining subscriptions.</t>
      <t>Both configured and dynamic subscriptions are represented in the list <em>datastore-telemetry/subscriptions/subscription</em>, and most of the functionality and behavior of configured and dynamic subscriptions described in this document is specified to be the same or very similar.  However, they differ in how they are created and in the associated lifecycle management, described in the following sections:</t>
      <t>Additional characteristics differentiating configured from dynamic subscriptions include the following:</t>
      <ul spacing="normal">
        <li>
          <t>The lifetime of a dynamic subscription is bound by the transport session used to establish it.  For connection-oriented stateful transports like NETCONF, the loss of the transport session will result in the immediate termination of any associated dynamic subscriptions.  For connectionless or stateless transports like HTTP, a lack of receipt acknowledgment of a sequential set of notification messages and/or keep-alives can be used to trigger a termination of a dynamic subscription.  Contrast this to the lifetime of a configured subscription.  This lifetime is driven by relevant configuration being present in the publisher's applied configuration.  Being tied to configuration operations implies that (1) configured subscriptions can be configured to persist across reboots and (2) a configured subscription can persist even when its publisher is fully disconnected from any network. <strong>TODO, the configured subscription doesn't really persist, since it is torn down and re-created.  This explanation needs to be improved.</strong></t>
        </li>
        <li>
          <t>Configured subscriptions can be modified by any configuration client with write permission on the configuration of the subscription.  Dynamic subscriptions can only be modified via an RPC request made by the original subscriber or by a change to configuration data referenced by the subscription.</t>
        </li>
      </ul>
      <t>Note that there is no mixing and matching of dynamic and configured operations on a single subscription.  Specifically, a configured subscription cannot be modified or deleted using RPCs defined in this document.  Similarly, a dynamic subscription cannot be directly modified or deleted by configuration operations.  It is, however, possible to perform a configuration operation that indirectly impacts a dynamic subscription.  By changing the value of a preconfigured filter referenced by an existing dynamic subscription, the selected event records passed to a receiver might change.</t>
      <t>A publisher <bcp14>MAY</bcp14> terminate a dynamic subscription at any time. Similarly, it <bcp14>MAY</bcp14> decide to temporarily suspend the sending of notification messages for any dynamic subscription, or for one or more receivers of a configured subscription.  Such termination or suspension is driven by internal considerations of the publisher.</t>
      <t>**TODO, do we want to add text that if a subscription is ever changes (config or dynamic (e.g., referenced filter)) then the subscription <bcp14>MUST</bcp14> be terminated and restarted.</t>
      <section anchor="configured-subscriptions">
        <name>Configured Subscriptions</name>
        <t>Configured subscriptions allow the management of subscriptions via configuration so that a publisher can send notification messages to a receiver.  Support for configured subscriptions is <bcp14>OPTIONAL</bcp14>, with its availability advertised via the <em>configured</em> YANG feature in the ietf-yp-lite YANG module <xref target="yp-lite-yang-module"/>.</t>
        <t>A configured subscription comprises:</t>
        <ul spacing="normal">
          <li>
            <t>the target datastore for the subscription, as per <xref target="RFC8342"/>.</t>
          </li>
          <li>
            <t>a set of selection filters to choose which datastore nodes the subscription is monitoring or sampling, as described in <xref target="pathsAndFilters"/></t>
          </li>
          <li>
            <t>configuration for how update notifications for the data nodes are triggered.  I.e., either periodic sampling, on-change event-driven, or both. (<strong>TODO add section reference</strong>)</t>
          </li>
          <li>
            <t>a set of associated receivers (as described in <xref target="receivers"/>) that specify transport, receiver, and encoding parameters.</t>
          </li>
        </ul>
        <t>Configured subscriptions have several characteristics distinguishing them from dynamic subscriptions:</t>
        <ul spacing="normal">
          <li>
            <t>persistence across publisher reboots,</t>
          </li>
          <li>
            <t>a reference to receiver, is explicitly configured rather than being implicitly associated with the transport session, as would be the case for a dynamic subscription.</t>
          </li>
          <li>
            <t>an ability to send notification messages to more than one receiver.  All receivers for a given subscription must use the same encoding and type of transport (<strong>TODO What about DSCP settings?</strong>).  <em>Note that receivers are unaware of the existence of any other receivers.</em></t>
          </li>
          <li>
            <t>persistence even when transport or receiver is unavailable.  In this scenario, the publishers will terminate a subscription that it cannot keep active, but it will periodically attempt to restablish connection to the receiver and re-activate the configured subscription.</t>
          </li>
        </ul>
        <t>Multiple configured subscriptions <bcp14>MUST</bcp14> be supportable over a single transport session. <strong>TODO, James is suggesting that this should be <bcp14>MAY</bcp14>, either way, I think that this should move to be under the transport considerations section of the document.</strong></t>
        <t>Below is a tree diagram for the "subscriptions" container.  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.  In the operational datastore <xref target="RFC8342"/>, the "subscription" list contains entries both for configured and dynamic subscriptions.</t>
        <figure anchor="SubscriptionYangTree">
          <name>subscriptions container Tree Diagram</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite
  +--rw datastore-telemetry!
     +--rw subscriptions
        +--rw subscription* [id]
           +--rw id                subscription-id
           +--rw target
           |  +--rw datastore?             identityref
           |  +--rw (filter)?
           |     +--:(by-reference)
           |     |  +--rw filter-ref       filter-ref
           |     +--:(within-subscription)
           |        +--rw (filter-spec)?
           |           +--:(paths)
           |           |  +--rw paths*     ypath
           |           +--:(subtree)
           |           |  +--rw subtree?   <anydata> {ypl:subtree}?
           |           +--:(xpaths)
           |              +--rw xpaths*    yang:xpath1.0 {ypl:xpath}?
           +--rw update-trigger
           |  +--rw periodic!
           |  |  +--rw period         centiseconds
           |  |  +--rw anchor-time?   yang:date-and-time
           |  +--rw on-change! {on-change}?
           |     +--rw sync-on-start?   boolean
           +--rw purpose?          string {configured}?
           +--ro status?           subscription-status
           +--rw receivers* [name]
           |  +--rw name
           |  |       -> /datastore-telemetry/receivers/receiver/name
           |  +--ro encoding?     encoding
           |  +--ro status?       receiver-status
           |  +--ro statistics
           |     +--ro sent-event-records?
           |     |       yang:zero-based-counter64
           |     +--ro excluded-event-records?
           |             yang:zero-based-counter64
           +---x reset {configured}?
]]></sourcecode>
        </figure>
        <section anchor="configured-subscription-state-machine">
          <name>Configured Subscription State Machine</name>
          <t>Below is the state machine for a configured subscription on the publisher.  This state machine describes the three states (<em>valid</em>, <em>invalid</em>, and <em>concluded</em>) as well as the transitions between these states.  Start and end states are depicted to reflect configured subscription creation and deletion events.  The creation or modification of a configured subscription, referenced filter or receiver initiates an evaluation by the publisher to determine if the subscription is in the <em>valid</em> state or the <em>invalid</em> state.  The publisher uses its own criteria in making this determination.  If in the <em>valid</em> state, the subscription becomes operational.  See (1) in the diagram below.</t>
          <t>**TODO - Add a new 'Active state' to the subscription state machine.  I.e., a subscription is active as long as it has at least one valid receiver (in some cases this would mean that negotiation with the receiver is complete, for others, such as simple UDP, is just requires configuration to be valid.)</t>
          <t>Publishers <bcp14>SHOULD NOT</bcp14> send <em>update</em> messages for a subscription that is not active.  I.e., a publisher <bcp14>SHOULD NOT</bcp14> send <em>update</em> messages before a <em>subscription-started</em> notification or after a <em>subscription-terminated</em> notification.</t>
          <t>Similarly, receivers <bcp14>SHOULD</bcp14> ignore any <em>update</em> messages received for a subscription that is not active.</t>
          <figure>
            <name>Publisher's State Machine for a Configured Subscription</name>
            <artwork><![CDATA[
.........
: start :-.
:.......: |
     create  .---modify----<-----.
          |  |                   |
          V  V               .-------.         .......
 .----[evaluate]--no-------->|invalid|-delete->: end :
 |                           '-------'         :.....:
 |-[re-evaluate]--no--(2)-.      ^                ^
 |        ^               |      |                |
yes       |               '->unsupportable      delete
 |      modify             (subscription-   (subscription-
 |        |                 terminated*)     terminated*)
 |        |                      |                |
(1)       |                     (3)              (4)
 |   .---------------------------------------------------.
 '-->|                     valid                         |
     '---------------------------------------------------'

Legend:
  Dotted boxes: subscription added or removed via configuration
  Dashed boxes: states for a subscription
  [evaluate]: decision point on whether the subscription
              is supportable
  (*): resulting subscription state change notification
]]></artwork>
          </figure>
          <t>A subscription in the <em>valid</em> state may move to the <em>invalid</em> state in one of two ways.  First, it may be modified in a way that fails a re-evaluation.  See (2) in the diagram.  Second, the publisher might determine that the subscription is no longer supportable.  This could be because of an unexpected but sustained increase in an event stream's event records, degraded CPU capacity, a more complex referenced filter, or other subscriptions that have usurped resources.  See (3) in the diagram.  No matter the case, a <em>subscription-terminated</em> notification is sent to any receivers in the <em>active</em> or state.  Finally, a subscription may be deleted by configuration (4).</t>
          <t>When a subscription is in the <em>valid</em> state, a publisher will attempt to connect with all receivers of a configured subscription and deliver notification messages.  Below is the state machine for each receiver of a configured subscription.  This receiver state machine is fully contained in the state machine of the configured subscription and is only relevant when the configured subscription is in the <em>valid</em> state.</t>
          <figure>
            <name>Receiver State Machine for a Configured Subscription on a Publisher</name>
            <artwork><![CDATA[
.-----------------------------------------------------------.
|                         valid                             |
|   .----------.                           .------------.   |
|   | receiver |---timeout---------------->|  receiver  |   |
|   |connecting|<----------------reset--(c)|disconnected|   |
|   |          |<-transport                '------------'   |
|   '----------'  loss,reset                                |
|      (a)          |                                       |
|  subscription-   (b)                                      |
|  started*    .--------.                                   |
|       '----->|        |                                   |
|              |receiver|                                   |
|              | active |                                   |
|              |        |                                   |
|              '--------'                                   |
'-----------------------------------------------------------'

Legend:
  Dashed boxes that include the word *receiver* show the possible
  states for an individual receiver of a valid configured
  subscription.

* indicates a subscription state change notification
]]></artwork>
          </figure>
          <t>When a configured subscription first moves to the <em>valid</em> state, the <em>state</em> leaf of each receiver is initialized to the <em>connecting</em> state.  If transport connectivity is not available to any receivers and there are any notification messages to deliver, a transport session is established (e.g., per <xref target="RFC8071"/>).  Individual receivers are moved to the <em>active</em> state when a <em>subscription-started</em> subscription state change notification is successfully passed to that receiver (a).  Event records are only sent to active receivers. Receivers of a configured subscription remain active on the publisher if both (1) transport connectivity to the receiver is active and (2) event records are not being dropped due to a publisher's sending capacity being reached.  In addition, a configured subscription's receiver <bcp14>MUST</bcp14> be moved to the "connecting" state if the receiver is reset via the "reset" action (b), (c).  For more on the "reset" action, see Section 2.5.5.  If transport connectivity cannot be achieved while in the "connecting" state, the receiver <bcp14>MAY</bcp14> be moved to the "disconnected" state.</t>
          <t>A configured subscription's receiver <bcp14>MUST</bcp14> be moved to the "suspended" state if there is transport connectivity between the publisher and receiver but (1) delivery of notification messages is failing due to a publisher's buffer capacity being reached or (2) notification messages cannot be generated for that receiver due to insufficient CPU (d).  This is indicated to the receiver by the "subscription-suspended" subscription state change notification.</t>
          <t>A configured subscription's receiver <bcp14>MUST</bcp14> be returned to the "active" state from the "suspended" state when notification messages can be generated, bandwidth is sufficient to handle the notification messages, and a receiver has successfully been sent a "subscription-resumed" or "subscription-modified" subscription state change notification (e).  The choice as to which of these two subscription state change notifications is sent is determined by whether the subscription was modified during the period of suspension.</t>
          <t>Modification of a configured subscription is possible at any time.  A "subscription-modified" subscription state change notification will be sent to all active receivers, immediately followed by notification messages conforming to the new parameters.  Suspended receivers will
also be informed of the modification.  However, this notification will await the end of the suspension for that receiver (e).</t>
        </section>
        <section anchor="creating-a-configured-subscription">
          <name>Creating a Configured Subscription</name>
          <t>Configured subscriptions are created using configuration operations against the top-level <em>subscriptions</em> subtree.</t>
          <t>After a subscription is successfully established, the publisher immediately sends a "subscription-started" subscription state change notification to each receiver.  It is quite possible that upon configuration, reboot, or even steady-state operations, a transport session may not be currently available to the receiver.  In this case, when there is something to transport for an active subscription, transport-specific "call home" operations <xref target="RFC8071"/> will be used to establish the connection.  When transport connectivity is available, notification messages may then be pushed.</t>
          <t>With active configured subscriptions, it is allowable to buffer event records even after a <em>subscription-started</em> has been sent.  However, if events are lost (rather than just delayed) due to buffer capacity being reached, a <em>subscription-terminated</em> notification must be sent, followed by a new subscription-started" notification. These notifications indicate an event record discontinuity has occurred.</t>
          <t><strong>TODO, to see an example of subscription creation using configuration operations over NETCONF, see Appendix A.</strong></t>
        </section>
        <section anchor="modifying-a-configured-subscription">
          <name>Modifying a Configured Subscription</name>
          <t>Configured subscriptions may end up being modified due to configuration changes in the <em>datastore-telemetry</em> container.</t>
          <t>If the modification involves adding receivers, then those receivers are placed in the <em>connecting</em> state.  If a receiver is removed, the subscription state change notification <em>subscription-terminated</em> is sent to that receiver if that receiver is active or suspended.</t>
          <t><strong>TODO Do we want a common here about tearing down a subscription, or is having it in the common section sufficient?</strong></t>
        </section>
        <section anchor="deleting-a-configured-subscription">
          <name>Deleting a Configured Subscription</name>
          <t>Configured subscriptions can be deleted via configuration.  After a subscription has been removed from configuration, the publisher <bcp14>MAY</bcp14> complete their current collection if one is in progress, then the publisher sends <em>subscription-terminated</em> notification to all of the subscription's receivers to indicate that the subscription is no longer active.</t>
          <t><strong>TODO, do we need a comment about closing the transport session if there are no more subscription to that receiver?  Possibly the Transports section of the document should have a section that describes the lifecycle of a transport session (or will that end up differing between configured and dyanmic subscriptions?)</strong></t>
        </section>
        <section anchor="reset">
          <name>Resetting a Configured Subscription</name>
          <t>It is possible that a configured subscription needs to be reset, e.g., if the receiver wasn't ready to start processing the subscription notifications.  This can be accomplished via invoking one of the two YANG <em>reset</em> actions in the ietf-yp-lite YANG module:</t>
          <ol spacing="normal" type="1"><li>
              <t>the <em>reset</em> action at <em>/datastore-telemetry/subscriptions/subscription/reset</em> resets a single subscription, or</t>
            </li>
            <li>
              <t>the <em>reset</em> action at <em>/datastore-telemetry/receivers/receiver/reset</em> resets all subscriptions that reference that receiver.</t>
            </li>
          </ol>
          <t>These actions may be useful in cases if a receiver or collector determines that a configured subscription is not behaving correctly, and wishes to force a reset of the subscription without modifying the subscription configuration.</t>
          <t>Although the reset action acts at the subscription application level, the publisher <bcp14>MAY</bcp14> reset any transport session(s) associated with the subscription or attempt to reconnect to the receiver if a transport session could not connect.  Publishers <bcp14>SHOULD NOT</bcp14> reset the transport session if the transport session is shared with other subscriptions.</t>
        </section>
      </section>
      <section anchor="dynamic-subscriptions">
        <name>Dynamic Subscriptions</name>
        <t>Dynamic subscriptions, where a subscriber initiates a subscription negotiation with a publisher via an RPC.  If the publisher is able to serve this request, it accepts it and then starts pushing notification messages back to the subscriber.  If the publisher is not able to serve it as requested, then an error response is returned.</t>
        <t>Support for dynamic subscriptions is <bcp14>OPTIONAL</bcp14>, with its availability advertised via the <em>dynamic</em> YANG feature in the ietf-yp-lite YANG module <xref target="yp-lite-yang-module"/>.</t>
        <t>Dynamic subscriptions are managed via protocol operations (in the form of RPCs, per <xref target="RFC7950"/>, Section 7.14) made against targets located in the publisher.</t>
        <section anchor="dynamic-subscription-state-machine">
          <name>Dynamic Subscription State Machine</name>
          <t>Below is the publisher's state machine for a dynamic subscription. Each state is shown in its own box.  It is important to note that such a subscription doesn't exist at the publisher until an <em>establish-subscription</em> RPC is accepted.  The mere request by a subscriber to establish a subscription is not sufficient for that subscription to be externally visible.  Start and end states are depicted to reflect subscription creation and deletion events.</t>
          <figure>
            <name>Publisher's State Machine for a Dynamic Subscription</name>
            <artwork><![CDATA[
                  .........
                  : start :
                  :.......:
                      |
              establish-subscription
                      |
                      |
                      v
                 .-----------.
                 | receiver  |
                 |  active   |
                 |           |
                 '-----------'
                      |
            delete/kill-subscription
                      |
                      v
                  .........
                  :  end  :
                  :.......:
]]></artwork>
          </figure>
          <t>Of interest in this state machine are the following:</t>
          <ul spacing="normal">
            <li>
              <t>Successful "establish-subscription" RPCs move the subscription to the "active" state.</t>
            </li>
            <li>
              <t>A "delete-subscription" or "kill-subscription" RPC will end the subscription.</t>
            </li>
            <li>
              <t>A publisher may choose to end a subscription when there is not sufficient CPU or bandwidth available to service the subscription.  This is announced to the subscriber via the <em>subscription-terminated</em> subscription state change notification.  The receiver will need to establish a new subscription.</t>
            </li>
          </ul>
        </section>
        <section anchor="EstablishDynamic">
          <name>Establishing a Dynamic Subscription</name>
          <t>The "establish-subscription" RPC allows a subscriber to request the creation of a subscription.</t>
          <t>The input parameters of the operation are:</t>
          <t>o  An event stream filter, which may reduce the set of event records pushed.</t>
          <t>If the publisher can satisfy the "establish-subscription" request, it replies with an identifier for the subscription and then immediately starts streaming notification messages.</t>
          <t>Below is a tree diagram for "establish-subscription".  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
          <figure anchor="EstablishSubscriptionYangTree">
            <name>establish-subscription YANG RPC</name>
            <sourcecode type="yangtree"><![CDATA[
    +---x establish-subscription {dynamic}?
    |  +---w input
    |  |  +---w target
    |  |  |  +---w datastore?             identityref
    |  |  |  +---w (filter)?
    |  |  |     +--:(by-reference)
    |  |  |     |  +---w filter-ref       filter-ref
    |  |  |     +--:(within-subscription)
    |  |  |        +---w (filter-spec)?
    |  |  |           +--:(paths)
    |  |  |           |  +---w paths*     ypath
    |  |  |           +--:(subtree)
    |  |  |           |  +---w subtree?   <anydata> {ypl:subtree}?
    |  |  |           +--:(xpaths)
    |  |  |              +---w xpaths*    yang:xpath1.0 {ypl:xpath}?
    |  |  +---w update-trigger
    |  |  |  +---w periodic!
    |  |  |  |  +---w period         centiseconds
    |  |  |  |  +---w anchor-time?   yang:date-and-time
    |  |  |  +---w on-change! {on-change}?
    |  |  |     +---w sync-on-start?   boolean
    |  |  +---w encoding          encoding
    |  |  +---w dscp?             inet:dscp
    |  +--ro output
    |     +--ro id    subscription-id
]]></sourcecode>
          </figure>
          <t>A publisher <bcp14>MAY</bcp14> reject the "establish-subscription" RPC for many reasons, as described in Section 2.4.6.</t>
          <t>Below is a tree diagram for "establish-subscription-stream-error-info" RPC yang-data.  All objects contained in this tree are described in the YANG module in Section 4.</t>
          <figure>
            <name>"establish-subscription-stream-error-info" Tree Diagram</name>
            <artwork align="left"><![CDATA[
    yang-data establish-subscription-stream-error-info
      +--ro establish-subscription-stream-error-info
        +--ro reason?                   identityref
        +--ro filter-failure-hint?      string

        Figure 3: "establish-subscription-stream-error-info"
                    RPC yang-data Tree Diagram
]]></artwork>
          </figure>
          <section anchor="negotiation-of-subscription-policies">
            <name>Negotiation of Subscription Policies</name>
            <t>A dynamic subscription request <bcp14>SHOULD</bcp14> be declined if a publisher determines that it may be unable to provide update records meeting the terms of an "establish-subscription" RPC request.</t>
          </section>
        </section>
        <section anchor="deleting-a-dynamic-subscription">
          <name>Deleting a Dynamic Subscription</name>
          <t>The <em>delete-subscription</em> operation permits canceling an existing dynamic subscription that was established on the same transport session connecting to the subscriber.</t>
          <t>If the publisher accepts the request, which it <bcp14>MUST</bcp14>, if the subscription-id matches a dynamic subscription established in the same transport session, then it should stop the subscription and send a <em>subscription-terminated</em> notification.</t>
          <t>The publisher <bcp14>MAY</bcp14> reply back to the client before the subscription has been terminated, i.e., it may act asynchronously with respect to the request.  The publisher <bcp14>SHOULD NOT</bcp14> send any further events related to the subscription after the <em>subscription-terminated</em> notification and</t>
          <t><strong>TODO, I think that we should relax this to a <bcp14>SHOULD</bcp14>, but also this should be common with configured subscriptions, so perhaps not in this section.</strong>  If the publisher accepts the request and the publisher has indicated success, the publisher <bcp14>SHOULD NOT</bcp14> send any more notification messages for this subscription.</t>
        </section>
        <section anchor="killing-a-dynamic-subscription">
          <name>Killing a Dynamic Subscription</name>
          <t>The "kill-subscription" RPC operation permits a client to forcibly end any arbitrary dynamic subscription, identified by subscription-id, including those not associated with the transport session used for the RPC.  Note, configured subscriptions cannot be killed using this RPC, and requests to do <bcp14>MUST</bcp14> be rejected.</t>
        </section>
        <section anchor="rpc-failures">
          <name>RPC Failures</name>
          <t>Whenever an RPC is unsuccessful, the publisher returns relevant
information as part of the RPC error response.  Transport-level error
processing <bcp14>MUST</bcp14> be done before the RPC error processing described in
this section.  In all cases, RPC error information returned by the
publisher will use existing transport-layer RPC structures, such as
those seen with NETCONF (Appendix A of <xref target="RFC6241"/>) or RESTCONF
(Section 7.1 of <xref target="RFC8040"/>).  These structures <bcp14>MUST</bcp14> be able to encode
subscription-specific errors identified below and defined in this
document's YANG data model.</t>
          <t>As a result of this variety, how subscription errors are encoded in
an RPC error response is transport dependent.  Valid errors that can
occur for each RPC are as follows:</t>
          <artwork><![CDATA[
  establish-subscription         modify-subscription
  ----------------------         ----------------------
  dscp-unavailable               filter-unsupported
  encoding-unsupported           insufficient-resources
  filter-unsupported             no-such-subscription
  insufficient-resources

  delete-subscription            kill-subscription
  ----------------------         ----------------------
  no-such-subscription           no-such-subscription
]]></artwork>
          <t>To see a NETCONF-based example of an error response from the list
above, see the "no-such-subscription" error response illustrated in
<xref target="RFC8640"/>, Figure 10.</t>
          <t>There is one final set of transport-independent RPC error elements
included in the YANG data model defined in this document: three
yang-data structures that enable the publisher to provide to the
receiver any error information that does not fit into existing
transport-layer RPC structures.  These structures are:</t>
          <ol spacing="normal" type="1"><li>
              <t>"establish-subscription-stream-error-info": This <bcp14>MUST</bcp14> be returned
 with the leaf "reason" populated if an RPC error reason has not
 been placed elsewhere in the transport portion of a failed
 "establish-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent if
 hints on how to overcome the RPC error are included.</t>
            </li>
            <li>
              <t>"modify-subscription-stream-error-info": This <bcp14>MUST</bcp14> be returned
 with the leaf "reason" populated if an RPC error reason has not
 been placed elsewhere in the transport portion of a failed
 "modify-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent if hints
 on how to overcome the RPC error are included.</t>
            </li>
            <li>
              <t>"delete-subscription-error-info": This <bcp14>MUST</bcp14> be returned with the
 leaf "reason" populated if an RPC error reason has not been
 placed elsewhere in the transport portion of a failed
 "delete-subscription" or "kill-subscription" RPC response.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="implementation-considerations-from-rfc-8639">
        <name>Implementation Considerations (from RFC 8639)</name>
        <t><strong>TODO, we should rework this to strings for subscription names instead</strong></t>
        <t>To support deployments that include both configured and dynamic
subscriptions, it is recommended that the subscription "id" domain be
split into static and dynamic halves.  This will eliminate the
possibility of collisions if the configured subscriptions attempt to
set a "subscription-id" that might have already been dynamically
allocated.  A best practice is to use the lower half of the "id"
object's integer space when that "id" is assigned by an external
entity (such as with a configured subscription).  This leaves the
upper half of the subscription integer space available to be
dynamically assigned by the publisher.</t>
        <t>If a subscription is unable to marshal a series of filtered event
records into transmittable notification messages, the receiver should
be terminated with the reason "XXX TBD (Was unsupportable volume)".</t>
        <t>For configured subscriptions, operations are performed against the
set of receivers using the subscription "id" as a handle for that
set.  But for streaming updates, subscription state change
notifications are local to a receiver.  In the case of this
specification, receivers do not get any information from the
publisher about the existence of other receivers.  But if a network
operator wants to let the receivers correlate results, it is useful
to use the subscription "id" across the receivers to allow that
correlation.  Note that due to the possibility of different access
control permissions per receiver, each receiver may actually get a
different set of event records.</t>
      </section>
      <section anchor="event-record-delivery">
        <name>Event Record Delivery</name>
        <t>Whether dynamic or configured, once a subscription has been set up,
the publisher streams event records via notification messages per the
terms of the subscription.  For dynamic subscriptions, notification
messages are sent over the session used to establish the
subscription.  For configured subscriptions, notification messages
are sent over the connections specified by the transport and each
receiver of a configured subscription.</t>
        <t>A notification message is sent to a receiver when an event record is
not blocked by either the specified filter criteria or receiver
permissions.  This notification message <bcp14>MUST</bcp14> include an &lt;eventTime&gt;
object, as shown in <xref target="RFC5277"/>, Section 4.  This &lt;eventTime&gt; <bcp14>MUST</bcp14> be
at the top level of a YANG structured event record.</t>
        <t>The following example of XML <em>W3C.REC-xml-20081126</em>, adapted from
Section 4.2.10 of <xref target="RFC7950"/>, illustrates a compliant message:</t>
        <artwork><![CDATA[
  <notification
          xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
      <eventTime>2007-09-01T10:00:00Z</eventTime>
      <link-failure xmlns="https://acme.example.com/system">
          <if-name>so-1/2/3.0</if-name>
          <if-admin-status>up</if-admin-status>
          <if-oper-status>down</if-oper-status>
      </link-failure>
  </notification>

            Figure 10: Subscribed Notification Message
]]></artwork>
        <t><xref target="RFC5277"/>, Section 2.2.1 states that a notification message is to be
sent to a subscriber that initiated a &lt;create-subscription&gt;.  With
this document, this statement from <xref target="RFC5277"/> should be more broadly
interpreted to mean that notification messages can also be sent to a
subscriber that initiated an "establish-subscription" or to a
configured receiver that has been sent a "subscription-started".</t>
        <t>When a dynamic subscription has been started with
"establish-subscription", respectively, event records matching the newly applied filter criteria <bcp14>MUST NOT</bcp14> be
sent until after the RPC reply has been sent. <strong>TODO, do we want to keep this?</strong></t>
        <t>When a configured subscription has been started or modified, event
records matching the newly applied filter criteria <bcp14>MUST NOT</bcp14> be sent
until after the "subscription-started" notification has been sent.</t>
      </section>
    </section>
    <section anchor="LifecycleNotifications">
      <name>Subscription Lifecycle Notifications</name>
      <t>In addition to sending event records to receivers, a publisher also sends subscription lifecycle state change notifications when lifecycle events related to subscription management occur.</t>
      <t>Subscription state change notifications are generated per subscription, and are injected into the steam of <em>update</em> messages for that that subscription.  These notifications <bcp14>MUST NOT</bcp14> be dropped or filtered.</t>
      <t>Future extensions, or implementations <bcp14>MAY</bcp14> augment additional fields into the notification structures.  Receivers <bcp14>MUST</bcp14> silently ignore unexpected fields.</t>
      <t>The complete set of subscription state change notifications is described in the following subsections:</t>
      <section anchor="subscription-started">
        <name>"subscription-started"</name>
        <t>The subscription started notification is sent to a receiver to indicate that a subscription is active and they may start to receive <em>update</em> records from the publisher.</t>
        <t>The subscription started notification may be sent for any of these reasons:</t>
        <ol spacing="normal" type="1"><li>
            <t>A new subscription has been configured.</t>
          </li>
          <li>
            <t>A receiver has been added to a configured subscription.</t>
          </li>
          <li>
            <t>The configuration for a configured subscription has been changed, in which case a <em>subscription-terminated</em> notification should be sent, followed by a <em>subscription-started</em> notification if the new configuration is valid.</t>
          </li>
          <li>
            <t>A configured subscription previously failed, and was terminated.  After the publisher has successfully re-established a connection to the receiver and is starting to send datastore event records again.</t>
          </li>
          <li>
            <t>A dynamic subscription has been established.</t>
          </li>
        </ol>
        <t>Below is the tree diagram for the <em>subscription-started</em> notification.  All data nodes contained in this tree diagram are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
        <figure>
          <name>subscription-started Notification Tree Diagram</name>
          <sourcecode type="yangtree"><![CDATA[
    +---n subscription-started
    |  +--ro id                subscription-id
    |  +--ro target
    |  |  +--ro datastore?             identityref
    |  |  +--ro (filter)?
    |  |     +--:(by-reference)
    |  |     |  +--ro filter-ref       filter-ref
    |  |     +--:(within-subscription)
    |  |        +--ro (filter-spec)?
    |  |           +--:(paths)
    |  |           |  +--ro paths*     ypath
    |  |           +--:(subtree)
    |  |           |  +--ro subtree?   <anydata> {ypl:subtree}?
    |  |           +--:(xpaths)
    |  |              +--ro xpaths*    yang:xpath1.0 {ypl:xpath}?
    |  +--ro update-trigger
    |     +--ro periodic!
    |     |  +--ro period         centiseconds
    |     |  +--ro anchor-time?   yang:date-and-time
    |     +--ro on-change! {on-change}?
    |        +--ro sync-on-start?   boolean
]]></sourcecode>
        </figure>
        <t><strong>TODO, Should the subscription-started notification report decomposed subscription paths?</strong></t>
      </section>
      <section anchor="subscription-terminated">
        <name>"subscription-terminated"</name>
        <t>For a receiver, this notification indicates that no further event records for an active subscription should be expected from the publisher unless and until a new <em>subscription-started</em> notification is received.</t>
        <t>A <em>subscription-terminated</em> notification <bcp14>SHOULD</bcp14> only be sent by a publisher to a receiver if a <em>subscription-started</em> notification was previously sent.</t>
        <t>The subscription terminated notification may be sent to a receiver for any of these reasons:</t>
        <ol spacing="normal" type="1"><li>
            <t>A receiver has been removed from a configured subscription.</t>
          </li>
          <li>
            <t>A configured subscription has been removed.</t>
          </li>
          <li>
            <t>The configuration for a configured subscription has been changed, in which case a <em>subscription-terminated</em> notification should be sent, followed by a <em>subscription-started</em> notification if the new configuration is valid.</t>
          </li>
          <li>
            <t>A dynamic subscription was deleted via a "delete-subscription* or <em>kill-subscription</em> RPC.</t>
          </li>
          <li>
            <t>A subscription has failed for any reason, e.g.,:  </t>
            <ul spacing="normal">
              <li>
                <t>The publisher is no longer able to honor the subscription, due to resource constraints, or the filter is no longer valid.</t>
              </li>
              <li>
                <t>Any transport level buffer to the receiver has become full, and the hence the publisher is dropping <em>update</em> notifications.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>Below is a tree diagram for "subscription-terminated".  All objects contained in this tree are described in the YANG module in <xref target="yp-lite-yang-module"/>.</t>
        <figure>
          <name>subscription-terminated Notification Tree Diagram</name>
          <sourcecode type="yangtree"><![CDATA[
    +---n subscription-terminated
    |  +--ro id        subscription-id
    |  +--ro reason    identityref
]]></sourcecode>
        </figure>
        <t><strong>TODO Augmenting extra fields is better for clients?</strong>  The <em>reason</em> datanode identifyref indicates why a subcription has been terminated, and could be extended with further reasons in future.</t>
      </section>
      <section anchor="replay-completed">
        <name>"replay-completed"</name>
        <t><strong>TODO: Need to consider how this works when notifications are split up.  Possibly need to replace this with an opt-in message for a per collection complete message.  I.e., a notification that would be sent whenever every periodic collection is complete.</strong></t>
        <t>This notification indicates that all of the event records prior to the current time have been passed to a receiver.  It is sent before any notification messages containing an event record with a timestamp later than (1) the subscription's start time.</t>
        <t>After the "replay-completed" notification has been sent, additional event records will be sent in sequence as they arise naturally on the publisher.</t>
        <t>Below is a tree diagram for "replay-completed".  All objects contained in this tree are described in the YANG module in Section 4.</t>
        <figure>
          <name>replay-completed Notification Tree Diagram</name>
          <sourcecode type="yangtree"><![CDATA[
    +---n replay-completed
    |  +--ro id    subscription-id
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="performance-reliability-and-subscription-monitoring">
      <name>Performance, Reliability, and Subscription Monitoring</name>
      <t><strong>TODO.  Needs updating.  Not sure if this text doesn't end up elsewhere?</strong></t>
      <t>A subscription to updates from a datastore is intended to obviate the need for polling.  However, in order to do so, it is critical that subscribers can rely on the subscription and have confidence that they will indeed receive the subscribed updates without having to worry about updates being silently dropped.  In other words, a subscription constitutes a promise on the side of the publisher to provide the receivers with updates per the terms of the subscription, or otherwise notify the receiver if t</t>
      <t>Now, there are many reasons why a publisher may at some point no longer be able to fulfill the terms of the subscription, even if the subscription had been initiated in good faith.  For example, the volume of datastore nodes may be larger than anticipated, the interval may prove too short to send full updates in rapid succession, or an internal problem may prevent objects from being collected.  For this reason, the solution defined in this document (1) mandates that a publisher notify receivers immediately and reliably whenever it encounters a situation in which it is unable to keep the terms of the subscription and (2) provides the publisher with the option to suspend the subscription in such a case.  This includes indicating the fact that an update is incomplete as part of a "push-update" or "push-change-update" notification, as well as emitting a "subscription-suspended" notification as applicable.  This is described further in Section 3.11.1.</t>
      <t>A publisher <bcp14>SHOULD</bcp14> reject a request for a subscription if it is unlikely that the publisher will be able to fulfill the terms of that subscription request.  In such cases, it is preferable to have a subscriber request a less resource-intensive subscription than to deal with frequently degraded behavior.</t>
      <t>The solution builds on <xref target="RFC8639"/>.  As defined therein, any loss of an underlying transport connection will be detected and result in subscription termination (in the case of dynamic subscriptions) or suspension (in the case of configured subscriptions), ensuring that situations where the loss of update notifications would go unnoticed will not occur.</t>
      <section anchor="subscription-monitoring">
        <name>Subscription Monitoring</name>
        <t>In the operational state datastore, the <em>datastore-telemetry</em> container maintains operational state for all configured and dynamic subscriptions.</t>
        <t>Dynamic subscriptions are only present in the <em>datastore-telemetry/subscriptions/subscription</em> list when they are active, and are removed as soon as they are terminated.  Whereas configured subscriptions are present if the list if they are configured, regardless of whether they are active.</t>
        <t><strong>TODO, should dynamic receivers be listed?  Do we need to report per-receiver stats for dynamic subscriptions?</strong></t>
        <t>The operational state is important for monitoring the health of subscriptions, receivers, and the overall telemetry subsystem.</t>
        <t>This includes:</t>
        <t><strong>TODO, update the YANG model with more useful operational data, and mostly this section should briefly summarize and refer to the YANG model.  We should also consider what indications to include from filters that cause a larger amount of internal work but don't generate a large number of transmitted notifications.</strong></t>
        <ul spacing="normal">
          <li>
            <t>per subscription status and counters</t>
          </li>
          <li>
            <t>per receiver status and counters</t>
          </li>
          <li>
            <t>maybe some indication of the overall load on the telemetry subsystem, but we need to consider how useful that actually is, and whether just monitoring the device CPU load and general performance would be a better indication.</t>
          </li>
        </ul>
        <!-- TODO - Consider incorporating some aspects of this text.
Each subscription in the operational state datastore is represented as a list element.  Included in this list are event counters for each receiver, the state of each receiver, and the subscription parameters currently in effect.  The appearance of the leaf "configured-subscription-state" indicates that a particular subscription came into being via configuration.  This leaf also indicates whether the current state of that subscription is "valid", "invalid", or "concluded".

To understand the flow of event records in a subscription, there are two counters available for each receiver.  The first counter is "sent-event-records", which shows the number of events identified for sending to a receiver.  The second counter is "excluded-event-records", which shows the number of event records not sent to a receiver.  "excluded-event-records" shows the combined results of both access control and per-subscription filtering.  For configured subscriptions, counters are reset whenever the subscription's state is evaluated as "valid" (see (1) in Figure 8).

// Taken from another section.
In addition, the YANG Push Lite operational data gives an indication of the overall telemetry load on the device and hence gives an indication to whether a particular telemetry request is likely to be accepted, and honored.
-->

</section>
      <section anchor="robustness-and-reliability">
        <name>Robustness and Reliability</name>
        <t>It is important that updates as discussed in this document, and
on-change updates in particular, do not get lost.  If the loss of an
update is unavoidable, it is critical that the receiver be notified
accordingly.</t>
        <t>Update records for a single subscription <bcp14>MUST NOT</bcp14> be resequenced
prior to transport.</t>
        <t>It is conceivable that, under certain circumstances, a publisher will
recognize that it is unable to include in an update record the full
set of objects desired per the terms of a subscription.  In this
case, the publisher <bcp14>MUST</bcp14> act as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The publisher <bcp14>MUST</bcp14> set the "incomplete-update" flag on any update
    record that is known to be missing information.</t>
          </li>
          <li>
            <t>The publisher <bcp14>MAY</bcp14> choose to suspend the subscription as per
    <xref target="RFC8639"/>.  If the publisher does not create an update record at
    all, it <bcp14>MUST</bcp14> suspend the subscription.</t>
          </li>
          <li>
            <t>When resuming an on-change subscription, the publisher <bcp14>SHOULD</bcp14>
    generate a complete patch from the previous update record.  If
    this is not possible and the "sync-on-start" option is set to
    "true" for the subscription, then the full datastore contents <bcp14>MAY</bcp14>
    be sent via a "push-update" instead (effectively replacing the
    previous contents).  If neither scenario above is possible, then
    an "incomplete-update" flag <bcp14>MUST</bcp14> be included on the next
    "push-change-update".</t>
          </li>
        </ul>
        <t>Note: It is perfectly acceptable to have a series of "push-change-
update" notifications (and even "push-update" notifications) serially
queued at the transport layer awaiting transmission.  It is not
required for the publisher to merge pending update records sent at
the same time.</t>
        <t>On the receiver side, what action to take when a record with an
"incomplete-update" flag is received depends on the application.  It
could simply choose to wait and do nothing.  It could choose to
resync, actively retrieving all subscribed information.  It could
also choose to tear down the subscription and start a new one,
perhaps with a smaller scope that contains fewer objects.</t>
      </section>
      <section anchor="publisher-capacity">
        <name>Publisher Capacity</name>
        <t>It is far preferable to decline a subscription request than to accept
such a request when it cannot be met.</t>
        <t>Whether or not a subscription can be supported will be determined by
a combination of several factors, such as the subscription update
trigger (on-change or periodic), the period in which to report
changes (one-second periods will consume more resources than one-hour
periods), the amount of data in the datastore subtree that is being
subscribed to, and the number and combination of other subscriptions
that are concurrently being serviced.</t>
      </section>
    </section>
    <section anchor="ConformanceAndCapabilities">
      <name>Conformance and Capabilities</name>
      <t>The normative text in this document already indicates which parts of the specification must or should be implemented for a compliant YANG Push Lite implementation via the use of <xref target="RFC2119"/> language.  It also sets out some additional related requirements, e.g., on transports <xref target="transports"/>, that add in additional functionality.</t>
      <t>Some parts of this specification are optional to implement.  Some of these optional parts can be identified through the use of YANG Library <xref target="RFC8525"/> specifying the list of implemented YANG modules and YANG features.  But, the broader approach adopted by this specification is via extending the ietf-system-capabilities YANG module specified in <xref target="RFC9196"/> to make capability information available as standard YANG described operational data.</t>
      <section anchor="capabilities">
        <name>Capabilities</name>
        <t>Publishers <bcp14>SHOULD</bcp14> implement the ietf-system-capabilities YANG module, defined in <xref target="RFC9196"/>, and the ietf-yp-lite-capabilities YANG module, defined in <xref target="yp-lite-yang-capabilities-module"/>) that augments ietf-system-capabilities.</t>
        <t>The ietf-yp-lite-capabilities module contains capabilities to indicate what types of subscriptions and transports may be configured, along with acceptable subscription parameter for given subtrees.</t>
        <t>The schema tree for the ietf-system-capabilities augmented by ietf-yp-lite-capabilities is given below.</t>
        <figure>
          <name>YANG tree for ietf-system-capabilities with ietf-yl-lite-capabilities augmentations.</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-system-capabilities
  +--ro system-capabilities
     +--ro datastore-capabilities* [datastore]
     |  +--ro datastore
     |  |       -> /yanglib:yang-library/datastore/name
     |  +--ro per-node-capabilities* []
     |     +--ro (node-selection)?
     |     |  +--:(node-selector)
     |     |     +--ro node-selector?
     |     |             nacm:node-instance-identifier
     |     +--ro yplc:datastore-telemetry
     |        +--ro yplc:periodic-notifications-supported?
     |        |       notification-support
     |        +--ro (yplc:update-period)?
     |        |  +--:(yplc:minimum-update-period)
     |        |  |  +--ro yplc:minimum-update-period?        uint32
     |        |  +--:(yplc:supported-update-period)
     |        |     +--ro yplc:supported-update-period*      uint32
     |        +--ro yplc:on-change-supported?
     |                notification-support
     +--ro yplc:datastore-telemetry
        +--ro yplc:periodic-notifications-supported?
        |       notification-support
        +--ro (yplc:update-period)?
        |  +--:(yplc:minimum-update-period)
        |  |  +--ro yplc:minimum-update-period?        uint32
        |  +--:(yplc:supported-update-period)
        |     +--ro yplc:supported-update-period*      uint32
        +--ro yplc:on-change-supported?
        |       notification-support
        +--ro yplc:transport
           +--ro yplc:transport-capability* [transport-protocol]
              +--ro yplc:transport-protocol    identityref
              +--ro yplc:security-protocol?    identityref
              +--ro yplc:encoding-format*      identityref
]]></sourcecode>
        </figure>
        <t>TODO  Do we need to add capabilities to indicate:</t>
        <ol spacing="normal" type="1"><li>
            <t>Which fields are on-change notifiable.</t>
          </li>
          <li>
            <t>At which level <em>bags</em> exist internally (for performance reasons).</t>
          </li>
          <li>
            <t>The points at which subscriptions are decomposed to.</t>
          </li>
        </ol>
      </section>
      <section anchor="subscription-content-schema-identification">
        <name>Subscription Content Schema Identification</name>
        <t>YANG Module Synchronization</t>
        <t>To make subscription requests, the subscriber needs to know the YANG datastore schemas used by the publisher.  These schemas are available in the YANG library module ietf-yang-library.yang as defined in <xref target="RFC8525"/>.  The receiver is expected to know the YANG library information before starting a subscription.</t>
        <t>The set of modules, revisions, features, and deviations can change at runtime (if supported by the publisher implementation).  For this purpose, the YANG library provides a simple "yang-library-change" notification that informs the subscriber that the library has changed.  In this case, a subscription may need to be updated to take the updates into account.  The receiver may also need to be informed of module changes in order to process updates regarding datastore</t>
        <t><strong>TODO, this section should be updated so that a subscription is restarted if the schema that it is using changes, and to incorporate ideas to fingerprint the subscription schema in the subscription-started notification.</strong></t>
      </section>
    </section>
    <section anchor="ietf-yp-lite-yang">
      <name>YANG</name>
      <section anchor="yp-lite-tree">
        <name>ietf-yp-lite YANG tree</name>
        <t>This section shows the full tree output for ietf-yp-lite YANG module.</t>
        <t>Note, this output does not include support for any transport configuration, and for any implementation that supports configured subscriptions using this YANG module then at least one transport would expect to be configurable.</t>
        <figure>
          <name>YANG tree for YANG Push Lite Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite
  +--rw datastore-telemetry!
     +--rw filters
     |  +--rw filter* [name]
     |     +--rw name             string
     |     +--rw (filter-spec)?
     |        +--:(paths)
     |        |  +--rw paths*     ypath
     |        +--:(subtree)
     |        |  +--rw subtree?   <anydata> {ypl:subtree}?
     |        +--:(xpaths)
     |           +--rw xpaths*    yang:xpath1.0 {ypl:xpath}?
     +--rw subscriptions
     |  +--rw subscription* [id]
     |     +--rw id                subscription-id
     |     +--rw target
     |     |  +--rw datastore?             identityref
     |     |  +--rw (filter)?
     |     |     +--:(by-reference)
     |     |     |  +--rw filter-ref       filter-ref
     |     |     +--:(within-subscription)
     |     |        +--rw (filter-spec)?
     |     |           +--:(paths)
     |     |           |  +--rw paths*     ypath
     |     |           +--:(subtree)
     |     |           |  +--rw subtree?   <anydata> {ypl:subtree}?
     |     |           +--:(xpaths)
     |     |              +--rw xpaths*    yang:xpath1.0 {ypl:xpath}?
     |     +--rw update-trigger
     |     |  +--rw periodic!
     |     |  |  +--rw period         centiseconds
     |     |  |  +--rw anchor-time?   yang:date-and-time
     |     |  +--rw on-change! {on-change}?
     |     |     +--rw sync-on-start?   boolean
     |     +--rw purpose?          string {configured}?
     |     +--ro status?           subscription-status
     |     +--rw receivers* [name]
     |     |  +--rw name
     |     |  |       -> /datastore-telemetry/receivers/receiver/name
     |     |  +--ro encoding?     encoding
     |     |  +--ro status?       receiver-status
     |     |  +--ro statistics
     |     |     +--ro sent-event-records?
     |     |     |       yang:zero-based-counter64
     |     |     +--ro excluded-event-records?
     |     |             yang:zero-based-counter64
     |     +---x reset {configured}?
     +--rw receivers {configured}?
        +--rw receiver* [name]
           +--rw name                      string
           +--rw encoding?                 encoding
           +--rw dscp?                     inet:dscp
           +---x reset
           +--rw (notification-message-origin)?
           |  +--:(interface-originated)
           |  |  +--rw source-interface?   if:interface-ref
           |  |          {interface-designation}?
           |  +--:(address-originated)
           |     +--rw source-vrf?         leafref {supports-vrf}?
           |     +--rw source-address?     inet:ip-address-no-zone
           +--rw (transport-type)

  rpcs:
    +---x establish-subscription {dynamic}?
    |  +---w input
    |  |  +---w target
    |  |  |  +---w datastore?             identityref
    |  |  |  +---w (filter)?
    |  |  |     +--:(by-reference)
    |  |  |     |  +---w filter-ref       filter-ref
    |  |  |     +--:(within-subscription)
    |  |  |        +---w (filter-spec)?
    |  |  |           +--:(paths)
    |  |  |           |  +---w paths*     ypath
    |  |  |           +--:(subtree)
    |  |  |           |  +---w subtree?   <anydata> {ypl:subtree}?
    |  |  |           +--:(xpaths)
    |  |  |              +---w xpaths*    yang:xpath1.0 {ypl:xpath}?
    |  |  +---w update-trigger
    |  |  |  +---w periodic!
    |  |  |  |  +---w period         centiseconds
    |  |  |  |  +---w anchor-time?   yang:date-and-time
    |  |  |  +---w on-change! {on-change}?
    |  |  |     +---w sync-on-start?   boolean
    |  |  +---w encoding          encoding
    |  |  +---w dscp?             inet:dscp
    |  +--ro output
    |     +--ro id    subscription-id
    +---x delete-subscription {dynamic}?
    |  +---w input
    |     +---w id    subscription-id
    +---x kill-subscription {dynamic}?
       +---w input
          +---w id    subscription-id

  notifications:
    +---n replay-completed
    |  +--ro id    subscription-id
    +---n update-complete
    |  +--ro id    subscription-id
    +---n subscription-started
    |  +--ro id                subscription-id
    |  +--ro target
    |  |  +--ro datastore?             identityref
    |  |  +--ro (filter)?
    |  |     +--:(by-reference)
    |  |     |  +--ro filter-ref       filter-ref
    |  |     +--:(within-subscription)
    |  |        +--ro (filter-spec)?
    |  |           +--:(paths)
    |  |           |  +--ro paths*     ypath
    |  |           +--:(subtree)
    |  |           |  +--ro subtree?   <anydata> {ypl:subtree}?
    |  |           +--:(xpaths)
    |  |              +--ro xpaths*    yang:xpath1.0 {ypl:xpath}?
    |  +--ro update-trigger
    |     +--ro periodic!
    |     |  +--ro period         centiseconds
    |     |  +--ro anchor-time?   yang:date-and-time
    |     +--ro on-change! {on-change}?
    |        +--ro sync-on-start?   boolean
    +---n subscription-terminated
    |  +--ro id        subscription-id
    |  +--ro reason    identityref
    +---n update
       +--ro id?                 subscription-id
       +--ro path-prefix?        string
       +--ro snapshot-type?      enumeration
       +--ro observation-time?   yang:date-and-time
       +--ro updates* [target-path]
       |  +--ro target-path    string
       |  +--ro data?          <anydata>
       +--ro incomplete?         empty
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yp-lite-yang-module">
        <name>ietf-yp-lite YANG Model</name>
        <t>This module imports typedefs from <xref target="RFC6991"/>, <xref target="RFC8343"/>, <xref target="RFC8341"/>, <xref target="RFC8529"/>, and <xref target="RFC8342"/>.  It references <xref target="RFC6241"/>, <xref target="XPATH"/> ("XML Path Language (XPath) Version 1.0"), <xref target="RFC7049"/>, <xref target="RFC8259"/>, <xref target="RFC7950"/>, <xref target="RFC7951"/>, and <xref target="RFC7540"/>.</t>
        <t>This YANG module imports typedefs from <xref target="RFC6991"/>, identities from
<xref target="RFC8342"/>, and the "sx:structure" extension from <xref target="RFC8791"/>. It also references <xref target="RFC6241"/>, <xref target="XPATH"/>, and <xref target="RFC7950"/>.</t>
        <figure>
          <name>YANG module ietf-yp-lite</name>
          <sourcecode type="yang" markers="true" name="ietf-yp-lite.yang#0.1.0"><![CDATA[
module ietf-yp-lite {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-yp-lite";
  prefix ypl;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-interfaces {
    prefix if;
    reference
      "RFC 8343: A YANG Data Model for Interface Management";
  }
  import ietf-netconf-acm {
    prefix nacm;
    reference
      "RFC 8341: Network Configuration Access Control Model";
  }
  import ietf-network-instance {
    prefix ni;
    reference
      "RFC 8529: YANG Data Model for Network Instances";
  }
  import ietf-yang-structure-ext {
    prefix sx;
    reference
      "RFC 8525: YANG Data Structure Extensions";
  }
  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-datastores {
    prefix ds;
    reference
      "RFC 8342: Network Management Datastore Architecture (NMDA)";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:  <https:/datatracker.ietf.org/wg/netconf/>
     WG List: <mailto:netconf@ietf.org>

     Author:  Robert Wilton
              <mailto:rwilton@cisco.com>";
  description
    "This module contains YANG specifications for YANG-Push lite,
     a simplified version of the YANG-Push [RFC 8641] protocol.

     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.

     Copyright (c) 2025 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 Revised 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.";

  revision 2024-11-11 {
    description
      "Initial revision.";
    reference
      "XXX: YANG Push Lite";
  }

  /*
   * FEATURES
   */

  feature configured {
    description
      "This feature indicates that configuration of subscriptions is
       supported.";
  }

  feature dynamic {
    description
      "This feature indicates that dynamic establishment of
       subscriptions is
       supported.";
  }

  feature interface-designation {
    description
      "This feature indicates that a publisher supports sourcing all
       receiver interactions for a configured subscription from a
       single designated egress interface.";
  }

  feature on-change {
    description
      "This feature indicates that on-change triggered subscriptions
       are supported.";
  }

  feature subtree {
    description
      "This feature indicates support for YANG subtree filtering.";
    reference
      "RFC 6241: Network Configuration Protocol (NETCONF),
                 Section 6";
  }

  feature supports-vrf {
    description
      "This feature indicates that a publisher supports VRF
       configuration for configured subscriptions.  VRF support for
       dynamic subscriptions does not require this feature.";
    reference
      "RFC 8529: YANG Data Model for Network Instances,
                 Section 6";
  }

  feature xpath {
    description
      "This feature indicates support for XPath filtering.";
    reference
      "XML Path Language (XPath) Version 1.0
       (https://www.w3.org/TR/1999/REC-xpath-19991116)";
  }

  /*
   * IDENTITIES
   */
  /* Identities for RPC and notification errors */

  identity delete-subscription-error {
    description
      "Base identity for the problem found while attempting to
       fulfill either a 'delete-subscription' RPC request or a
       'kill-subscription' RPC request.";
  }

  identity establish-subscription-error {
    description
      "Base identity for the problem found while attempting to
       fulfill an 'establish-subscription' RPC request.";
  }

  identity subscription-terminated-reason {
    description
      "Base identity for the problem condition communicated to a
       receiver as part of a 'subscription-terminated'
       notification.";
  }

  identity dscp-unavailable {
    base establish-subscription-error;
    description
      "The publisher is unable to mark notification messages with
       prioritization information in a way that will be respected
       during network transit.";
  }

  identity encoding-unsupported {
    base establish-subscription-error;
    description
      "Unable to encode notification messages in the desired
       format.";
  }

  identity filter-unavailable {
    base subscription-terminated-reason;
    description
      "Referenced filter does not exist.  This means a receiver is
       referencing a filter that doesn't exist or to which it
       does not have access permissions.";
  }

  identity filter-unsupported {
    base establish-subscription-error;
    description
      "Cannot parse syntax in the filter.  This failure can be from
       a syntax error or a syntax too complex to be processed by the
       publisher.";
  }

  identity insufficient-resources {
    base establish-subscription-error;
    description
      "The publisher does not have sufficient resources to support
       the requested subscription.  An example might be that
       allocated CPU is too limited to generate the desired set of
       notification messages.";
  }

  identity no-such-subscription {
    base delete-subscription-error;
    base subscription-terminated-reason;
    description
      "Referenced subscription doesn't exist.  This may be as a
       result of a nonexistent subscription ID, an ID that belongs to
       another subscriber, or an ID for a configured subscription.";
  }

  identity stream-unavailable {
    base subscription-terminated-reason;
    description
      "Not a subscribable event stream.  This means the referenced
       event stream is not available for subscription by the
       receiver.";
  }

  identity suspension-timeout {
    base subscription-terminated-reason;
    description
      "Termination of a previously suspended subscription.  The
       publisher has eliminated the subscription, as it exceeded a
       time limit for suspension.";
  }

  identity unsupportable-volume {
    base subscription-terminated-reason;
    description
      "The publisher does not have the network bandwidth needed to
       get the volume of generated information intended for a
       receiver.";
  }

  /* Identities for encodings */

  identity configurable-encoding {
    description
      "If a transport identity derives from this identity, it means
       that it supports configurable encodings.  An example of a
       configurable encoding might be a new identity such as
       'encode-cbor'.  Such an identity could use
       'configurable-encoding' as its base.  This would allow a
       dynamic subscription encoded in JSON (RFC 8259) to request
       that notification messages be encoded via the Concise Binary
       Object Representation (CBOR) (RFC 7049).  Further details for
       any specific configurable encoding would be explored in a
       transport document based on this specification.
       
       TODO - Clear up this text or use YANG-CBOR reference";
    reference
      "RFC 8259: The JavaScript Object Notation (JSON) Data
                 Interchange Format
       RFC 7049: Concise Binary Object Representation (CBOR)";
  }

  identity encoding {
    description
      "Base identity to represent data encodings.";
  }

  identity json {
    base encoding;
    description
      "Encode data using JSON as described in RFC 7951.";
    reference
      "RFC 7951: JSON Encoding of Data Modeled with YANG";
  }

  identity xml {
    base encoding;
    description
      "Encode data using XML as described in RFC 7950.";
    reference
      "RFC 7950: The YANG 1.1 Data Modeling Language";
  }

  identity cbor {
    base encoding;
    description
      "Encode data using CBOR as described in RFC 9245,
       without using YANG SIDs";
    reference
      "RFC 9245: Encoding of Data Modeled with YANG in the
       Concise Binary Object Representation (CBOR).";
  }

  identity cbor-sids {
    base encoding;
    description
      "Encode data using JSON as described in RFC 7951, using YANG
       SIDs.";
    reference
      "RFC 9245: Encoding of Data Modeled with YANG in the
       Concise Binary Object Representation (CBOR).

       RFC 9595: YANG Schema Item iDentifier (YANG SID).";
  }

  /* Identities for transports */

  identity transport {
    description
      "An identity that represents the underlying mechanism for
       passing notification messages.";
  }


  /*
   * TYPEDEFs
   */

  typedef ypath {
    type string {
      length "1..max";
    }
    description
      "A type for YANG instance data paths.";
  }

  typedef encoding {
    type identityref {
      base encoding;
    }
    description
      "Specifies a data encoding, e.g., for a data subscription.";
  }

  typedef subscription-id {
    type uint32;
    description
      "A type for subscription identifiers.";
  }

  typedef transport {
    type identityref {
      base transport;
    }
    description
      "Specifies the transport used to send notification messages
       to a receiver.";
  }

// TODO - Consider changes to list keys or reordering of
//        user-ordered lists.

  typedef filter-ref {
    type leafref {
      path "/datastore-telemetry/filters/filter/name";
    }
    description
      "This type is used to reference a selection filter.";
  }

  typedef centiseconds {
    type uint32;
    description
      "A period of time, measured in units of 0.01 seconds.";
  }

  typedef subscription-type {
    type enumeration {
      enum configured {
        description
          "A subscription that is created and managed via
           configuration.";
      }
      enum dynamic {
        description
          "A subscription that is created and managed via RPC
           primitives.";
      }
    }
    description
      "Indicate the type of subscription.";
  }

  typedef subscription-status {
    type enumeration {
      enum invalid {
        description
          "The subscription as a whole is unsupportable with its
          current parameters.";
      }
      enum inactive {
        description
          "The subscription is supportable with its current
          parameters, but it is not currently connected to any
          connected receivers";
      }
      enum active {
        description
          "The subscription is actively running, and is connected
           to at least one receiver.

           A subscription-started notification must have been sent
           for a subscription to be in this state, and the receiver
           will receive update notifications, as per the
           update-trigger selection.";
      }
    }
    description
      "Indicates the status of a subscription";
  }

  typedef receiver-status {
    type enumeration {
      enum disconnected {
        description
          "The publish is not currently connected to the receiver.

           Nornally, this is because there are no active
           subscriptions for this receiver.";
      }
      enum connecting {
        description
          "The publisher is actively trying to connect to the
           receiver.  This implies that there is at least one active
           subscription for this receiver.

           A receiver in connecting state may indicate that the
           transport or associated security session could not be
           established, and the publisher is periodically trying to
           establish the connection.";
      }
      enum connected {
        description
          "The publisher has successfully connected to the receiver
           and at least one active subscription is using this
           receiver.";
      }
    }
    description
      "Indicates the status of a receiver";
  }

  /*
   * GROUPINGS
   */

  grouping dscp {
    description
      "This grouping describes QoS information concerning a
       subscription.  This information is passed to lower layers
       for transport prioritization and treatment.";
    leaf dscp {
      type inet:dscp;
      default "0";
      description
        "The desired network transport priority level.  This is the
         priority set on notification messages encapsulating the
         results of the subscription.  This transport priority is
         shared for all receivers of a given subscription.";
    }
  }

  grouping filter-types {
    description
      "This grouping defines the types of selectors for objects
       from a datastore.";
    choice filter-spec {
      description
        "The content filter specification for this request.";

      leaf-list paths {
        type ypath;
        description
          "A basic path filter that allows wildcard, regex, or
           fixed value for list keys.  Each format is TODO";
      }
      anydata subtree {
        if-feature "ypl:subtree";
        description
          "This parameter identifies the portions of the
           target datastore to retrieve.";
        reference
          "RFC 6241: Network Configuration Protocol (NETCONF),
                     Section 6";
      }
      leaf-list xpaths {
        if-feature "ypl:xpath";
        type yang:xpath1.0;
        description
          "This parameter contains an XPath expression identifying
           the portions of the target datastore to retrieve.

           If the expression returns a node set, all nodes in the
           node set are selected by the filter.  Otherwise, if the
           expression does not return a node set, the filter
           doesn't select any nodes.

           The expression is evaluated in the following XPath
           context:

           o  The set of namespace declarations is the set of prefix
              and namespace pairs for all YANG modules implemented
              by the server, where the prefix is the YANG module
              name and the namespace is as defined by the
              'namespace' statement in the YANG module.

              If the leaf is encoded in XML, all namespace
              declarations in scope on the 'stream-xpath-filter'
              leaf element are added to the set of namespace
              declarations.  If a prefix found in the XML is
              already present in the set of namespace declarations,
              the namespace in the XML is used.

           o  The set of variable bindings is empty.

           o  The function library is comprised of the core
              function library and the XPath functions defined in
              Section 10 in RFC 7950.

           o  The context node is the root node of the target
              datastore.";
        reference
          "XML Path Language (XPath) Version 1.0
           (https://www.w3.org/TR/1999/REC-xpath-19991116)
           RFC 7950: The YANG 1.1 Data Modeling Language,
                     Section 10";
      }
    }
  }

  grouping update-policy {
    description
      "This grouping describes the susbcription update policy";

    container update-trigger {
      description
        "This container describes all conditions under which
         subscription update messages are generated";

      container periodic {
        presence "indicates a periodic subscription";
        description
          "The publisher is requested to periodically notify the
            receiver regarding the current values of the datastore
            as defined by the selection filter.";
        leaf period {
          type centiseconds;
          mandatory true;
          description
            "Duration of time that should occur between periodic
              push updates, in units of 0.01 seconds.";
        }
        leaf anchor-time {
          type yang:date-and-time;
          description
            "Designates a timestamp before or after which a series
              of periodic push updates are determined.  The next
              update will take place at a point in time that is a
              multiple of a period from the 'anchor-time'.
              For example, for an 'anchor-time' that is set for the
              top of a particular minute and a period interval of a
              minute, updates will be sent at the top of every
              minute that this subscription is active.";
        }
      }
      container on-change {
        if-feature "on-change";
        presence "indicates an on-change subscription";
        description
          "The publisher is requested to notify the receiver
            regarding changes in values in the datastore subset as
            defined by a selection filter.";

        leaf sync-on-start {
          type boolean;
          default "true";
          description
            "When this object is set to 'false', (1) it restricts an
             on-change subscription from sending 'push-update'
             notifications and (2) pushing a full selection per the
             terms of the selection filter MUST NOT be done for
             this subscription.  Only updates about changes
             (i.e., only 'push-change-update' notifications)
             are sent.  When set to 'true' (the default behavior),
             in order to facilitate a receiver's synchronization,
             a full update is sent, via a 'push-update' notification,
             when the subscription starts.  After that,
             'push-change-update' notifications are exclusively sent,
             unless the publisher chooses to resync the subscription
             via a new 'push-update' notification.";
        }
      }
    }
  }

  grouping subscription-common {
    description
      "Common settings that are shared between dynamic and
       configured subscriptions.";

    container target {
      description
        "Identifies the source of information against which a
         subscription is being applied as well as specifics on the
         subset of information desired from that source.";
      leaf datastore {
        type identityref {
          base ds:datastore;
        }
        default "ds:operational";
        description
          "Datastore from which to retrieve data, defaults to
           operational";
      }

      choice filter {
        description
          "The source of the selection filter applied to the
           subscription.  This will either (1) come referenced from
           a global list or (2) be provided in the subscription
           itself.";
        case by-reference {
          description
            "Incorporates a filter that has been configured
            separately.";
          leaf filter-ref {
            type filter-ref;
            mandatory true;
            description
              "References an existing selection filter that is to be
              applied to the subscription.";
          }
        }
        case within-subscription {
          description
            "A local definition allows a filter to have the same
            lifecycle as the subscription.";
          uses filter-types;
        }
      }
    }

    uses update-policy;
  }


  /*
   * RPCs
   */

  rpc establish-subscription {
    if-feature "dynamic";
    description
      "This RPC allows a subscriber to create (and possibly
       negotiate) a subscription on its own behalf.  If successful,
       the subscription remains in effect for the duration of the
       subscriber's association with the publisher or until the
       subscription is terminated.  If an error occurs or the
       publisher cannot meet the terms of a subscription, an RPC
       error is returned, and the subscription is not created.
       In that case, the RPC reply's 'error-info' MAY include
       suggested parameter settings that would have a higher
       likelihood of succeeding in a subsequent
       'establish-subscription' request.";
    input {
      uses subscription-common;

      leaf encoding {
        type encoding;
        mandatory true;
        description
          "The encoding to use for the subscription notifications.";
      }

      uses dscp;

    }
    output {
      leaf id {
        type subscription-id;
        mandatory true;
        description
          "Identifier used for this subscription.";
      }
    }
  }

  sx:structure establish-subscription-stream-error-info {
    container establish-subscription-stream-error-info {
      description
        "If any 'establish-subscription' RPC parameters are
         unsupportable against the event stream, a subscription
         is not created and the RPC error response MUST indicate the
         reason why the subscription failed to be created.  This
         yang-data MAY be inserted as structured data in a
         subscription's RPC error response to indicate the reason for
         the failure.  This yang-data MUST be inserted if hints are
         to be provided back to the subscriber.";
      leaf reason {
        type identityref {
          base establish-subscription-error;
        }
        description
          "Indicates the reason why the subscription has failed to
           be created to a targeted event stream.";
      }
      leaf filter-failure-hint {
        type string;
        description
          "Information describing where and/or why a provided
           filter was unsupportable for a subscription.  The
           syntax and semantics of this hint are
           implementation specific.";
      }
    }
  }

  rpc delete-subscription {
    if-feature "dynamic";
    description
      "This RPC allows a subscriber to delete a subscription that
       was previously created by that same subscriber using the
       'establish-subscription' RPC.

       Only subscriptions that were created using
       'establish-subscription' from the same origin as this RPC
       can be deleted via this RPC. // TODO - Why same origin?

       If an error occurs, the server replies with an 'rpc-error'
       where the 'error-info' field MAY contain a
       'delete-subscription-error-info' structure.";
    input {
      leaf id {
        type subscription-id;
        mandatory true;
        description
          "Identifier of the dynamic subscription that is to be
           deleted.";
      }
    }
  }

  rpc kill-subscription {
    if-feature "dynamic";
    nacm:default-deny-all;
    description
      "This RPC allows an operator to delete a dynamic subscription
       without restrictions on the originating subscriber or
       underlying transport session.

       Only dynamic subscriptions, i.e., those that were created
       using 'establish-subscription', may be deleted via this RPC.

       If an error occurs, the server replies with an 'rpc-error'
       where the 'error-info' field MAY contain a
       'delete-subscription-error-info' structure.";
    input {
      leaf id {
        type subscription-id;
        mandatory true;
        description
          "Identifier of the dynamic subscription that is to be
           deleted.";
      }
    }
  }

  sx:structure delete-subscription-error-info {
    container delete-subscription-error-info {
      description
        "If a 'delete-subscription' RPC or a 'kill-subscription' RPC
         fails, the subscription is not deleted and the RPC error
         response MUST indicate the reason for this failure.  This
         yang-data MAY be inserted as structured data in a
         subscription's RPC error response to indicate the reason
         for the failure.";
      leaf reason {
        type identityref {
          base delete-subscription-error;
        }
        mandatory true;
        description
          "Indicates the reason why the subscription has failed to be
           deleted.";
      }
    }
  }

  /*
   * NOTIFICATIONS
   */

  // TODO - Need to signal when an initial replay has completed, or
  //        possibly when any period subscription has completed.
  // TODO - Need to think about list key entries that are no longer
  //        present.
  notification replay-completed {
    //ypl:subscription-state-notification;
    //if-feature "replay";
    description
      "This notification is sent to indicate that all of the replay
       notifications have been sent.";
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
  }

  notification update-complete {
    //ypl:subscription-state-notification;
    //if-feature "replay";
    description
      "This notification indicates the end of a periodic collection,
       and can be used to purge old state";
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
  }

  notification subscription-started {
    //ypl:subscription-state-notification;
    description
      "This notification indicates that a configured subscription
       has started and notifications will now be sent.";
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
    uses subscription-common;
  }

  notification subscription-terminated {
    //ypl:subscription-state-notification;
    description
      "This notification indicates that a subscription has been
       terminated.";
    leaf id {
      type subscription-id;
      mandatory true;
      description
        "This references the affected subscription.";
    }
    leaf reason {
      type identityref {
        base subscription-terminated-reason;
      }
      mandatory true;
      description
        "Identifies the condition that resulted in the
         termination.";
    }
  }

  notification update {
    description
      "This notification contains a push update that in turn
       contains data subscribed to via a subscription.  In the case
       of a periodic subscription, this notification is sent for
       periodic updates.  It can also be used for synchronization
       updates of an on-change subscription.  This notification
       shall only be sent to receivers of a subscription.  It does
       not constitute a general-purpose notification that would be
       subscribable as part of the NETCONF event stream by any
       receiver.";
    leaf id {
      type subscription-id;
      description
        "This references the subscription that drove the
         notification to be sent.";
    }

    leaf path-prefix {
      type string;
      description
        "Specifies the common prefix that all other paths and data
         are encoded relative to.

         TODO - This should be a JSONified instance data path.";
    }

    leaf snapshot-type {
      type enumeration {
        enum "periodic" {
          description
            "The update message is due to a periodic update.";
        }
        enum "on-change-update" {
          description
            "The update message is due to an on-change update.  This
             means that one or more fields have changed under the
             snapshot path.

             TODO - Split this into a on-change-delete msg?";
        }
        enum "on-change-delete" {
          description
            "The update message is due to an on-change event where
             the data node at the target path has been delete.";
        }
        enum "resync" {
          description
            "This indicates that the update is to resynchronize the
             state, e.g., after a subscription started notification.

             Ideally, the resync message SHOULD be the first
             notification sent when a subscription has started, but
             it is not gauranteed or required to be the first
             (e.g., if an on-change event occurs).

             These messages can be used to ensure that all state
             has been sent to the client, and can be used to purge
             stale data.

             TODO - In the distributed notification case, need a
             notification to indicate that all child subscriptions
             have been sent.";
        }
      }
      description
        "This indicates the type of notification message that is
         being sent.";
    }

    // Could add observation time here.
    leaf observation-time {
      type yang:date-and-time;
      description
        "The time that the update was observed by the publisher.";
    }

    list updates {
      key "target-path";
      description
        "This list contains the updated data.  It constitutes a
         snapshot at the time of update of the set of data that has
         been subscribed to.  The snapshot corresponds to the same
         snapshot that would be returned in a corresponding 'get'
         operation with the same selection filter parameters
         applied.";

      leaf target-path {
        type string;
        description
          "The target path of the data that is being replaced, i.e.,
           updated or deleted.  The path is given relative to the
           path-prefix.";
      }

      anydata data {
        description
          "This contains the updated data.  It constitutes a
          snapshot at the time of update of the set of data that has
          been subscribed to.  The snapshot corresponds to the same
          snapshot that would be returned in a corresponding 'get'
          operation with the same selection filter parameters
          applied.

          For an on-change delete notification, the
          datastore-snapshot will be absent for the given target
          path.

          The snapshot is encoded relative to the path-prefix.";
      }
    }

    leaf incomplete {
      type empty;
      description
        "This is a flag that indicates that not all datastore nodes
         subscribed to are included with this update. Receivers of
         this data SHOULD NOT assume that any missing data has been
         implicitly deleted.";
    }
  }

/*
  * DATA NODES
  */

container datastore-telemetry {
  presence "Enables datastore telemetry";
  description
    "YANG Push Lite Datastore Telemetry Configuration and State.";
    container filters {
      description
        "Contains a list of configurable filters that can be applied
         to subscriptions.  This facilitates the reuse of complex
         filters once defined.";

      list filter {
        key "name";
        description
          "A list of preconfigured filters that can be applied
          to datastore subscriptions.";
        leaf name {
          type string;
          description
            "A unique name to identify the selection filters.";
        }
        uses filter-types;
      }
    }
    container subscriptions {
      description
        "Contains the list of currently active subscriptions, i.e.,
        subscriptions that are currently in effect, used for
        subscription management and monitoring purposes.  This
        includes subscriptions that have been set up via
        RPC primitives as well as subscriptions that have been
        established via configuration.";
      list subscription {
        key "id";
        description
          "The identity and specific parameters of a subscription.
          Subscriptions in this list can be created using a control
          channel or RPC or can be established through configuration.

          If the 'kill-subscription' RPC or configuration operations
          are used to delete a subscription, a
          'subscription-terminated' message is sent to any active or
          suspended receivers.";
        leaf id {
          type subscription-id;
          description
            "Identifier of a subscription; unique in a given
            publisher.";
        }
        uses subscription-common;

        leaf purpose {
          if-feature "configured";
          type string;
          description
            "Open text allowing a configuring entity to embed the
            originator or other specifics of this subscription.";
        }

        leaf status {
          type subscription-status;
          config false;
          description
            "The presence of this leaf indicates that the
             subscription originated from configuration, not through
             a controlchannel or RPC.  The value indicates the state
             of the subscription as established by the publisher.";
        }

        list receivers {
          key "name";
          min-elements 1;
          description
            "A host intended as a recipient for the notification
            messages of a subscription.  For configured
            subscriptions, transport-specific network parameters
            (or a leafref to those parameters) may be augmented to a
            specific receiver in this list.";
          leaf name {
            type leafref {
              path "/datastore-telemetry/receivers/receiver/name";
            }
            description
              "Identifies a unique receiver for a subscription.";
          }

          leaf encoding {
            type encoding;
            config false;
            description
              "The type of encoding for notification messages.";
          }

          leaf status {
            type receiver-status;
            config false;
            description
              "Specifies the connection status of the receiver.
               I.e., whether a conenction has been sucessfully
              established";
          }

          container statistics {
            config false;
            description
              "Statistics related to the number of messages sent to
              the receiver.";

            leaf sent-event-records {
              type yang:zero-based-counter64;
              config false;
              description
                "The number of event records sent to the receiver.
                 The count is initialized when a dynamic
                 subscription is established or when a configured
                 receiver transitions to the 'valid' state.";
            }
            leaf excluded-event-records {
              type yang:zero-based-counter64;
              config false;
              description
                "The number of event records explicitly removed via
                either an event stream filter or an access control
                filter so that they are not passed to a receiver.
                This count is set to zero each time
                'sent-event-records' is initialized.";
            }
          }
        }

        action reset {
          if-feature "configured";
          description
            "Reset the subscription.
            
             This action will cause a new subscription-started
             message to be sent for the subscription";
        }
      }
    }
    container receivers {
      if-feature "configured";
      description
        "A container for all instances of configured receivers.";

      list receiver {
        key "name";

        leaf name {
          type string;
          description
            "An arbitrary but unique name for this receiver
            instance.";
        }

        leaf encoding {
  /*        when 'not(../transport) or derived-from(../transport,
          "ypl:configurable-encoding")';*/
          type encoding;
          description
            "The type of encoding for notification messages.  For a
             dynamic subscription, if not included as part of an
             'establish-subscription' RPC, the encoding will be
             populated with the encoding used by that RPC.  For a
             configured subscription, if not explicitly configured,
             the encoding will be the default encoding for an
             underlying transport.";
        }

        uses dscp;

        action reset {
          description
            "Resets all configured subscriptions that reference
             this receiver.

             This action is directly equivalent to invoking the 
             'reset' action on all subscriptions that references
             this receiver configuration.";
        }

        choice notification-message-origin {
          description
            "Identifies the egress interface on the publisher
            from which notification messages are to be sent.";
          case interface-originated {
            description
              "When notification messages are to egress a specific,
              designated interface on the publisher.";
            leaf source-interface {
              if-feature "interface-designation";
              type if:interface-ref;
              description
                "References the interface for notification
                 messages.";
            }
          }
          case address-originated {
            description
              "When notification messages are to depart from a
              publisher using a specific originating address and/or
              routing context information.";
            leaf source-vrf {
              if-feature "supports-vrf";
              type leafref {
                path
                  '/ni:network-instances/ni:network-instance/' 
                  + 'ni:name';
              }
              description
                "VRF from which notification messages should egress a
                publisher.";
            }
            leaf source-address {
              type inet:ip-address-no-zone;
              description
                "The source address for the notification messages.
                If a source VRF exists but this object doesn't, a
                publisher's default address for that VRF must
                be used.";
            }
          }
        }

        choice transport-type {
          mandatory true;
          description
            "Choice of different types of transports used to
             send notifications.  The 'case' statements must
             be augmented in by other modules.";
        }

        description
          "A list of all receiver instances.";
      }
    }
  }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yp-lite-capabilties-tree">
        <name>ietf-yp-lite-capabilities YANG tree</name>
        <t>This section shows the tree output for ietf-yp-lite-capabilities YANG module, which augments the ietf-system-capabilities YANG module <xref target="RFC9196"/>.</t>
        <figure>
          <name>YANG tree for YANG Push Lite Capabilities Module Tree Output</name>
          <sourcecode type="yangtree"><![CDATA[
module: ietf-yp-lite-capabilities

  augment /sysc:system-capabilities:
    +--ro datastore-telemetry
       +--ro periodic-notifications-supported?   notification-support
       +--ro (update-period)?
       |  +--:(minimum-update-period)
       |  |  +--ro minimum-update-period?        uint32
       |  +--:(supported-update-period)
       |     +--ro supported-update-period*      uint32
       +--ro on-change-supported?                notification-support
       +--ro transport
          +--ro transport-capability* [transport-protocol]
             +--ro transport-protocol    identityref
             +--ro security-protocol?    identityref
             +--ro encoding-format*      identityref
  augment /sysc:system-capabilities/sysc:datastore-capabilities
            /sysc:per-node-capabilities:
    +--ro datastore-telemetry
       +--ro periodic-notifications-supported?   notification-support
       +--ro (update-period)?
       |  +--:(minimum-update-period)
       |  |  +--ro minimum-update-period?        uint32
       |  +--:(supported-update-period)
       |     +--ro supported-update-period*      uint32
       +--ro on-change-supported?                notification-support
]]></sourcecode>
        </figure>
      </section>
      <section anchor="yp-lite-yang-capabilities-module">
        <name>ietf-yp-lite-capabiltiies YANG Model</name>
        <t>This module imports typedefs from the yang-push-lite YANG module.</t>
        <t>This module augments the ietf-system-capabilities YANG module <xref target="RFC9196"/>.</t>
        <figure>
          <name>YANG module ietf-yp-lite-capabilities</name>
          <sourcecode type="yang" markers="true" name="ietf-yp-lite-capabilities.yang#0.1.0"><![CDATA[
module ietf-yp-lite-capabilities {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-yp-lite-capabilities";
  prefix yplc;

  import ietf-system-capabilities {
    prefix sysc;
    reference
      "RFC 9196: YANG Modules Describing Capabilities for Systems
       and Datastore Update Notifications";
  }
  import ietf-yp-lite {
    prefix ypl;
    reference
      "RFC XXX: YANG Push Lite";
  }

  organization
    "IETF NETCONF (Network Configuration) Working Group";
  contact
    "WG Web:  <https:/datatracker.ietf.org/wg/netconf/>
     WG List: <mailto:netconf@ietf.org>

     Author:  Robert Wilton
              <mailto:rwilton@cisco.com>";
  description
    "This module contains YANG specifications for YANG-Push lite.

     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.

     Copyright (c) 2025 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 Revised 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.";

  revision 2024-11-11 {
    description
      "Initial revision.";
    reference
      "XXX: YANG Push Lite";
  }

  /*
   * IDENTITIES
   */

  identity security-protocol {
    description
      "Identity for security protocols.";
  }

  identity tls12 {
    base security-protocol;
    description
      "Indicates TLS Protocol Version 1.2. TLS 1.2 is obsolete,
       and thus it is NOT RECOMMENDED to enable this feature.";
    reference
      "RFC 5246: The Transport Layer Security (TLS) Protocol
                 Version 1.2";
  }

  identity tls13 {
    base security-protocol;
    description
      "Indicates TLS Protocol Version 1.3.";
    reference
      "RFC 8446: The Transport Layer Security (TLS)
                 Protocol Version 1.3";
  }

  identity dtls12 {
    base security-protocol;
    description
      "Indicates DTLS Protocol Version 1.2. TLS 1.2 is obsolete,
       and thus it is NOT RECOMMENDED to enable this feature.";
    reference
      "RFC 6347: The Datagram Transport Layer Security (TLS) Protocol
                 Version 1.2";
  }

  identity dtls13 {
    base security-protocol;
    description
      "Indicates DTLS Protocol Version 1.3.";
    reference
      "RFC 9147: The Datagram Transport Layer Security (TLS)
                 Protocol Version 1.3";
  }

  identity ssh {
    base security-protocol;
    description
      "Indicates SSH.";
  }


  grouping yp-lite-capabilities {
    description
      "Capabilities related to YANG Push Lite subscriptions
       and notifications";
    container datastore-telemetry {
      description
        "Capabilities related to YANG Push List subscriptions
         and notifications";
      typedef notification-support {
        type bits {
          bit config-changes {
            description
              "The publisher is capable of sending
               notifications for 'config true' nodes for the
               relevant scope and subscription type.";
          }
          bit state-changes {
            description
              "The publisher is capable of sending
               notifications for 'config false' nodes for the
               relevant scope and subscription type.";
          }
        }
        description
          "Type for defining whether 'on-change' or
           'periodic' notifications are supported for all data nodes,
           'config false' data nodes, 'config true' data nodes, or
           no data nodes.

           The bits config-changes or state-changes have no effect
           when they are set for a datastore or for a set of nodes
           that does not contain nodes with the indicated config
           value.  In those cases, the effect is the same as if no
           support was declared.  One example of this is indicating
           support for state-changes for a candidate datastore that
           has no effect.";
      }

      leaf periodic-notifications-supported {
        type notification-support;
        description
          "Specifies whether the publisher is capable of
           sending 'periodic' notifications for the selected
           data nodes, including any subtrees that may exist
           below them.";
        reference
          "RFC 8641: Subscription to YANG Notifications for
           Datastore Updates, 'periodic' subscription concept";
      }
      choice update-period {
        description
          "Supported update period value or values for
           'periodic' subscriptions.";
        leaf minimum-update-period {
          type uint32;
          units "centiseconds";
          description
            "Indicates the minimal update period that is
             supported for a 'periodic' subscription.

             A subscription request to the selected data nodes with
             a smaller period than what this leaf specifies is
             likely to result in a 'period-unsupported' error.";
        }
        leaf-list supported-update-period {
          type uint32;
          units "centiseconds";
          description
            "Supported update period values for a 'periodic'
             subscription.

             A subscription request to the selected data nodes with a
             period not included in the leaf-list will result in a
             'period-unsupported' error.";
        }
      }
      leaf on-change-supported {
        type notification-support;
        description
          "Specifies whether the publisher is capable of
           sending 'on-change' notifications for the selected
           data nodes and the subtree below them.";
      }
    }
  }

  grouping yp-lite-transport-capabilities {
    description
      "Capabilities related to transports supporting Yang Push Lite";
    container transport {
      description
        "Specifies capabilities related to YANG-Push transports.";
      list transport-capability {
        key "transport-protocol";
        description
          "Indicates a list of capabilities related to notification
                  transport.";
        leaf transport-protocol {
          type identityref {
            base ypl:transport;
          }
          description
            "Indicates supported transport protocol for YANG-Push.";
        }
        leaf security-protocol {
          type identityref {
            base security-protocol;
          }
          description
            "Indicates transport security protocol.";
        }
        leaf-list encoding-format {
          type identityref {
            base ypl:encoding;
          }
          description
            "Indicates supported encoding formats.";
        }
      }
    }
  }

  // YANG Push Lite Capabilities
  augment "/sysc:system-capabilities" {
    description
      "Adds system level capabilities for YANG Push Lite";
    uses yp-lite-capabilities;
  }

  augment "/sysc:system-capabilities/yplc:datastore-telemetry" {
    description
      "Adds system level Yang Push Lite transport capabilities";
    uses yp-lite-transport-capabilities;
  }

  augment "/sysc:system-capabilities/sysc:datastore-capabilities"
        + "/sysc:per-node-capabilities" {
    description
      "Add datastore and node-level capabilities";
    uses yp-lite-capabilities;
  }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>With configured subscriptions, one or more publishers could be used to overwhelm a receiver.  To counter this, notification messages <bcp14>SHOULD NOT</bcp14> be sent to any receiver that does not support this specification.  Receivers that do not want notification messages need only terminate or refuse any transport sessions from the publisher.</t>
      <t>When a receiver of a configured subscription gets a new "subscription-started" message for a known subscription where it is already consuming events, it may indicate that an attacker has done something that has momentarily disrupted receiver connectivity. <strong>TODO - Do we still want this paragraph?</strong>.</t>
      <t>For dynamic subscriptions, implementations need to protect against malicious or buggy subscribers that may send a large number of "establish-subscription" requests and thereby use up system resources.  To cover this possibility, operators <bcp14>SHOULD</bcp14> monitor for such cases and, if discovered, take remedial action to limit the resources used, such as suspending or terminating a subset of the subscriptions or, if the underlying transport is session based, terminating the underlying transport session.</t>
      <t>Using DNS names for configured subscription's receiver "name" lookups can cause situations where the name resolves differently than expected on the publisher, so the recipient would be different than expected.</t>
      <section anchor="receiver-authorization">
        <name>Receiver Authorization</name>
        <t><strong>TODO Relax when access control must be checked.</strong></t>
        <t><strong>TODO Consider if this is the best place in the document, but this text needs to be updated regardless.</strong></t>
        <t>A receiver of subscription data <bcp14>MUST</bcp14> only be sent updates for which it has proper authorization.  A publisher <bcp14>MUST</bcp14> ensure that no unauthorized data is included in push updates.  To do so, it needs to apply all corresponding checks applicable at the time of a specific pushed update and, if necessary, silently remove any unauthorized data from datastore subtrees.  This enables YANG data that is pushed based on subscriptions to be authorized in a way that is equivalent to a regular data retrieval ("get") operation.</t>
        <t>Each "push-update" and "push-change-update" <bcp14>MUST</bcp14> have access control applied, as depicted in Figure 5.  This includes validating that read access is permitted for any new objects selected since the last notification message was sent to a particular receiver.  A publisher <bcp14>MUST</bcp14> silently omit data nodes from the results that the client is not authorized to see.  To accomplish this, implementations <bcp14>SHOULD</bcp14> apply the conceptual authorization model of <xref target="RFC8341"/>, specifically Section 3.2.4, extended to apply analogously to data nodes included in notifications, not just &lt;rpc-reply&gt; messages sent in response to
&lt;get&gt; and &lt;get-config&gt; requests.</t>
        <figure>
          <name>Access Control for Push Updates</name>
          <artwork align="left"><![CDATA[
                     +-----------------+      +--------------------+
  push-update or --> | datastore node  |  yes | add datastore node |
 push-change-update  | access allowed? | ---> | to update record   |
                     +-----------------+      +--------------------+
]]></artwork>
        </figure>
        <t>A publisher <bcp14>MUST</bcp14> allow for the possibility that a subscription's selection filter references nonexistent data or data that a receiver is not allowed to access.  Such support permits a receiver the ability to monitor the entire lifecycle of some datastore tree without needing to explicitly enumerate every individual datastore node.  If, after access control has been applied, there are no objects remaining in an update record, then the effect varies given if the subscription is a periodic or on-change subscription.  For a periodic subscription, an empty "push-update" notification <bcp14>MUST</bcp14> be sent, so that clients do not get confused into thinking that an update was lost.  For an on-change subscription, a "push-update" notification <bcp14>MUST NOT</bcp14> be sent, so that clients remain unaware of changes made to nodes they don't have read-access for.</t>
        <t>A publisher <bcp14>MAY</bcp14> choose to reject an "establish-subscription" request that selects nonexistent data or data that a receiver is not allowed to access.  The error identity "unchanging-selection" <bcp14>SHOULD</bcp14> be returned as the reason for the rejection.  In addition, a publisher <bcp14>MAY</bcp14> choose to terminate a dynamic subscription or suspend a configured receiver when the authorization privileges of a receiver change or the access controls for subscribed objects change.  In that case, the publisher <bcp14>SHOULD</bcp14> include the error identity "unchanging-selection" as the reason when sending the "subscription-terminated" or "subscription-suspended" notification, respectively.  Such a capability enables the publisher to avoid having to support
continuous and total filtering of a subscription's content for every update record.  It also reduces the possibility of leakage of access-controlled objects.</t>
        <t>If read access into previously accessible nodes has been lost due to a receiver permissions change, this <bcp14>SHOULD</bcp14> be reported as a patch "delete" operation for on-change subscriptions.  If not capable of handling such receiver permission changes with such a "delete", publisher implementations <bcp14>MUST</bcp14> force dynamic subscription re-establishment or configured subscription reinitialization so that appropriate filtering is installed.</t>
      </section>
      <section anchor="yang-module-security-considerations">
        <name>YANG Module Security Considerations</name>
        <t><strong>TODO - Check that this section is still correct at WG LC, and before/after IESG Evaluation, if the YANG data model changes at all</strong>.</t>
        <t>This section is modeled after the template described in Section 3.7.1 of <xref target="I-D.draft-ietf-netmod-rfc8407bis"/>.</t>
        <t>The "ietf-yp-lite" YANG module defines a data model that is designed to be accessed via YANG-based management protocols, such as NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>. These protocols have to use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and QUIC <xref target="RFC9000"/>) and have to use mutual authentication.</t>
        <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.</t>
        <t>There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., "config true", which is the default).  All writable data nodes are likely to be reasonably sensitive or vulnerable in some network environments.  Write operations (e.g., edit-config) and delete operations to these data nodes without proper protection or authentication can have a negative effect on network operations.  The following subtrees and data nodes have particular sensitivities/vulnerabilities:</t>
        <ul spacing="normal">
          <li>
            <t>There are no particularly sensitive writable data nodes.</t>
          </li>
        </ul>
        <t>Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments.  It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. Specifically, the following subtrees and data nodes have particular sensitivities/vulnerabilities:</t>
        <ul spacing="normal">
          <li>
            <t>There are no particularly sensitive readable data nodes.</t>
          </li>
        </ul>
        <t>Some of the RPC or action operations in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control access to these operations. Specifically, the following operations have particular sensitivities/vulnerabilities:</t>
        <ul spacing="normal">
          <li>
            <t>kill-subscription - this RPC operation allows the caller to kill any dynamic subscription, even those created via other users, or other transport sessions.</t>
          </li>
        </ul>
        <t><strong>TODO - As per the template in <xref target="I-D.draft-ietf-netmod-rfc8407bis"/>, we would need to add text for groupings if we add any groupings from elsewhere, or the modules define groupings that are expected to be used by other modules.</strong></t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the following namespace URI in the "IETF XML Registry" <xref target="RFC3688"/>:</t>
      <t>URI: urn:ietf:params:xml:ns:yang:ietf-yp-lite</t>
      <t>Registrant Contact: The IESG.</t>
      <t>XML: N/A; the requested URI is an XML namespace.</t>
      <t>This document registers the following YANG module in the "YANG Module Names" registry <xref target="RFC6020"/>:</t>
      <t>Name: ietf-yp-lite</t>
      <t>Namespace: urn:ietf:params:xml:ns:yang:ietf-yp-lite</t>
      <t>Prefix: ypl</t>
      <t>Reference: RFC XXXX</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This inital draft is early work is based on discussions with various folk, particularly Thomas Graf, Holger Keller, Dan Voyer, Nils Warnke, and Alex Huang Feng; but also wider conversations that include: Benoit Claise, Pierre Francois, Paolo Lucente, Jean Quilbeuf, among others.</t>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>The following individuals have actively contributed to this draft and the YANG Push Solution.</t>
      <ul spacing="normal">
        <li>
          <t>Dan Voyer (TBD)</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.draft-netana-netconf-notif-envelope">
          <front>
            <title>Extensible YANG Model for YANG-Push Notifications</title>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Huawei</organization>
            </author>
            <date day="28" month="January" year="2025"/>
            <abstract>
              <t>   This document defines a new extensible notification structure,
   defined in YANG, for use in YANG-Push Notification messages enabling
   any YANG compatible encodings such as XML, JSON or CBOR.
   Additionally, it defines two essential extensions to this structure,
   the support of a hostname and a sequence number and the support of a
   timestamp caracterizing the moment when the changed data was
   observed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-netana-netconf-notif-envelope-02"/>
        </reference>
        <reference anchor="RFC2474">
          <front>
            <title>Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers</title>
            <author fullname="K. Nichols" initials="K." surname="Nichols"/>
            <author fullname="S. Blake" initials="S." surname="Blake"/>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="December" year="1998"/>
            <abstract>
              <t>This document defines the IP header field, called the DS (for differentiated services) field. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2474"/>
          <seriesInfo name="DOI" value="10.17487/RFC2474"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <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="RFC7951">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <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="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC8525">
          <front>
            <title>YANG Library</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document describes a YANG library that provides information about the YANG modules, datastores, and datastore schemas used by a network management server. Simple caching mechanisms are provided to allow clients to minimize retrieval of this information. This version of the YANG library supports the Network Management Datastore Architecture (NMDA) by listing all datastores supported by a network management server and the schema that is used by each of these datastores.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8525"/>
          <seriesInfo name="DOI" value="10.17487/RFC8525"/>
        </reference>
        <reference anchor="RFC8529">
          <front>
            <title>YANG Data Model for Network Instances</title>
            <author fullname="L. Berger" initials="L." surname="Berger"/>
            <author fullname="C. Hopps" initials="C." surname="Hopps"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <author fullname="D. Bogdanovic" initials="D." surname="Bogdanovic"/>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a network instance module. This module can be used to manage the virtual resource partitioning that may be present on a network device. Examples of common industry terms for virtual resource partitioning are VPN Routing and Forwarding (VRF) instances and Virtual Switch Instances (VSIs).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8529"/>
          <seriesInfo name="DOI" value="10.17487/RFC8529"/>
        </reference>
        <reference anchor="RFC8791">
          <front>
            <title>YANG Data Structure Extensions</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Björklund" initials="M." surname="Björklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document describes YANG mechanisms for defining abstract data structures with YANG.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8791"/>
          <seriesInfo name="DOI" value="10.17487/RFC8791"/>
        </reference>
        <reference anchor="RFC9196">
          <front>
            <title>YANG Modules Describing Capabilities for Systems and Datastore Update Notifications</title>
            <author fullname="B. Lengyel" initials="B." surname="Lengyel"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="B. Claise" initials="B." surname="Claise"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document defines two YANG modules, "ietf-system-capabilities" and "ietf-notification-capabilities".</t>
              <t>The module "ietf-system-capabilities" provides a placeholder structure that can be used to discover YANG-related system capabilities for servers. The module can be used to report capability information from the server at runtime or at implementation time by making use of the YANG instance data file format.</t>
              <t>The module "ietf-notification-capabilities" augments "ietf-system-capabilities" to specify capabilities related to "Subscription to YANG Notifications for Datastore Updates" (RFC 8641).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9196"/>
          <seriesInfo name="DOI" value="10.17487/RFC9196"/>
        </reference>
        <reference anchor="RFC9254">
          <front>
            <title>Encoding of Data Modeled with YANG in the Concise Binary Object Representation (CBOR)</title>
            <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
            <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
            <author fullname="A. Pelov" initials="A." surname="Pelov"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>YANG (RFC 7950) is a data modeling language used to model configuration data, state data, parameters and results of Remote Procedure Call (RPC) operations or actions, and notifications.</t>
              <t>This document defines encoding rules for YANG in the Concise Binary Object Representation (CBOR) (RFC 8949).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9254"/>
          <seriesInfo name="DOI" value="10.17487/RFC9254"/>
        </reference>
        <reference anchor="RFC9595">
          <front>
            <title>YANG Schema Item iDentifier (YANG SID)</title>
            <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
            <author fullname="A. Pelov" initials="A." role="editor" surname="Pelov"/>
            <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>YANG Schema Item iDentifiers (YANG SIDs) are globally unique 63-bit unsigned integers used to identify YANG items. SIDs provide a more compact method for identifying those YANG items that can be used efficiently, notably in constrained environments (RFC 7228). This document defines the semantics, registration processes, and assignment processes for YANG SIDs for IETF-managed YANG modules. To enable the implementation of these processes, this document also defines a file format used to persist and publish assigned YANG SIDs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9595"/>
          <seriesInfo name="DOI" value="10.17487/RFC9595"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC5277">
          <front>
            <title>NETCONF Event Notifications</title>
            <author fullname="S. Chisholm" initials="S." surname="Chisholm"/>
            <author fullname="H. Trevino" initials="H." surname="Trevino"/>
            <date month="July" year="2008"/>
            <abstract>
              <t>This document defines mechanisms that provide an asynchronous message notification delivery service for the Network Configuration protocol (NETCONF). This is an optional capability built on top of the base NETCONF definition. This document defines the capabilities and operations necessary to support this service. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5277"/>
          <seriesInfo name="DOI" value="10.17487/RFC5277"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3411">
          <front>
            <title>An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks</title>
            <author fullname="D. Harrington" initials="D." surname="Harrington"/>
            <author fullname="R. Presuhn" initials="R." surname="Presuhn"/>
            <author fullname="B. Wijnen" initials="B." surname="Wijnen"/>
            <date month="December" year="2002"/>
            <abstract>
              <t>This document describes an architecture for describing Simple Network Management Protocol (SNMP) Management Frameworks. The architecture is designed to be modular to allow the evolution of the SNMP protocol standards over time. The major portions of the architecture are an SNMP engine containing a Message Processing Subsystem, a Security Subsystem and an Access Control Subsystem, and possibly multiple SNMP applications which provide specific functional processing of management data. This document obsoletes RFC 2571. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="62"/>
          <seriesInfo name="RFC" value="3411"/>
          <seriesInfo name="DOI" value="10.17487/RFC3411"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <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="RFC4252">
          <front>
            <title>The Secure Shell (SSH) Authentication Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell Protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network. This document describes the SSH authentication protocol framework and public key, password, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for the SSH connection protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4252"/>
          <seriesInfo name="DOI" value="10.17487/RFC4252"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <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="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe"/>
            <author fullname="R. Peon" initials="R." surname="Peon"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8343">
          <front>
            <title>A YANG Data Model for Interface Management</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for the management of network interfaces. It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document obsoletes RFC 7223.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8343"/>
          <seriesInfo name="DOI" value="10.17487/RFC8343"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <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="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8071">
          <front>
            <title>NETCONF Call Home and RESTCONF Call Home</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This RFC presents NETCONF Call Home and RESTCONF Call Home, which enable a NETCONF or RESTCONF server to initiate a secure connection to a NETCONF or RESTCONF client, respectively.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8071"/>
          <seriesInfo name="DOI" value="10.17487/RFC8071"/>
        </reference>
        <reference anchor="RFC8072">
          <front>
            <title>YANG Patch Media Type</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This document describes a method for applying patches to configuration datastores using data defined with the YANG data modeling language.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8072"/>
          <seriesInfo name="DOI" value="10.17487/RFC8072"/>
        </reference>
        <reference anchor="RFC8639">
          <front>
            <title>Subscription to YANG Notifications</title>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="A. Gonzalez Prieto" initials="A." surname="Gonzalez Prieto"/>
            <author fullname="E. Nilsen-Nygaard" initials="E." surname="Nilsen-Nygaard"/>
            <author fullname="A. Tripathy" initials="A." surname="Tripathy"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document defines a YANG data model and associated mechanisms enabling subscriber-specific subscriptions to a publisher's event streams. Applying these elements allows a subscriber to request and receive a continuous, customized feed of publisher-generated information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8639"/>
          <seriesInfo name="DOI" value="10.17487/RFC8639"/>
        </reference>
        <reference anchor="RFC8640">
          <front>
            <title>Dynamic Subscription to YANG Events and Datastores over NETCONF</title>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="A. Gonzalez Prieto" initials="A." surname="Gonzalez Prieto"/>
            <author fullname="E. Nilsen-Nygaard" initials="E." surname="Nilsen-Nygaard"/>
            <author fullname="A. Tripathy" initials="A." surname="Tripathy"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document provides a Network Configuration Protocol (NETCONF) binding to the dynamic subscription capability of both subscribed notifications and YANG-Push.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8640"/>
          <seriesInfo name="DOI" value="10.17487/RFC8640"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore. Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netmod-rfc8407bis">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Andy Bierman" initials="A." surname="Bierman">
              <organization>YumaWorks</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="14" month="January" year="2025"/>
            <abstract>
              <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.  The document also updates RFC 6020 by
   clarifying how modules and their revisions are handled by IANA.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-22"/>
        </reference>
        <reference anchor="I-D.ietf-nmop-network-anomaly-architecture">
          <front>
            <title>An Architecture for a Network Anomaly Detection Framework</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Wanting Du" initials="W." surname="Du">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="20" month="October" year="2024"/>
            <abstract>
              <t>   This document describes the motivation and architecture of a Network
   Anomaly Detection Framework and the relationship to other documents
   describing network symptom semantics and network incident lifecycle.

   The described architecture for detecting IP network service
   interruption is generic applicable and extensible.  Different
   applications are being described and exampled with open-source
   running code.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nmop-network-anomaly-architecture-01"/>
        </reference>
        <reference anchor="I-D.ietf-nmop-yang-message-broker-integration">
          <front>
            <title>An Architecture for YANG-Push to Message Broker Integration</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Ahmed Elhassany" initials="A." surname="Elhassany">
              <organization>Swisscom</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   This document describes the motivation and architecture of a native
   YANG-Push notifications and YANG Schema integration into a Message
   Broker and YANG Schema Registry.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nmop-yang-message-broker-integration-07"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netconf-udp-notif">
          <front>
            <title>UDP-based Transport for Configured Subscriptions</title>
            <author fullname="Guangying Zheng" initials="G." surname="Zheng">
              <organization>Huawei</organization>
            </author>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Paolo Lucente" initials="P." surname="Lucente">
              <organization>NTT</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   This document describes a UDP-based transport for YANG notifications
   to collect data from network nodes.  A shim header is defined to
   facilitate the data streaming directly from a publishing process on a
   network device to telemetry receivers.  Such a design enable higher
   frequency updates and less performance overhead on publisher and
   receiver processes compared to already established notification
   mechanisms.  A YANG data model is also defined for management of the
   described UDP-based transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-udp-notif-20"/>
        </reference>
        <reference anchor="I-D.draft-netana-netconf-yp-transport-capabilities">
          <front>
            <title>YANG Notification Transport Capabilities</title>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Qiufang Ma" initials="Q." surname="Ma">
              <organization>Huawei</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <date day="17" month="January" year="2025"/>
            <abstract>
              <t>   This document specifies a YANG module for YANG notifications
   transport capabilities which augments "ietf-system-capabilities" YANG
   module defined in [RFC9196].  The module provides transport,
   encoding, and encryption system capabilities for transport-specific
   notification.  This YANG module can be used by the client to learn
   capability information from the server at runtime or at
   implementation time, by making use of the YANG instance data file
   format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-netana-netconf-yp-transport-capabilities-01"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netconf-https-notif">
          <front>
            <title>An HTTPS-based Transport for YANG Notifications</title>
            <author fullname="Mahesh Jethanandani" initials="M." surname="Jethanandani">
              <organization>Kloud Services</organization>
            </author>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="1" month="February" year="2024"/>
            <abstract>
              <t>   This document defines a protocol for sending asynchronous event
   notifications similar to notifications defined in RFC 5277, but over
   HTTPS.  YANG modules for configuring publishers are also defined.
   Examples are provided illustrating how to configure various
   publishers.

   This document requires that the publisher is a "server" (e.g., a
   NETCONF or RESTCONF server), but does not assume that the receiver is
   a server.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-https-notif-15"/>
        </reference>
        <reference anchor="I-D.draft-ietf-netconf-distributed-notif">
          <front>
            <title>Subscription to Distributed Notifications</title>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Guangying Zheng" initials="G." surname="Zheng">
              <organization>Huawei</organization>
            </author>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="1" month="March" year="2025"/>
            <abstract>
              <t>   This document describes extensions to the YANG notifications
   subscription to allow metrics being published directly from
   processors on line cards to target receivers, while subscription is
   still maintained at the route processor in a distributed forwarding
   system.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-distributed-notif-13"/>
        </reference>
        <reference anchor="Kafka" target="https://kafka.apache.org/">
          <front>
            <title>Apache Kafka</title>
            <author initials="" surname="Apache.org" fullname="Apache.org">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="Consistency" target="https://en.wikipedia.org/wiki/Consistency_(database_systems)">
          <front>
            <title>Consistency (database systems)</title>
            <author initials="" surname="Wikipedia" fullname="Wikipedia">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="EventualConsistency" target="https://www.techopedia.com/definition/29165/eventual-consistency">
          <front>
            <title>Eventual Consistency</title>
            <author initials="M." surname="Rouse" fullname="Margaret Rouse">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="XPATH" target="https://www.w3.org/TR/1999/REC-xpath-19991116/">
          <front>
            <title>XML Path Language (XPath) Version 1.0</title>
            <author initials="" surname="W3C" fullname="W3C">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="gNMI" target="https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md">
          <front>
            <title>gRPC Network Management Interface (gNMI)</title>
            <author initials="" surname="OpenConfig" fullname="OpenConfig">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="I-D.ietf-netconf-distributed-notif">
          <front>
            <title>Subscription to Distributed Notifications</title>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Guangying Zheng" initials="G." surname="Zheng">
              <organization>Huawei</organization>
            </author>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="1" month="March" year="2025"/>
            <abstract>
              <t>   This document describes extensions to the YANG notifications
   subscription to allow metrics being published directly from
   processors on line cards to target receivers, while subscription is
   still maintained at the route processor in a distributed forwarding
   system.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-distributed-notif-13"/>
        </reference>
        <reference anchor="I-D.netana-netconf-notif-envelope">
          <front>
            <title>Extensible YANG Model for YANG-Push Notifications</title>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Pierre Francois" initials="P." surname="Francois">
              <organization>INSA-Lyon</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Huawei</organization>
            </author>
            <date day="28" month="January" year="2025"/>
            <abstract>
              <t>   This document defines a new extensible notification structure,
   defined in YANG, for use in YANG-Push Notification messages enabling
   any YANG compatible encodings such as XML, JSON or CBOR.
   Additionally, it defines two essential extensions to this structure,
   the support of a hostname and a sequence number and the support of a
   timestamp caracterizing the moment when the changed data was
   observed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-netana-netconf-notif-envelope-02"/>
        </reference>
        <reference anchor="I-D.tgraf-netconf-notif-sequencing">
          <front>
            <title>Support of Hostname and Sequencing in YANG Notifications</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Jean Quilbeuf" initials="J." surname="Quilbeuf">
              <organization>Huawei</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="29" month="June" year="2024"/>
            <abstract>
              <t>   This document specifies a new YANG module that augments the NETCONF
   Event Notification header to support the hostname and sequence number
   to identify from which network node and at which time the message was
   published.  This allows the collector to recognize loss, delay and
   reordering between the publisher and the downstream system storing
   the messages.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tgraf-netconf-notif-sequencing-06"/>
        </reference>
        <reference anchor="I-D.tgraf-netconf-yang-push-observation-time">
          <front>
            <title>Support of Observation Timestamp in YANG-Push Notifications</title>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Huawei</organization>
            </author>
            <author fullname="Alex Huang Feng" initials="A. H." surname="Feng">
              <organization>INSA-Lyon</organization>
            </author>
            <date day="14" month="December" year="2024"/>
            <abstract>
              <t>   This document extends YANG-Push Notifications with the YANG objects
   observation timestamp and point-in-time for streaming update YANG-
   Push notifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tgraf-netconf-yang-push-observation-time-03"/>
        </reference>
      </references>
    </references>
    <?line 3328?>

<section anchor="DifferencesFromYangPush">
      <name>Functional changes between YANG Push Lite and YANG Push</name>
      <t>This non-normative section highlights the significant functional changes where the YANG Push Lite implementation differs from YANG Push.  However, the main body of this document, from <xref target="overview"/> onwards, provides the normative definition of the YANG Push Lite specification, except for any text or sections that explicitly indicate that they are informative rather being normative.</t>
      <t><em>Note to reviewers: If you notice mistakes in this section during development of the document and solution then please point them out to the authors and the working group.</em> <strong>(RFC editor, please remove this paragraph prior to publication)</strong></t>
      <section anchor="removed-functionality">
        <name>Removed Functionality</name>
        <t>This section lists functionality specified in <xref target="RFC8639"/> and YANG Push which is not specified in YANG Push Lite.</t>
        <ul spacing="normal">
          <li>
            <t>Negotiation and hints of failed subscriptions.</t>
          </li>
          <li>
            <t>The RPC to modify an existing dynamic subscription, instead the subscription must be terminated and re-established.</t>
          </li>
          <li>
            <t>The ability to suspend and resume a dynamic subscription.  Instead a dynamic subscription is terminated if the device cannot reliably fulfill the subscription or a receiver is too slow causing the subscription to be back pressured.</t>
          </li>
          <li>
            <t>Specifying a subscription stop time, and the corresponding subscription-completed notification have been removed.</t>
          </li>
          <li>
            <t>Replaying of buffered event records are not supported.  The nearest equivalent is requesting a sync-on-start replay when the subscription transport session comes up which will reply the current state.</t>
          </li>
          <li>
            <t>QoS weighting and dependency between subscriptions has been removed due to the complexity of implementation.</t>
          </li>
          <li>
            <t>Support for reporting subscription error hints has been removed.  The device <bcp14>SHOULD</bcp14> reject subscriptions that are likely to overload the device, but more onus is placed on the operator configuring the subscriptions or setting up the dynamic subscriptions to ensure that subscriptions are reasonable, as they would be expected to do for any other configuration.</t>
          </li>
          <li>
            <t>The "subscription-state-notif" extension has been removed.</t>
          </li>
          <li>
            <t>The YANG Patch format <xref target="RFC8072"/> is no longer used for on-change subscriptions.</t>
          </li>
        </ul>
      </section>
      <section anchor="changed-functionality">
        <name>Changed Functionality</name>
        <t>This section documents behavior that exists in both YANG Push and YANG Push Lite, but the behavior differs between the two:</t>
        <ul spacing="normal">
          <li>
            <t>All YANG Push Lite notifications messages use <xref target="I-D.draft-netana-netconf-notif-envelope"/> rather than <xref target="RFC5277"/> used by YANG Push.</t>
          </li>
          <li>
            <t>Changes to handling receivers:  </t>
            <ul spacing="normal">
              <li>
                <t>Receivers are always configured separately from the subscription and are referenced.</t>
              </li>
              <li>
                <t>Transport and Encoding parameters are configured as part of a receiver definition, and are used by all subscriptions directed towards a given receiver.</t>
              </li>
              <li>
                <t>If a subscription uses multiple receivers then:      </t>
                <ul spacing="normal">
                  <li>
                    <t>Update messages and lifecycle notifications are sent to all receivers (to preserve sequence numbers)</t>
                  </li>
                  <li>
                    <t>all receivers must be configured with the same encoding</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>Periodic and on-change message uses a common <em>update</em> notification message format, allowing for the messages to be processed by clients in a similar fashion and to support combined periodic and on-change subscriptions.</t>
          </li>
          <li>
            <t>On-change dampening:  </t>
            <ul spacing="normal">
              <li>
                <t>Client configurable on-change dampening has been removed.</t>
              </li>
              <li>
                <t>However, YANG Push Lite allows a publisher to limit the rate at which a data node is sampled for on-change notifications.  See <xref target="OnChangeConsiderations"/> for further details.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Dynamic subscriptions are no longer mandatory to implement, either or both of Configured and Dynamic Subscriptions may be implemented in YANG Push Lite.</t>
          </li>
          <li>
            <t>The solution focuses solely on datastore subscriptions that each have their own event stream.  Filters cannot be applied to the event stream, only to the set of datastore data nodes that are monitored by the subscription.</t>
          </li>
          <li>
            <t>The lifecycle events of when a subscription-started or subscription-terminated may be sent differs from RFC 8639/RFC 8649:  </t>
            <ul spacing="normal">
              <li>
                <t>Subscription-started notifications are also sent for dynamic subscriptions.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Some of the requirements on transport have been relaxed.</t>
          </li>
          <li>
            <t>The encoding identities have been extended with CBOR encodings, and the "encoding-" prefix has been removed (so that there is a better on the wire representation).</t>
          </li>
          <li>
            <t>YANG Push Lite allows for a publisher to provide an eventually consistent distributed view of the operational datastore, rather than a fully consistent datastore where on-change updates are sent as logic diffs to that datastore.</t>
          </li>
        </ul>
      </section>
      <section anchor="added-functionality">
        <name>Added Functionality</name>
        <ul spacing="normal">
          <li>
            <t>Device capabilities are reported via XXX and additional models that augment that data model.</t>
          </li>
          <li>
            <t>A new <em>update</em> message:  </t>
            <ul spacing="normal">
              <li>
                <t>Covers both on-change and periodic events.</t>
              </li>
              <li>
                <t>Allows multiple updates to be sent in a single message (e.g., for on-change).</t>
              </li>
              <li>
                <t>Allows for a common path prefix to be specified, with any paths and encoded YANG data to be encoded relative to the common path prefix.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>A <em>collection-complete</em> notification, and associated configuration, has been defined to inform collectors when a subscription's periodic collection cycle is complete.</t>
          </li>
          <li>
            <t>TODO - More operational data on the subscription load and performance.</t>
          </li>
          <li>
            <t>All YANG Push Lite configuration is under a new <em>datastore-telemetry</em> presence container</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="subscription-errors-from-rfc-8641">
      <name>Subscription Errors (from RFC 8641)</name>
      <section anchor="rpc-failures-1">
        <name>RPC Failures</name>
        <t>Rejection of an RPC for any reason is indicated via an RPC error
response from the publisher.  Valid RPC errors returned include both
(1) existing transport-layer RPC error codes, such as those seen with
NETCONF in <xref target="RFC6241"/> and (2) subscription-specific errors, such as
those defined in the YANG data model.  As a result, how subscription
errors are encoded in an RPC error response is transport dependent.</t>
        <t>References to specific identities in the ietf-subscribed-
notifications YANG module <xref target="RFC8639"/> or the ietf-yang-push YANG module
may be returned as part of the error responses resulting from failed
attempts at datastore subscription.  For errors defined as part of
the ietf-subscribed-notifications YANG module, please refer to
<xref target="RFC8639"/>.  The errors defined in this document, grouped per RPC, are
as follows:</t>
        <artwork><![CDATA[
      establish-subscription          modify-subscription
      ---------------------------     ---------------------
       cant-exclude                    period-unsupported
       datastore-not-subscribable      update-too-big
       on-change-unsupported           sync-too-big
       on-change-sync-unsupported      unchanging-selection
       period-unsupported
       update-too-big                 resync-subscription
       sync-too-big                   ----------------------------
       unchanging-selection            no-such-subscription-resync
                                       sync-too-big
]]></artwork>
        <t>There is one final set of transport-independent RPC error elements
included in the YANG data model.  These are the four yang-data
structures for failed datastore subscriptions:</t>
        <ol spacing="normal" type="1"><li>
            <t>yang-data "establish-subscription-error-datastore": This <bcp14>MUST</bcp14> be
returned if information identifying the reason for an RPC error
has not been placed elsewhere in the transport portion of a
failed "establish-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent
if hints are included.</t>
          </li>
          <li>
            <t>yang-data "modify-subscription-error-datastore": This <bcp14>MUST</bcp14> be
returned if information identifying the reason for an RPC error
has not been placed elsewhere in the transport portion of a
failed "modify-subscription" RPC response.  This <bcp14>MUST</bcp14> be sent if
hints are included.</t>
          </li>
          <li>
            <t>yang-data "sn:delete-subscription-error": This <bcp14>MUST</bcp14> be returned
if information identifying the reason for an RPC error has not
been placed elsewhere in the transport portion of a failed
"delete-subscription" or "kill-subscription" RPC response.</t>
          </li>
          <li>
            <t>yang-data "resync-subscription-error": This <bcp14>MUST</bcp14> be returned if
information identifying the reason for an RPC error has not been
placed elsewhere in the transport portion of a failed
"resync-subscription" RPC response.</t>
          </li>
        </ol>
      </section>
      <section anchor="failure-notifications">
        <name>Failure Notifications</name>
        <t>A subscription may be unexpectedly terminated or suspended
independently of any RPC or configuration operation.  In such cases,
indications of such a failure <bcp14>MUST</bcp14> be provided.  To accomplish this,
a number of errors can be returned as part of the corresponding
subscription state change notification.  For this purpose, the
following error identities are introduced in this document, in
addition to those that were already defined in <xref target="RFC8639"/>:</t>
        <artwork><![CDATA[
  subscription-terminated        subscription-suspended
  ---------------------------    ----------------------
  datastore-not-subscribable     period-unsupported
  unchanging-selection           update-too-big
                                  synchronization-size
]]></artwork>
      </section>
    </section>
    <section anchor="Examples">
      <name>Examples</name>
      <t>Notes on examples:</t>
      <ul spacing="normal">
        <li>
          <t>To allow for programmatic validation, most notification examples in this section exclude the mandatory notification envelope and associated metadata defined in <xref target="I-D.netana-netconf-notif-envelope"/>.  Only the full notification example in <xref target="FullNotificationExample"/> includes the notification header.</t>
        </li>
        <li>
          <t>These examples have been given using a JSON encoding of the regular YANG-Push notification format, i.e., encoded using <xref target="RFC5277"/>, but it is anticipated that these notifications could be defined to exclusively use the new format proposed by <xref target="I-D.netana-netconf-notif-envelope"/>.</t>
        </li>
        <li>
          <t>Some additional meta data fields, e.g., like those defined in <xref target="I-D.tgraf-netconf-notif-sequencing"/> would also likely be included, but have also been excluded to allow for slightly more concise examples.</t>
        </li>
        <li>
          <t>The examples include the <xref target="I-D.tgraf-netconf-yang-push-observation-time"/> field for the existing YANG-Push Notification format, and the proposed equivalent "observation-time" leaf for the new update notification format.</t>
        </li>
        <li>
          <t>All these examples are created by hand, may contain errors, and may not parse correctly.</t>
        </li>
      </ul>
      <section anchor="example-of-update-message-using-the-new-style-update-message">
        <name>Example of update message using the new style update message</name>
        <t>The subscription was made on "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces", but for efficiency reasons, the device has split the subscription into separate child subscriptions for the different data providers, and makes use of the new message format.</t>
        <t>Hence, this first periodic message is being published for the "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces/interface-summary" container, but it is encoded rooted relative to the schema for "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces".</t>
        <artwork><![CDATA[
{
  "ietf-notification:notification": {
    "eventTime": "2024-09-27T14:16:27.773Z",
    "ietf-yp-ext:update": {
      "id": 1,
      "subscription-path":
        "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces",
      "target-path":
        "Cisco-IOS-XR-pfi-im-cmd-oper:"
        "interfaces/interface-summary",
      "snapshot-type": "periodic"
      "observation-time": "2024-09-27T14:16:27.773Z",
      "datastore-snapshot": {
        "interface-summary" : {
          "interface-type": [
            {
              "interface-type-name": "IFT_GETHERNET",
              "interface-type-description": "GigabitEthernet",
              "interface-counts": {
                "interface-count": 5,
                "up-interface-count": 2,
                "down-interface-count": 0,
                "admin-down-interface-count": 3
              }
            }
          ],
          "interface-counts": {
            "interface-count": 8,
            "up-interface-count": 5,
            "down-interface-count": 0,
            "admin-down-interface-count": 3
          }
        }
      }
    }
  }
}
]]></artwork>
        <t>The second periodic message is being published for the "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces/interfaces/interface" list, but again, it is encoded rooted relative to the schema for "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces".  This message has a separate observation time that represents the more accurate time that this periodic date was read.</t>
        <artwork><![CDATA[
{
  "ietf-notification:notification": {
    "eventTime": "2024-09-27T14:16:27.973Z",
    "ietf-yp-ext:update": {
      "id": 1,
      "subscription-path":
        "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces",
      "target-path":
        "Cisco-IOS-XR-pfi-im-cmd-oper:
         interfaces/interfaces/interface[]",
      "snapshot-type": "periodic"
      "observation-time": "2024-09-27T14:16:27.973Z",
      "datastore-snapshot": {
        "interfaces": {
          "interface": [
            {
              "interface-name": "GigabitEthernet0/0/0/0",
              "interface": "GigabitEthernet0/0/0/0",
              "state": "im-state-admin-down",
              "line-state": "im-state-admin-down"
            },
            {
              "interface-name": "GigabitEthernet0/0/0/4",
              "interface": "GigabitEthernet0/0/0/4",
              "state": "im-state-admin-down",
              "line-state": "im-state-admin-down"
            },
          ]
        }
      }
    }
  }
}
]]></artwork>
        <t>Each child subscription would use the same period and anchor time as the configured subscription, possibly with a little bit of initial jitter to avoid all daemons attempting to publish the data at exactly the same time.</t>
      </section>
      <section anchor="example-of-an-on-change-update-notification-using-the-new-style-update-message">
        <name>Example of an on-change-update notification using the new style update message</name>
        <t>If the subscription is for on-change notifications, or periodic-and-on-change-notifications, then, if the interface state changed (specifically if the 'state' leaf of the interface changed state), and if the device was capable of generating on-change notifications, then you may see the following message.  A few points of notes here:</t>
        <ul spacing="normal">
          <li>
            <t>The on-change notification contains <strong>all</strong> of the state at the "target-path"  </t>
            <ul spacing="normal">
              <li>
                <t>Not present in the below example, but if the notification excluded some state under an interfaces list entry (e.g., the line-state leaf) then this would logically represent the implicit deletion of that field under the given list entry.</t>
              </li>
              <li>
                <t>In this example it is restricted to a single interface. It could also publish an on-change notification for all interfaces, by indicating a target-path without any keys specified.  TODO - Can it represent notifications for a subset of interfaces?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The schema of the change message is exactly the same as for the equivalent periodic message.  It doesn't use the YANG Patch format <xref target="RFC8072"/> for on-change messages.</t>
          </li>
          <li>
            <t>The "observation time" leaf represents when the system first observed the on-change event occurring.</t>
          </li>
          <li>
            <t>The on-change event doesn't differentiate the type of change to operational state.  The on-change-update snapshot type is used to indicate the creation of a new entry or some update to some existing state.  Basically, the message can be thought of as the state existing with some current value.</t>
          </li>
        </ul>
        <artwork><![CDATA[
{
  "ietf-notification:notification": {
    "eventTime": "2024-09-27T14:16:30.973Z",
    "ietf-yp-ext:update": {
      "id": 1,
      "subscription-path":
        "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces",
      "target-path":
        "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces/interfaces/
         interface[interface=GigabitEthernet0/0/0/0]",
      "snapshot-type": "on-change-update"
      "observation-time": "2024-09-27T14:16:30.973Z",
      "datastore-snapshot": {
        "interfaces": {
          "interface": [
            {
              "interface-name": "GigabitEthernet0/0/0/0",
              "interface": "GigabitEthernet0/0/0/0",
              "state": "im-state-up",
              "line-state": "im-state-up"
            }
          ]
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-of-an-on-change-delete-notification-using-the-new-style-update-message">
        <name>Example of an on-change-delete notification using the new style update message</name>
        <t>If the interface was deleted, and if the system was capable of reporting on-change events for the delete event, then an on-change delete message would be encoded as per the following message.  Of note:</t>
        <ul spacing="normal">
          <li>
            <t>The on-change-delete snapshot type doesn't include a "datastore-snapshot", instead it represents a delete of the list entry at the path identified by the target-path, which is similar to a YANG Patch delete notification.</t>
          </li>
        </ul>
        <artwork><![CDATA[
{
  "ietf-notification:notification": {
    "eventTime": "2024-09-27T14:16:40.973Z",
    "ietf-yp-ext:update": {
      "id": 1,
      "subscription-path":
        "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces",
      "target-path":
        "Cisco-IOS-XR-pfi-im-cmd-oper:interfaces/interfaces/
         interface[interface=GigabitEthernet0/0/0/0]",
      "snapshot-type": "on-change-delete"
      "observation-time": "2024-09-27T14:16:40.973Z",
    }
  }
}
]]></artwork>
      </section>
      <section anchor="subscription-rpc-examples-from-rfc-8641">
        <name>Subscription RPC examples (from RFC 8641)</name>
        <t>YANG-Push subscriptions are established, modified, and deleted using
RPCs augmented from <xref target="RFC8639"/>.</t>
        <section anchor="establish-subscription-rpc">
          <name>"establish-subscription" RPC</name>
          <t>The subscriber sends an "establish-subscription" RPC with the
parameters listed in Section 3.1.  An example might look like:</t>
          <artwork><![CDATA[
 <netconf:rpc message-id="101"
     xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
   <establish-subscription
       xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
       xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push">
     <yp:datastore
          xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
       ds:operational
     </yp:datastore>
     <yp:datastore-xpath-filter
         xmlns:ex="https://example.com/sample-data/1.0">
       /ex:foo
     </yp:datastore-xpath-filter>
     <yp:periodic>
       <yp:period>500</yp:period>
     </yp:periodic>
   </establish-subscription>
 </netconf:rpc>

                  Figure 10: "establish-subscription" RPC
]]></artwork>
          <t>A positive response includes the "id" of the accepted subscription.
In that case, a publisher may respond as follows:</t>
          <artwork><![CDATA[
 <rpc-reply message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <id
      xmlns="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications">
       52
    </id>
 </rpc-reply>

         Figure 11: "establish-subscription" Positive RPC Response
]]></artwork>
          <t>A subscription can be rejected for multiple reasons, including the
lack of authorization to establish a subscription, no capacity to
serve the subscription at the publisher, or the inability of the
publisher to select datastore content at the requested cadence.</t>
          <t>If a request is rejected because the publisher is not able to serve
it, the publisher <bcp14>SHOULD</bcp14> include in the returned error hints that
help a subscriber understand what subscription parameters might have
been accepted for the request.  These hints would be included in the
yang-data structure "establish-subscription-error-datastore".
However, even with these hints, there are no guarantees that
subsequent requests will in fact be accepted.</t>
          <t>The specific parameters to be returned as part of the RPC error
response depend on the specific transport that is used to manage the
subscription.  For NETCONF, those parameters are defined in
<xref target="RFC8640"/>.  For example, for the following NETCONF request:</t>
          <artwork><![CDATA[
  <rpc message-id="101"
      xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <establish-subscription
        xmlns=
          "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"
        xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-yang-push">
      <yp:datastore
          xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores">
        ds:operational
      </yp:datastore>
      <yp:datastore-xpath-filter
          xmlns:ex="https://example.com/sample-data/1.0">
        /ex:foo
      </yp:datastore-xpath-filter>
      <yp:on-change>
      </yp:on-change>
    </establish-subscription>
  </rpc>

      Figure 12: "establish-subscription" Request: Example 2
]]></artwork>
          <t>A publisher that cannot serve on-change updates but can serve
periodic updates might return the following NETCONF response:</t>
          <artwork><![CDATA[
 <rpc-reply message-id="101"
   xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
   xmlns:yp="urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications">
   <rpc-error>
     <error-type>application</error-type>
     <error-tag>operation-failed</error-tag>
     <error-severity>error</error-severity>
     <error-path>/yp:periodic/yp:period</error-path>
     <error-info>
       <yp:establish-subscription-error-datastore>
         <yp:reason>yp:on-change-unsupported</yp:reason>
       </yp:establish-subscription-error-datastore>
     </error-info>
   </rpc-error>
 </rpc-reply>

       Figure 13: "establish-subscription" Error Response: Example 2
]]></artwork>
        </section>
        <section anchor="delete-subscription-rpc">
          <name>"delete-subscription" RPC</name>
          <t>To stop receiving updates from a subscription and effectively delete
a subscription that had previously been established using an
"establish-subscription" RPC, a subscriber can send a
"delete-subscription" RPC, which takes as its only input the
subscription's "id".  This RPC is unmodified from <xref target="RFC8639"/>.</t>
        </section>
        <section anchor="resync-subscription-rpc">
          <name>"resync-subscription" RPC</name>
          <t>This RPC is supported only for on-change subscriptions previously
established using an "establish-subscription" RPC.  For example:</t>
          <artwork><![CDATA[
  <rpc message-id="103"
        xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <resync-subscription
        xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-push">
      <id>1011</id>
    </resync-subscription>
  </rpc>

                  Figure 15: "resync-subscription"
]]></artwork>
          <t>On receipt, a publisher must either (1) accept the request and
quickly follow with a "push-update" or (2) send an appropriate error
in an RPC error response.  In its error response, the publisher <bcp14>MAY</bcp14>
include, in the yang-data structure "resync-subscription-error",
supplemental information about the reasons for the error.</t>
        </section>
      </section>
    </section>
    <section anchor="OpenIssuesTracker">
      <name>Summary of Open Issues &amp; Potential Enhancements</name>
      <t>This temporary section lists open issues and enhancements that require further discussion by the authors, or the WG.  Once adopted, it is anticipated that tracking the open issues would move to github.</t>
      <t>The issues are ordered/grouped by the sections in the current document.  I.e., to make it easier to review/update sections of the document.</t>
      <section anchor="issues-related-to-general-ietf-process">
        <name>Issues related to general IETF process:</name>
        <ol spacing="normal" type="1"><li>
            <t>If this work progresses we will need simple bis versions of the transports document so that they augment into the new data model paths.  Drafts that would need to be updated as documented in  <xref target="DraftRelationships"/>.</t>
          </li>
          <li>
            <t>Do we need to fold in any text from RFC 8640? and RESTCONF.  I.e., there was this text in the one of the previous docs:   Bindings for subscribed event record delivery for NETCONF and RESTCONF are defined in <xref target="RFC8640"/> and <strong>RESTCONF-Notif</strong>, respectively.  </t>
            <ul spacing="normal">
              <li>
                <t>Rob: If text is needed for NETCONF and/or RESTCONF then I suspect that it would be better added to this document than to require small separate documents (as was done before).</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="issue-related-to-terminologydefinitions">
        <name>Issue related to Terminology/Definitions:</name>
        <ol spacing="normal" type="1"><li>
            <t>Should we use the object terminology?  This may be better than data node subtree, or the equivalent, and could be better than introducing <em>bags</em>?
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger: should try and use same terminology as existing YANG Push RFCs.</t>
              </li>
              <li>
                <t>Rob: This issue can be a place holder, to go through and check/update the terminology used, and see if any of the referenced terminology isn't neeed in YP Lite.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-yang-push-lite-overview">
        <name>Issues related to YANG Push Lite Overview.</name>
        <t>None currently.</t>
      </section>
      <section anchor="issues-related-to-subscription-paths-and-selection-filters">
        <name>Issues related to Subscription Paths and Selection Filters</name>
        <ol spacing="normal" type="1"><li>
            <t>This draft introduces a new simple yang path (ypath) format that is like a JSON instance data path, that all implementations <bcp14>MUST</bcp14> support.
            </t>
            <ul spacing="normal">
              <li>
                <t>Vendors already support a simple JSON like path (e.g., using module-names rather than XML namespaces).</t>
              </li>
              <li>
                <t><strong>Open questions (for further discussion):</strong>
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Do we support filtering on non-keys, e.g., this example from Thomas (but which filters on a non-key):
 /if:interfaces-state/if:interface[if:type='ianaift:ethernetCsmacd']/if:statistics</t>
                  </li>
                  <li>
                    <t>Do we support simple regex filtering on the keys (and if so, how would that be expressed, would it be compatible with JSON Path)</t>
                  </li>
                  <li>
                    <t>Do we need any more complex filtering (e.g., Holger's example of only getting entries from a list if they are in a particular state.), or do we always use subtree filters for that?</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><strong>Authors: I provides some suggested text in <xref target="YPaths"/>, but I expect further discussion may be needed. (E.g., how multiple keys should be expressed)</strong></t>
              </li>
            </ul>
          </li>
          <li>
            <t>The draft retains <bcp14>OPTIONAL</bcp14> subtree filtering (under a feature statement):
            </t>
            <ul spacing="normal">
              <li>
                <t>What is the schema associated with this subtree (compared to a simple path), and how is this expressed?</t>
              </li>
              <li>
                <t>Does the subtree filter get put into the subscription-started message?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>xpath filtering - conslusion is that we should keep this in a draft as a <bcp14>MAY</bcp14> (under a feature statement).
            </t>
            <ul spacing="normal">
              <li>
                <t>Do we allow implementations to support a subset of xpath syntax, or should they support all of xpath.</t>
              </li>
              <li>
                <t><strong>Proposal: From an IETF draft perspective, don't say anything, i.e., it just indicates support for XPath filtering without explicitly saying whether or not it must all be supported</strong></t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-datastore-event-streams">
        <name>Issues related to Datastore Event Streams</name>
        <section anchor="further-refinements-on-how-a-subscription-can-be-decomposed-internally-into-child-subscriptions-with-the-data-returned-for-each-child-subscription">
          <name>Further refinements on how a subscription can be decomposed internally into child subscriptions with the data returned for each child subscription:</name>
          <ol spacing="normal" type="1"><li>
              <t>Handling lists with separate producers of list entries.  </t>
              <ul spacing="normal">
                <li>
                  <t>If a subscription is decomposed, then should the subscription started message for the configured subscription indicate how that subscription has been decomposed?</t>
                </li>
                <li>
                  <t>Do we need to add an optional replay-end (i.e., after a sync-on-start) or collection-end (i.e., after every collection) notification so that clients can determine when data can be implicitly deleted.      </t>
                  <ul spacing="normal">
                    <li>
                      <t>Rob: I think that we should add the latter, but make it a subscription config option to turn it on.</t>
                    </li>
                    <li>
                      <t>Holger, strong support for adding this, often requested.</t>
                    </li>
                    <li>
                      <t>Thomas, yes we need this, but need to determine whether this is per subscription or per publisher.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="questionscomments-on-the-notification-message-format">
          <name>Questions/comments on the notification message format:</name>
          <ol spacing="normal" type="1"><li>
              <t>We allow multiple updates within a single message (primary use case is for the on-change case).  What about the timestamp, which is still just once per message (like gNMI)?  Should message bundling be optional/configurable to implement (if they all use a single shared timestamp)?  </t>
              <ul spacing="normal">
                <li>
                  <t>on-change deletes are implicit by an update that replaces an existing entry with an empty data node (e.g., "{}" in JSON)      </t>
                  <ul spacing="normal">
                    <li>
                      <t>An alternative choice here could be an explicit delete flag, we need to decide which would be simpler/better.</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>The update message also currently includes a path-prefix to allow (like gNMI) so that they don't necessarily need to be encoded from root, specifically, I think that this makes on-change messages nicer, since the on-change is rooted to the thing that is changing rather than the root of the tree.  We need to define semantics of how this works, e.g., this should probably be controlled via configuration.
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>Ideally, the path prefix would be exactly the same as the YPath format that is being specified for configuration.</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>Do we keep the "incomplete" update flag?  Otherwise how would a publisher indicate that a message was not complete.      </t>
                  <ul spacing="normal">
                    <li>
                      <t>Thomas: We should keep this.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
          <ul spacing="normal">
            <li>
              <t><em>Further discussion of this issue is needed</em></t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="issues-related-to-receivers-transports-encodings">
        <name>Issues related to Receivers, Transports, &amp; Encodings</name>
        <section anchor="constraints-on-supporting-multiple-receivers">
          <name>Constraints on supporting multiple receivers:</name>
          <ol spacing="normal" type="1"><li>
              <t>Encoding is set per receiver, but do we need to support a subscription supporting more than one receiver with different encodings?
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob: Note, it is always possible for a client to setup different subscriptions.</t>
                </li>
                <li>
                  <t>Thomas: This could be useful, e.g., when migrating from one encoding to another, particularly, if it reduced the load on the publisher (compared to creating a new separate subscription).</t>
                </li>
                <li>
                  <t>Rob: I don't think that we would end up optimizing for this case (but would need to check).</t>
                </li>
                <li>
                  <t>Also need to check with Nokia/Huawei would support this.</t>
                </li>
                <li>
                  <t><strong>Current status: Left open for further discussion.</strong></t>
                </li>
                <li>
                  <t>Note: This may also have a minor impact on the data model.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Lifecycle message should be sent per subscription, not per receiver (i.e., every receiver gets the same message (ignoring transport headers)):
              </t>
              <ul spacing="normal">
                <li>
                  <t>Consensus agreed this is the right thing to do.</t>
                </li>
                <li>
                  <t><strong>Action on Rob to check/update the draft.</strong></t>
                </li>
                <li>
                  <t>Notes:
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>Every receiver gets the same sequence number in the message.</t>
                    </li>
                    <li>
                      <t>subscription-created notification could perhaps have an enum giving a reason for the notification (e.g., new subscription, receiver added).</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>Do we need a per-receiver notification to indicate to a specific receiver that it has been disconnected?
              </t>
              <ul spacing="normal">
                <li>
                  <t>This would seem to only apply to configured subscriptions (since dynamic cannot have more than one receiver).</t>
                </li>
                <li>
                  <t>If the transport session went down, then the publisher would be expected to reconnect anyway.</t>
                </li>
                <li>
                  <t>So, the specific use case is likely to be unconfiguring a receiver for a subscription that has multiple receivers.</t>
                </li>
                <li>
                  <t><strong>Currently parked for further discussion.</strong></t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="issues-related-to-transports">
          <name>Issues related to Transports:</name>
          <ol spacing="normal" type="1"><li>
              <t><xref target="transports"/> lists quite a lot of rules on what are valid transports and what negotation/etc is required.  I think we need to check whether we can weaken some of these (although it is possible that these were imposed during a transport directorate review).
              </t>
              <ul spacing="normal">
                <li>
                  <t><strong>Rob: Authors, I've updated the transport section, <xref target="transports"/>, please can you re-review.</strong></t>
                </li>
              </ul>
            </li>
            <li>
              <t>James: We also need to add some text into security section.
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob: Is this transport specific, or related to application layer authorization?</t>
                </li>
              </ul>
            </li>
            <li>
              <t>What is the rules/restrictions for subscription receiver instances vs transport sessions?  E.g., is this entirely down to the transport to define.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="issues-related-to-setting-up-managing-subscriptions">
        <name>Issues related to Setting up &amp; Managing Subscriptions</name>
        <section anchor="issues-related-to-the-configuration-model">
          <name>Issues related to the configuration model:</name>
          <t>Note some of these apply or impact dynamic subscriptions as well.</t>
          <ol spacing="normal" type="1"><li>
              <t>YP Lite is somewhat different (separate namespace, separate receivers, no event filters, some config has moved to a separate receivers list.)  See the data model and <xref target="DifferencesFromYangPush"/>.</t>
            </li>
            <li>
              <t>We should allow devices to limit which datastores subscriptions can be made against (e.g., not candidate or factory-default as some obvious examples).  Should these be advertised in the capabilities?</t>
            </li>
            <li>
              <t>(James) Should we even document the configuration data model in this document at all, or should it be in a separate document?</t>
            </li>
            <li>
              <t>Some other changes/proposed changes:  </t>
              <ul spacing="normal">
                <li>
                  <t>I've removed some of the YANG features for 'small' one/two changes in configuration.  I propose that we don't need features for these at all (e.g., DSCP settings), or in other cases we can use operational capabilities, or rely on deviations.
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>I've renamed the encodings (e.g., from "encode-json" to just "json")</t>
                    </li>
                    <li>
                      <t>Maybe further simplification of the receivers list under the subscription.  E.g., do we need stats per subscription per receiver, or just per subscription?  Do want stats across all subscriptions to a given receiver?
                      </t>
                      <ul spacing="normal">
                        <li>
                          <t>Holger: Stats per subscription should be sufficient.  No need for per subscription/pre-receiver stats (which would allow the data model to be simplified a little bit).</t>
                        </li>
                      </ul>
                    </li>
                    <li>
                      <t>Subscription-ids are currently numeric values with the space split between configured and dynamic subscriptions, but I think that the config model would be cleaner if we used names for the configured subscriptions (and we could reserve a prefix "dyn-" for dynamic subscriptions).
                      </t>
                      <ul spacing="normal">
                        <li>
                          <t>Holger, Rob: Strong preference to names.</t>
                        </li>
                        <li>
                          <t>Thomas, keep ids, but rename 'purpose' to name.  Also give receivers an ids and be keyed this.</t>
                        </li>
                      </ul>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="issues-related-to-dynamic-subscriptions">
          <name>Issues related to dynamic subscriptions:</name>
          <ol spacing="normal" type="1"><li>
              <t>In YP Lite, dynamic subscriptions are designed to be closer to configured subscriptions and share more of the data model and lifecycle handling.  I.e., the primary differentiator is meant to be how they are instantiated.
              </t>
              <ul spacing="normal">
                <li>
                  <t>James, Rob: More alignment is better.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Do we want to change how RPC errors are reported?  E.g., change the RPC ok response to indicate whether the subscription was successfully created or not, or included extra error information.  Note NETCONF and RESTCONF already define how errors are encoded in XML and JSON (for RESTCONF only).</t>
            </li>
            <li>
              <t>Do we need to allow a dynamic subscription to be modified?  If we do, then it would be better to change the establish-subscription RPC to have an optional existing subscription-id rather than define a separate RPC.  However, my preference is that the existing subscription is deleted and recreated (or if we allow the client to specify the subscription-id then they could just overwrite the subscription)
              </t>
              <ul spacing="normal">
                <li>
                  <t>Holger: Overwrite is a neat idea, but delete/recreate would also be sufficient.</t>
                </li>
                <li>
                  <t>Rob: Related to this, do we allow the client to optionally name dynamic subscriptions (what is config and dynamic subscription names collide)?</t>
                </li>
              </ul>
            </li>
            <li>
              <t>For operational data, should be list dynamic receivers in the receiver list so that they are handled the same as configured subscription?  Or should the information for them be inlined in the subscriptions container?
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob this requires further thought on exactly how configured/dynamic subscriptions may to underlying transport sessions.  I.e., how fixed or flexible is this depending on the transport.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Proposal is to make specifying an encoding mandatory.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="issues-related-to-subscription-lifecycle">
        <name>Issues related to Subscription Lifecycle</name>
        <ol spacing="normal" type="1"><li>
            <t>Should subscription-started notification include a fingerprint of the schema that is covered by the subscription that would guaranteed to change if the subscription changes?
            </t>
            <ul spacing="normal">
              <li>
                <t>Rob: I think that we should do this (i.e., as optimized version of content-id)</t>
              </li>
              <li>
                <t>Would this also be impacted by a change to access control? (Rob: Probably not)</t>
              </li>
              <li>
                <t><strong>Thomas would like to align to the same mechanism in YANG Push, i.e., in the existing drafts, and we should use the same mechanism</strong></t>
              </li>
              <li>
                <t>Rob: I would like to understand what the long term complete solution is here.</t>
              </li>
              <li>
                <t>Benoit: Also related to the data manifest draft (in WGLC in OPSWG.)
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Should discuss all of this together.  IETF 122 discussion.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>If a subscription references a filter, then should that be included inline in the subscription started notification (as per the RFC 8641 text), or should it indicate that it is a referenced filter?
            </t>
            <ul spacing="normal">
              <li>
                <t>Thomas: Do we need referenced filters at all?  Subscriptions could be simplified if everything was done inline.</t>
              </li>
              <li>
                <t>gNMI is only done inline.</t>
              </li>
              <li>
                <t>Juniper also supports filters.</t>
              </li>
              <li>
                <t>Thomas try to simplify as much as possible, then do we need templating?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>When a subscription is terminated, should it be <bcp14>MUST NOT</bcp14> send any more notifications after the terminated message, or <bcp14>SHOULD NOT</bcp14>?  For a dynamic subscription, should the RPC be synchronous and not reply until it knows that all queues have been drained?
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger, Thomas, Benoit: <bcp14>MUST NOT</bcp14></t>
              </li>
              <li>
                <t>James: <bcp14>SHOULD NOT</bcp14></t>
              </li>
              <li>
                <t><bcp14>MUST NOT</bcp14> is clearer from an implementation POV, but probably doesn't really matter.</t>
              </li>
              <li>
                <t>What does the receiver do when it gets this message anyway.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Is a publisher allowed to arbitrarily send a sync-on-start resync, e.g., if it detects data loss, or should it always just terminate and reinitialize the subscription?
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger, terminate &amp; recreate.</t>
              </li>
              <li>
                <t>gNMI, not specified.</t>
              </li>
              <li>
                <t>Thomas: Keep this as implementation detail.</t>
              </li>
              <li>
                <t>Sequence-id indicates that a client is dropping message anyway.</t>
              </li>
              <li>
                <t>Receiver can already monitor and see that there is a problem anyway.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the parameters for a subscription change in any way (e.g., the config changes for a configured subscription, or a referenced filter changes in a dynamic subscription) then do we want to say that the subscription <bcp14>MUST</bcp14> be killed and recreated.  I.e., with subscription-terminated/subscription-started notifications? (Section 11)
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger, kill/re-create.</t>
              </li>
              <li>
                <t>Collector would need to no.</t>
              </li>
              <li>
                <t>Ebben: Includes addition or deletion of the path.</t>
              </li>
              <li>
                <t>Benoit: Which parameters are changing, this could impact.  It depends.  Maybe forcing it down keeps it simple.  Would need further definition of what parameters would cause this to be pulled down.</t>
              </li>
              <li>
                <t>Locally relevant, e.g., modifying transport parameters doesn't force a change.</t>
              </li>
              <li>
                <t>Benoit: If you are not sure what you are doing you must recreate.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Should we have a YANG Action to reset a receiver or a subscription?  E.g., discussed in <xref target="reset"/>.
            </t>
            <ul spacing="normal">
              <li>
                <t>There seems to be consensus that having/keeping such a YANG action is useful if a configured subscription is stuck.</t>
              </li>
              <li>
                <t>Further discussion is needed to indicate where such an RPC should be in the data model, and what effect it should have:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>It could be under the subscription list, which would effectively be equivalent to forcing the subscription to terminate and re-initialise across all receivers.</t>
                  </li>
                  <li>
                    <t>It could also be under the receiver list, which would effectively be equivalent to forcing all subscriptions using that receiver to terminate and re-initialise.</t>
                  </li>
                  <li>
                    <t><strong>We also need to consider whether this would clear subscription counters or not.</strong></t>
                  </li>
                  <li>
                    <t><strong>We also consider whether we need any text to rate limit requests, e.g., in the security considerations section.</strong></t>
                  </li>
                  <li>
                    <t><strong>We also need to consider whether configured subscription <bcp14>MAY</bcp14>/<bcp14>SHOULD</bcp14> share transport sessions where possible, or whether each subscription uses a separate transport session, or whether this is down to the transport session definition.  This decision may impact the design of the data model, and pehaps the transport requirements text.</strong></t>
                  </li>
                  <li>
                    <t><strong>Rob: I've written up some text for the reset action on a subscription and under the receiver (that applies to all subscriptions that reference the receiver configuration).  Unlike the existing reset action, I've removed the return parameter (timestamp of when it took effect), and I think that we should allow it to be processed asynchronously w.r.t the RPC caller.  Authors, please check the latest text.</strong></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>Should we support configurable subscription-level keepalives?
            </t>
            <ul spacing="normal">
              <li>
                <t>This would probably entail periodically sending a small message on on-change subscriptions so that the receiver (message broker) knows that the collection is still alive and active.</t>
              </li>
              <li>
                <t>The presumption is that would be configurable option on an on-change subscription (configured or dynamic)</t>
              </li>
              <li>
                <t>Note, some transport sessions may already support keepalives, which is a separate, transport specific consideration.</t>
              </li>
              <li>
                <t>An alternative would be to configure a joint periodic and on-change subscription, but depending on the keepalive interval this would likely involve sending more data on a periodic basis.</t>
              </li>
              <li>
                <t>Another alternative is to monitor the operational state of the subscription to keep that all the expected subscriptions are active.</t>
              </li>
              <li>
                <t><strong>Discussed, but no consensus reached yet</strong></t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-performance-reliability-subscription-monitoring">
        <name>Issues related to Performance, Reliability &amp; Subscription Monitoring</name>
        <section anchor="issuesquestions-related-to-operational-data">
          <name>Issues/questions related to operational data:</name>
          <ol spacing="normal" type="1"><li>
              <t>Should we define some additional operational data to help operators check that the telemetry infrastructure is performing correctly, to get an approximation of the load, etc.
              </t>
              <ul spacing="normal">
                <li>
                  <t>Rob: probably, but lower priority.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Should dynamic subscriptions use the same receivers structure as for configured subscriptions, or should they be inline in the configured subscription?
              </t>
              <ul spacing="normal">
                <li>
                  <t>Thomas: Two sets of counters, one is at the subscription which is about fetching the data, and the other is on the receiver.</t>
                </li>
                <li>
                  <t>James: Can think of some uses cases where listing drop counters per subscription may be helpful.</t>
                </li>
                <li>
                  <t>Rob: Thinking about it further, it probably needs to be separate, since for some transports, each subscription may open a separate transport session to the receiver rather than trying to mux into a single transport (e.g., TCP).</t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="issues-related-to-conformance-and-capabilities">
        <name>Issues related to Conformance and Capabilities</name>
        <ol spacing="normal" type="1"><li>
            <t>Do we advertise that conformance via capabilities and/or YANG features (both for configured and dynamic subscriptions)?  </t>
            <ul spacing="normal">
              <li>
                <t>The current doc uses a mixture of both (e.g., features for supporting config vs dyanmic subscriptions), capabilities for advertising other capabilities that either cannot be advertised via features, or would arguably be too fine grained.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>For on-change, should a subscription be rejected (or not brought up) if there are no on-change notifiable nodes?  Alternative is to offer implementation flexibility between these two approaches.
            </t>
            <ul spacing="normal">
              <li>
                <t>Holger: Prefer for the subscription to be rejected.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>CBOR SID encoding:
            </t>
            <ul spacing="normal">
              <li>
                <t>In terms of conformance, we have <bcp14>SHOULD</bcp14> for CBOR, but the draft is silent on whether this means with SIDs or not.</t>
              </li>
              <li>
                <t>Further discussion is required on how to manage SID files.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Check of the current approach in the draft of using a separate tree for YP Lite capbilities rather than reusing the YP capabilities (and augmentations) previously defined.
            </t>
            <ul spacing="normal">
              <li>
                <t>Rob: The draft currently includes a separate tree, which I think is necessary because the supported functionality is different (e.g., dampening), and a implementation may support both YANG Push and YANG Push Lite.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Further work and discussion is required for advertising capabilities for filter paths.  E.g., listing all of the paths that support on-change could be a very long list.  Related, does the draft need to advertise at what points a publisher would decompose a higher subscription into more specific subscriptions.</t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-the-yang-modules">
        <name>Issues related to the YANG Modules</name>
        <t>None open.</t>
      </section>
      <section anchor="issues-related-to-the-security-considerations-nacm-filtering">
        <name>Issues related to the Security Considerations (&amp; NACM filtering)</name>
        <ol spacing="normal" type="1"><li>
            <t>Need to consider how NACM applies to YANG Push Lite, which may differ for dynamic vs configured subscription, but generally we want the permissions to be checked when the subscription is created rather than each time a path is accessed.  </t>
            <ul spacing="normal">
              <li>
                <t>(James) Take out tight binding to NACM from YANG Push Lite altogether.  I.e., decouple YANG Push Lite from what security mechanism is being used.</t>
              </li>
              <li>
                <t>(Rob) Another choice could be to use NACM as an example rather than the only way.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Where should this be in the document (current it in the security considerations section)</t>
          </li>
          <li>
            <t>Do we want to retain the the current text in <xref target="events"/> introduction related to terminating a subscription if permissions change?</t>
          </li>
          <li>
            <t>Also note, text was removed from the transport section related to RPC authorization, and which should be moved to an application (rather than transport) layer security mechanism.</t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-the-iana">
        <name>Issues related to the IANA</name>
        <ol spacing="normal" type="1"><li>
            <t>Need to add in registration for ietf-yp-lite-capabilities.yang</t>
          </li>
        </ol>
      </section>
      <section anchor="issues-related-to-the-appendixes">
        <name> Issues related to the Appendixes</name>
        <section anchor="examples-related-issuesquestions">
          <name>Examples related issues/questions:</name>
          <ol spacing="normal" type="1"><li>
              <t>Not a question, but a note that most of the examples need to be updated to reflect the data models currently in the draft.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="summary-of-closedresolved-issues">
        <name>Summary of closed/resolved issues</name>
        <t>This appendix is only intended while the authors/WG are working on the document, and should be deleted prior to WG LC.</t>
        <ol spacing="normal" type="1"><li>
            <t>Rename subscription-terminated to subscription-stopped (Change rejected 21 Feb 25, unnecessary renaming.)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> use envelope, hostname and sequence-number (and event-time) (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>Don't mandate configured or dynamic subscriptions, allow implementations to implement one or both of them. (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>Dynamic susbcriptions to require the encoding to be specified. (Decided 21 Feb 25)</t>
          </li>
          <li>
            <t>DSCP settings are only specified under the receiver (for configured subscriptions) (Decided 21 Feb 25)</t>
          </li>
        </ol>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+S963YbR5Yu+B9PkU39EIkDgKQkX8RWyUVLclvdtqQjyWVX
l336JIAkmSUgE52ZIEXLOmseZH7Ms8yjzJPMvkbsiIwEKVdVz5p1uLxkEsiM
e+zrt/eeTqejruxWxUm29+fTF/+SPc27vO3qpsjeFqtiXXTNdbZP37zathfZ
d2VXHOyN8vm8KS7lnan7Zm+0yLvivG6uT7K2W45Gy3pR5WtofNnkZ930qlx1
dTWtim5RV2fT67w6n27g5ekKXp4eHY3a7Xxdtm1ZV931Bl57/uztN6Nqu54X
zcloCW2fjODNtqjabXuSdc22GMEo7o/ypshhNC83RZN38Hab5dUy+z6v8nOY
Q9Xtja7q5t15U2838NiLosM/sycwiPJ8y6/sjd4V1/Dx8mSUZdPMTZn+ejlv
i+Yyn5cw0Gv6RNtwq8TP6QDyFa3k6LKotgW2eEPfWcYT3vsRviyr8+xf8Hn8
fJ2XK/hc1uyPZdGdzermHL/Km8UFfHXRdZv25PAQn8SPystipo8d4geH86a+
aotDaeMQ3z0vu4vtHN5uznlXDnmLrjfT2k4Wn13Bwred6UnfmXErs7IeePsw
ve/RU7OLbr3aG43ybXdRw0ZnU+g0y862qxWfntc1HIAu+5Gaoe9ganlV/kqr
d5I9KdtFnb25brti3dL3BS9bwz3/cYEPzBb1mr5sajzvxbKEc97v7Nt6dV40
2b8Vq1XRJDp7WmyLrl1c8A15J21Kh/zyjF/+Y8cPzJZFv5uvi6ouu+zJKi/b
ItHNt9v8qiht23N6Y7agN/54Qd/znOK2n83h2ey0KYs20fK/bqtyI1OTps0L
WfE+/+Nf+ZEZ7Fi/9X+Ff9vsyXa9hoOaaP9F/a7Mbet/xRdmC37hjxV+nR73
24t6nbdw9vOzRLtvroA0LML15jdm+MYfW/me2h5VdbOGFy/p9j2fPp3xUYQZ
AVVwR7Gqu/JsWlSXxare0KOvv3ly78EXD+TXz+89ONZfHz7UX794+NmR/1U/
/fL+gyP/q/n0nv762b3P/K8P9dcvXLsPjx9+rr/e+0zH8PCzh/rawwdfwq+j
sjqzs4MvoD9t5P7nX34pvz6495n2/fnRPTfkowfa9xef+SHf++yhH/J9/fXB
Ax3Rl0f+2aMvjv2vbnqf33ctfO6f/dwtxcOjo6NwN5BM4V6s6+W0OVt8+eDo
i3nZ6jP87bre4CNINad5Bdu9up4SmeuKRbdtiv7TxFfgyLVA/adA+94VzbSs
gDExtU0PgY7DdrnhI7Hz0AD96pq8ajd1000X+YbJGNydHS0T6Uy1HTy1LNuu
Kefbrlj6Z/8tP3uXn9Cp7/LmvABKrIT4HX41gxEAOSJyz08xQz+lj/l1+tzR
V/qZZnzpTt3b9AVx2ewsXxFVAjbVwpiKanGdHkFRza7Kd0AslnCpcQT416F5
7T/2ocV8nrfFf7RMoA/sIM2TmXsyC55MD/tH7TUx6mfAdrttvrpx9FdXVzM4
Rhc1jx8Ix+GyOCurEs/J4b2Hx59/dlhIY9OFb83OQDuzU9kx7u9hCCCudMDU
tkL4w8H/9Or07bfDw726T8v89vXh8cOHDw9fP3syfb/Ju4sp/nl8fPx5cAZ+
+v677BV8m30Hd2IL9yHb/wn/Psj+VDQoZ2XHs6Ndq3z/SWKI5y++f54eoQgE
uJCwptWCpJzDpjgrGvirOJyv6jkIKrBKzWGzWRyeV+uS/pm2m2JRnpULuqKz
9dLO4vz1qydO4vJSXfYcLnVzli9gVjikXccFJLOKZa7efEbT6TTL53Dz8kU3
GoXCblaCLMnS4NKJxp0Tjdt6tcUBT7IcZc4sX8GIKqLMWTCjrKuzDm7jm+28
XcAVL5bAJzv3NQusvmvfrmtltbrO6k1Xrstf4WVgANRecQbflbgYgUiV1Wfw
sBdGcewznum6XC5XMOs72dMaeDK++qbLu207Go2BSGfPSC4C2fss2zQFyNrd
JNusCryWTbGuYWLdBSxKC9QX5zUvznBJNtv5SjdvPBp9DY8vM5w2jPGsKJbz
fPEO3l8UsDLLbLltUMjFL1HEz47vHWcvnr198vLFN9AwKQAT7mapY7yABV5s
GzhGHSzEvAB55aopO7hutPTw2uoMr2iXlxX0sCrPLzoQkOBfmEbd1Yt6RWvs
GmyKzQqODv2Oq/nhg/Cwjx/pQfn7wfHHj5OMqQIMGTva5LCuRbawIjytcAZ8
rFjBOo/Hby/wgTU8Wra0SjAYGKrf4XC/9ahV9VVWVtD30/JM7kz7TVOv/wzX
Fx/8+HE2HmP7eJ7hhXYLohiQk6yAiwdSK74/L2ht4TS/g4UoqxUsCDaKq90V
7+GkNNwHtvGcmnhLDzcwcz1XF7By0N4KqN9K+qGe7yCZQ4pHh/bDnYX/6+No
hLMGNSpDParN9r7/4c3bvQn/P3vxkn5//ey///D89bOn+Pubb0+/+879MpIn
3nz78ofvnvrf/JtPXn7//bMXT/ll+DQLPhrtfX/6Z/gGV3bv5au3z1++OP1u
j2duTxIuF9zGOS4K3FY45MBu4RCNloVeTXjn6yev/u//6/gBLNM/oUh4fIzn
gv/48viLB/DH1UVRcW91BUeS/4S1ux7lm02R0yLDrc1AQig7oDREI9qL+qrK
YGkLPCZ/wZX55SR7NF9sjh88lg9wwsGHumbBh7Rm/U96L/MiJj5KdONWM/g8
WulwvKd/Dv7WdTcfPvqKTuD0+MuvHo9Go1NYkjGd/K4pigz4Lshl63acbVte
+XC3zurVCg41nkmQiOiujeg28sN8S0HyhpuBpxNYQlMvt0SbRqMPHz5JMoRN
1TPA1NyImXQzYPMGecEkK2bns0lINxZ5pQcN+4AxA8FGygnXCo4MXNpMhpPx
cFrfDAlu2Eh3kROJWrcZ0JMOaXsO7y7hfvZGmGdjZZSnLCyDwtoJrf4GFrrA
78aOr+gq3l7epoV+G+yRttWKEckbhPB+BLTYMki4hIPsMKbGvl2zvrMEBTUE
+hZc++qiXFy4XVpvVsQPaFGWBZDHJbObuplk5RkejrIpljCpVV2dt7ADu7gG
LNMpTJhIKRPSSWK82OY5HmZYDRgXLAvMAJj8CghIW9BmN8V/bqFfHFmLNMQ1
wtSnRF4Gl4fmDm3RKuKuwNpyA3h5YLA5SxksYcsSZGfAXXyLsyweIt+1YF09
q8NB53Q/gQ8Id/bLyIwR+p/XcM6VC/Mg4EUQ3FBWwRbXuD927IsLuKnQa4kb
c5FflrgDoBdl67y61inROCoYB7PALn9XxPOhvuD9gl5o4fhPkP1dFngKZJW9
xN/OmIUxzUEuKlJOm52X0gYKMmjMq7wMZoRA7A22m048fUfcML9u+RKz5BTI
hUti9C2Pm1qzX8t7sMV0VBqSnvBRJHZ3sq/9YMjgCVfokpvFsYU7CacxQ2Mr
7f9ySIb1PJA2rc88satVy8JsX16171/vFqmg1XlRFSi+goA6LxY5nGGcKR2o
tie+Cs8u3qPaze2T0Nle4PLRCSrXa9TjOqSt2J8TjuFvFsb4nq2K8xz0zQ1s
s6zGusATV7ZroL/tFkgCLMWbF9+/4iGjdQWpTfamXsPp2DYka5mT4AwyeN5Z
0jqHuTUw9LXbk5Y2JbUFSofgnpOYD/ID/ItCguMgZ9IPtT32Gz3O9lUSP54d
H+DViFedpGzDFs0b9nkmqBme/wataxXyF7ppRtovcRKLrRHuGyArOLerCxh3
VhVXAbm/FC0T2vGHBUV5EuAdD+Kbc4VHHcjEHJalJVpewv+VLsKJf5Y3sC4R
fYFNhgPRKlH4dJYf8NALumokVhN33rZIBkS6li6AN+JxWtfVzSxGLjCRoHjO
5awgRo+6K4wjuLEhH8EnMk86+PTjULxaC1u83LbYNdohYEXK7Rq28zlRDrod
KDHY5cMhIEnli1bDJQKVCF7kEbd41ElAntIDolfK2qg+sywuy0URbQkoanSX
dSthGN8bsm3GHPIEz1eYoBOdgfsOW8P3trgkBkmzaUCqXq5wFeCCkBIZNibt
THk2pCKZlmg/cm4JTsIS7TcbNCTAGLGXrVxl+ASaR7XYHVolOsuZtRWY/QJ6
DzvVwSDyZknKumwWjRKu8L2j44fKzZp3wKLzJSr20KHrBDYED1wLlBBW7ymr
y/eO7t0/hH8eTEjZgMtVLXHboC+iiG4X4GFic2SxQq4BL4dfGhECDjwNGLv1
O89iCfDhGva3dcIvyp/lYots86zI8ca0qbOthMqxhTXwZuwJ9wDGhIuPG14i
gd6uOtwS1ObhzBQNkdKeHAGE2Xcu6lYwwU407lXxnoyx0oMzqGYVjTdpGYF7
AtL+clmKzSWxAvDaheghdE7hVqF9awkN77PEzmuadws9DUdf3Pv48YDnzhIO
zL3oj9wIOwmbAp6TFdAv+zYxmDpHzZzuBfFEFNECka/HQeszEZzk1lZ4uL0F
6SxvL1R2IO7Pz7XZvme0B7Ssi1VJwui+WHTgc7gN36K5YqLGHT6o2J2eU1KV
HbG5Ek9nV1/laC1glTBBQEE/LPjW5tlmlZMpzZ2NYNK75Y1qsdouab2ZdlO7
LFTDu+44O3oB6ibwswJ3mLhTvV0t6cNQVWDehUulXN5JckID+PrQocrxinCH
dHpwOI6HxMeQxPY0sytRMeGrhk+tQYAFRc0sxdm2WvDWI9WWaSAr3W6ExuP+
Q0fwll90pNoLkE1anhS61Wmsm7rD/vDArYHMXhZOFhSLZGDjhO8bNHx46tjf
1myfRR5H8dSYt92oPY/m0a6xJeJDoJQyjkD3aHtOw4C1Ld7Dq0uRz9uUYIrn
8+W2cwINnr5J5sAERALn23K15CMppAxFmgW8tUSjjZFl/ja1VWT6li8ZUQYS
qoxUZa9uf3tE72uFQ+ZtCbzC3ooJspymWOXvSYnBkyc0AWfcNSDd4SEUMiTu
F+maLz13QQZf5SYtNg9rEjdpx6q3iATJsqXthT+BxBvbTqDhxDqxqGAD554m
fE7MuylbMiEkz2arZzGw/borByOvzL6pDaZlreqJ5SIw6O9RlFgpj7EYjzek
vXrMzIc75lv3mm1PjKQ0Z/U5yKFC7b06XxVGniTlf0V2I7dTHdNyPMAtK7JX
0A2RmJB7iOBJlwmkfxi+MSSINoVWc9P0RBQGPp75ijTX7Qa9JULnLoGgyJ/I
PjJyhOZCalDThZ3/essW9Q2pHKid4UlxpxiHP/H649AqxNyLV4Rs5GjwIEVp
U7dtCTImdafcao0OIrbVV3U1Bf5/iacDdCs4JoOuEVLtxO8ITQClYon+oiib
PieluctAV/U5umcy9V5OsutCVXZi3KvyXcGSapfmywvyHNFiw57Ieg+sr1ic
z5BW4qzXcEVhUZWLL66dRsZ6rBsWELGCF09WslrCwpDkuyrgRrUskpZAH4p8
CSdjXU7NoQNOT0Z9WD0aMxLgTP0tDdIHkBBAwKtwi8naBYv6DXxcsyTLKzvp
LYBVnXHZ50UgtOWLBvY4WwMFKeESCSeA99juI6IXGpgXyGkPeHkcTYBlJ4vR
UtwppF8ucFOWOSxcxVoeEaa6DXumDlDnx2XUgyFaPTS7rHEtuTvYP/q9eH9R
zmHjEdESkNYPH4xzGFW9AQFNmCKLGnJboyMA+4LneNHq0iB/1MkQWwhWCBaE
vBM1zp8uBRBT8ViTVcRt8IcPCbc5jPWyBJ3eWtzkhMD2grSyoauL/ILWWQzH
7i5elTA6upCDV4kIFIhk87JyBkMWwEn6JWcWnVi5EQs8YvBykj7I7cAjN1Ef
VguXs0icC+K7uMhiIEIpHDvjneCD1SL/aWm54Sh/8/xre14PwtGBullcodGG
x0ntR7eTZSaj4yDB7PMcvNe4Cdu1EE/PIglVSPdKuTk+5CwTfSLbiFU8ov15
29YLNJUhHVtcwKFiewfLhSi5Loopm92QbNE+zomdAs1glZYlbxCDSHeFm/Ky
KtB01dQ5nGHWTM4KVIfI6ozCFbusYQdQGeJe1YiqYgevOzRPrzr5eFXOm7y5
VgaFgmIrRl0ziIzADSS/wUosOrFQATkSgzi5nGSxZAAsS25AtEEtD++KiA7R
7N5eOIuGLhUurJ0v8c2gcbhqjep3OjeQYNFzA4f8rLtCRYMJ/oSnxXyDaXg+
h9EI99BbocpivUB7O66P27fzVT3Hy8DanR9BJYNCkwrpNa4RnSk/quuzJdNf
b20RZQLrIFoemg2ITMGpuChWG6B5JIKyYsL2V5WYTR/u3C153Lk1KfS6mxh7
c+30bXtG+baSkMQ+tcTmUVNqUiF7kYA15qQdFPy9U9uauh5Uoemqs4P/5dOX
IBnieoJy1Yo8BcobDJAtt7zbKnMiHZ7yujvln5UG5DFw+rqOaIkZN4pe5HQP
vW1w4EDuIZcMmltBA5uWbIlkJLaTcplQ4cjIsi6MXWa2R8BrPnp77DOnT3iI
7osqUG96jlc1UB7PsrfqCjIWBlKkVmUX0QrkUTWrdnQ9kDKEEyfJBhfXU07j
kWOm6z1OwtNhzqhCk1UVPWIqsbPri/b3w4evvHl4CHRHdvBv6yu8vBN24SeG
iFcJOAN8q+fSK/75Oj6BNUyZKD2R+jmtIpytEnZqIRgCPR32RZZLQcVGTYQo
g7lrYsQUMTToj0jRAhVx0TIH+gq2l1UvoRJo5CaJFPaapRKidyKiwYGCQZzQ
xiMz8nJRS97AFC/N5VTcbbPNxXVLMnNJ6BFgkQdC/gaGpv2u67ZjmrtpkIrY
jULzWc5MQZgeCCQrfCHQ9US7qe52KnMvyUGOKg150CsVoT1Fxt6JCoXETjeA
ppwvkTD6hUb30HYT9m3FKFkVsjEXpMfde5Bd1NsGZTaidu2WFBDRGtYe96bS
aHtBFFimEYp10CIsohBfvSgt6atinBVZbeY20bP70kq66CZjy0RuZwciYmIO
x0dojIK7JJbCDakUZLvDUwx8mUDmXleyS2xW11nMeFDAllp2NqP+D+pV6O+L
DotbM3qZkGN0ppaefanIebtrOBFeF7usVXyM+odtdmz6TE2BxOFrOFqoE8sG
FESO0b/NVifZyau87JxgVCFky42RNtnbWkPnbClePrJiwujykvxlcCpKAlzs
aTNTmOrUTXVPJBBY5vL8nHkkUA+4BF3RfvJKMccmF66jhQgcADKG1Ij5pFoq
aEu+0b025kc+WCxO89GZRkeHHci4cM5Awct11eOAwjGXCGi8LOttS2qhJyhM
zVgQf02iBOziRbkR4zoqANAY8DvWsJ6rNfIpWyM/3KFfgjc/RlxbATfXTqJ1
Fi9yhaPWVomNFuWIQdDMjVBFVOJZpsW7UsJSNJu6oa28zBucPZtLWzqqwDzo
NKL2SxO8whUXYyzK9GRowB3ucrayobwm55pUZplg4HXzLiHTPx4LWm4gFHOY
zFp8YLBVbMgGdaHsImABYVBCY7b0s0We1zVb8tvaG1EIBLh1xl6yGssVRnGa
5BKceCN2meodH9vFu6q+AmLH2qrCRDwshc2QnqiZdSMnAJ8H1I14BGRhZuFC
HSB4AgtY5Jat/V76nWQ/FtEYeWQ4ErSt4ALaiRV29U+yZw1czD/VJRy1U9Ak
syegqKzxd4ydqrN/qatfQQ/+NXsFt6irJ9kz0Leb7EUJWms1fXF9nucNXKFT
uOrvcngob0FWfAu3GmRjULu+zlf5r232XVGdXyOQCbvISU+QfoJ4pkn234HJ
/LjF/2/PgEhk3+cyrG+3+Oc3BUrEJt5nkr0qC2BSiFGDI1O2JGSjdZ1U9+AK
qM7F5wctWu6CK8YGCQYuvigoMH8mZ9m8bFUtoWXUK+GPsXIZkp56V1XBeZ8e
HIJ3U7T/i3wjrgKM+BFML4qG6GjGe00P8h8PjmP5H34H4WcNA2fi/nekG2XH
DfJlW10rsGzg/jsnaei998QBb8YsBalXRYKFdIMtk4uNoP0WHfKCqSLR6h8D
03MmhRR5hFX12DhEUBHbZzczgeO8yC0rgsgZZ25csAMhmr9Akaj1HQMjKawk
9b1CHjOACBetYseRDIPcpCM8XZ/d++ILBuTK4Ae1vZTfhuErpF2orMWWZZEm
FNiKvQXKyao8KxbXi5V7Mux2/8OH7/SJwLuGznTebhJGq6WzAQVCtk5UuX+g
tN56kXC32YY+SczeG9PJu4/jSCxhcgSw8LjupGS+ROcLSPzoNXfeC1E1sE3z
dLRIZ86yTocr+FKplEqQexJascfSI3LNIl8PjcpTIiROcih/D7mL6RZREtJG
zGOkxhebrm9bENLIVmbDJUvn+W2VCQNNQIWe1aJgFLw6TFSYxDk8a4Vwu/IS
eGIVUkr3/rWXL9xasuXArPaO7lht1g57Mz/bAfh6qwhC4OlufcPXb3esd+zP
kJQWLio0gNH54cyQR4r3PaJtA4MVyK/eV++OYXshPpOgY0MRlI5W3hTG+VHc
rUMzId0QaROcUEZ5MJJAjIxjB28ZW/YW0EU9ew4RIJTEvRr0N7BpwxOVs9CH
VNBqOzQFuYRQVitUyiRrf0vqUCzzEMl2IqTbsUAIsgALdyD8ehzqb4f+dGEG
g7HgpVjhXTuXMlE0bY88Fe6cyAm4Ti6r7lkQXbXzmCSseWqudXBI65C1SAZG
xgtChlzKgT/Q0l91iKRujmoc2B9a7SdoFrbKRYBQEJleoquiDX4JS0wOuA93
avm1R1d99EUo/SVAN50gbNGH08ZGWQwfxK3DiTNj9g4CMnmQ1dVj1fhDMnrm
uO1tUQU28jeBuVQBNYRfS4Ivsn06JRQsKkBtuJ1jGcr4QM1dBFvAg0V4YYWG
M7zLGbdEshCvteKLi0Z13XA3w5ZJ0PMbQQcwWCkU4BB+0p6MRlM0T1AUrJGA
XGRAaEOS/lHKrUp2GgbtKrBQEAVoTQXpYOEh/1MDjCIHFwkZ5UotK7ALNWEE
ifG44bCv3Jmn/XAdxiEyz7c6QgLLNGjE2azIiRGECBAVQwWxPa2W3/AwiGRN
+USUDKhF3KTsBwsgfVEmECDvtr3QDjZMkbWI7fuCyHYWKR2hwzlZi6f1vdAI
pkuMpKgI1oTUkN17LVu+g/kx5eAb7MKYx2M/Rzz1FldE2ysnWgWxf33z8gX1
9eTrl6/DbayrIlNfh2cZuCTxJuqV7InT4WrmjV6P/la5Dj5+/GfKV2NBQ9Fh
FKiGH5Ox4eWNteDx5dL77Qj7xL07CcFXvqGZG8TyGjQ+3MbhEXj5kUyKnoFI
wDDqBOqoKJINerAhGwMIwnDW8021DHISixAKpzlCjBRQplBYAeHx+yU/A4tS
ya0UZXWdL+nV9D73vaEhxegU7Ot6ZcZTVLk4t8Pn9Tow7XBXorHXOfL9xoQ7
vHzEMNaEaabeIqID94ZIpDubDY/IgSrwJCr83c9BunbrQGd1Iz5naHbt7ebW
Bx+zFDHh4k3abojwi8/qRMlDd9HU2/OLCBg3daEWr189aY1xiCyLDFZJHkhH
JrAjHzLUpxqE95HrAaTxKTdGpPFJ5HonJor03J5BgR87u6g9MUO6dOjKGyRo
w8o1DO7F6ZPvXUgtmiA4UAlvQduyLbMm0DlFAFknlT3VBKJADiPvqTphkF6e
wME31xLtsaqviMKTeIORRhJoFY2/LYC4g8CIGrT44Z/Cvos/BTsrexZk+BTn
9hUKWT9elCsecmhXjs0d1uDmqU1+XtUICJpYwZkNttBiMr1X9kpBqPuiiR/w
ImN2IQ78ef3sDWc/kMgBjGdWEqJr7Shu5gkmX/TyvBLwtz2qz8X3l7NxYoDO
TyJxnHojvpA3zbW60HcwHAqEQEQPWSO9j96JGw6C259In4I5+JZZ3pTVdUjf
s/GqZCjMfnj6SuPt3CRxfnQ4okvz1muvAUQjdY38+MxB5IsgYgLOdddoxQvd
oLTuATX40Vz8vvQ22y3ybGr0ONzQEhUMTsYFXwDF5e0CKZPWz10IgilRWCWn
jqCBakBg0dfTLebF840+DsWvtItgYBVNItZFIm+ZymLLkZXKSh8MTVx68G4E
tkBe7JllQM8nal3gAfHNZsMb4YlFgxgntQ4BdqmOTskuQi1dVFAJJCQ1XuwP
ZkCEmyJFLXgHP3ZRldEqDdMbnB1F+wvhTGS+8ZDzUxu9aJr8i+Qe+4XSIjz1
Mc6gSiKLLasa1IzrnjYpFn/lxPJYzzqHKdDQdm6Yhf/jnv9jKDJe5eryLJo8
UIvzBvYGpWc4wqKZLS6KxTvhGOrVs8ODJ0EiYvADjP+wKaZbjZMgNRHtIPYF
r/E5p3l/J2DjTp3xosoEpE56Fg7HhGYTafNg2tW14LZsLDkLNlGkulkyUibH
bmfHJ9mpWkcpPBGz1ZDnkvZdpdO2tYwVR2x0hjUZAuJ4pTOKmEHpEFaIPTAg
zlHQjwFmnK3y9kIBrKva3Vq6tA6t2zLcpj6Le87Ze55XAtXr+KL4S4B3g3Sh
8ROKJsP5VpnYghiBQGtOUyR0m55BjmUjBH7RkH5Brjqy5CgA2aBllP9IZ5Z0
QJ9PLehFzGZETUiAUSAb7VVJFmeOmYKx5Bi4qIgaQriI4ymgoPSACjWq4BMB
4ANHC8KbsMdkjfKa7jn8eShK4JoAPT7H5ZdheWMqWwvaxET9ztCx8vt0Ua8k
Js483UuDsOPo0gU/CXqMJAzqMYL/waoQqOiyzCPhXJayHwipZiW8IwnhvN+L
KHmBqGRhy3M4M9h/nr2GQw6r+QphhEuko0/Q1roPfOuAOyRkPB9Qxt0SexdI
bnfBUlLuQEzInBEjUrRIQp7xVWudiSqeHWtkePvoTBE4iY0VYmXbIpAAwf7s
LAWtpmhx4+gyoiPjvUD+ywqhCapakDvETMCOHR3ktGSELexghKzmqcBHYC1z
1khxl9AJE3yYt2zQ06gCULE3IACSau26ZSMcbxBbPawqsCy6vFzZ0AT7Lvuq
lBbCMLY1rQYodkTJNTFasyzo3HH71AxGjgIrOadDwJhmRlBDO7Bi/V5EqR1j
Tr98tZXNwbDkpsyDDWa4OEz/PMezLHPXEJnSrAe3PJOchO6RTd4KRou65EX0
4dOu05xiCGSsLxLyCwz2uVlMBwfgXEDOdoLBPgveRZqHNUfIYpE3SE6IbN8r
1dgD2gyHb4OcTuOueIrYdNqs21Ps81ith65ey0j5TLKBEoPCiePnxnaAIOWi
9Xd4GS6+wMluY08yhrQ5pVLySWJkqjw0F+zJg+PY50xtQoQAbBmSXBXndSdB
FaQso5VGzZsMqBRvzZLzgOhRdedCrOluun/v6dyerKOcFkkkxJJoDfAX56cZ
Zu8J+5an5KKgBhi52GSdUwwk5fhDGYw0uuvYQ7BXz/+KQdV7s8RwxTTluB4w
8WKtcWsubYAYi/HWF3xCw5FkgiclqhiCHUwnFEQsXIdMWhSYmfNF30hgSv/t
eNi7uRpxR6FXEovXG0ibaBL3I+L9PDOGa5JwgxoukI+86uKd4AZfJiGfUavB
aDmHijqTNLLemfMlF4LxKflrnToLitQW8uSM/3+n0QTmU5A84UpqODgyDtp9
YuxwUIQ2RAbRkHfA2h4igXQP3YqZqD/JszM54NzlD9azRbNtCknU6UDmlrwP
nJAo10BehS4zGpxcE7XUXW/ocshzKzG2Dd6GfYfhFVts70G8LxQxM1GANkk0
KBvD7A9QpRAMK8pNzjPcHyjKXNQJ8MqcQ980i1Nk3X/+NGVaDu2RUQc4SiHe
7IDqka3Q2XhLqiUbsRfsqpxF2lZnYBZbUMH6a+FFrnCcNg7Jj5dad8FB4xMy
RYTGZuVGvsMziQYIPU+qJUWpA0Pcyi48esh4Tix39XcXJDb0uuf+xubW6dJ2
5Wa7UlEmtCr3RBtvk74q2wsXskEyhInXsd6V7qLeMrEn6xmuhNqh23pVLsou
91LLm+BoqVjM21dhYCYHubgvRCwzptgB5q5HPzo08bmdlvEGT9HcLbvMWegE
DfB33PLQRvL3yOjZDyzzGT2DNSZnM4s6Pf/3hzuxKxr9+JiAz2fNjD19PlLU
u1uF33gLkfPWi6ezjhtab9vOOUAdILI/QgWa+nVWmu9oT5t6T8Emwimci8QK
/t4nwyCAiRMInTNuQ/mekubQNnEZxBNIA91vD1KRlXdbd8X2KQWQrDyZKcQH
N7dmScoEKyH3+ZBLAhGgdtcR6vqWLKkHZKJK3BcYyBjVWBr6NJAH0PyMLT7T
rwebxrvpU6wS4MktwNShaQ5lV8Ym+wE0zzN/oh+Zhk2SUfLnzo2LYOnwMzeT
hH5uyvCcEINm7hNzzDinpzdCs819QA5xs2dS/WcMrm6JuFGuB4SS5S0Mk5on
ATeBSrnIratAxWAfbawJJfjWyYCdCjFhFkDylzh0ohQ2cMFBmnlTIFqWRygQ
lLGVerW33qI54twOSE3yJkpMPwZaurlKyvnpopL7U209famn9eidQMqVfvAe
sb+gvYaz9F6InSZ9gH5Y/xbhC+E+fX7MjsUJrArP9XNekJ/6G8ifjRPrgrtF
iSw4pr54j0Jm69hsU3TbpqIgZBTlQFKFYXNxAX6XHFLZSusOnHlBmCwFstlw
KbBGgTKHf8Y8dDAHKoIg6cjZQNTODvoboGzKr/uCMnS6QNz+MidxDfEU+a61
hafcjfhhKVMeNlqHZ7vPP85Qq3LZRTAAvt4UCfMH2s29AEL5vxWCyLeLo9N5
IEzVvz/9s4iW8qC7S0323j4O85Ad6SjTj4P+beqroqE4S3pQLMAMd241qQna
npCzqQ+6dIfDp8ydSY0QSkat+ReUHrE4hpwnbzlgPVYARJAtXSGHkoLeFai5
3cRYEUIRoy2PkquxBIgwFxN6yT5nVIgWtCL5vFVzrShSOJMCkzbw+ZFENRwn
jePHlnkd2XHsFp9ektkh1ZS9z911IgnkkN5FgvEsXxikrbzIMgxF8ZA9tVj2
ETJBXItDGiHsRAlU0BiGRMBa+fuFDpEVEHQXg63HvocnwrNEkgDMZssLWbAh
RJF5FOXn2tAAw8KFvQdhw0wW4FM6yD6pEREzzBRDujUBrDSCRLA/mmL2s9l9
n8uPHGMcmMnsZ2zOHkh8QvBR0NPvnTZsMAC0l+JZIGaluT+YwxAu0wKBaTtR
cpSFEA7pOA9DxzqbBFJvuSSV9rkXHP9FFGAQmuoTrXgNYeLW4fPZ8bFbCCwz
hQS9eI/uQEkcT8cAk8ZozQ8eAjLECY8np1m48a+Ks26K6k1NYtmccgrTooDS
RRk4DJUXhBdLHc12JefBkQn2RdCiI3kkEeFU/pY87Ch4LjyHJxIlYgIjwTXs
S/LJ3D28i4YANJuS6fP5mTedUZLTVhVCfLLz6VJukcmDd3zCdoKrklNNS2Yc
Th4iGUc8SlccBdpC8JyjjMtiscrVYv6kJ5pEJ8izaicES/qGTV5SGp+7P//l
Lvzzy91sTkU5kBzTkGCBES1p99NFh1F2XXSBTKxAV68xipcztakMygEY18L7
8D0aICz2v+mniuML9waTZubZ/uSAt4AT1qJ/k9Lmul1TqR85wsyNWLpzAW3Q
4vjnR/DFz4//8PMjGsHPj8eT3U23tm3dFEqZ3Wb7fzhw+em2Raix5i0tHQ7l
ruvsriZ7QE/4QmUBaRQGdrd1C/OGN+g/t+gjNKPZv3vgTkHRLvKNt3Jj7oeW
/Of7P/98MNPuG+gfbtoUb5kfAl6+4n1vBDIVdg1zRNSDLz/TeEV/SuXqTs3V
9bJb0CjGMiCGG8guwY2YcWI8VbWgsGKPSWw6wey6fDG8GpInr1CXJuamIhLM
GsIhAZ0cN29P/K+H7tef/4LRnX+4W3QXR3DQ5Z3NSbm5/Pyw3Ixhofi0GtEc
ZnRXvr/rmVEQKlJuNMhGPS7cgxcuZp88xgabmP08vu0wXa5Sak5PQ0V4ZQo2
oZWlj/egZbH9HcpynlCWuyne8ClyoJ//claCnIMf/OHuWV3fJeYAoj990tyd
5w2PbXAsmCqt9FrV3agDS+xcV44IQI8+NtZ3HFBiHMLtVzU5TtKzzSPEewe2
2C+t2epw0V2EABsHVa6kVu/iTtyly4XCZYUO+qb0DoVbHg1e8Ci4em1ET8ox
wReDZRdkoXsiRe5lzkjAvNV/4Q0KGEWMv7ZGtuREf0Zd/EeWY82Mbdxq8hvE
H+J4th2RYZaWFINs83f20qeRsIRuU5R8C7UJBa0L4zLmkbkk6qO0Xaig38pQ
8nWBFkYig9Yk6SNi+0tOFteV0xB8JTG1X7JDM8aBOulODiRp4DZ0jXCDJMP+
L/jJ8C9sacTPnwRhbsAm/tt02lxlCbPTP3FBO/5ehi817sJPxxnRrl/cl+57
okP2hxlC/8F9bolq8h18NQrewUdO9kntOIi++U3fp2/H9Nk1/p5qQVTWwTbk
+6/gs0cgpuCKPM4+XG9WJ/LNx+TA3idH5mb23g8Nd+KE/j6eHXHL9Be0izs1
+nACN648r/6wh2LzHtci/MPe3R0mwbv+OO1NsjsDJsHsI9GEpwWGkdXE3gMb
t9hQKfCZhDoS0ZfLphDMiNRgiPDIN2Ye/tgrPyRpergsiSulQjZxth1z3qWe
hc5la0jbkidBrj3G1DnkSc/1tuQ0n15zZKddnApZfF2UlYNUD6GGMipmWk6T
Dp17GqtCNGhedCin+lRObTB5Ri4zngrDGLAOt9UNUylMgY+tyPV2zq5O0jRX
6MRtfAg5r7PJ07sfOXdgrcZMfsYizOaXdblsQ4WdEpF6v5bPHSW5QIMcp5ds
gmuidGo+3zXDSxwYlOwbnMJXS80M88TDmGm7dCtWBad58bTcQTLrawxkFvQC
Rx8tI5qqiyE3XqRPbK9GSyzlWqneYm0qsEpch0FSOUwoQbSxlUy8qcfDAyTZ
qATi4CF1Vt04OwEnxDvNXgXmFTek207FmisEAhANdPA1OcELzNmmZeY4k40D
Ay251MDb0ODUagCOmSYfbjwggR3LLPHwMCyZCBOCaDQu2fXlkYlLi0MbBMdn
QWmEHDqxnSWXlrNL8gnHMygpIVy66OEh0JSCMdjOsuwZgRcovE8wwBg9eHw0
OTo6snI1y2cTTWHnD8g6s+q9gOa4/Jg8y4OXR4NRS2ZMP1pdHdyMz2AARhKm
RNw4dBeE8qP4rnPj3qWKXUJ+5QxiODqrCS5zdxmUc1GKbHPwlAzLZogGqgKr
Qt/8ShfNg2IpLirPxrip/4GnaYyw8nMCx0e7GR5AxS8M5oPEWXt6qeX1pKYE
jdQCWBgcYtBoSrFV6MRMLjRxwaFo3HDIyFhbUOTB0ND4KU5Fy/mErZdmEfTd
7zM8eh7Q1wowggPsvF3sU/TZ7A/Zz2NQZZGBTRlYPHbGZa8rjWH3jscwtmWA
RCZ2YF/FvPFnLrXhhS9bRMv1VzSNCIHRJdPU9v1mJpFZGjdFM9bKp3RUnXMw
hhZ6xk1zYCbGx0MNzZShkg8mw4Fvxdzc0uGqgOoHG+SiDjkrK9cXrDlqy+e3
Fp+MWsZd3Si4J2G8ImWHsGlnKJ28K6ki2F1uXDipKbfM9JYiG9+GWUO1Ss+C
Dq9LKO0z4FPmZJG6EAlvCLtXy4qKudoAboDs/MEQhXj3HLyO/kT5oUopMSGh
ylyXWQ1VRE4sknlB7qIzdS8ZEbACmauuzgly4NHIKe+KJ3ECNWMD4RSvwZXP
ANK6rMwBgSwrT6nFASnH/0bCR+UrXC0es2qyMmwd7a8PkidNOuazT//ow6Oc
C265ZLu87NZU3xq75vatgOiLItGyLhotEeYkCEp3scXLcBCMmV13PgGDDJqS
rUqfikIPlHNOc+KhqYyLf0OAVsTwMBr9IwlWcfK9ODx+bquMO1+vE+HIK+w4
Se6DBBLo2Z4r3zu0YiE9BvajIBHGZLuwBK6+4gN0gvxbHkrpspRosnYvCYTp
wFuD6TZpPwTC1MfsnkaRUyHYnNI4SJAMB8ZQxMhEPQSMCml9fVoLkOBJSKB5
0DBFUJrEOV2MlwpRQ2KD3D8+6GcJlwBSUnp90ImsH/Kt/XsHKRmU3J6aoa14
76EYwTjFT0RgBh4OLlkY675BzGXLqZN87msupVWuGFelHaSg/OFxiXCmjqjh
OalQ7M41qA/9DkA7JYrz+BeP5bg/ezD73DgvyMHpqtNhcJkG/SGCGU38VKww
o1yazojnmrs3+8LnSfXJaoPEQBTjlhbDKP89ToEXHq/jtpu5tCl+O3C3KL2A
/8gj7HzUOCXxEC1a/HO3sPghUXl+ZqSlYN9k5FKXLmWxjLGRwZ5plKXlMNR8
p0mHq77NgdjiXGNoGTmsi6LRo2WL4w4Dg7iGuyQiUt+sC+JhEYBsQiYtO5YY
xisUgJSdDTzClnD1JLErXbjoHyLnRfWf22IbR/I4ebOXcsVhAbQwU3a+BVUK
mAVz/WJVkgWCemNLeBDD9EwzNX648812tbLfSdDcR0aXRhkHKnOXZZN0vdUd
r26z2yfFpBKU+SYTXGrPWCLQGxZ3PEUZc0IhiqebZGMQ9TuUF0WuHqsTfFpt
1xhBJLWWSDdE/5wvPBaC+/RiAwvbEhq6UJ/etZtjOrA9jL3vzcZlxyQDk+D/
MdIflmdqrFlC2JN9GOSGcpZLCmqA5+1zY58GTjeNouip0EQ/q2DZUtIJUz90
TC54OJ/jTGzAXuBTi/pfQa4dfQD5bU9N6XYIJzrfvZPsA1mF9/yGwWd7WKZy
enwE/709+vLk6Ojk6LPZvXv/vjfhh3U/8VHZk2kDJA4tvPxEtMPw4P17xw/l
Sx2/690MExfgROps+K/xgSX8fXx0fDzxn7UVqP8XNWfZw8Go4LVnHhI3DiHD
d83v+Pjf7WsaiXCS/cXYzT8ENvQ9jkmZorKBzd5G6TR9UBO4dcFM7YIk20o8
vev5aAbpmbhm3LZ2F0fRUP2sZbVLJB1AL/DvE2JPQEeetOt8sRx6lX1duJUY
zz3wUDwVoxdjt9vNUOvxi/kS2Ez4ZuLFj6nWbl6e4/9dlqf32S+jXU/Yv/zv
+g5/gv9+HH3c6VN65qW4REZko6QlKfke+5NYjngtcsSHO/S3/EkAObFERpqO
ixxQV7rVIsKMUs87G2bgioXH5UVYpCq6yG9EdkpWcCW+l8FadRMn8zPp+iZs
EWivq0XsY3JpRSkV8oAtLqlle3BBoHbbUblMcWIgEP4c1CxjvTzMhOQQWV0Y
72Sc0CexJxhPyX+bTqeq+OtBQo8lFtT6qndOoxCg8AUc/3QDamv53r0ZOnr5
uYCjyJMFBS3RdMKHY86Cz5MDlYwMWE0EPw3f0cSd2V8M73AX6jd9zHzZH6p7
CvfMLIRzCUeLVantwT9brDfd9W6XLo/0brCde5I6uOIQm8vCAE99zsoohoYt
u6gUBQfhVgABlrekCU11rxE+5Mdpt2vM+v+rYtqm2bhcIhQlQtNElaAiasIF
ZfFqMOjFnJdEWw5ZGRYF1DAOic9Hw6zfRonVJStt40Vyh5/UnoMTiH13HNXE
97XlxD0adcrS/iJ32YkiK5nWs6WsPaz9GOuUt2ZRqGuUDpRDf5TO+Gd5mPHZ
55G6YHBLVDBUlNIuSiSrK9YedejyLIihNmeiehFPx9mMeSRmjRNb5cmaqy9N
dtCcrGI4c6WzFAWgujDbW1lIV4cfDT60r0aNero45SgpXRWCHfbaVFuw3huR
i11cvZ/YpF9OzZxQ7s9fc1oGd2B8rSxvOvXPRtW9Yt+3utjMqQkuUvGeS7ez
exS0lEtZchqns9jxdDkRD+vHZDVz5XLM1wxCyy/zcoWyEJloGnT9IeI/tHir
5c/EMoiiJkE0/dug6E5OyxexQH415nKmeJDYZrTcfSVGUKlu6Rd16qLB8zOO
aSg452dBh5oa4Ap6kvbSeb3cFdASRNBIjsWYuEFKCakpvVw8my+86UI3Tn2G
EZ+uX+P30tqr88oGhBH9yRIg4wKLqA6hbq0lcYLro4i7OHsnX3GfOi/MWxrF
RjobtkvXypeSsooEya48MZNSc3XP0+HoTfS+rH4c9J+oa2EgQaHtmTaOQmQk
WsSTNCeJabR2NNCJiYDE+m690nZsd04VsHO2p4aDmNnXqGbytNTHxjD0xaBJ
lAoA4i6W7dQH3AAZcKV6He30ZSSzTbkpMFY1Jffp6ZhquTQP2/ydEuDfhAUM
tilCBIaBsH8plwlUYDiZPqYO8Xyyof80CPijB9znWKK5ZMRwO/QKY85vIUwG
I3E7/k/ZB/d7Dwno5w/8HOvcEWQZu5nXNVCq6jbioK6IBfV99JVfSxAMkfm0
ETs1JUOQL1AIihQ1JK4qhJWuHrnIjR41dK5cMsHdwmj0+pA0OrbHbPwJwqnm
6W3rPgbWhiUvWGEkCvkqKFzIoMYBDjvxN9HRexOP3ct34UNhiSl7HzPj0CyO
JfeVpoR32wLiVLp6JcDBzvFJKvznrM1Co8JEQC7/I9Nh6oh8hrilyE8j92gr
zhKQJXq8Wd0eVK4e5jKVYOFmCJ6jIhgSdQJK+IzrLQemsJ+cnqODIo5wI0Sw
SVXSr9pSzMb9qznZUFpKbhy6v10OnTAkF3m8rhmFm+U0CTYROAxcmFhHU1eb
50UdWuQrHF0XCIc6Ip9WXqoyjPmrcRaEoNMZ08x786K7wqXcmCTmnJ+/ysaG
Qo3/Wc+ejlLiexWJU5eVHBV3MOiueOGBU9HqkNQ5GHTCEW/xp+r/19Lryazw
nPOhtbnoTRuaQFlF3L72EqZJwmrJGA4S5vaKYRTCG7kfTRioSZRo+v48cVpW
ooEYRYwRV5prcyJOUZmTHDw8FUExe3/LWq6cQei6ZGFQF7MSJftoi44Diq38
QThAc9qRoKPuIh0E4MCp7j7IyRiaByvwKsI/9N2jrDeocM3uN525lERy8mio
4aFYm5RgmbS+rKZPjE4ptNUqtyF17UEcHOlRWJbEKup25KZOidcDlSDRHz07
GWbMTZkYSSnAVon+xbAyk/YrSmriMn71h//m25c/fPc0yHakpEYLcEsSOlvp
K63cWeBa7XiBIvb6SnAseYr+hvfhvM5XklomlnPdFFRNEw4vXm5JHhzYTuuE
b3nDcUXP+mBtZ3KjHbLBYGYO++y8c1zleuIljQkrcrjH8H8KEjuYeOdecDz5
+rAi42ssk1YrhuAmZUc9VfCoZQILOoxA37b5KjxruosCvnCqjpR78NgaKvyA
tLs0RbaTRgv+QHMQxZMSOiSDRAuChkn2cGQMnouzCPrh69hFa3WN2riFMqxb
H8BCmIlbPd7y81k8WY6XiycbmFj47FiIaZR8Qd/qNKsrgxn9YRH7oaQfCTCX
LnprXV8GmdIWWulbFzvjxY4MWKaT5L751AMhdFElaRwuGnsVJPk//+f//PAR
/lH9U6xSrQOSutLODujOKSv49bIKdsPjN/Bym0gSzFKtO4sgP4JiplMltmHa
jlBwNs74SJYZB3rM2MkyKjLCwMnO4guTqmlV4wajvIqOIiu97JIZshCEhGn0
CmLgOAhMu1v+Kv4nTaik6d1wzNiIL4CgZgSpku4lrDsB/3rhaKgBBr6g+/Hh
zsuKn9I0I1KuBFivD4mReilB/m5d5CHXkPV3aWoLkRyuHSYcUVSS6DUBSbdW
Il+sXhN3v8KEzXPC/qO9sfVuI1FvaG9x5VzeUT3bJkWKUlUtNQ8bIYkV2RA3
rYE9UsAigTQtJsMkU7uPCa6wOwot0BMeGOVyW8+esgiAokxiSdtql0BQ4Ybh
MiBfO8+35zJAPL9Hs2Po+hxDxrgvOpY+9bzj6c7iGSxrHhlxHKyKjKVUnDfX
lMOBquJpn+dCS47M8aauze7DIjYtQoirbAL98MYI1s7ve0IsslqY6Qttiqty
LWXNeZ6a7U1XP6dEhawxyuxYX3eNOwA78DoN6lkC33RGByeXusZRW0aM+4pq
gvisCOycEE3DLJ0Ohp+Ue4CqM6wIljTPEbHG6QEkJfhKnvWJLASxpGNJqCmS
bEakOuaa3oaoFVBAhKLgbF4SGOu39VVBef573M4Us8qpxoOM/6xjAKGTP5xX
xo3KdEwOMXVfB9sRZR+KDagUoyHhNKg1weOc9srfandZuRJVnkkJIKwvwL40
TDPvhnUtGaAKg/RlB5TK55RYWIGTKg7NCPx/TtXRK+/TcOZ6HwZfvZN5ujnO
EafcLK9yRvG5+8yPXcAxajCxKJInDJDSZD11pavp9m2uwQ8rdbLoLdc7gC4Q
PxoLLJU9XCO/wTCgxluPQ+WV7+jx0RHITquVmhl9vSNrxJDSRx4IQiNuCl9l
eR5kw/MxOrXkKiesc768zCkafQnrWlQulpUyZNEDWJF+05S5LxFPDwhZ8TNe
1leVQi7L9bpY4ivo70HJhsgDrxRaroE6Ld6JKhLIaCZOiiCZpUaKYKQqW8il
UopUjc0XEokpratNPSBHYTe8NRRDpdUJXAwY10OB+3tTk0Os1wWK2jS1by/C
ZK75HDMVcfEWTsh5A0M3hjex9gWljXpRu1xO9sZyY0+4Gg8egNNq+SQoodyT
ZEIhZZcYiOqHN9f5Gm/egKbKsi3Yp4mhNU0BGdhQ6dZS5Wnlv+2bYxwvcZlf
xXjqknEbiQNPp4euU6JIXXUNYpoX7sAqUZJ8PuuyKtdUMmWVX08SRgBC6vNM
hlcM6xpIP5ygscRIaizB0hkZgzX4tJUSl0lzeuOVG1oqI/vJkZP4CMwzEggz
ZCohABPDnGlTZlhhLpDLkbBRHUkGM3EodLJz9du1RvzRtIE9M4AzHuhh8Dvk
WxfjoZ9IkFXPxP8GE4uTEmK+QZ7BoH2JnXL/qGEreSewBCqTQcVJDhyAk+cT
1mnjqQSMCYwMGohTKoOL7yJvIdA7jiTV1tm+J74KsukORfR0lDlADGzcOM+J
kfhBoNScUz64hN9ez5Nu++OMzPF2fOu8eVcsfTr71bW4k024fXAvuBaJDIXj
8LgG4oULY3YZ54LFlHFbq5fEcFxxSnTd5sFpcGYrSqRJMrlgNOjCw6CRK9qp
ARvi2U1IYPIRMsdHLhj6uSjrqFKfN/nmwpmHEZfBZqC2K8UiwG5mKV18pmVC
XQgaqfanPvEPIzU2cbR/yTVfXeJ3uvHDN6c8+0deGV8BcjDhci9QBCPrt+2m
SBjS2fb8hCqAFb5kAlcOTJ9HAz4N02ajdCHxZ1YTDNk6YQ6COhHiVaIOE3AD
tVr0GaAxA3MqePZXioX/NlNx9liUywWuxCkZ1ciLpeWC2isRWJNat5kSeEHf
uCI6UglAq0b5Unn/4tYH9BxKJsnYERMDlhsMLfYjVimT7uOJGCnJEoY1pFQj
Duxh/tQHNWLJD/0Nl+786aefTCX5KhxFKn4mEQyK4uvinYunj6qmbdVPyEfn
WcewciOk7qMqYk0cKs0l+zfJOjHl8PjH+09mr589mb5fr6b3jo6+PD6+9/k4
c7kydpdyHflSrpK/VAshHLlkT6NHdhyjLIOeqvYPe9umOkEn+wmZ+doT+Pik
ak8kMukkCF85nh3tPR49IpXhLahfj+8dHX+B8Rz3PpN4juNjjFd5dOgfGT2i
ABthRbs7JdwFe/w1MmcPQbWPyuVjDEF5dAi/4N8ehqIxLYy9feSVK0Zh3LY/
E+WhKF7flsP1Zo8wDuExxmg8OqRf/TcmGuDxdvPIpjVwLR5GTZoP6KFHh6mJ
PTo0K4h/2j15fCssvwMVO7ISo4tvcZGqAWXH3qlRktL81x3Be/dO7t+fPXiQ
OoI89KnBtf/+0/jlw9RZZJYge8svYSYot//0F5Ddx3B83O/6JajfnTlP+Cd+
jf+Hg69/hgeOj4C4EvjMyalwj7GW9nhHYo5Hh/KMf4lEw8cGyNS7WO7nb7hh
w/fsptuWuHNozEjeuoG71/vYvPDoMFgAXn29suG+BldW919ubHDg/saLm756
eHNHd7LXvnb9W1OoGpnuM0nxjM4L99iz7nTFcTruI4z8ba57KIU4sUmyno1a
eAi9IG60a3ExIgtnKoHBixJery6vHYW8VZXSnAZBdHrkqvJjRMNX0aA5RGE3
FP5KWrmOC1fFVMW2Ls6yGhJKBYiTjV3Y8VhnHfkNfVyyKzUuwIquhvMC7VdU
4YXQqatVrHHLkkq24peafdi1OnVWQXV9evecWvuevnnyiv3/DVuQMQEIpwCa
s+8CM4Iav6/xojo/Gq2styRmWuheUvEummtfMBFRQppLfMxa14IimmB+JL2l
azFG9myXYoWKLriDKwU0XCJmP99gWyV5bJOjJUaBjcW5y1PoFApJXQ17yc4c
T5mGtlRa8aKebGi/Ss0sblsyJY41ZeJAD89f+ZyKWFMZK6BGV8IvG18qcc8E
DoG498vmbGhOfyobKuT8ut52mhEBtFvQjcmPs/+n1yBMapgNJ0IguyzlhTD3
sVUpF17gDAla9Ni9nHICfnbvIQE5fcot1b9xUtAWGUHdnnN4OHp/ytYZVMmF
L6+1NNfsrCBnoNO3p6i6XxWho5vjB7QFHLcv0cHuPbfTpGL/P//H//mcct45
fTif15R53R1EplZdSnUVDVw2QRuWEkbSX7/4kdhyHXmmZTEljd+EKu03pnh9
TLksEJOSrPjngsIOZhV61e7F/RbWCUoo4wNFl9n1SGBRB0E03EOAFOJt4gRW
KkYqWYGz8n3vVZM3Ez5cIkITc1kKjsAS0105eJN1ldzLprLS3zMrr4U0T/mL
v3deXr9MH/yeG3h6+NQnZOp1P0Mpe3XT+sGi+k3/nWW72PSfxx9Y4u4Ev45e
mr5HC2DRJVIG2ws1FcI5ZVdxmEL4N8nU6y7m1NUzXx5ED/pswBHfwGGXZ16i
nsJN6b+rPx/8c1ii/ZzFo4/JYQlT2DGoLBoUkEG/igibg7FkHyyV7PUUNyGd
fuUXv9zoh9Oqnv4KlDCx5l5EwSjJg53i7c4bZ0IcMi+z2oTFX0s8V2eSvSiK
3YmDpavYWHlbUiJrTFj+3KlQpkJ6CgoFktQ11b1iA/9Zuiqyg4+bF53EEvDR
CadMqkMBMcgHxQL9hoE810Ep07SgoN4wX4bKQBx7Qk0d4SNg7Lr4Xuj06yfj
LC9RJjTT09w3hs0QYrMvwObbc+O8ImEwjgCTxFM+PdRnsy+CMlxS5DMMGyNK
rOM0PM6CN+RGcKjBUOk/ChuoJAxSITosEqqYTH4+FAuSC4Pjr9fB9rv0BsIx
kusZNs91gd3Blbmyo5UChYExkugxsmwmkLmS7Eat9IqLWMLsKFeoVpJCSf89
5Qru6BQb3cZNyNUegtHjwWuuFaIUYa26EGqo87XYPZqtBL7h1bFvkE+8WngP
ga/uzXAJM98uKvwq6Yek3JI4VLTml11cfzjNjvUwXh4SK1np+CD7WpiKfR0f
7iR07rfDkHaOCZi8iUVjqYuWFrAInVvPqdgDRefzugH5ACbQctxvvGIMG+HB
Dx5FsxB1NfrdM2LfWWhR5KrIVUAIVP3zqbJI9tFEWdulZFSC0+vTur2Xy4SY
nR+evsrmZvspxWNPlH4q1DohRw+Uty96mRUvbG54XxJOwMIOqO1kZTKACEq5
lDAW0mF21ApF4d1rOyQR91iYA4/uNqnAofqWcxHXrWcq/YOemj/X8fTYb+cN
Xmp5vkpACiaYTLIWrghQ8zS1qgIvk1q1BPCWgmT7PSPAgSs2qM+jmSP7Pm/e
mRfwM3xWVWMftpPM2ra7TKuM4YZSrRJ87exu2Yc7bovaj3EVatUMWBPRO5Kf
V7ApsDxhCWTj98bD7e4vI3Ld3JCvMTjNuQ8DhqioTo8wFQLvx8nnUqlG6GeW
UBJ5n4mFrG+bYkymT532jtDME72eUeu4wqY6hFvf7E3QjQoAwkqc76I3Woxk
HByrobCOtfi+KekIt075BBJMRiBjAx3wOddw/jzQBvfZKueYJcN7PGr3ICbT
FwOVgD0RjmivMjyf/k5C432ouI+nH7Rm0jV3EUKrVWKuoVTwg8S4kuHQtgTL
9vrZk5fff//sxdNnT+l0bclaPbhB8fqZYvQO4SHdYGW4baXvaUhlaJZhC7C3
+eZEmktKHn9ZNnXFaUdDrCw2sWVR349ylV9jAK23hmbmoEZTcGVSldxFl31b
STvFMpxFa1MWaMpXxjZFA3E2WhHsfGxfoSE24aYqB/HhjLSKLLLnFeOL3DB9
FhnRkuAFWz5bqL1dRUrdgnDmVT5HqWbHHksEndKg9Zbsk26fuEq828ItmqQ6
lyiiiyZG69G/lJqVOSzMIlAhNmyGR8WH9amQ7Mcn1qi9NA/Z8/C5de5Lh6VZ
+O2WJo7g82vjMZB6SFxomiYfCZAfFGJTLMcm92ygQs6LM0ISw5iMdyWOGKSk
ztFQWYbwE5lvyxXG2tSxVI7j5EBhr8nWYVJpSV1NUJsK5FVl6sCcffn6IM+x
1fC6i0Qi7WQ07o6UwqrNCqrvb95CR8NQEO6KimNyAnpmYvDJqeYceGRkVkCV
Xmm+qNnz0xenUpOBUtx651NVnNdd6bRpB7307dooD0PvGWquJneNugzyMQSQ
ZmJqVOwp1jftY9bWeeoNK77fgHGLggUL0tmob2FoASlmqsiMrQcRuxMKix/u
kJw4GsWMXsxkwGDbxWZMeD6RvVxoJznDNk1ZA6HV4DMqiZN01XAyA3WJCECe
ro27vDJm6ZIiXlmll4ouPrMENvXUjmOZvSkaLAfTZk9Q5XyFkf/ZPk7uwA2e
HC73Hnzx4CPoTEzlfUy5OJ8uihyBn4TyuJbu8cF0Ul83vbxa3vYmpSqL47Q0
8ob2R4bcz/jj/HpstXIxD9bx5laG2yIHpKRCUMuNj8/tK7syRmtRYePAW2hM
Mk2G+EorMrO0tId7uKdeKNbJLdHuZZ4fWNbGFCCzdXtwKH3mbXzqzvuZN4n0
e9ChjJBOmZaUfS4J170S5xJnL1ksG2RxqCYJmzOskjGm/jpSp1OTXGwvK5qm
bnzxkqlDxlKNY4bANsCtL2EYX7EKH0AZvGLIPD55UPdBebN5R0WHDMsjJBlg
m8G73+lXAewQWxEea6pt4ypplW1OKkZh7r46OAHzVbt1ipyaRYT6hjDYPMo1
Hh6QMLd4318mxXGfP3v7TUbl6XOqA6AoYk/+sfJSFaSSwdLxpqSL1tNGlOek
58rlYuBYbvrrl6/7Xz+899kDLRPMH3z28DMgRCTxclxMvaZawWjS4sxWvgA5
7AON9s3zp+0B9PHT998lR3D08SPFnK3z9+W6/FU8uCSlMjh8kgyYwHU0qogV
70gZIlwrjhzn5pcMkau++DpS045DtBKButqea8rUg2LpRwsz6ZNBX9BVWKk9
GQ/iYgqKCsEdQmxEfHevzrGgjiadKTDtSe1Ohoupbbk/PL9UyIzs3sIvEKia
h+8bcDrdXAEBS5cHXuJwwhs24oYEnR+iY9tOWY6F23ckvi9fvX3+8sXpd5ho
IpCHAqNvlE1qhsLHGEdMbfGp6koNMQaGRwFHap4zCBZK3CLPo3XFCCr+3rgS
fzyCuZjNFUzhzhoLAFe/u3+TXFjlMb7xtX+Ismr47FS3ENRYDLsbmH3tQ7cU
4XYDD0g+120tW/tkNFqfXzLwxgEV7jkA2eS2w1Ib9+q0vqjPNFNj09+tzH7C
vHYMxRuxyJWkpaLM+Gj7KYMl/oV9l2dBhqWZFui6yjlSgIxQzWUEkp8XGEFQ
U5jXX7UOvHOJEmQLbuBCBRFjaiUpJV9hxhKiKpoIi9kuSJhcdWq7YQNsXuUU
kBtYzoEje+jHabUUa+/HMNmkuzOYU0baW2N7PoOK5E05ng2CXQjgFAakSNSG
WqjECtHWK6Re8+vwTM1G92Zp8/+tWyadi68Rbph4Vr2p2eCxXLxm12M+XLzD
xQoGnho5obgiTjdsBXZEkkSA0qNl5BLdZVSNk7AvyMrs1cNYjKQ5XqLNQyun
pEJJ2hyD14O/pOQI+RpkNuq+y1cKI/SH9ux2A4xwNYGXr7U53Fz9O45Zb7j4
bAvCAXC1yEpwLXoBtsl1iyS5oN1+WQpjDfGSI59hNhreIhfhSaD5wu42mBS5
wYu8aANFM/L40UFLL4wtAuN6JKnt7QVXGFLJbsDBgxZATHGnKnZfzdBU++7s
ZaWGxHkdCpEqfHZIFTzbrqyTgQrRSagK0+lV3bbutPc1G1YDUBvT5XRx6q6Y
kSjgka1qCI4RDpfSiaCuiYOlP+LRfvv27StU+1aYc4LSycDdxtDTBcrNQA3O
FQGAlm4KUS4xZEgL5Q6ozSj1vCuKzTTHqkRtYNqlSHrOmpn3ZpkuOUUCKQy9
7ZwntOvt+wCfVqe1exhvVUP6yPzaKWERYxY7guRXjmsmg1hBJkmyZFvam2Vf
04tdqciUIewN+hpVUsJqbIOOb83G6L9HHgnyAhKtfNHgAWuKeV13rSvSNoz4
WHDANr3sY4jLrrXRya2UPlqWrRwlvZx4CMXY4zM0Cdoh2R9Gm1d30epFEBPp
eiJpqCXUtcbqx6SkkeNiKnRJNw7ZfC5HBCE/beZcSg3lvkJGPrUMNbmCINW5
CpU4j3BvNK8IavRXTckRilLUTA2j0W72Y0dRlkmSr4VmurPjENOmtTGQJV0o
lMv8Yqz4mIT62sfy906YpOpyONZEgXZgmL42nQWYrcv3ntt2C2K9BvclMoIr
DufPcm0sOHFCK7URS5r1HcdSlD63OnXj0qOxwkRW8SEQDPbFzI87SvIA34tD
AqW6iyUqM1ety0JoNmawG008xdcSpSEz0agBhUe4/uEMc76QIbr39bXPEdNd
mOxVOZV+NcyTo1zDzbfQwFQHfHmdAhHWVNzkrZBrkx9/LTHbFFMfwnjQA+gq
8A0CLTp2hFIJbbNlQArCeG7MfVU3oO6T6cCERxdsKB7kPuoMT89Xckgk43xu
YiMU6BwwrEaGpk5Gz1fIQEPyT5CkRKmGNewqHV0GahDWKSaTAx+ZXuXEkpPz
uDjtfR63rdooNg+La6dDcuAzIIVt9usoCkkWf5qGow/B9AdJMGdgwf68LBln
8m+JIIYXRwupW7M00lI8BMNBN/64RvaZQSZrTDCSRwVZothzpUx031c09u1J
Zm+1jKswZ2wUAShiGB9/Okwj0Y4I/bcuk52kd/SIGbVBRXZWGzJ9/8E9CThy
ZaP4+pMR11e5da5Lyg8R1rrtHxwshOoqMNC1kPoKUrYwyPFDgfigRH/DvaFp
cxrtO04EVZVknl+dpS13RQAMyYrt0ntGla7MoKIKMVO+t0Qd0DA6y/bF9oG3
ULE37h6NxwfBAhqx3NOS/f7E3ZdoY2fvimAlnFTug1kmGojGVowAejJ4zyi2
pC0oE1VC8yJGsPUl4tc7VC46ZSKvcSIqljVtQlaSOie8FibksDaTEPnNQ+Z0
4DYJMEvbBn/XrzefLIhqk7N1mntjGOWnsXx6pamY8y5CQuxB0hQHeelOVyuz
1dbBHObcQNNT4PK3lmFXbcnPTI/dj0T0KCcXOftaNlJh4Xm0OY+9BBfGPm0r
l/3FWc9cCRvgiWwx94FD43iTTV4hN6jaIIJ7RXQ066za5qMQMUlNb8WCfjKg
slPRDFVGTHYGfXHYFGa7wwb0DpMWkXcoHHR80Jy2bgDXUeCl6hXUMFccGNRY
4Iy4OKxBduFQE8xbyBdSc5YtkYP78AmnLv1rvpa8zVugVxK2wcI4fujKNIM4
5EjYFebyeo5PVO/6D2MGYNGJKA1ldF0iCUTJmWZAVQkatahdYWTkAA7WYe+/
MnTMJdiJU8sxYzLcbdIf6h7b+By+T+s7kBcskgwGrXN/3+i1MGlPGGsUYnXT
lWTKZRb9RLlv+q+wvNCPw7KjDUPU1EfTD/iSoCgRKNMhVyf78+up4wuJyC7X
DjeDz8r3/oOBlhmXF3g2Eh1k0UAp/iE1WvfsyT6JJ+m27JDpsTF9do2/72xT
cpPf3Ko8iLvgqi5mcCNWJ/JNKrrNdPR+9+jderz3w6cUFvT38eyI+6K/wp5u
Kl8UVSeKyhf99unli377veWL3Fu3KF8URAcOlS/qrcJm22DQkLkqHCg6EIea
uSKglLfD3rAYtAhf97szobr9EFY3W/xmIChz+ji7bVhLohUeexjymgpz/S09
TW06Mb3gDRZS05tDclo3ZVldzBOJfdT50vn4tWjqKbnrp5Kt+/MHQ61rVsEb
e8g+pQcTwhudDA0dlWjRyFboUOsUDvqUWfBediflqM0+MvxvQCfP3hBg7fsc
zXmF4e8kkErWWfpOhNgh5TMRPMlxCUEbPviDJJALHCA9AerQ+DJflcvxBAtK
6q/IalGJ5tUfU3avqwJz6Bp0vtTdMlD3VltF9Z6S6bOqtNTOWM7YlAtJ+gFs
ZEUp2IdUazQ4k3VK07iVtWYOlugQ9whZjZZeX9id6q9newmlaYmT4lRUaNoT
70Nc+yJIUFkmkhaWPuSHF9dXBWHcSGU/ljn59qnOK5o80Aq/QPN3U2JhMNhZ
yRgn1WGc7Ytxdak+J/3RKTLHiG4S+YquD60KKLImZYn06IMpolMk3/jdU06i
S/3cVTE/gdCUA2mK0/YS/3BLCAOqKceOJjAP/NQ0L79f+2XFpQdQ0RRAHyug
mL6fBXODR/a6q9WftGwEl2IijaydSKxgy2ksC4zym7hSGwLvbCMjiaa7gSHO
DoIKDQJVfPHyLSu4PWB7Mj2gBPZRxCytjq3tG0cM7GhbwfVDmPxA3cZxUP74
+HFvg+yVYzJmY6/+yrjK80qR/f2RydPLW05fsrrN9Gd0IrU7Tqbwu3x4kv3G
RJ+9Vlk2A7JPFOIafpk+wn/g8SRjtj+/mUf+RP8FP7Mp/8z8JzIo/uovQj6K
X6aYw0B+Hv8mF/+3KXs3po9PiFCejJKD0J+78v5d9wlPF1+b/gWEiKi3/XsH
OrL/Ebf1P0xX8Ze/Bf+zi3EN25X+8u708baymjf98PRcV7wBwXv7wfHqfWBG
2V8ZcxgPeh/sfHNofkj4dr2zf/8g+uCBdKQn4VN+4JTcxdOQ7IqJ3NCPnMu7
N3fS+7k7Gn1XnMNxg2OTPa07cq7V74v2JPIJLZfsgZNiRn1HAL6fY2lu937n
asGE9xie9FfhhPxJ5JwhpDznefJpJaIX7U/ZWusOfLk/PjgxkQO3CwuIJb1X
BkEQiGYykwExDtPgnUYsLMXtETyrxqAE28eXFH0lWDREjGDxQXLASTSK84kS
NB+eYtp4hgkpyNA79aKKsvF7MRunL1zZCsM/2IHopZl0VUR2SSNr9vkBXNm3
0hQ10NLXUrO00gKAZD1sgXuqGQrJM9XDYFmLSr9RGuC7bej3nFBdnRyP5JNX
PxBqdMEwVbYHM/9+3xftyH3AFtZQovdluLctqI7kJpCq5Lp+9xPr9wLx3lT0
Sm3bk1tzSVdzCt1h1bXhk3pwmMeNHTqITkKljvrQjC1RSkP+cSBNnIe/Sgha
aRHRShRk4DU23V4Kwds5aFV4JzkradIneM5OBShIWXMrVJF7OGzMYWgiS2jc
qRhhd02JCiCuDFLJVO9MvzWw6k6e+R2k3DOSYbFhNx9hXhIxsNmOh4Nhztzb
v/kl/w2+QOtPve3icSKrc88R25S31UtQnf/2KH6JVHUQZhYHv1nok3nbTOXR
1FvYo5+AV951b98NPkRk4ISNAzf8/KZrvp8bmWCX+NZ7uyf6zA9ufNG8rZJ7
ZnZl19b1Ri5zf3yToDTwtn6gO/r73lad73e+Hf/yKW/ftafh5rd/j7DlegiE
LiM0KfbIA2mvsFzs2CfIawUd7DBNoywQtCpbNzSkknz3PUEahWcO1XkX+NvG
XOLW4pPGSnyK7MTwNCd4oSglnGqIfHI1ZpSjHNA0YeAY0+8S0AprELIOIsFo
3FmVvxaustnYUx9viXk+lFzLaaO2gl/IzCXcW9LgEjpzyJctnHESRK+b/Ai+
wKQLlvKokaMvjjnh//P+AZDCJyS46zxVuOCdlfrGA+aA2x0FFsgXmDmLGatH
pwV+cCSSmFM5QLKRS5xi0FQkYkpgkry+vp2MARpKjiIkvx9bRdE0Ry5F1O4G
NjX2TRtblKB3i97YGbVIIL6m3qAAudzyaQgwyQqNU5FV3qG8D1qixJfTG5zk
XSPVqKc72N49f4z3VLM4682KeZtipfbozz2aK4qM84NJBow2qjnTfzIsNoMJ
8j7beWc8xhOJQ3FJqUTKlYNk9ccelQFGFGJvwlYc2HPS1CBW6+YVFESja00W
kMG4A1O7RbIXVHrw7Mllvx5GSaKACmSFzlTqLM23FDKSPkqoNOBJTTdt4qxd
qXBX7tcNVXotq3aLMd2EvkZ9a3/pCouUvmp6rzik2sj3QqJilvVWZOVTd9GF
retG8t3VXXTBjv0NJiI4uGDBak2yOezqVblEHCKSPbdAVEinWq6Yfydbk3BK
P3Q0ageUk0t0UkxWtHxo3ljjkGG3wm/UJnDbdQUWcqCeEw6h5YKdUkfpTNw4
aIa4baoS1WiNJ4KV0SGLDhUJdcYMSVVBl4c90IQ/VfQu4n5u69bBITjYdwBo
zk7/1nUjZVgTsuCt5IqSAbea2GqWEg7FSzFwvjhITzJ90MkpriyiEFGyclwN
W8ehjLRuJxeLLFy+HesDC+PN4opArN5f5VKWF63PLnTCYaf79AEPkPg2yfVG
ubYGZLxdyGMT56bx+AMxOfk5YoMkT0C9mYK6XaxCqaUdK0IDCYf4LeKjEVw2
I1bFljC7ici62959FBnp1ocHo9esGKrhClgssitMqAKuNOUsChZjIpBOMmQR
EpBqLF9PxZfoliotRJrQ/QUXvkKsnhVeLQHvVaxXswbzQHSzdRd6ZF1foofI
jYhCGfpZTvcQMJhdQFt7dqeNUOsuXD/8T0wsAiqE8f4Y4iJjWd1NdTJwD9dk
Si2I2GMBFQLU/0hWLp7PcKS5lPbDm66LKRw6lBZp19IONSdw+zLNUc5gkEGk
Wi4V1cDQ1n0L0yVnJBUWLZYHysB3CgqfYLBcS1B3S2Gmlqix7zd9MQJeLrmo
40yYkm7KmX15rSS6DQjLFoeNi0Kl7hraFRfbVpP8Ged1TWEHbqAuhA91saHY
6OkGSW75PjudaRJXYkHXv5fW4flC8rrdyC4Y5pcIFvPFZ1lpS0CEbHGA0eh5
n/TDy5f1CjVlVCxo4x2TkhgTDCMIdcUwPdOQUpxH2gQJ0AlwwTA5HD55xjoe
ch0Sw4MPnHrmgn2W5oTY3AU5pTWEflkhJ/Q20E8SOzi8sR+LVLZaGbF0YabS
iuJ0vfj3lR6TpwRR+Z2nxOX1YGt+z9eGUkyKszmyoV46EnYjBhJyONSlFO6A
X5WNcgb4eKVRJ7DmNZvMS0pwes6FZLp+RXvmkrckKCI8JcI0jWDfBhnpbuGL
ctCAMGqLUtHzASDBmjZ/ASRUZc6EzUU1PtbwWQcOIQnR6fwqy15pdnxs0+Tk
HQB1K0KcnE+5e0rys1iwlo/2J8m3P9z9Wjw19LKQGQ7m5/wcrJz2gNR51QNS
f3WgBzl7XUhoww4D3oc7ZBH4qInYQzFmWEq3scLUQpQm1GeoyzVGeXkt9Yka
l6fdZZ8Kmo5Sv72V/GJsd6Ajz5a0S4JRXdaEoooyXxDwfUwjG4u1wxHjocgx
zh1CZDN4EdWQdO7yYOWDvw6lBfqfSfUdE6lP7TEBK416isqCtXrMfdEyc+o5
y2lbuCUSdyQIbJh+AWuaERqrDFgGYfqJxHA1BdYX25vOjJhcOXEHsfOGI3VZ
rb7CXaUzxclmcrFypeoIo/sSqcDa8fTeI1HiFix2fOGS8XLLutgUJJwgTjY1
KiksKRosTYXpO/leY6GmVLRViP5swpgb9dD2bJlp0sHOelxXedEWxgrQajzQ
XfQybbymhIBawq/vgee41YGc+MmIfU2OGJQJN3DNmNJEmD/r3vZh/pqLsAiT
LbhUapL1qGw1HwDJ/VwLnvCJrlQVUaiWlAhKv5VUN+aY0iPESM5Z70oMwtbJ
4IFQqRkdiUheDJ7A3IaZFCcvWDhjqxhi80y47UAql98XayuN/d0CbdOJGriG
O6dswq5dmlkjye+7zDfNGm8+JiZgZ8lfJFvfLxNnsf5idvzggPM6OPsCheEg
8JQtm3F2Ec3omjiuO/HcgSsgge1OZxig6pNig6aIsisCFykYeF6/d1aEck0w
HJabKxeCyNDVdN4PikBUwmXwxqB3rbis4o4CBSR74+GXXCCYSFgS/WOyDFIN
zfUMlPe+WYbrtTtTqrM4xSIXJRbj4H2Qsy5LkjU+FWl+e3i5gDL6bmAPO+1/
54Coqe8UmJr4jt3L4d/pHbjlyzd9ftn/3OI6EnMz+I5Uq79lqo8Nfb1rTHcD
R/ltpsJq0uE7kHz/lvVJrMMNG0yn7IYN/kR0YYqioD/85Rmnq8BLpfGaIQHR
mvVh6q03ztC5M4NuK5jEWKpIulAoRvs02xO4ctgYuiV6O8FZekk1cTlC4qBv
m6YkTE1akLMkFNwCQ2RENtBFhVkCnIMmMHC2nK66Pwjv0ULn2JZQgz3W7Jnd
oIZ7S6+WVjRxKbgx1W4RGzj7hjVhPS43JCtmSU704Y57ymdDxF53JlMmC2bb
o9tK0rsg0ibOeSL1Dspqs+2Cuk0sz/gsO5zRt86y0xDq6YCa7IbCk4BlNXXD
WJCPkuConbYnNFEeEoxbk1rQN9VJIGEOc81i4LEW7vOpgJPJO7zEFzgLWPrj
OQ3KfzdUBR0a7n99EVCkaRwrN5Cx9INILhJTyWGD0ys+CPqR+9REOf8WfnPL
IOforTDG2X2ZDYY420dcKzdFOPfaHQxwtk9m0SBtfHP0XNYPb+4/4YabjG4e
aLG1wc072mxvGds80M37nSN3K3H7yGa7yYnA5ugYhHHNvw187wbTC2vuv3G7
qObopV1BzdEZmt4Q02ybdXlJ3E8Q4hvcol4h27CArYvqrbeduZ+ZfswY4YDD
lcud1VQHyIImqN3L7uxMZpx97Ocp4xT+u+k25b5FcBJj7vKWPZ9RWh8PTXow
+/z30dwpU/IpKdZT9LRz50Q2JY3+34km62gfWL3D9TNAgPvjG2VmQz/xJX2N
VzRVEjmVdYLfESqHyCXQ/qdAIDtpQEo1u+e/Ietedv/kExY9KbsHGxGEZO88
sz/futuf98JAb47ovpO9MEYlEEsC4etVjZmSihYPdjLNXr9oxbJYrPjMnAXm
qdg26uOAtpWKtVrVR9JxqWy0LgpXUg4baSUK5zblNGY9T1ZKypTiFwllYGzE
PcrU2ZEBflGsOLvS7ryHPFXEB1nYa72r/lHm3ZQJo1pCPlS7HVtIRQRkwROT
Hf7w5u0kFcoNxJDzbxZDWSGDMe8suyU2u9L5gUD62aSFzJYVoVvH4L5NGJk3
CC4zRkfJqSrxwL1unUPRdwMrQgHHcghBMwR6CzzsoqkrLvxKgrMrrFPb1e1F
tcehylTEZNuQfViADk2xsujCcFnONPbqlh5HWEfvFwyyNV0VugPYoS3nymPk
ZFeEtYqyQIkzmKY9DA9pKffoRb5hfdUp8QJdGY8TRt/E+XTlw/xTuEkehCnQ
ptjHkFroNacLHMrQyePrq57/BqrqTfRgyAbQpwi5nkHx2JDrVEeYN/MSrkwz
lCrU6WaEQonu6EQiKXypCrKg3yZvnS2RXYhfABO6TQY32EBqceqFr4qDtSax
ii6jgKUeH6L9awNZ5WpFssC4UN8w/2w5FKLgFGlqcsXgarXrxBvNhv7WxaKN
GBYoxz8sP4HNha4CWz1S0HX0wMi4WnXUS3SWGsrhWzMPW2lnFJx4xrqDzES+
wYl53Y7YoXkZTDyKYhIxrtSxEY8u41qU2CLw8u0C/RA+gcOID0OLdI2OgEB+
sn0P98EVQlfB5/ceHP9ygOak18/e0FOjfeM30Me+PHpw9IugaSn1iXbqFkv5
NNdMGoXyhmLhaPptcKpJVGWjdJBWeaT4gbttXFQbvZS+hhjvNaz7Zd6UBQbJ
YghRyKy4W1vSCTZLjlvfleRviy1r/ycKL5KmiKLCjRgRXsvHbZJ9qSGkMdsp
MYfl/3I/oyFTtxP1JGtDZOZNh1m5l9Jfw3txUbBIrhRR1qUyoJgpVbrsx4Gi
5S2RUxdDPEo1FvRV1VM8nvHMBpobqdU7vUrwk7KG/95lSo3tpqGbTcWqWITQ
04s2lRJNHq7Xd1k6mD5mBRxR2RGG5JE+mOpyr3dUV6stVshiB96IEaWfPzjC
9IOiexwfsZzEdmSkZ2ecz10AA46gAH/Vs25uRcGFU9qRhOyFKp0pcz+UE/0k
owxMI6+9GNIhKB6mHBdRriGV91kqGpk8mtcJKspoorpg2eOMgGxIjIRyjnZT
zhRdY/vt8ewTdLcTNrDHcRqk0jlWTLF6e6x47mWberNl6a88yyKChE+Q7ANT
ojZIUBXgYrFqC4YHyI54okVVttV2jWqqDOEGlcjzRzsJDndgHfiCCj3WUsGl
JjgpJlWKmCPVsZfzAqfvHixhgqr9/3D9ErO41eLxwlEbn7p492dJN9QtVs2t
GPX7+1aNVoze/xtW7VO9aG4xCTDzPKjoRDUBTR7ZfaKiQPayLz+///DAaz5W
2eGysKLtsI0mUf204pS4FYUbIDbwrS8sCKRxVV9rbXgTwTwfLvs0itQjRs+j
2QLhmUhK00jPvXK5B5SMQjznIEdtVkrMKEPhIsgNe5Ej7lmPHfsfV6WkOSZp
knCKjGihAlCg2bQMgdmZ9aE1YKsRAbeisBAcJU2Ac6kwuHPF8EW6ZzJEBDCM
0OO2kHIqp/B1i8hGdLkuWN7yNakRcI8K3+pMRXhcjxFbHe+25COmdCwbOI/q
JYVR0KqhwROmey7StNR/RhDFiI15mG6JU5wJQmpg9i76D67NJYNTR3AUopGF
4I5gYIFDFnbRLEYwxBhz8zxVYsHbwNZ508IICEVLuYNhJCx2FVI4Y6R2MTox
dDtBCeUcVQOhegF6ji/NKKy/YFLIEXXY++mnn7K3Xz/N9n/MWVfzibAu6xUw
/oO9G+sW2qCnptCyJXiHfAjUSMQUj5TeprGwtP1UDlZCExVZgy1gypUtg228
u5LNiKQzDXizR2EMB4ejYKn0uLqD5ISmxO+ii4yCwuQ2RdySUEvZuWAhrQyj
EqFRAQXAfxGlUY9TqPMEyagqlZFGvLyIl84rVsdXRVjRvmVg6YqtqVQMW6kU
w1pHtlZ8f7U5FX/YIuPdKYMDrL22z8qwzxcvkSB0+EP65ItH56T+j6QioCmE
xIUkfHL/MOeBWOy2dNNokUe+zZRznbkMh+pzDWO0B1PgMlkmaKWV3AYHGis4
LHrJ5E1gE4a3TUZR9AAdwCjbE2Eu0maqDVv/Rs60nUB17KiNGSSyCEobk2hC
8UAMOxiqP0e3sN/f8L1OzmPU79JHtdmigr3KeIR1gy32CsDOjEjojEiNIMhF
ZUApCie1QVlwfUn2gdv+jockGfBppdxQJZfqQjOVmqSqI3NclZUkR8X1KUWY
gHH8/IhG8rZcFz8/Fq5H7j6HiURjzGf3vvjCwDsfaBfB2yoQjnIXTcrgbF5A
UuCcuhOWXRLTuq+qaBRZLC08/vH+k9nrZ0+m79er6b2joy+Pj+99jql0l/lG
y7SN/OjuzY6P1I4kyFSvubYcsQJSDmI6ZV1im8mj4Bx7xRz6r9o/7IG8e4Lo
2xPC47Qn8PFJ1Z4AKcRjcmJfPjmeHe09lib8cj2GWXwxPXo4PTp+e3x0coT/
/fujQ/+9vrEqq3fq+tPuL7pu054cHuaLdTGTpZrBnA7bayDZa9cdNVCeTVHS
fNzW0+PDe4f3Z0ePDvWz6Ll8uS41I/fj7YaeCz6LnkeSr19hrBe9YD/USRza
WeCnjw7tGj0eBU5IZ0k4UTM4Gjttvfbse962wCaSOKj38CgoalWCIIYuK8tN
/sparBZL4IyDR4fRz484ujpQJn5+jNGycHFHgUFiYqCFFJ1EXNcN1ng9yHkw
b+p8CRIsYRM3TSF+GpNqdzCbgkatuzmMdsxhh8OybvhtW7dG6Zdk9TOxtIPx
2z47XtKf5xvh50noGw0NaqLuLxgFxqWE7MyV7us4zB+FXilVGRNNIlLos9HN
FlS2c3uxRohevShkOF2xjIq34A5TnOINSZZ6c3Z5tZG7h/L075sTjXUUz2kg
wD44SuFsqUi0Hfp3LlTuRSClfrjjvgm+wMA1n3hHqw4RbQ+2ztRNasMMiXSc
OfgxWEQftLcjbwbxWf9k3/EZNGnrs6F5fRaWuN7VEcoZPuPLJgrCkbwkZL5g
h5ToScjYOwRnAptKJ6oWZT3C6jvDYTgKewI0WxIW/RNVDXWjLYWOoH5KySda
jsSNy1ef/jnLt1z9NvfljOF8rpyKdxEpdoFV02eUoiG15YozIkiGapOqlNsU
zu/iZbU62y1Xv+xVjw5qM0MrvjwzSN3pe8BDiLuk+zmYXdRQxDiUdjjtOvuZ
r0ln4FAGf/r9KdCb4ez1Vl+/3UgFy9JqyAdVwdL0MwLqYlvzaQ8N7QmBp2Iz
eTZIr0PPcBZjWpFhCfl4xjlxetXubkEpedvJ8yw4ElJ7b51hwbPXVI6F2yRr
F7sVrlM4A/IAYh56WZ2huQAXvywZyMFmSgmrxORAbtguAL2PRAhSq2AiYoOE
yW+qAMaiR6MIHkIq+AJSUdY1NITobHYzbTOGWRSRlayhdYuFFryfKXA4APnT
tv8RcOywlp0ONIR43q4IlXu8B83mjz8Jl82vpEDZ2Q2IbDuS28Gxs9thsTN9
0g+sD8TOzHMJFLb7cUPcAcEO20rgr/utfRr4Ouygj7zOwkeg/U+CXfMracy1
a7EHuA4W52a0tX381lBr1/sNOGs79UGQ9S58aOpuhYpdDApVofsNk/EebjDJ
/kB8ZycKihV126PHuGmSViSLZAJPkPfYnpwby18/zZfP7iq6WQi187x8MIOT
YVBeNOpxfhCcVsACiKKLcE8M6Vb8y5cAIWvVLRmnwNu0gDvJEsQzA6e5zVdz
dkuGiozP8ETRN3qSjfEHDAo34QhuEnX64kuQ1eUGEWaYwcfN/e8j8iSFhCuK
FvCJdvKkS5aS8I97LlkKgtbme+vD8pPbaN5fyXBywlakaYSHDRPZiF/roq6S
VaPFUaCwIKoi2jU5etMnWlZKtO+gXV0UHsBpkHOCbaCSMSwW0XjTyS2P8t3E
gVEvJCdINBVS7lCWc+pCmJXlhlCMIVr3/138WyRw+TENyVw7ZS3xF2ahHHVr
lmRIzi24UnbKmjIbrGHDnZ5Mhds6oUgMxkWGw1DtMQ9yTBIgCrqKTsSxGo5y
dSGh/rux43hgFp6FdOzqJw+q8iIhg7g9Z2QGmAnrQztXfj1V7Rt5Hk/tJHsh
gbNaR5dRJFz7q3nX9jO7ipeH0APbzcxkbdIYXOptIck+NBa03iAUzBlimUSi
GcXkynLWAXnKlOgKk18R6twSPxomQX0LygzsqqLbTFy+OhmlpOs7TyIubxJs
RWGz0Li74przCwUtRiswGshl8A5dup0zL2glscG85nI7NeTDepIEZYB9AmVf
bzK0d0kiQ0rPHVG8u60aIjCTq2b3JJNh72zsMBdOrLEoXJMgtStWkkO8diWp
cdEYkjclmrMwswn5UOt+YpCdJK03zn9c3FiKesXdp8jWp4T9xe3tJkR3slcM
Y8AgoEn2uliVkk6GCUNgxfy+rkpQOClijK85OskpXxgxE/iCveYw4EaSc+Ny
AVHxqU04BZqDZZEYHTHqTrWcVuUqb3AoGVFTidWonl+WghxiMoFbuqkpGiJI
0onpmJbMP5egfNQKHEAbeEkYCWMpnRPWIMfN8QeqF/xDd5LEm6XPv0VHks4s
4lO958M2gQdGJ6j5riRzFiZ7rhsgNIyj0Kc4MaUzhoqFlpEcDK244iJMke2Q
xI+y27LXcgOLiXdFJ4Rg1ToOcLFA1gApQaRBByRe/mzQy+/LOl2Vam2+DkUX
PB+j0Yv6ihA9ktLPho0KBwuTUOAuobTDpcm8BGUA/SAInXHOvZ0DpKyvqbKg
F/mSSZN3d8H5Oa9BdQb5sbsQRIE4ThmPxCgiQoS4s8pGKFE3VmjFEUqaA7de
lJtcE0RxIhGQAelhXH6cR42CONt4yeqG8p3bABhQk29KF1ykS54zsAshZNgQ
rMhaGmWyqlSNLhYfK2FldJ6+0SAjlYxpcWButDBDmGliDbBzS+sn9dsmm2+q
aZm0DByDg2Rnde25bdkRqp/qA3OSvW6rvNSHAwZQM3Gk7dhyVytCDniUAMqj
xmpHhyR3aQo9pxmcULdymUoYGOGCv9T9dpYvxBeD5dY4HpQfV8nEhAGBuoP5
M6b8HCNP6QPW69znlp1ObBHgAgF0HA42mOg/DMFrNSOeKRYXuEZUEjRM7f7s
+Hh2PAujxEXpl0Dx3IXIJUqHws3TLVyV74rVtYeXRhFFN1/tOCGVj218Lvsk
EU3c44YsnU6XkzSf3tftAvsyMpqoNjclztP2LDB0p6lYDFw6FpypBabVWhaP
syPWzgmjl2q+LVHmrxkpg6jgX1ACad1tI+JYkivwmgpgubJ9wNBW10GYlbXm
69phrPKiE6yvRCCVVdpWgr9rpjaFByaRWgc+s2+bemkIbnUAdLdqtaoA7pve
7FaSBzKolmcpVyVyzZKAfg5CAob3lQvSVjBVT+29r3fuDIsugn40ZZXFQ+go
t9Qq2p3aOUPAM/7aJpqi846BdEmkdS/P4nBaPTKfbTDDY+VSHacGtiNj6ZgC
dlyCpmsO9yJLoncvqyEL3UU1kwT3bOBk+hE3KW8HN5ixsTpgJsLUP//OLVpM
YlOc582SLhrsuClLYQdqUgeLdUqX0nOVOXdULL/KJMG0URwJ8E+uClN5sB1O
uPgVa3KpYxLk9KNUF+5wieUlX3UXsRe6NZhab6VBcCGeE7eP9A6hsGaiSSpP
OfFLINfCahyFUB7CAEmSVzt0PDLc7bpuOyK2PvDTWfyasjhDi+p2vQa16tdC
SIYxPPn+8Cy4mAXCWjhV/4qxQkt3ZcnHzZhBEjzYBOaCErdknRQJKV8j28fl
c4IMxUNgrPeyRh1C4RL6TlZt13PGWTr8eGT0bUkzn/bwFRkDzdQIQuKGPhcc
lcQzIFahXorCqJ+rS6slG7uqc5ciIbHJHMJujmpgLpF9ZMFBMcKlHB+9KVRf
IDqCy4ISqmHaNRoAPs+rtlLcOip83taRq8HJzwTO36N/mk4zqSevcSwktDRw
/Fm6oennhKxqXVwranyzEefIjISmGygvOxuEfDA5ypl8SGAfsXQb2YcxD5Qt
03mjndjYq00q4izX5TiLv8tTcp5JmObLc0DHxdkZp+RFGgHCUwHPCda9czFf
nszFgWQkwMVmIZIAy8UWDnWkxuV0xghhiIueyj6v0R9nfBetGdAX+lGbkluC
vugEreyRNXpvku1JJeQ9Ui1wOrzyCM17W7MAAk3Jup2hkaWXCq7sZ/D32h4m
9PZSvgtB6W2crDPXGJQXaKR4TKbU4VQ63NN0IQhAZgnfkweBcZloboqxEGBZ
bFMjMY3co0GfxXtehU/t1y0JJUfseZ9m2WDTpk1QGOYkFUoABLZOMV0cfpBp
+AFuCgFp7d4y2WXTyG5MvN+URnNqO90sbQNkxqhFxOnmyjnK9jFIGFVEOAuC
zf0SyxQdHmZv83eFxJHkleSglmQEFv438bznFWhC2XdlV/TYW3ZeUkmNagc5
9iTYEmYhl2TUIVNOqiWqw8VXKbipvklVG4gksUZTS257SsfLJIZcR+jjm04f
k6D6up4DCa/UPWtscJq736QQ5hpErGijm6xsF1syCMc6OXU2ck54azjwg5/Y
6B4sXePzXHtFY+QVVgzMr8sll+tJGdACA89cJfdiOcL8/g3estU17PwPYUok
0Q77ifQDXCIeQ7b9LkfeUq6az0wXC6kU9J9rrYMJ06lsUTQorWeLsoEVQrK1
KCLEKNXuwkGdVyj8aGanwMygcgyXRA9yOzEV3EIbgkJUYwtIb2Uj6M5Ac40y
dbriTiMu7hTqwrQWnNzHpGrIsnGcwYeRkxI8teeNDM5ycLbKz6nCKyiU/BlZ
nd0scprzuwojOPgIU2wI1lvx0V+zdN9YvMTliR00n+RkQqRerdbbS7fjAuQZ
L99f8pyBUTm6PiVB1GCvOmICWVPVPnGB+FvSY1Q92wZ1ZyRQZ8HZIN7aQC8E
oBCOl+ZITXRiY8HJ+bJ4Muq9AB2zpwYpktgpwBVb2OuaLW5m0hHdaR0Yshp6
+Qr5A/FA2CgJMWdeJI72wPIkscXZPks7BJ0XL5xImhxqrVPVxg94KyuJQmoX
RQXqRJ1RzghbjITHyTtYDR9VjRR3OR2EblcgZ/JSJOxjM7Qtd8WJuMZQ7KWa
FEKOY+uPC08N2hqljG1ttk9BXmg/DhcseOqAGqVwYiBbW+SJcZUGTu1AZf6c
GUfCsJxPD3MBIGchCqKbHdjr1wUqQRuRYqJ0cxxi0VFUH+c7Y0/dyyok1ijc
T1hzyz0aFNizFiIOPITVaHCzDFxIstG0ul+m7AZNb8R+5xZR5Da9NJU9JHsJ
cacLllied+Kndg/CuuBFmYiRgA5nB/tIrhRTL4U9dJ5y+ba4UqPvGStPcdmp
pPGYfZ0Mnfp/23vX7TaOa130P56iNz1GSHABpChLtkU71qIpyWa2bhHpyDmJ
xxkNoEF2BHZjoQFRjKz9LOdZzpOdmteaVV0NgrKcyzjh3mNFJrur6zprXr75
zboqBj3hD+O4aXPpvoo73iknbN3W7CSaFpAozlcCuaiUejw75kJwcolN80Xk
pWQmwtiL6jmgyQdJm7vHvmn56xUT2nlGLKex7Pl00XpBRFyx2YGleTw7jvUo
aiXRXs5KqSpcTYHaFnq964VneWrPKV8+DGbMdrwghjAex9r7LIgJvKj+f/Xr
9KQkm3u9GLLCTk9z+BiMaojOoHNEKXtozuCdC/eLHr/BX/NeCFQt2XL1cpTx
n3pZomHWM/ttWXuLkg0BciAEU5Uou9IjY5Bktbc5OQRIVOlIS4aln8SSh7Zh
E6HiCJLs/Wfmz0fVxP6ROccrOhAQbIIQbSuqI+wI1paEmZ8jkbYEWGzeONUj
rBcGQqYZIgK7MsmTkUIfJpMor/uKPMpIFnT34ODBhw9OblbnKwZyLCXRB/q0
4uiggRNIzg7LUOTEkJpWtalMCQUu/X8AIxEtxAT3nE1mWVVj+qc7sJDpg+FI
PydlE00K+nHn/DaokDJOqI9RX4rToDFPUXN8AI25urxYaKkjnhecxKflCDn5
iFHp/t37bpKoE1pDCb0k4FUzC2LwCmR82DIxnKVP5wHTCmEPz+fuX3CcJzWm
zo6uU0MuKUWc4ETSA6w3Q36v4djuVQub8OnKCAZzw3lw8OALNxxkk3hTZPpm
yEXgvQc52qPVJF/weHwYKzYZSQzbo9HrtWss6YxtPIqBDZWaQXiRYGvvbNpM
AIyz7yhKrs97lnBlTWdfpSZAZyd4MfTyCv5oM5ZQYVhez0l3iiIBMFZ/vDgQ
bn3/OQTv+fL0WlnaAYfSAwzzSoSvDKMZXxSXDO0RBalzlXhuaOd2T4DbwPQt
pPtr4Xe4rlznZ3oe5p76W9ZK4gie2M3+on/4uReC8vUP+nsB1g+/zfahg7Ny
dIhbZEZCwZeb24ek7ag9cBIBUCHugP+udnYHn2sKBr5xokaQNXBon6kX/egJ
bSp4Km7H/FT5+PIQHwZbBK6yoS/+0O7h9Xw2PkxEx3ph0+ZhUTKGgeo+VJ3n
YfSq/MM+Lk8nv7KDn+GsDfpaP9Eozh0+6vSq8nJ1OQxfab/xSzCO5FuaGbQq
q+Xnd9d9VQd843fD+et4b3fNd83bqu91T7juhM4J32TpP2rRN1ruTRb6Nkv8
6xb3dsv66xZ006W83TRiY3prWF6H1N+91Lp2Msv/WirQ/Ryx0yfb0HJ1WZpF
v/WqszFWC/eQvvlw41eVq5Q0F57WTcHmqBvoPdd5x1F9QLzbZom7ja9ADowC
DBRjfFHQHBTfrmufEmJeozXAmHUCKwyDLGuEE1EqxpJtB0pm2B3l5+6SoTp3
EuZ1Rs7OlOw+NWsYCdj3GTGI+8OqnhxuaYEPTNrWsk5gQY7JS5WdktpwwvcJ
c7X0cI6fkf5zyizq5d/5j2eshKZs8CYosw0Gn9bSBVeqD2EYKxK70BCLUYtd
TTk++SmEQ6iaayHHfNMr9BiX3qgAe/AfVIQjVEvJVIgrX0EgR3LJWr2Xb1nl
myHnmiicrEDFTnE2NwAO8bZkJgGxOAbMq/y2ZEcbWEC8paC4LaSuOXtpp5wa
r0Q8b5Ed2bewxvlqATtj0B6OYgJz8kcV2ZadQd7YW4mEAZqIJl58jYfIFwDx
zqlZ3tOfkac/8ryAqizncCSxm4l65ND603gOeX3AXRGvI+JlwTg2bVFvwRaa
qpbvS9orSJr5wvUzhNJB+nBVQBWPksSS+G43ddZBbADF8yj/UnC4rMqbyAvG
HbiLbD/VBoSA5nFO1YVLQALPF2WVYKnklsu2Zy+ZA4p4kc9oi7z/LLATYFtg
uZFEAVWUze8/k0cxRZhxPGZ+OJaLrnl8g4r+eKGeKMrK7myebH5BwyMSlWpM
IdmwcnFUch7mUR6K/C6MCZiT1daJ8zJk+tZ+x8BDDllrOfgbKuvuJrgJiRbe
jtotuirWWFk8J2xZmbpkXtf7X14hlNphTWDuyG+drgCmUMvGuUJS1eDu5hI5
rQcTKeuBihtkq8dK96KjVljUQpCjnmhj0/T0qNl3yZ7pyDZPSvfdMO7LVhcN
EPEv5SQx55vxIQSvGE6EMGt943p18WshN0Jssqb4EYJnog3WzZHQbrmTJyG2
iG/aeOv4EhKPbLQV1/MmrGv1lptzLX9C0jdw++1qd1CCRyFeypBLwf81ekD7
0+JTSLyyGadC3JN1vAot78oNBeyCJ1kfMkeF5F323sv99uzVDIm0J6wFcFs1
7c8pAjYlgHW0gZdK5w9/wMeVQj9rw/qv/UQrXHmNTTDqfVCxL340HKY0nRhe
8AYw+I/jP/upa0HWEuso48X98fdiUVOBhiHjsr6419V6GkG2xsO20Reo0Cjh
wBI7I1rc1COtp8IdYJ9oXcH6Y+9i+0a4ovYnXF37Trsgo/yEhRn9SzID7bZ2
Ar8G59kOaydaysr4gDLvnEGbd5qP5SnQk/vRg16S+uwTfAe6XU4PfRuRxyFk
m3nvnwMc0jkFHz8ku+VsfjfEZk2nsqhTbxdTP4sAP4WL771oj/Dn1pfiJvij
D/3kl3P55bCqh393SmRizr3/BsIPfcD2LObj5lBza/9TGXcjLeOXcMMEnfxP
Zdz/VMb9xUzGv09lXOnzu2RVpo0kgI76pi+0OGji9rN2+9mN7fdCd7kRbB9H
GuDf5s0pb9/u5f/Q220mUHWB/0Nvh739D72dl5SJk/Sb8Bb5bxmUd+abbuu/
SceL3XxDQCWW7/TNUCXnsVf5vLmoSTHjJ4tqdcnYm/DhegSYNtKcb7KKw00C
RiQJjyH0TC2JSLLgH9tdDQSNmQg9CNFkKdrVPwvVhq5vEa+L4G4cY0JKlhfk
z93q8is/wwxP71i23FjsX5bYzyX5bWHuJ8WUmR4w2PPFgwcHgEGiyM/n9z63
/2H+cv/uA4EqyV/vYpDoZJmpEG24zbvy5k8vj85++PAh29mCigsvYdKfMkwv
2/kJ/ruf/clZh3A/Qk2DPn/uyzv3Hvhv373v/wNKL9j/OAh69eV9qBsoWbIB
887NU8CnpGSKGeT+h2H+PDAY/HeHSk295YmvTWtffQmt7SkG8cbJsd3HwVmX
dy+I3vHqv+9xpfm3OnUHX4NqAMW/sHJTVzEJPES2rS14j44vxKK/Bg2Dpoo+
CWrXkKBc73Hz87Pw+6/xFzo+PhtbUMcMpvQwO6aKy7gMj7DmOzSEn/zQ+g7b
o/F3pmu+Atv1MDsyH6AjAefqRBrMnikPe/LLXF9jmI8vw08DzGj9xw+A0QwL
FSHs1jMaHlHe3THn3WGvuj4OryuQKepBue777kQeJocufTrhRtMzjhtI9/IQ
wL7Bx5t36z9+3378VNrJHisXfPdXE/sJfv8p95NqitF3Js36Jb3rl9TvG/wY
BeePFuOLEqgzYKw7z589Ourz993/qRfnucICsNWTx2dPfN3i5GbpZ6/d78As
+n5Rr+bYGkIsx5zG8vr77HUxOnS3EJdogbEtF/n4TbHYg8Huue/uX53v807e
51vqNSCAm+Vh9s1l7lTNWirJ/Le8IxVSjlZLp/O4D7yqR4WbwNfwtC1Qg1cg
N7K4wr/+97hsxjXUh/kWe0xw2rkfub1+FDFK5XosKLjRS3CIlyDIpAF9mmPu
hPsVSccAc//CX6hs4r2DnzMB3jBlJoa93wDzFua8bEPC0PaA/hfSB+Hfrx7/
8ceTV48fwb9Pfzh6+lT/QU3wY4T59f/yrx+/ePbs8fNH1ALkJAa/oka2nx39
eZuk/PaLl2cnL54fPd1OIOsXhYbjfZmWnH3GAa3cd8cvs4N72Q6MHdDvffrn
Vwdf3utjXgd9DXlC8D+pDeLPwLx0hK9jUe95uXT3lCnPBInYMoXH9fx6gaUR
d8b97O6du/cz3NJni5Wtce8WB6kgPSZdup3j3tLEAKhazVR62CxG+52qVwjP
afaqmJSglI1WmmADmHbgpiH2VPgNZEssrjOEWAwI2VRzuEa406gCihAhUa4X
c0DMV4tmRZVWaJ6cgvs3ij7rPLmN6EyFRtIyLd8f4UReAVDF/fd3p4/cMaNn
1Q/sOgZgK0v2N5Yp8PO33WRPi/N8lr0EmEnjA6WvsNwcJZ/j4494j/Dfd6RW
0xKaKQovBbjXWFK1788BIO/tAYp1I88zBdvoJ/cTfejq6mpvMR0P3eI4MYif
gk/su9/B0/2vteYzNFAum2I21akgTMMMh0rkPM3eFmoagvaBnXVveHDg/j+L
61iegCxF4rWZvrS31SHKXYcOI73ay+j9XXhsN3vy+Ojsx1ePT/G/9uEvjDey
4IbOvuCUygsRZUNIbtwCwJeNSFZFK+357kmbwj/zUT2Ql9XVTUVopv7Dt+9Q
MmDwcd2z2dUKKcHTzSl60h+PPYOP52N/YXQTXhNtgI6I0sely1Ah7hxCCH44
iaF6xOJHDc+/zg6LGCUjnUNq2zVTLulkt+2FxfvQjcsNeaqHrqODutbdbsX2
paBid1ip6Q8iPcH9iND7IjUkHwP6hJvnT6+eSDfa5OhdYCV3D7n37GxJG0ny
J4+r4qQxkqPczbUzegtV/XbTid6yX7U/0AbfYGNsZL5L34Nr4+pzvC7OXu0f
PHjwYB8LLqLTCP7z4ODgi35bOJ88evz87OTsRMUz/IlBuWSfu65DTTW4vQPw
Jdb/bliii9sr5e6n2uPdc/cdcNZpA5pizeyZ03qFbEslpJZRiWm6r2UKhJOQ
s93zbDvRh22uC0f5uCDW5PXtVvggeNYIC+1iOq75DxpmXmXb6Q7c2O8Oj+eQ
vZcf2XNw8FKROKhUvqpw6xOEvXW7BDSb2x392ZbXAkBoYjwQoxoCJ4pgsmkE
AKRYu0Zfd5/iiK4/qKT9poPPGwsfcpeRGMXNxt+FLdWDtJGJ6Spnnk3J5eay
iIX6eidEzsjuCkJvlultKLkMWlBb9aiPn4IfdcTYfEcRcE3IJmYV3aM42FRf
OQLTsVjrN2ZnX1+J6NSSinpxYGqD0HJB8c0mKHXS+J1JTRBqnlshzU4YszFJ
gthuhPlW10o+RywW5IqypXzXzcSnW7NjohVwJwvm8trZT++0mB5+TSZC6tBy
YjO6XnkoubxIUowYgeg3QIVM3vd3bDUzOl3B/7r7NXciMfDSjXjqdlJJwChh
Afi0ZzZcEf9BSztQZ1HqExFxoNiMK8c4A7rSasaXaJ6PiHVAJ24GRd7hRaD7
w0K0tTNpnQFMQlC5asx54VyMlJzTI5aawqoeApdDFOz2E9h5+X79Kc9a8PXg
mOiBo1RjyJnxBw2Jb1HwV3XF1ekj8ruTR+AlcP9DRxByf6vzxlyCSlKmeR7C
uu3eWWutJO9DrK3+iYXSc0vkMcJGiX6OvhbKJNp5MrMySvu8cBSF7HzBrIVn
UPnskgqAEAZjVA+cN79+wGeGuxiX19aGEsbr+FSdJYQGZugUcHTIfmyzKrm/
AzP5u3FRQJu6uTArCc8cz44MMzUJKnlhNodMHP8JpmGNHCKyJLrQR06Rvion
Tr+vaBR+d58zZ5gns/eVaUNNgiswTK0im1j4tiYvOkNLb7eJIEOFD3V7iKZY
zEMyS4z6v0DuPubhKhv9E/KD4a73YpeyjFq5LnRopKehDIYd1jJA7fNeShNP
kNn8yIKjej/pN8PxqF5sAxMI/rmyMwLZMqtGN+p2co62aVc2uHnkdF8xKy9Q
cmp3k8W2qBfoav7D6Yvn7F2+e/9Bnxh28FYKZiytkI0KbUqIW45rp9e4Df0d
unCljRfkgH0lLK9MOn783YtX7NuGiDBm7THp/KRYOtnTWLMd0pYkuNCxDFem
LN4MGBdRAdaR6NZRpzzin4mqKuYz2ZPX5H+FFHcG/vUVFfAmFh23x8GJjVEL
GJMXr2vdBm7CDzGK8QcnaE9xdWSmnEDnOYIF6qNfoe06wCAoO6Oe4EmVZ2RK
D6MFWbsSa9T9Te00ImhiJnBkUfJHKtH835pQl5CHOwXeY7IPsGVKRsMNnEcl
nXH4D+4frHXbwAOH9P5jGaY76d6FIyWxYF0TnX93OfuVfQevS0fX79zU9Tu0
ddDrdLB3YLoNLYsbJ9FtkD2/st+4x1Mdf3D33n11cUmoht7Bjp6ePGrWjQve
P9xgNdjSkC/dYo+ndiHMyLApJ81vuRUHZh6k3zAda9f5HzAfPSsyHtx/IHF/
yZRfFk4dfCT0K9mOrGN/7ZVvKICiO98L4U6RcmQuRLx9VKSQ8mqKYFwWIP7K
5tJeFFAuDd0Za02cnvdHnv355eNHj5/gNU3dZRgRAS65p/A7TZXib82K6tw9
sHWwt3eZv+Ol/NA5MGpDHfcKC8FNhMBJM6vSh0gGYxMG8ad9SWzbzp6cMuNW
w4W29D1hSSO7Bv/UYdFI9yL4oO0lMYd0niAzHWGSuLL9pKYj3kDr50Of3nhC
QrbOFRfew2pMyQ2l2kVA7C39Br7riExfUu+XNfGzvSmuG1AhFgVm4tNBhxf5
x3VhMcQ/ua7AG82enQ+DYDYTomk5PTkTsE2TeXScNM3/izl0N21k1Ddp4hud
IpVgSK0qlRLZGdReRwvVvdWmYcgvRLqdCTYA/b5Zsa63qkqi5Luzd+eAidxT
myi0t+CzpgcGt6rzB79rh47TfeR+xvWCmDq7yKUuzyUikFB3trpdyPLPSyGL
wT0J48efrBvgzLddmS/AvgXjKu5H59Y4EZY4PEcwnVGI/KbV4Mobm6wHlyq4
eRbOElzUeXZ1Uc+Y4txY58yks2xMA1JDwVeG6FgXd+FSue7bd6nUyF3QC/m2
edf3gkqJlMIZbMpVcE0ojolU13Yw+ifN3kwP5tcMxbPzrqoK7xXYakTVXgWx
B1zmOqSPUDHas08dtTZKu4w7kpH6yqlNOHOpmmSCyWITEKoaeECwdMS2gVEU
KfGYqlY1YKpzq5LBT5jn4GXkrc8W887QQWlRyrfPV5TEvNHZgioDulE22gLs
iLphL9pZDZf3eU2MUAPlSR8VVCfIFw+pat5Z9sUwjj/15QztXdza3VI1zWhz
mwyPYnS6vd0Fykgubo/HaPsXlBeh0g6zUgAPNLayCQ/A+kEmxhgdFAOtsQOl
mh3gKS+9mKZOBMdR1R84Lk1Tj6kipnCguX9grIndVUQvbRvQoIoUwFjGEyhJ
PUgBppOYbIORhVLjbv1y3nKzsgOYC2oCkG3NdrW9wxpq7RVryUHPmJPcEb/+
5EtTbZTF969e/Pjy5Pn3BgN3DhBkJHRqxvMbgCX+WTZnm+yP9WngE8ayGwsq
Ki3Da/ncsZyZ8SM3ppz1rAZ+dGTE1/kJzMc4tk30sk53QSplnj2sgGRGJDaB
pJTKHDtRmEM8aOvOlv9Ve4fg/pCgWRAStz26Jlo7UzkzOET6FEbdqg4HqtOW
83mzEjiobcDU+mnVtOBvJvpkt1lzkUv5gNzfWAveN8qqGylmtAk/BLuFTQyL
699g1wDrXKNqIHEFM/srSWnmxdeFj+o+S3/GFzVU6jH5lLrOncvHVSkkuB4S
VRvpqbAVfh220hCtMrTGjSzBLYXugK/1d506tzM9nXI+99irTIrAAw+YUyAm
43xBdRCLd4OsDkTLtHwH2ng+W5FtrEaiW3esr0aHCbYcmJYtccjJbBG+EH7K
6VDgYlsm43PrxhHh0npWZjXQuZqu24J49dJeDW4STMcz7IdoJ2K9hmLPfDf2
fuFXPwlaEX5CiJ2dK7/e7+IFjycLHzBdpg1hU1xvO42aN5FXDNQr3oGjqzFO
kOuIyCQx3+snOVAMuNaO+Yx7brVAoAowLoO0GqC0oDrWoVsRfuQpQrcWVERa
6BgV+PFiyUXAB0zyF1zs/usGcwndCHrhG7QvS+ifPo0xIexqOM6zcJBBkTIB
qWA1JfTCv8w9lgp+UHi8Wx4GTdZSGw7xBD4VD2p05AtOdin5fqaHKCcp2pII
adS353nJwhAmPaDmN5z9URM825hYsRiYErqSVNd4qktqLWoA2Xa0UIV2pmws
XWgY4eefbX16m5TJS1OjNmQuDF88MTUSy8ZGIH969pS3nDQdvRrOcMWFVri8
zDbjKQhzSvtlO2oAP8q1JIlQdTLx2l28omu+TiWOcplngk/y4CGWEyp5sNhc
TSMq5rt2E8UyLFoj+zV0ve2t2aZv8wUS8kJGDUXgYe4hhTn5llS58HyvDYKw
FpgKozk+i3iOWu/J3mL4Mf/ZUtFGLYiEPrgTxMBSneTTSZKCt/qirvkXgUiM
lzLWLOAnefPcCg4NP7eERNtXbxXPu+GCO7iTMChCXU4YvutZOb6+vQlAumgz
UhuHHSDUnihSvmB25PO4QXErG/Oq/yhX1SbEb8O1/RAXabTddo0hr2fDoVdY
i9f2/LfEHDX3P53ZMVbTE+Mr9w+2PC7dA0s5EDz0b1mHxjBaCm3Zqxa9Z+XF
08ieSVQXVSOICkbwT0u4d7jp6QelJvva35t2UO+xzvuvzR8voQaL+zDY9KvC
/iU9MW5qHplUKsRUERctMQpjbXeoU3wF3jyZp+gQQDk24YcY3BAFoJ8P4SgN
K0h7qG1iis2GJTlJsGvgLXddXs6FNRsu/OlSdrHWoosGVk/9frODZMpzKcjF
FNBaGc//8DlAjyWySEMZP6TVzolUHe8TnfTSYCdlQZ0RWgoGSraDFjzcNjO3
vRe9CgTcjKDieGIVvqAfhduKEf7x5VfP+cu++Kob82pJ+kvuK4QtgVFkFkC1
ZAj4/EAnT1DwXCWP7gv6DhQxu06+Ln4y9NKnXN2p7fWhJWfi3DP4sYaG/t20
lhREXQUsf60o8tIn6fYy0scwiLPwSRVMQ1Mh3NdGBqUDheHhDFh12seTOXbC
M8l+HiyWudFpfU2lM4Flm8ASWnYz257ms6bYHlA1YwR1u9sMSrzmkRaTXhE6
LVJvetvUjoz01LDcJGzvnbt9PPecKABptn6+EgGGzFeZTUn3oLLuBJyW09Dz
kLU3OBhzkGaukmcEkB5e+/DdnXKvwPpq7vHtdnHO7ahSZvgymZNIZ49rIZMP
S7id7RCOnZZ1VFzkb8t6EVv7lsp+mo+hhAWVa5WNDEWrw+IOUQs8x772cYNF
lalMarBywViiVq6kDGvIRQ/bF3GlU/EHRe/dPGdU8B7YXhuKPmD/wlZW1QwS
QkKHOxW7bMgxAHPQ6l/YCI0YkKzdo+4WeG2lM4jbjYnmo1P1ZBoQtwOWaLJo
bUR2aIo2IDFwqHnN/ejMBW0rpuw0WauQnoR+LmYogHp6tgjdOfhwpDSJuXzi
e4KqOWI9VKqVflVAap2HnUrN1LAJsuTsF8U3zdcwaEvYM78i5BFXORx5MVNg
GfihdI7GV1RKKUwqXN2DprTezfeOJ1nBfpuCnuSpwv4OpP0migalPvVB9Xjr
Id4wXq1rmZSUskrtYF7KEX9lUkHhlhhDgceFSRQzOU/wk2fns3rktJUZp3mB
oKcUJ6hHoj6FrgNKBAz2AEJFkczyHQYL23ntnfiSGk2UigZhMQyh+zMVvNsU
4MhcOim0F1yxuPVamCT5IcCX/vXr4I/dxkP3EGyWEKpFmORDZVOjNRVtEwP+
saMmWO9kWIR+PiSOBE5+ghpyszU4yiCXa0ZqEeW0cpzAL0jtUzqa/DLs/Kyc
FuPrMRXBXN/5FdwBNpjTLcF7+nzgMGhjJ1+9PDa4ycV83MnAjE1aZZcF+FYn
1gsPF+aBy4TYWju1FIjHytxcXly196o4d5eV+3M/BnyANAbz8KpCVcIdJHTr
+Riw3qitS3xRXKLD3p1PKo+uickTa8V6ieH7u91oJB0eQ3hPeElDFoGTy7PE
+3qH+NQg9kVWkjsJhjLCCFOpkVIE+rLgbB/VE8O5wUw4gwGjttFGAP+8jebH
PUPIB6HK1BA8YcAZ1TtC+hhMFp/Prt10bGPryGWzDaXppaCNH/v5OdklPmQS
KgWU7sHV3C/K8wtvrMzKN8WsdGrPhPBnY0jfArGAGdF4rzqrx4ODOtPbg9T2
jNh89WDjAUkoN0E8MQbw4s4i7I3F6sJPlwRcc5Fp4+48AFZGNmSwPoEWude+
QHEcFCpXDS6TgkPv7VgCtB0hokP870cPRpWtBSFKNUqblmeRqmmJG7tyejlU
4LcdD8Urhbd8sUttnGJcai1jgsfwgWrr5yGEIopuiUE7k6AZFw/z74cnUU8r
fJIOM+T+18BmhcaggQEF2APkZri6uG5vJUjn1sJicuBJD/INIA0gBqHhXCO8
rikWxHeW6TpNtM56h9a83aQ6bksRk58CexvYshjho8RzUdJMn2DktlPl1EkP
rDBol0LTzkknG+XjN5F+MLIeUzweAauFHpG1CvfNCeh+u687PgFCaN0Kgman
q2hVCb+gBGYnEwlIlWwucTKGLloFz/kQprMlKDB14mY5EFo6MM2Y2kcYwGqy
Xy9wXLkujR0Da0xXeYzqbSM/w4xg3HvEPYCcce6mr5ZokzGjGg4pD13qURU1
MeQ6pRSoR0lu+k+vG9FnWmBXQyIAc2TSpmXpR5x0A4qmbVOQbD41dY1885E7
9B6FCE26u2E55ZvY9o3tqtsZu0b1SkjppalQLwAxTdAMSGoqPbKX+YSM124T
mZYeapfbetXABNxRf9GKq+DTdqtKx1Udej4kHyg5WDYVRSJfOYYRqJNGgd9V
qZnWRP5xl7OEmFKJxZ0mFq/F2oORKKlww7HASuHsMBi6Hl4P3WHY/MRU7FWo
wwOTGpkuLOc0ihOYYDhkrUsBHePwGqFaLy+bvDUP3WMobXRgkhRlg4w8rK4L
TdE+RfoZPKhdp2ggRBnJ4/GfM/DPOwOBCrt+KlqK60aPr1FX1/CX4b3ZQVjm
hwcXf1gMObAMZbO19FGrdHYppkbDo50aanb/VLXTzAAbXtK5X60Y3kCs43fQ
x+zlj9MWb7mjxUf0/MXZyZOT4yPgRjZodH8VP+daxRgyn1EEBWgxlBIWSt9Q
MWUpf8OoWZ8mKQ4geftaYsOt4Wgbe8lOgB/vDQe6BHvrzGzwUptgRAXo9Yrq
lZhOENALGg4Q33HxHl7t/X2G4Ybpb8XQvvw1P2rvQWrvBu0w6AFHs6JtTKBk
kWfUqqxwGHoKc6oC6L0RuesEbnqLdiOBTGUF6FyODrckw5LZcsGYo6JH/4RJ
D44ZpBAbGAWymMzYSa0+R5CQrMBKYu185eywrHbXJvbz32Lqk5l6t57/W08y
Ils6ooAyRkz44R7FBKMcy6nqK0GI/Cvu9HWOxxsXw7uQ/1Hr0RLAIEZkCoxH
+19yplO395q7e2M2L39532IMUUDas6AyTQakDGn40N/US8+WtonAvAEVGrzh
cxgsQo2VYNeN1UK7r49aVokRiTgCHETemROyqyB6IG2E4jMMXSw77zzLDSLv
MqCFKhyBwMVqPiJ1kZMixIqoecVImHrajcISn6PtjbzfXOCNC1aegNAwCh5k
Z8UzQdSg5maG2Wzc9kMkHGNbZ0Mu7RzOggmVjFqBKXIze4ZcmHApaBJQAgJa
y6eRxwmMtzmzG5/Otlk1WdRvI191ONQ6Ftsc4iAwq69lFnU08Ewm+xfygzCE
hdvyahQiACiRCG6WScDaheAdzntYYAkIGEttQe6sieJkMAIWOeWAWYgKb7Qp
Y1IjDaqxhWNNJXxzCu2WHI6tzSLXEH4KkdZw4iargtzH0VFL42/pw3qKGGn0
STpgDyd3ITYY4UdIMXPK43UH/xJBKuCnYLWXGpkw8LwFupPZpuWIMl94SU/n
s5Lxo2WF0+PHzJ6ny+b84UZzRM9/8jmi445um3AIAuqkDAtBzBJ+CnMcFStC
PVu30gQ/27jvOF2BOrH04ykNoI0EdZFYHCJ0IFYjwlxHGkmKRyJeRXfxCjVB
IRA6mU6uGTQit8C0XDQRDDvUxXiSq5RixF1BWo+wDc/xcZ6vFnm1BGMV3RNY
rEACch092KHhl9PUipN7r9/auBfOlPUpFJFNUlTAueNFH05z2IDuCrnjUHLO
SsRUdpk5rcWb0d7rOFasImhNoZgOhJAHQHoaw8Lje6NtFI8vyllHaQ8ZYMok
hp8YAN595YUWovDlpLLFxbHo+0CAwsRtt7+fHRMZ6GRii20S1J8KQMFzeFfE
xTjD66I7+6Ez99rnE5izCsEm+pLPPomYu/0VBk4XUbOkN+CE2TLVPW9K4Xdz
i+2o1uk7Qxcza36qRgW5DyrSRdqVxI3Lo1HYIOpMKBsFNGeXxyfYk5rLiRra
+LhekHtx0mhkOYB36ZOBDqdoHAKz+FbQ7+8myADLFTfpEUcU2IvRcR6QYDQW
QsVF+fFBjdWPi/GeRReISVtS/zntbvS5jEEkYuzDHkBZzHqhjkiaX2wS0teQ
4sCoWvHtYBTCBChG8ujx/2wAKvXJa7fcbJ9kt32K7fYJ9tuv23C646y0f0Kp
Q/7aYn0pgOBHS+t57nRIkvaTj8QmxM7RJmnli7ZUuWAmTQZztL269pTZWWQr
VZFXUtRzSM69WbSViA6d5ediaQc6EnK3u9F6BDjmyBu5EhjfOZYPQuzdRFat
bFRnfmVMU+NTwOKGWBxUayYCwnElwh888FiTAvJH4bnY80PwiXJcAkdUFEpg
9wQGEHazR0dnR679R1gvCGIHJvDVJjTECfVJU4+xuEhj6RHkSfxYq7RlVLLZ
49bP9AshDwXoMqdLY+L47jG34voA3LH3oRAgfBrSW0sjjKVEpYkPilmPOkp5
0PIbkgkjsR5ACeInsLqGb0E+U6N5SUlaVvRD11oQe7yWDWVk1yAJ6Myjc4tj
fLQbDQ8j9EFimR9pnLSK9AbWwEheTWsh2auq/J8V5d2jcshkHFkqWaAjs7QT
bG2pnvxOCSEym+0X6I3uGKVbSzBRNfH1mQDkgBTwjSjCeaAOseTLzB5J1ApA
JunMMLdEcOjZGdXEVjeLmibVCatSgw4YcGMiblIZKYMMmjUteQPUk5Khv7GD
ZxMntAPGj7u9nGyWZKkcxognE+J6A/xse/pME6fBkISekFRaOiMBeIrCHlCO
2rQB92VVzDKuplYv5FU7FUtnOq/OL6LpsFcfc3d0FS0zNfgYAi8qQHCzL7yl
l8SmDQKVqLNOl/ViiGEJVw3v+iCh0VcCUfdqS1iUiez2TsTIulSaAB0SDu1r
kSeoP6HGEbzcMoTgJ5Ik61Dm4t9k768dj41fepkbZIXcVjq+mIPCBBQcuVDo
+MME/+VrARSXI6qpErQgQCkq+cTFdXwO3HQd7Nvo5+LrtJyWXYtID9nhUYcz
TO7daNhnRLBDWoV0knW52EMVeTGC7BMevOTvBUdngKobn8iwET3f4aFmHZ/Y
wsoWS2DUkwSZHIhPKw66bPN46kEQ+aCFnf2USoBp9EPm4Gmygw2v4Yu6WfrK
MznXUyvnpdXgU0EW+qT4rlIhlSdB6dDgvejmVKzeUIW4sAImbZgs20HMlFBw
o2EA59I/3ddqVatzongKShdSL+RjlstTL4FE0l1L7emgApefNZTgurD6r/3W
gloJtW4Zw7BlLqJQR5UAZkcZd/FAE/k0Oth2Tg38dB32tb0+Mw45/ST0dk1d
ge5OJ8QUdzli5/0EPY+DVUKdaohDLcFDTNyRnSDM9OqiWFJxU9dCwQxP3qm7
UsbU6HUjTbrnxCi+AJ5vEGr//hMM3beGlrnP6axWlyO6nFUusP4QtRFMzdbX
oeOZ1hKqCaLzfAiWzGISd906T/9eLOoh1hly1/YKeEq+uPd19HT3UNcNlveo
Hxj586VL1u3eudTCqbWq0KvBiLvy7+AJoCAFg1zbL8Y4T3uLYI5GUQVgnHYL
KgO44Chp79TjbaR2Z5a5vbWSh4TCO3Jg/OuvC9SmYq/Horis37YrAOCPlBau
wjg8W+DkE+Pqn23Nn36E/bRWxeSasYtLQ8Kbr9kd7NXk3cGkHDBzWQFMpOCo
bL2z3T4e29HeWreeNsNa/0nF4SHyVixvq9926hevsLVWynTwUDg6nA7uC/oT
iZ+cqDJSkLfwdY3kKEwhma7ZGUiKfQZt/euG6Ui6E46sv4qZKAVm0FhnVGxH
WYNZj3LaNfSpHTRu6y9G5RLJBqEEgvXXtMjRg3dlZOtMikDB2N+Vv6FE23aH
Z2dvb1+1wj4FIKAE4WQIKn3wVxuxQBrZZD2/rf7211gGPZiQlC6z1jy5hbbC
bvVwf6byGTBqDAJDPcS2nnYk+talhA0YAyul+sgdH74/r+crurQ1eKAvrLT0
rxNlZPkkhtCB/dRRGOHrH40odFL9pPgUc58E8xvPQSrLp2OzxWnX8NMp6daL
MSVJTPLfCD6wTXWZZeFZaaMAvMQDh3/pHoTJA9iBu6EVUf62fiOUhNGWwJFs
SxvEbrG2d82a7nU57YJpZToYu/GHvPGHnDW40cRGaMviHPiEiWpuCjR6nPel
pnLwtiG5SXO/5wt7EYQ3IjKK6IeGxmcQ6jNrFGFk0Vr7ZR5PrpZmTC46EQrD
yZpBx1c5KcjIrjP0b8VqmL2n/Djlg+EdyNsAMbfTQ/90iz/mBp3sVYgu9J2L
pWRbUU0beV16C69fPpnABP9GqzcpUAgTaX5s2Svvh/iG1ZlgkxS5g5xUHbWx
qFf4kNDtGgKqdUv+dtF2NNjFlrq78GB6jbvcFeSwaK9Ntr1flYfskRmq4pL6
5f52lnj/v9yd7p51qsN23KEPt9lff3r15OZTz6hOOXvtMXadq4TJw1Muy5g0
dbAIRjmXh4ZVPfy7s+ZvbcwwX5Z8K+V786ek1QSmGHITME1I0tSg5mZJF5nc
fbBuXrYbvYbDzrgrBJqGAlCttxlldmuzg28S7wEM8LTw8xGEt8fUKEA5yimK
pKWvkGEKZ3K0JBxMqw5hwx7gbZA5hpS9ScxE4HAssYg7ed+Zc77jPr0xnmvL
i3jTIZ0W+KH3f9xP7/2he8sJ+99vzYrpcos3BxbHvswXb5yF8Xui7+yZv8AZ
/f1WWSynw+v5cFYuiz0w5T+7s3ewd2fLWaPLmfu7oaHP7LNbbkiffRb8ajjO
5/kI4uNwyeOLVDLjs+gB+PsQ/uTaIHS2eNQuIJUcQTvwIlPmwI684TvUwYHQ
BtKy8M0EbzbXjVvIzhez9+9fPTl+cPDgiw8fnM6Gk4p+DehGj5457O4DLC5/
M9t3nxofJr53iMv2X8Phok7hLGQv0AOC9g6yhpohy/ti8jALMZfyl7CVHWEb
w9b6D+Wvv+ADhzuXZVVeri6H4WPmqV+kpeSTD2XzUpHJuHXtbHf72tOOZ3dT
7dMbHsAdTErwc/MMqYAwRzH6i1/E693sL/7Xc66X8nMoFeK35TH4m0lySr0k
BcH0nYcbvCTW05AUCp6x8KUb9yb9we/KYHPbb9KDbnGGgIH6z/7+F9zfyQvB
CnMUrVo12UOzjq1wfEZy8QyefUFieI3EX5YqULHIghH5yCJg98mQxKmIfrla
Luma5iKLjaenwQaQNxfai8qi2CZ+rdRXod9LXHdhI6CzYL/eagELDML6yiJb
q0V1CA0cYpyyOXx3OTusmkN0lnc2jHc850Fdz2dj9GTQ1HSPiBQofgvOJykK
6RLobrCHulBYGeeRZ4UKdgDskFP8nIoAgN54AN+PhKd9bk8wDuBD1GkeadhR
N7w1/fzpp58Oo/3JTfcA8XCeB3mEWyePz55oot1Osr5VP3vtfgej/B54lLE1
9NSOSahsvf4+e12MDrPsG64+AkLMyfGxU5/2YBxYhuTqfN/ZAOA32f+WOuze
e+o0t8Psm8vcnYT6kP/+3/LOt6z7Ha2WF/XCfeBVPSrc3LyGp2MDQRpZXOFf
/3sMhUP3xvXlt2l4pT0AipfGiQuqtDV64Ic4oajtcb9A3wXv8hXGU7aBMGR7
QP8LMFT496vHf/zx5NXjR/Dv0x+Onj7Vf1AT/BhhV/2//OvHL549e/z8EbUA
2NbgV9TI9rOjP29TLsv2i5fAbnH0dFvD9JN6vNKSQ1Jldlks3HYiShJqRMqc
oEb+3fHL7OBetgM76u7BwYM+/fOrgy/v9dH/TF/D7FH8T2qDIjvzeZEjSgBd
gfm8XOYzKkYLWmrFiR/0xnE9v16U5xfLbGfcz+7euXs/wy15toACulqy0wkL
hJ+JJ8x3O8e9obFk0M+B3BwsAWi2QQ8mZHvIF18VmqUjoNkVernUtnS/cYca
XPqgGbieoxNYPBNCveS2joF9UynRy3KJPKGrRbPK0SVJ89SsyLAUK4oAk+MC
+VyQAlVCHzD7TFFavMVyR9+dPnLHhJ5tBBvuOga5BZVW3Lm3N5Yp8PPnbNSn
xXk+gwp1rjGPhHtVSKnHmh5/xHuE/65lhJbQTFH4U8y9Rjqfvj8Hbvgi0AWS
FJg/3lXPMuqn6ENQr2gxHQ/d4jgRiZ+CT+y738HT/a/d2Mn5DQ0Q8bROBdHl
z3CocLOz0dcDEUnjhp11b3hw4P5/d1b5idK80EtiOLbk7FoZK2QzJ48ePz87
OTt5bJhmFIrZUljX9ErewVxwqXwr79mi8tr6ctYc3OUWiQgg/tzX3XMg0K2z
p6e+sqEvN3V3D//i/pGhw6SpAUMZ0IYsL1YNJwpGAosy9hBMTgRK5I7rnGhY
6/t3731BNanOlKzsKVRqhb1Pk7HjetTXzrZda6b3HbP1+W80W5+vHdpX9zYb
WntEqU8lhjb5JDvh0b/KVvji83tf0nyBLnXutMPfak9MPsmm6Jq49bviwcEt
R/nR26NpLn7tEE9Pf1AJ1DOVNjqV/3SpDfuUwUtFdlYyB7ZFndNKfunKzUl3
ZsPuROB8m63Y0aFMTLSk9RlnMI6AG956eN0vOOo4lJJHG4dxzi6iWku4LFRN
iysCxZsoZCOCu2ebUUhUCocKs6arZcGcFW9BAaIamawCGRINN8KuegY0UmL+
+ecOlAou/XYjvZFL+QyrVCCsA2oyEPswOsq31cmxHVVt3hYHUapmjzpEFGCj
fAphvc9oCsxT0Tawfwk7UtXmj+2yuLi/o/1cL6J1x+QZ1xClANkmpLjRNVds
WjJ+1+dm1Qrp5SqnYephxkwuUvlXWEBptRX2IVD2CffVNoBgd+EHAmA1hD6Y
fJLLMkghXix02xD4wzYhh/8KayJC8VXMHn5RFVKyTvVpn6QfbWJpY9qaPhr/
2G3KEh0OJvXQ8C/DD8BpdZ4TOcimCGO36zEWYSkxd2PGkscMy15fdp/pYBq0
slnHAVCIG1eLti/bbUwAIwxMV9dSvZzBIQCXx6ChfXlUzOoraPrSnvTOUuJf
fQGlxE8DKcF3y/O4w/Yzsf8IzqIfayB1xpA7OV9GgS+NIwae1JtTyk91gaXI
Kr1IyR5uVrnu3rRTEq3Pk0y6kNu4PPL1WlFK9TW3bBHQzRCXIe0ofj+fRaNr
0VzgJgsFaNcYY/TSUVy+BWt5+MrPXL7c70IUQGEbTpC5Ts60SCx0ELhSpRwk
heL19MQ9x0Ik10xUA1FrzAHj/g+Vox4y25DctbtM6ZAzE5N++d902dZuxKa1
JPHSfer1ieEB3JsApMgVtPy8IY7PLEHYxO3WI6h8kAh7/IsIZKOrfIxEtqV+
MAKTkrddFf/EDkkEJT/KIjG4CJ5A+Mqf3egiX1BQ40/Nt7Vmh5/p8RoDhNzQ
vh9RxnAq+hqDodsx1pszib3INOwAHd1cD2JLw1GJ0aUd/G3Jky6uajZiAdus
zXRZGBtcDP4Q+dXTTgUhgTUFnbvcfJsPp8Mm/6ghWbL/yI14k7SPYuUftSop
GPlHL4qFPrsOJbkPYhbw/XVx254P9m91Rvu3ugXG0QRSnfAVN29vi1l4OtpR
Y+4wYq9T3hJ119zcLSDOtSAETyxym/6GQszsllacNep1Wrbepv9rQBRbuqz/
JS0kQRTrh2pMH3LPuLfbq7TZknxa5FjwgdvAyMLRA8LAuwWP3e3qTiSzH2Tv
P5MD7x57DZpLF0B/EHBP6iWPuVfEwSTcCfXbYuEUgtmlzdtypn2dcRYbaqWD
Dvip4eox5LNgb/lcvMA8FyOXUvJtgHYvM8xA/BK+cgVumfTnkYgPg5fK6EAk
hlNMo6qu24VRDK7CY2PdbFJ2ofYaU7w7Zjc7x/wITNLaSmVpbWlmFqmybyoI
lwZNUDUT8qjns0WRTzCBpFldIuMBJLuBCUuWasQl6Dq6XGJUHu19rLzd1E5Q
XFDKBFdbvayxktSiBDqkslms5kuTcaVpvG/ddtrLdneZAfFRnV1B7hSotzjz
uFIA4Thf5POLh7u7brYgUaarpExQwoqXCNgY3Q0FnhQpQedsoHIMpaJgwUar
83Ot6jTSDQBjR4CqU1WAUMukQG6lM4O2ROdXbXNRjK4xMLyai5h0Wjue5Eb2
+Vve5VzzAXWtgRbz0V3OXDTkoFmNL8hPBB/CdKAJABVcU0Aut8zfQJLsZTGB
QCTnqrhZmAHbDGfQcifwJA6oQaSeQY4RWEnQqoVpm1D3KynfHKf4wSxiJ5Ao
LlUXCDGmeALwJoc+mrY7X/PlhH5E6P+j56eE8cFZ6Dgg2ybBhjL2slldv1nN
ifaTkhybcrkSjnwt7YMJdzA1M2DkUTzz7Jqs5OLdnCy4OGtkQEmphaFzULY5
g4q2bewhlktEDmNTBFPT4/MAAfZ3nHoc5MYiGhpZcy4KdxIne7u7+pJIbVoP
cvlB30ZgiyL9oJiTAukYeOg6JkfAoeGKP0r7tyjO88UEirHjt44CWRXIFl+U
MGAFFwbMKSZTA0q4JEHhjuYcMoPtDAD2whiH2JrlaK1qt1/kDS2B0wQGsyFw
56PmJHpTo1jTEQIz1zUnm1keQJzXhoi7xsQqHpIZmiQU+JB3Jsh5dNINpPDC
HeWmnNEuogRpvBna3ceLISAFQ4+hMJ8VTPyGF3lALcnfx3OVRfURZBnNx9Bj
c5Vf6/th8hvcQucrJ/DoI1zP3ImRnS138Wz1PR+S28KPIW16C8GBQnUNgo9+
E3Fg4yJSddtwLzM7GkJ7JsW8HDOe/wme7ey+zIAybWEuvUgOzLXLJ9JogKCh
hMZrvCopKaPxbhgnUMZ07GduytMkteBQV7UCwSflGOfG6CqtjarLXYO0NR4I
vfrJcWMooIlHWDiRzWIBD15R0PZ1IwSSu7K5YKUovuz4oqA9zVwZ4MBdwSVg
jxcoggXWyUEE5lef3zv48GHgFaKZe18gQZ/v3d27N3Byi2lr/KGp8ll9TtUW
lzZKE5zCwFVDhEB/A9n112+gxhoWT/7rtxGHRVnZOlW9v37jNp57CHYW/ntI
gt/9Sq5bRo/ST8JXkCGqN/r5r64/wN96WWa2NVyGw+G32S8RCSWCjK9dv39B
cuLoj7/0svZBgFd4ryLhFMCKf3GNY+tQ9ZieIqoB171fPs1wzPR0YJOPqFPH
fCrh7KAZx2ECsA16rb2OQ1APnFFgskS1lG05faXnTTVFEiqnSUJQBLYA7qZ6
YQSd0Y7lmND04Y7Evu8Bz5wTSKLlkyBo7KvQS3FnufdEp6Ic6WW5KEwBerjY
nBJr413gNxTkXsUluAGB4tOwpSAB0pEvSHl+W07gCIa7AyueK4d7KBGVlkZF
45LqxVKlLhFlVL9dyoBX4dbBdyobRXybY80voogtE9xZSMOqdQ6AzKyrHAim
qndVLgEtB3hfo4shELBStLhB9UMoPUgMNmJ6AaEyHHU0FrHOABYzU7nvhwxy
elY3y70Ev27UuRt7ZazJds9oyuH2voLFAO8lR0kv80lBXssJBYSuwTTaZupG
uKKGvMrutOxFRwnqR17UNdXlWxSI8nSDuMnMoL7Rmfo05wdi6lQpUOE9W6sK
xwh+Oz2+W6ZOgPIp50H9PREKNJxSauA4OVnKUnTNgDen0/VLMcRPlkpoJ+sQ
JbAf3XvzhTuMs0JZ1Lw5SnuFuxwex4ZNLiUZlvNHL0noHulegZ8/DGzwPPGd
SOdxowkOZxMHJLEQ+H1o+ntKyS0YROQXEOLIcLsP8JZFI7yYXYvwzDPj8Rel
MxwSbJi3dTmBrc0SUJJfYMrKagWGNVrA9dIJPhL1aFPG1HXbNMvCHUMyM5Bj
xDWO5YzcCq8k391eNa7VWZG/AYUNPoCLN+TFm/n1cofuZBoqixW6BrRoNP26
BHWfjrEKYhAuvhaMbhu8YdixQ7uBCzfZ08G+ZuT7m+dL0Jil5omnF592ilss
6kR0HwaG5J6bzKg2r2sw0SEVTBhjJPtePzywkbdIi0Qh6Loz7qgIuyiGKpbQ
I9ttibtnlSaJ64WwPHUXmzP7FiWss98eqORDlYyZGMgmU6bLL6mG7zA7BqtN
tGqT1gr/RJcSGnljZKaHtJFjwtWPCjfcYp+u4pPHp99njyEWLJh8uim93UXK
s0wvlddAv9RZ9E18EFZ+umTVY+kuxhliaGyahFe1v9w7IK38ZPhob7JwLw7R
WVsVS9fYcDEdf3XvzpejssGEKRDWgRd4K4DLE+l1w3Am7rYYfUROoZVWaOcz
lTDGpMicNHzIihX33iLJ+EEr4ou7YEXghL56fGr+8NWde3dcf7kEizZDFyNo
vMg5hb5lGy+YIUaVa72cnv5Ajd27e/8u2CqAiaXW7937An4B3/3jjyfHnFR2
5477Zh9/a79zuVJrCKSvlseBqUymLWWRWkzpdTvPj46f9a31BONyep5gQagK
U62VtTN/91szUiYQ2E9lzlw3Fw0bnAGzuPe/gb8if5uXM5QGqUY0UujZi6lI
DQlbGjFrlLlxbBorjjnTNQHIbi2l2L5yBxI6sY/0zfgvFDHYsR0q8L1loH5b
kiLOTikmP+hzso00F8TtUSkX2MlIbsQciuO6C7EpmSk5e7uaQd04eB3TcJzq
LsymRfW2XNQV5qa4T71eQGjKTA3vMkgbYeOStg5TO5snCczRFDGKAywC9mSx
r5n1lHCroQeSnCCuc+dUa4H1c/dX6a//IOtk01rIiRVJJiXZ9Kp6W9itJVND
oTGZG80V7kFdNmNT+DeDaU0siNs7p/Wl1vGA+zRestSWYYrYMctu2M8ft3gn
jIeElABMcqQUKTWe7AXP6wpCzRkTg8w7DwBnGmhD/dTS7mWnxidCqt0/aykS
Ex0thdQ3573nN+1vuR43LQevhE6u3drrJtd0//bz2eJ2d8oBzgBOkSpdaAEx
rSyB4lw34V30Gqb54wossEJAXaash+1FzCMouweeB7wd/9sz6soR+ipDxQDY
vDa4/QcQJqMYg4S4wAGF7nu4YwS5hGDhK2S6wTH536Mzspg1BYY/BmL6MHcK
S3/zvIp8jYIsfYHRFvUKxAg+y06Onh+1tLWzIJt0UZyDybpoouX3mdw/vjqR
gAXlGf/07Gn2Cl9DaALcwZ9/8dVXHz64pXcPH2abpn73etwMbNljykWmlBlQ
At1KuS8dZs/3j75mSYdGtxsudgmOPfZFu7q36eCCYDwPzWq6z6HFLX4d0kxQ
v7pz9w6OEf4akqHQ77APtxn9S8wEPwRYDUwFO+IOfXKlW8KjMYSPnRZLuf29
94ekLBST328hrH9LiARA0wcvF+xbDCug/EKJAfWvJDoBccoVm0xomoBbCuxF
Nz1vBqHwO7uoL52a+b1rcpD9UM/O3Q773wUc1EH2yM3+n+pr+Ofz0mmTr/NF
9aYgPfBoVrzLflgBEuVJUZ1/jfEtNCGvMDLmZBPE+eVKp5pDaJ8fZt8VVV26
7TDLSzDmX5bOWi+yJ26PjGtwur/M61mdPV0B7tT9/Q9O08v+uCpno2IF7rzL
GmQXnAU46p+R3ghZwvWic/Ls1vD+wkaCJWSfk0DlqoDkCmt4sgXZ6JFBp/Vs
xZrt0M9UtnP23aO++9Vw6NZj/Ab692RFVNi5t2hGTs6DzRvBnOAr/lfvP3vE
gU0n3p84WQK4H/iLbIfKWbMVcay9LdQquijPL2aUUY3uR2eD4AUA9n+7Jz4y
G/UltFk5xsoyTR91usIP9RW4FOhuQc/dqJ5cazKED4Dim+/fQwD9bVlcOX2+
rq7yxcQteKDY+xFRMg3dtNNUHwN4CQRQIBSjISmU1JSKa3ahcSSHqAvNUVHi
OtAIcpS5VFpOewY3zPN6ya5EGI2bmkNwIVzXK05shlJWABLwqoEs0ISKXkwA
1VTPyb6fBtFiyk7iDUZOZrcYAM+b1yWGuYtLYI4S3LOk1ssuvWIaCLxa9naz
3V0kBaCU7YG0xaHSEP4B/rt6QdU1RzNR3PCugVg6sU/7HV0uryOjfIZEbVP7
hILdJ3T3gkX3xecP2JL1a6pmC+KI7DvhuuORe16cu3n29bQuSnAeu4mcOqMt
RkvtsQaIygkGJSZQnAnBAkD+DsuRprKt3OWSK6rZVDFidID3CmIvrOcGHSz0
WRMPUacqPo3Vz9IeWHR60tc7XLQIJtDPsxPFbSvYfe68wywuilmJZtx0NZuC
1tUaCIYZrN96WbtOQsgJUBziCg1T5VArAfGG9U0AM0BDJWXz2mNZ9JVmWc8x
sD/QTRqiAeJqNVjpLqrN6ms9MQ06fvQVFHy8ZtfnaIUScxIxqAuHucJS2ear
3A0KTn4Tn0fuWNRCeBjX1XgoyC+qLnntfd/hvMSqKJRMA/zPnLc2pxRo7JiK
ZzFjPYzlj/WpUyVBeFNWE5jH6Feuxtd6aYTgA/WfCjU8u1BpirFiGztwQ4lO
C2Yy0siLGq8Fe9LpdMXf4lnkLccOWY6tdBQM824GuAhmNZ8taoJQMohorKsV
IQ2wmKfAgQSxFVQPSkGlIJcQx+LmHttPYdnissThH6G36gcpBhwsuPawI6ul
T2q9dkhLj4tjkRxogQmXBeXobVH0vyltxQy7y8/09kP3tqC7yfn35V0nS1Fu
ZjOnHJGVNFnr8EZ5fsxlytfJc7mToE8QjBDqTGbkxPveqZheQocyHeS1gJ8K
34SoE7Kn0UC7qtGyBC9VdNGH2SgKZQB3ozXlnBWXV/mQ2YloZofOloZ7tnBT
xLc5osRw6u7f/fJL93sxsLxeA/04ZhXJLa+GApTO/hAA00MDaEU33+wqv24C
Vz2Q7rpVBgks0JSwmBJcBbjTWNMj+puhYRKARx4Lit5Ug8P6e/5TlmXdC3Sv
Qw30WzLcNq82sXXjlkbVTIqPhWzfQ6ZnteNAKPblarYsIRV2YXC+RXVISVxD
odPyzMSuQx4MkMiCFlyQoQttsh2KKCFZkHvEyWpAGZHa3/TlW+E7Cubz8xVW
m5U0BVj4lxJ0J+YkOUCCWMKhQkwUSqpluxRK202jm+icDnzhMwnZ6hzQZeo0
YI4OuHWRSDjCyJrysgSPzDRvLmTD+Ggg9GKEPuR5utNtNeiFL4ubX7rLxfWK
N/MxQaSCUqJ1++mUgILX1RKIrRpyAeVheNMAZTEKvRRiU+98w6AS5lbHsizm
sz0FCtb3Lyo6sqE7xJ1vYh5a4OGfOBnhjFky25K3AvsIWZIavt7aX6EDqbYC
2OaaClIfm7MILHLceFiXkX2C2lCnfnuGHMpsAkydEMaafvUMRAlDQBOlTVk2
A2aQYjIXRek6eRXWhAEMB9dQZT3RV1AV3cE+P2AIvmRZallp6oHxy+o9z7Af
Xx8uyuqkAfrDT4B4aJfLAKVg91kdlj01MXmZWBQZgbFKmdyfP9jnlO4HvNtP
Ux9oyyD0aWjllaQeQapU4LB3+uSCWZUDxdCqsLP8nbncNU+KQQuleLnxacUG
otQ6/u7FK32h8Sr1lmZ/bQkHYUs93DHFfRYFAZLcLYwlgugevirxPqLShaQs
9rGb6XNNGRDB2WZ7XksRrRDuiH5wxs4IsRu6dgE6OjX6HXkodH8Ngns7Rw6x
sDXdieTN8HJCENF6mSCI6dwtIGwRdpnnpgXSi44mk7ZW5MSFmFYmXYzubsYf
gJf6p59+oouWQThuJBgWlrPBOVb6Wforzu8Romj1QuErQoRzjRcZCRsdIHxJ
JT+dIZbGR7Q6eiXLVJhSQny/VOczf7lxOCcQt/2wSSaroOsPawLyXuOmxXBn
Oj7QieEpuu6lCrrBWONbXdXR25/hqdodA/JkHNiLuxH4BtehaepxaYhBtHKm
Hg0Jw2JdErixM24bfCoJcbTd+Dn3vchIkGH5K+oOnW0KRDxDoyba3nLiAk0K
bSJeV1QfqjG1lNCLwzK6UIIdUjw4c2k3kWe46yuSatYzJqTZHjwGk8/pWUZ8
3jvokwfo5XH2xN2f7pZrwKH9N4nCQmkf/KuYQQyq8mQofD74MTQre4pBTqRs
ZdmfAITun248DE6gXnAaejsHfe/G8SmOBG7Qt5Fw0gArKL7UwPojhYOE+N2h
+AtDLX7GZdi5248uI8lKoF5pkz1qMgjqt0AtEIUnuCzg090mrMM6YD0eKoaB
+EwQ9NSPRGettKnC4ikA5IGtXFL7NApztXDviHFXcXfDXngB2ijKX9ht97PE
sSjSIdTF9tkeX8YWtii2iUfnyTAangxUj2EfkAevly8hZLdE/E9a3WEsKk+Z
TLz/WC81xM4RGsfoFO+xng7ZwjbbsA3v40aHKynjVMHKLWMvbzj4AEajQc+n
kacef05OyuCP/GYKf84/3X8XkDtEAoZc/DAFe28TW8ibXp64OdQpRTMBf5hf
ZFnXw5EnYPJ0F6ZJ8z10sHW+g39tvZiCc8q73f0P+9cauNuF8LHEfAd9TEzZ
mvXQaU912bZR1UOQI8Hnh9SldHpC+yeYSdxoDEEC0scKUIBw8UiCoQpKJ59F
dBghI6WXezFDSlugEeos5zjStF4tiDkcHuo5RW81BsJIUhzYO99hvrgDcrCX
+be74NlD7ONQW9k6pPwlxrz3aDnlspjaWkRCTXwtrkODpQ7uJmiD2LaWpCaw
K1ID+jIhhnYCHKh8G+L7PNpOkDl8TcSg5GBZ3D424vpP7lcKTtFqOCF/N5yp
hLj4d5umxBBuniPXcepEao4+D+eoqQ4Jb5aYpmhydGJkDT5icmRisImPmBy5
CeH1rUTHCYjeQuJEc9br3QtnISHo1k+BTPGvmAIcPjbyK6Yg0fHWWJ2Sygpq
SNLWi6ijWEVZVeLGtxwDE5P+4D5uJOTsmnTda4GChSq4z9zElAWfRD7oCScg
BiimAhefcl9lytl0nqTzEXsWSMraCMAd1+haQZitFwXlwPOWcKmxXkWR4dVi
XnPORc+DKIIECzGES8CjQQJBSjcqq57YxL7CPZrBV4jMY44Eo1yp+uX1pi7v
j9yAyZyM3o0aU+fVfYPKk9Q1brjp01rSDdf6xaKWchDDpvx7wdf7Z9ljIp8E
6hD554deD8AJ6HlibkqGQNYmmdBtNGAshtM81nRfMIsv6zhVVxppIRlEiyTo
h/hJw3c5+hLb4s4azVEamfWmUM4NQRwk3eQAKrLJp7pKrT1xf7YygCcIYmWS
50yAExtjdpsQwxxDVmt08N4ZRyERqZT4h9MXz733Tj2AlODtecCCr0hYgNDb
YudRi+/f/y+NTFHkjElEAOFczom6ix14TRw1UfYX49PAVWoI4bRqmIahuJIY
IkCqa448vH//cJMlUH+ndXIVS3bdT8tiBqge8iRBwDdrWcb8oaXbgtPoOxzR
cVPhFoqCreiD5cjxyN/vNDsE4YIn2FPK6urS7vYGEVHudQwuQ9J2adbWO2H9
Tvc7O9lXX7KnHkEkio4mIBwg3gAzoKEe9U34zfA8tRm0hoYsiEElbMVf2SLe
Mi2r6NaTc7oSG03dR8twS2MEkRG2bvUvkFgBLkbh2BUPB3QNfk914BdNIWk+
s2u6ch97DtxVEOTLPIYES54vr9UXKY8QPi8kz8k529P9e+sYaFeGJy9Ohz+9
Gs6n5bC8HI4vJ0O4a31112aLtgPmuE3dBJQImiC1hLl+GagAKknjbtV2KXdK
V5Ogrbsay1lcGFlm3JOO4Kbne9tP1huOT7NAgMGHQUE3cT+Ai4bT2abloll6
v6I8C7hOBJ+JY8zvq00nZt9XwG1WTuADpFedf1bCqA+2rpcJV2wzviguc/z8
xmvCrAE9oPyiPCq7PQ/tfzjlk4jBttCPfQab/DDbwnogdx4M7355dnDv8OCL
w7tf7n355ef/1xbRYGtyVvFuecgZx4dKbLdVTtx/HQhjdgi/AJ/y1qFnddx4
n0lrS6AsWt6uHc+StrV2hXyXq3zeXNRUSRQmRLaItNQWDTfPGpgTqtnIF8y8
2d75TXMYEAaaJ7hrfwmUmbi6bPQ8MqxBV0+enP3f3z8+++Hxq+ePz7biktLx
W4Y1Dl7+vjzPR+XyMcSHnGhe9zqynTVbh62OtZ9yD92PW3JPrebD9oN3Ew9O
6qsq8eidxKP5xKmww44XPo+eD0v62v/6eZBemY5BJwb8Vdi59GCjWdlwoJsP
sk25n6gES9cF0hH/xvLS/HMLga0kLZHhbPAbCk32csiYLjCvWW8lc96JK4kZ
ejhgy+mRyKA4Hq/wFf8Y2XQya8rsALbXbyOrH/z7ymq/MW/YHH/5+beQ1w8+
Tl7Hp93/5TYiWqRzJGDv7OP/WyNnb/MSOiDgBTfrBIb0kqL99MzpK8O1r4Ti
cfBJxnrvY8aaeOkfN9afNxKiyCvWVnDZ4hI7EbFxTJeOFnw1vgBxWlKZDHIw
JYkJBswfAQlKCAOAgozLGdYTQTQy13D7W4nYEyW8oFonxSXibygCyAQYLNFJ
+wadG1Go+XjJ3gDsK/SsZZJYspphykzaxEg5SdP5rAGmYcaf1uJw0zf0vYge
XGKlRobw6/4KPHQA3bHsYfzwNj6zzdTycQPyKj7UJ9skTBQA6W9IL86LCj2Y
4MroGhUmpECmC9F3SthHXIM8Y8jbNnXTiTkrDVV2AbcUOH0lJbfjI77O5+4u
Uj8oJeaSwYJ4oVuhThCV52Cg0j0ofmUioWebl82dadvxo34DTMSl7zCaojLy
P2OWbcgZZKzMEoFscl5xIfo0R3jZ0oFC1BGum17UtFSXlI5EefClpDq5EZIT
gboAT5LXyX9eoLj8GfV8cQoDkSKwH0RQPjoOTCoee+eKnK2A1in2JODZ9FMx
AJ+Br3TjvmLWQzP2wVX+prhuPC4I1BsmE4GpNapLouqA5UT1n36oCElSr8TX
HQJ1aVZC+ZB7C964V2I1knLggdMY6KVEGK7H34eCQPC9Hvofq23swTF6m88q
IRpbcgnQewX5hvwHCJ9Zg4YHWRB77QNFT8gg1F9RUsZbQXTwSq+FKRkGn0RJ
KVnYpghPUUGYUr5RsmmTUseuJQ3kgGSlcwP+ODhk3Bh4XOA/1U8mn/4ub2zi
uiwrBzxge0E5Wmi8McJBmyFWHmhZEm2oDtSnV3M/v/PvrOamlduE8vsX/dfv
0xreOjU43kO3U4fDGf7/jTq8mm+sGrpHu70DG2mEa3QmJmn5WJ3J6yNUPg1z
+wJlhCVepIz4lLRIqhk3LPUMf8uaSXCH8d+VbVaTt9hszz1BREqDeUFKS1td
kSkJJaEIWwkf5MmN6tNKy8Buz5UMZ8pKhaoarPHgzWpqazO23px6Q/4jmSOo
AJi7K7GYv4FMvPcfmXgLmcikcbeSieEMt85yAOlFPIaEfVrAXh+YamfCmHTm
AZdSl7PLB5kkQc99ohF4O3jd4BseQAld+ixbi4QK4kCAcQAuxmYtSScMS/K4
eiY1Dk5OTPwGwLIjHyG+xFr2wFqPkUWFGHzDEb7DxVzVwWE5+f3WwZ0DXp93
l7OqOeTnfr/VwQYi7QAtxyHUCfkW3v4mPRTZWdh0Z5OeYKQLz7oVNHR4Pd+g
LQ1lUg9dH6/nvsaLuUaozckm/dPXG2k0yybNoVEw+VP79lup7w/fwcEdEoNh
L+pL8e73W1KYnhd2b1xf7lPWGPZiX6ceftxTh9O6Tn08+JDpidgG2ob/5bf3
79zBRvg/TbPBW9/sp1fd/fGbfbPfvo2q3eEPc7Qf3Dlcf3ro4B+B20XYrAQm
btEOIGvlggHiKKwZEiZnhVyrNrcHDH5GE2UJWLMnHE+fnPW7O31gsm9KAfD+
6sOhS3j/LjW9X05wDbTfdgVk4g/WTPxLmWyQRK94wnUpwlKfgtP6G6XYggZj
EmY5TO1rmoJImwHHAihjAcUuYDqkP1FqCtC/owY1JrqJHmXJttOOl2G2hZJT
lVXuKV9RqtrELsIzGfSuMMvmUvNE+JvGOZAWFEQImyubMromeAJGBdUJCTqi
zMlYbx6+6PrfK5c3cP6yr0dBcJa1AEvoXhSzuZ8ruF3Qs+Km0W3lqzj736ZZ
00UBKJMeEYbLofHsyzg2BULTV1XTjPDTPQ/EVGj0xjDnvZ4m2SJJmtx98tWI
xfx8lQPxlhTFRfQfomuWvooOclK4rjkVZik0pXOqnoLXsZbg8DMiHJFpwGEi
u4fQk5rtJE16xKdQpoobgThRcboS+R6cqjNgWFGUEu9RRj2mmiFuVEoVETeg
LJ5X+iUBiGfGYw6/6dYEPlKirdcBuFFrs/56feBXKQS/lUaQVAnSOsFGSsHH
agWhWrCBXoC9Ue39W/te9Ns1Vz/dO3rjyHVzd909z3tTDfW7/tr3cprubszr
JvHfTogFLzhcSCRe1f0pfyaZRye885jQ4d708r/lSdFXNtuy66987BrKJFHR
SLCCHfYtFyCCx91i+d+HT+bn3+pOHRImXZ92fwsebkBCuyv0W/xPeUx/GzwL
e+tbqzD6f8uL+EjwEuDwA3V0s+vD73d8iXSOb+2etUhm3M38jH5r/7Yfk0Fo
l0nZksVIql5yEj5fcxIwR1U1rvaBIGszmTNBpmZNnFREEUJMQVw9CwzXiN0E
M5eRQphgtNRuL3qKC/NNLN89YVK9DS2w4aq3TpkfhKoKnVTQuXudQxLHD3HO
uTu5RO4BpLmbE/1OcJduN2gKCNYEbm3MHxYTv8uA78rBYNogbsfn62EX1jAR
mcnqpeZprdET3uprr+zPo6vw1pf2mvTAjS2TxM3qLBAnIg/YFKED0v5S+7qw
P3Jg7h+m14fPxAvm8ZkvI6sOyHGYzwSSqUkFtLotHIDe/6zK8RtcTIRVc1Q/
rPXiFgPzpYnhLqhBQDphVy4z5cvAng1/H+v9z47+LBmJA9H6kxp1d5LToAe7
k6nQZkFSUz6qVzJwNMh8sBBLu1OqPMIhQd194dTa7KRpoKb975wtuMTw2ix7
XF1A1j7xf7z/DB6jp84WWNVTCDwB3VAvoLGQPbGGdktql0gTTHuM9kKGEc9q
o5Sv4hNmTkg17F5/j5kTYwDt13P0v3flFUAnxbdvu0ImDZFGOuPCrf9qxGaC
dBZIDhbIdb0vudDC/yIsnLxoEpOTBCHYAJgNger/GwxkuzUoyfAkls19CT9K
WxFvJgE/eEFMmXMCNcwy5DZmqiVKNT2ZSpB+8YZSYoCFqUHqZzCMkPm5Qbae
bOSeAw4O+2VTZV7JOw3ByrXyfXBtJQqWmGIRyIzhxv4ICMx4cUPSaVMhMvdf
IXsye/8eX3yFqEPXr4tyToUr3Nio0Ks0404tMwkwM6p1At95GBSV8GuB1uQV
xleldCWvH5YfnnLCAklw6Fxz6OTRdyVmm7Wq+lhSRrhDS6xFM/UmXVjaIrTm
MmPN4XO7u/LkEPMpdnejcjsgKYfZq3qE1KzUeapXy9a7+eq+Le2AYaQTSgAc
i3VqCo4yX04+mViiYFl/pKnBPUtntLlEojWBb3pCvR03r1dS35cqpPTNFrY7
+AxT3epZfX69/0gp3XgTn15gx64KRSpQOR7OZ8S3HgqmlNIeeQTYVc+3xWz7
KjM8QmLApS3CCcDXJekPJMbuKD9vdh/SxBOb9GHWUPcwjFURtIygWr53sLOD
NBniOHHr3dhVJBJsnBv2puVcbvXC7W4kIXaHHdZjAdgA6jMUrBHBgUfWfJYq
8yLbblFALBIJHCWFSxj5gldKDPC5TcTMXS+FsispeSK+lhdMfrwHKXqVCkHJ
omm/HwRxXiqLzqnmFTKPF+6DM89XrZmYUsaaZRhclRRF3LmG/+kLkkU8MJiu
xUltWCgIbgzKcMHoIpEYgcsoVdOI1T5esz85LQC5TDi1UzjrcukNfgW/SF0i
PBVpfsTJMaRSxJYAKuCDb/r8rd1dvIyJuBXrjQSkb3o99g93d1mD0lLYQoLq
a2hVyK0NsCVJYwswVig6mTl9B0xpUr2nzKkGioQ00Dco4v1yagKLFLcPfvfX
v7j/AuPz99tlXuXldHlYcDTx2EmR8WT7rz/DC/AmHJZx0zEUnt9FcV68C8cF
OxvhWDscfYdyvUBCQ8INl5e4TfEmBBIn/EPJ9ImXbqWweheqf7iAsC37UUfw
1oHDxPl2yENresJLTSJi28+sO3toMJwzfStEv0tvlGFEnCADwtUdFo0l6FAf
JdgEe8KcnCh1SLzpOk2Zy/ShbCEqEQ1M3p6SnOCAq/Nz8mvLFfj+/Z/xOEqO
5gnTwaY0Mpa5dPHsZTuPceww6er/J4TchaGWpelH5m082gWf7EVBwMgXL89O
Xjw/ehqNCidXWKCmRY7KMM4KnFXajcPsNZ92k6FgcnPZq4xmHLW9gwu/8GhC
XCwUICQ+YTBlI6eEO8/z+qjm0FPYU6w9CZapqkZJyj+24h7iNKArzox0iDRw
kN3KdNiUTi4z+aYo5tQn3CdM5Q8iEYohrpmmvZ7Zy5RFGss7w8FpMYrUQ2d6
LPN3uAvl9oMdqy/MZvqsyq+XmPaZzw6zJ7jZK1JXqdNzt19ZsRlw0csmh/v0
Gup1nksmccmlfwWG13jh5rry08tw9gSiaSjxG2LSvrpAucMFfKBZtBGh36PC
G/ewOdP31iONED1Gne8UeSQbciI84SOyQN1OWRJhD+XJmNmkgP1Xc41SJw8J
AA37JpWiqcyuUl6b4hSYGZpGvZMe9YOw/JIVRvhBUdvmdJ8uUPVXZE5ZEN9e
khMXa8BJzxmc5LdDTJAebHe1O7vK/inQEmatxV5tue2kAw97vVhAc0kbAEzN
GfZJBOdDsN+5thiXzw2J0PtEfaEMfK3nqcykf6Ifgsfioq+w0JOC9KyCgLC4
eLwBBCWtrrfJXo/vG1LvMyxbG59/rNcDQCpIJOBUV7Et451GBdRqZbhH1zek
KlT6KbqtBuBlqJEm3R8tSIRHixnql9RuBiofC9X3SWMYYDVrXQJ8Y8TFjpFK
3E4Dqz2lVF1vcfdjNTTlzOvRAfujaEH7QJ+oLKQx5D3MR6Yz8FrkXYs4Eo5D
kjFyvijRIQJXLEAGJCsixCvDX6AGHV493s8C6Ca3oy7nFriGhSRRkEF1dRyj
fg3VxfPnz076zqRhy0f+OFrxAR4VuqP3Azpjy+HrNqxoEu5zXCKRxtZc0GUn
nevL4YmBhcx7IiD+0bWpmCxpeTPMG7C1JgjTx+yYXMnZW2GsG229/7AF9xbo
WMxqDRycUFILRSDCDsYXNWa0F6hlsfaAn7JpBW6JZ/n5wJ57JxeAoZXrEsib
dLEv9sm+E8kGykeU1Y9JA2q9eIQJmQlDTwhKm8msWugeoausKsAjky9K15Rx
ewhGE5U/yK8cZE1Qziw49ksyb98g8UkMw88qN01wdEvYUOHOBEwCJW+yHoJX
qlpEQuYSGCFoILqXvB+oABfmazvBWN2rcboVONjw2iBZze6m0LRgieVumRHW
6yCucimvC8SZUUUB0bdPJoWHyFs2VlOnoJ0DgekMpA6E9h8lz/riK9OY4mgv
uEZYwwJYUSW0p1uyWWDTuUP6AqbtCvg2vJ1h3c9hGZ7cY3WZOcrQqQaC9BCm
O9b0OCtm90lbDZeSRORAUE/QbocKo9T+A8/F7/79O+XiZ20G2MaXi7xkKcu3
ApqwLTp8krFK5o9UOqjc6SN0F0yCOzrUM73KYL5UUw2LCt1yvkQ3SBhPVKGM
0Q+NTwWogtQVTLYSJ+4VwvRLtPAIxlmu5qbBiAU7WBt0RqhIctJ1uprJjsf7
/bI850QzPN/QcWXRAcFRYSGNsFwZpsghaJpYpvByB75cvt78pgosFkpEwRQl
9IWITmf73w/chSyYQq2Cti6oOm4W4H65LP/uOf1huHD7kUMgcOGiD0o+cASi
M/gLrdPz+k2Z7/+wyq+Kkt+XhaeNzXbCsakas3IT/bRw9gG66dMejz1yeGBu
XHHovYAowrlOKni3sEx1TkVSVXkWcmq3a58qV7scUG+vNpxE1cKihZtbVERS
DvW3zhBsvHTSm748d50KOH2Znanps1dliIcPSri4vXu+EH1KLNsFohhYmkON
lj1+y1n6TFtcwXrrQlg3IdpdPHc8eY36coZg1nQPISpKIS5zSSvwrYRVj5iJ
J0qExGuhWFzkcylXB6xaq0tICKQ9baj3WjoeKxO47YO10a6jF7vfChnk8NGh
PhU0GiR6oUNAIF36vPjMvSECcPuqQujfQxEVmh7ZFMUlZqCB8wcQGddc4DRl
/DTZDt3jwsbPYBecnbQolMN3EoVttFLTFcWiriq200Jpkqz5g5WjK6x1Xl07
wcmfOK0HIczN6sVBleVVZcsYmaItPvExxhakaqzEkmEGfOuLN3x5pwUC3lzt
O89fdHRTvX/vA1wfPrBd/D8rZP93ghfVnwUWM4UplNoPyCZnQ2OKsaygaBvu
of1iOZZaW+UCk0JFmzM3H4tHtoOuyO1/VTgljwvmkvoFUtdpxZgQyFeZ3mGG
Kg15Bkt2JExk1g2DNla/qfFqoIBj30sMvBeOJKh6sv3Wh+XiHTWmExZOnrJL
wxAgeXpRDOkje+zj+wM4tQ/JAjNXBBixOFZ2PeI97FRvLKxH3wquLonV+Q7x
RkR3lFlsA3ziSvABzJg8btZTiCu9L6nFmqIb7FNfSY6DB032tkkU6XV6IblB
1WvotOQFYmugWolo4h4hKhp1Z6TEF/z6XfYM8KPwX0Hxla5db/0sbBnDtXdI
PIrRRiPh5G/LdGUxiOwVM745OUaE6p5rC0+CV6J2VB3RqMbAqygLr4VWNQdQ
2X894ORW8lygbMAKHySRWw3g6d3rU7Gc8ILHA/r+fVe5UY4ne22bjDoiEGh8
MR8yJj3QM5oT9uUgrxtS6Dj7Xq6nGuGIkxKvX6SJhoN4PeTi9TCftAwjijRL
LhN4FE7VpdYUaP5O3HCXZeMpq23FDtrWO3jY+iZ0inhqE8ONt4SZrZjbNKOQ
mHX3UriE3CVx4Jd6QPViUK5xLdZ9Jf7jX7CzHmWNlG8xm5GCi+y8pqO4jbHm
bbj69pdXtVZ5LavIiMsoxDE3HKxqi8PFYRvlfU/uX16wR6fHL6XGXkPhFvcN
Hk7OCApY8FUTlr2wSyECiQoaud2Ue0PCjhzOBUlZtWC0TgmYDlT2phj+rQFY
mNuO6Drawv8UzwmU4MivRx4xg64Or9Jo0NeeFsO+EMHQSXYZMw208YSHLjTt
3HCxa/FjThiC5pWzVu/Ex3jh7q9EgTY822FJtocaYPQh99N0b4zCvmKKRMDd
POfLZsr+RPuO25SF1wKpdzvWa0SyIJInXAmGpxi1Sc/+0t/zaxIUYSq5Uqf3
Kzk1t1gQP+2qMI59KltOHI5SQnAclt9KymWJ1QVuIxWh1HfV9Zypk1dwk00Z
WjEhCX2Tb55jq1fikZNSdbl4ZrZc34Zb3fWk+nutJR3Q5X5Knue5YhNgprFT
9hXxM6NTpJzwqOkcZdtM6Lwtr0JaJOgb55QzpvUMgeKbVLcRxifZuNrrukWT
Q2GUleIkBl33JUJ9oFa1ev/GM9fLxVozAIEbF1RubKFiMbrXfI0xqeJo4U2Z
eK8tP0aNaUiXRU5uj5FEWTToDKoNEmlMWPXC64QXCUv9OBX4vLrkgrLqTlUT
64qbZhckNG/q3NiiUqooCU0Hp9jUb3yCn7XHfNAgwanarMbgaeUKWmxvUpCP
ZTjnKjlVc5ELybcHSKKwcB9Jw7UCBm8cU7qYDSA44E1EDyBOQ9sA+69ti6of
uaMQMq2RIJfdjJ1M6UJjYy6B3fJzj/dKuhQLV4sWq1uDZJ6pJBRfgYuYp8Eo
AARY1gyuy2t7kCV6jd1JtU/hRMq4puLRsoA7tQgpL4yN046KMrcj7OVETd1r
FlUUc3G9u1qUy3baYD8Edr3QB0uCGYGpMCly9mFiX/elm5bKObyAjPHyyirl
EBib1F3DksWAWwLkWlqu7FyJF59EfNfNwJId4pVuBH1S0QBaHpfsGphLFFUE
ac1LTs1F5EsTHwtBoQsWRqzWiFe+Q9CBD90CCQLIMl9Gl6RvzmzpqUj9Fspf
7/0lNZZN8EZVI2XWqTR2AIfZ924/PdngVXQrg0rT7Dr03Indp7IXWnSXIcmf
KVSpHs0KtQYpY9BglrQlEg4ClqCC5RTUbUz18cr7kpWYfiOMnXo5LbIyCUwJ
PGKe8MMdenc43K1SaXCIETYaUIIDViQLY2YG/6vJmxMjrIQuJQhdk5L/MPBf
J+PhE4aqSqS+ES82hJgI2YyEUJTU6wQEH/jXvPMwREDnl6xfGkVuKKRyvGAk
dvUw28H+vJSwlpu0vrirGEDH/GhIE1/TvankqeQPhtbL5jIolKqIlyqUmOi2
ZRJuP/CAzlAbFMc4T1nYkTg9mEINsKcLLBBIMSlforUkYjuWZt8VVV0uD0mz
ilwNpJ+4Hkwhs4LwPTtuHK+/f3oM43nx8vT193t9CXbxHmT/nWCHyMdTn+Nl
D4cKsEIHd+9aP19PIO557KPR6nA5OxNidEq+jFKXQbCk5EqWPA47hlZHeEbQ
f9WPjOQw9sdRKAu9pe49jCN/RjloPdywrQr4gEgC2jA3GSbuQGE0gqIEisam
AStyAyLXVEULHVTtB/6wqkoYMFWLpbBNI/2JACCIhIaLmXqB4OdLrkoobkte
DxsHLNzTGMUSx1yrLiUKQ62JMgh9EYjPff7iTHJzGJoZFbydLnnVbGVdClvg
ynHavWvnIaVepTWygb2tQIuCSecyJuC+gVMFPh9KF105XXoG3XxTQX1RhRj/
z6pYBYU3JhBm5fBBYByJxSPHTgarD7Jv1XffewVkXkAyO4tvAf53BuCFmL/s
5Ys/kWqjUXrhe1pgDN4datLzpW10nk4E/uhrstcUAXUj5riRIXuWWAKd3bBs
NupBrA8vnCW9IMgErWgI0OJqdhJxpbApQIvGkKoCEsiZV010Gjn+i1qgbgBW
Npmv1d0VLRnwsBeuhn/1d6qliiMdThL5+zwfZC882/9bUZuQxRguAVXvljdO
Oc4GqqyHPDKMgFVFhMTX87nh9bLxGhD/si7grxIjhutXa25AXDIZtoDrmF8u
SSYK+AgSgRy5yCkTx71raURZSxW3nVTa7SDYxb+2xJ91+qVPZ98KF7FEAU6q
BkjQYylNBXXGYttD1TkCS6arM+3fqD81TlEQpqaDA736ZEPBl50hMbRbCYO/
XKU3CrdXtT7yeDQqKne5Kz5JKlCB7yVgXCXwjL4okuQ1uroiigmBBDF2h+4V
0oiYORTVV1B22elYLzA/pqQYI3pmIEOXAVeAHPIj8JXqJc+HyqLnS9sPGrIw
qJTCyjFf4SLBV3QsT2thnp0Vb3MsXo87jsrthXq6+YIIN+h8oUpea4bcrodw
FlGOACYE63C7zspvJzV8AvmCQbB4iRDmLjEUATU8Ds9jkBUQMiY22jpR6iBh
zUeSxfBNiF2wcCmwBnhxKTM1VugAx1Yhmr4PK0OWN5Znw97kY7ldCcaCiULd
yFwAMK7Gb/jDCSCST0KLHDdYDnN8IRmy3tIsY0jGwMdUKS8dNxM9DxN5qHeQ
8vyOig53Nlc2sE5dm+s+CphyMZOQNnPbeKlbt8ZQrg2IIHindhi7DvspFobv
bGBJf0RH22504a5EgKYgFtb23nd0dzeO0GIpeuhsANjlAwoqRQw1XlWUJ4SO
tz2TkOTbbrVpk2owEgyHA/mmMfYmfD564bOqLpFiaY8VPQkcJ7/dOa6uLf/s
6M/7rFqRO7Zt9/P29vpt7ZtFUH7Q4KopgpIXrfaC9wXzk44cC8LDi1PhPAAM
rCbocDgXjxk6otvu5AGXZUcoTvgR9qFwhrZbnnBmycKEaBb4ywAdvpqboL5n
kkJhp9ikBAtF4lTskMID0XyKxibCRrTTNWhgXw8CgxBP/bHimm3GrLY9G4QR
yaXybvnLw/VJoNN0d5G2uwS2RTqynDfUBdynlBvxvnPKNmZAeysCKgvsLfaW
amTALYfGsMI0BHKBMJIlZQIUqNzSCoU3kMDtAsR4oLu4+7OY4e2dQ/Jy0wYy
qWkAKquzaoTWBS/ghn1aOecEiz5aV53sGMZvaFZcAe+L+k2x6FvDidRISbvw
cHrsMNVwQIHp70UkzF9dehPS+6BGRTgZnB5RRyS7wS7dMVLCR7j6HoPIuIWE
jCBYYpgs6ifbZAh40TBIAF1CYSewyxA4r+Oz8SXX7t+gWIHng8+Rtiw1TnFy
R35K7S5lKrnLyN4GDP8qq7f17G2h+wEtcZQzeOj166O8UeDnEeFhg0Gw85NN
leVF0WZwVx9kdFEzYJotbTrrDG1rR+aCHbO7+0gULU5cqY0utQBh7hq5Lpa7
Xcjql8UC/ddY/O5VMSuFcvB3oS/2GQ0MyGVNzHHf5/iaNmM/fZwZL3D8qGpl
/BqGe4AqkP6A9XVZePDZWmJhdHDhlNV0kXvGEUrQgYHBkmp9RMpJB+HJdCjv
yssAcgD4ZXdrL8c2ECJihGYYrH6o2FrWcJcHinPaEx/4O31kwneWyyB0RVZb
mYsaXFBITUeoIgKBXyFovCGvMqk9AwRmlk2WsjX9CccMoamblgvRNSn8IlUy
6TSUmtkko7QB2UOsMEE3DJRcxqIDoFowRAVVkpl6juu5181a2AlO4oXN4UyA
iJWgQr4U6nOpOcAIq9cLAbQqsT289CIg61RKIixNpkFbLYI+INJ7nWokGpDe
FkHeyuKa0dCXq3cEJtSkJ98SeyTOjl/2u4Imx3UlZxiX5Njgekz4VrFYdIDG
5i3MaTFvCQtHiGraGdWUpLIRvkPztM5ChhlRKC/Ld7j93WbAdgVFZOFOJq2C
3TFvnap4nVftrw3CAVAiIA0YrwSGQ5lHcBaYaolRyyFiDWZFukNKLilEi/OV
5AU5LSpDYXZO7tA9H6yUm0r9r5EGaflndzi5d7SgaN9q3ufwkicQjWvBoBIA
SWqA3zxq3UQ1QChilx3F9kjAC1aHIGWAUEORCFeG3HMSXH6J6qqqxol4v4yE
xn/83YtX2enJIw38CXquQrOORVDlLx5xObDhAh+CNkjiLjXfHon00aJE8WQs
DsCHMCbJfVfNuXVmv6CdJd3ZU51Cz6cl1SKG0eClI2VteCPLXKk7ADsIJXe5
FLURCgUJFYGeuk2oe9DKg0Xhyzi4Z4O9iigm5i8is7Fvme2YmSeUhNKpZGpg
0D3R5sQCQKcIpQFeB9TAnkpuuqrGdFfDXgIDzoNo6SBPnMFRVG5AbF7k8WbE
ilWsWaIE8AQt8HxI18IHi1cSKaJQ8qSXND79LdHA7llhfHrM5bHp9tGwHvkh
WVJIV00arSZ5ZpiBgiFJRPZmgp4Y+JADLYZHkoswBgUf/YlUmitvpTpo2rj7
20V5fhHfhnhzoNqqSneUDJa+NhS2+gzpXRrmwYFLbd0rp+LGOA7dGDu/y54f
HT/znAZ9XLLnsQMDzho+aKzkcK1lO8IGoW0V4PPedoIzSF4wwxiYpOJSv8DE
5cuSbRt2OsK5BooNLfUUuQ4F02MPKSoCVHKPK4A0HGdH4YfnTwDNZ4CEwORq
TH4aERMXfJ0mCiJbESmRsyhMHBm9+bD8K0gyiR7F14ktW1bEhOcle3Rl++UE
Q1+NF05XHhvjC445LQ3nSBMRTJxsi5FXjbS8Jl+pKKj4ZZWKgsreEblZLjd0
h/UTCD3iWyHV38hizwNDBWk+fFDOJY6x+w3MXkWW0cGCT4M9Qmec4ruUJojm
Mn6LqrSSywWXIfZytb4LLpEgo0OcxrDPvW/ZJw1UQUrITqg38of6nCrSXv91
5/fk6PlRcDIhqaWE3p6XkDyrSCYpE+PEZjG0EnQPmKvgC//v/5P+xNEcLfF3
Bad5PJZqJ/JcGVmPZCFCwcBcaaO4vi/OO0ngy7pRHI8WUElQ8+FOmc4KcSGq
07AJ7kIvlfe4SIuSSSLedQLpNeAbkP4yU2TOo1MQAngXqglKknJGW5MZH/df
f4/qG9xXxjEhx4LpznT5BVKI1iUMw73+9JiO2SuCDHeE9Sg1OYjs1XNgfNw5
prtKVc27B9mTYpTdvT/IVpW/5RGRDHhcOncYZwRxUFRvi5m7EgAk1iyxCxSG
5WgvZ1WifoKnD2vk9LOdR0hqYL4nBxrCWIQDCyzXLgD2oJvzx7NH4L21IC2C
NsjlXncX9DPNKEDzC0ng8iJMfx4VtmBiZ7M2DYPYN2Fz+PT9lLt4neGfnsT/
D9dahiJeUQMA

-->

</rfc>
