<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-jennings-moq-metrics-03" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="moqt-metrics">Metrics over MOQT</title>
    <seriesInfo name="Internet-Draft" value="draft-jennings-moq-metrics-03"/>
    <author initials="C." surname="Jennings" fullname="Cullen Jennings">
      <organization>Cisco</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>fluffy@iii.ca</email>
      </address>
    </author>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>art</area>
    <workgroup/>
    <keyword>metrics</keyword>
    <keyword>moq</keyword>
    <abstract>
      <?line 42?>

<t>Many systems produce significant volumes of metrics which either are
not all needed at the same time for consumption by collection/aggregation
endpoints or may also compete for bandwidth with the primary application, thus
exacerbating congestion conditions especially in low-bandwidth networks.
Delivering these over architectures enabled by publish/subscribe transport like
Media over QUIC Transport (MOQT) <xref target="MOQT"/>,
allows metrics data to be prioritized within the congestion context of the
primary application as well as enabling local
nodes to cache the metric value to be later retrieved via new subscriptions.</t>
      <t>This document specifies how to send metrics type
information over MOQT.</t>
    </abstract>
  </front>
  <middle>
    <?line 57?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Systems often share the network bandwidth used for metrics with
realtime media, which impacts the media quality. Metrics compete with
media for bandwidth, reducing the peak bandwidth available to the primary
application and often causing congestion in low-bandwidth networks.
There is a desire to transport metrics at an appropriate priority level
over the same transport as the application media. This allows metrics to
take advantage of times when the media bitrate is below the peak rate,
without impacting the peak rate available for media.</t>
      <t>Publishing metrics over MOQT also allows MOQT relays to act as caches
that store metrics close to where they are produced. Instead of sending
every metric to collectors, metrics can be cached in relays and retrieved
only when needed, enabling "just in time" delivery of metrics
(see <xref target="retrieval"/>).</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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?>

</section>
    <section anchor="arch">
      <name>Architecture Overview</name>
      <t>This section describes two deployment models for metrics over MOQT. In
both, resources publish metrics as MOQT tracks (see <xref target="moqt-mapping"/>) to a
relay, and metrics collectors subscribe to them via relays. Relays cache
metrics so that collectors can retrieve them later.</t>
      <section anchor="arch-shared">
        <name>Metrics Sharing a Session with Media</name>
        <t>In this model, an endpoint such as a realtime conferencing client
publishes its media and its metrics over the same MOQT session, and thus
the same QUIC connection, to its ingress relay. Media and metrics share
the congestion control context of that connection, and MOQT priorities
(see <xref target="priorities"/>) determine what is sent when the available bandwidth
is limited.</t>
        <t>At the relay, media and metrics are forwarded to different destinations:
media to the other participants, and metrics to a metrics collector,
possibly through other relays. The relay does not need to treat the two
differently beyond the track names and properties.</t>
        <artwork type="ascii-art"><![CDATA[
                  one QUIC connection
              (shared congestion control)
+------------+                   +---------+  media  +--------------+
|  Endpoint  |      media        |         |-------->| Participants |
| +--------+ |==================>|         |         +--------------+
| | Media  | |                   |  Relay  |
| +--------+ |      metrics      |         | metrics +--------------+
| |Metrics | |==================>| (cache) |-------->|   Metrics    |
| +--------+ |   (pri 128..240)  |         |         |  Collector   |
+------------+                   +---------+         +--------------+
]]></artwork>
        <t>When congestion occurs on the endpoint's connection, objects of the
higher granularity metrics levels are the first to be delayed and, with
OBJECT_DELIVERY_TIMEOUT, dropped, while media is unaffected. The relay
continues to cache what it has received, and a collector can retrieve
the metrics for a time window of interest later using FETCH
(see <xref target="retrieval"/>).</t>
      </section>
      <section anchor="arch-dedicated">
        <name>Metrics as the Primary Data</name>
        <t>In this model, the endpoints, such as servers, network devices or sensors,
send metrics as their main data over MOQT. Each endpoint publishes its
metrics tracks to a relay, which may aggregate many endpoints, and one or
more metrics collectors subscribe to them.</t>
        <artwork type="ascii-art"><![CDATA[
+------------+
| Endpoint 1 |--metrics--+
+------------+           |
                         v
+------------+      +---------+       +---------+     +-----------+
| Endpoint 2 |----->|  Relay  |------>|  Relay  |---->|  Metrics  |
+------------+      | (cache) |       | (cache) |     | Collector |
                    +---------+       +---------+     +-----------+
+------------+           ^                 |
| Endpoint N |--metrics--+                 |          +-----------+
+------------+                             +--------->| Dashboard |
                                                      +-----------+
]]></artwork>
        <t>Collectors discover endpoints and subscribe to the levels of interest
(see <xref target="discovery"/>), while the remaining levels stay in relay caches until
needed (see <xref target="retrieval"/>). Multiple consumers, such as a collector and a
dashboard, can subscribe to the same tracks through relays without the
endpoint sending the data more than once.</t>
      </section>
    </section>
    <section anchor="model">
      <name>Metrics Data Model</name>
      <t>Below picture captures relationship between the entities in the data model.</t>
      <artwork type="ascii-art"><![CDATA[
+---------------------+
|      Resource       |                  Attribute
|       - ResourceID  |
+---------------------+                 +--------------------+
   |                                    |    Key: String     |
   |                              +---->|   Value: String    |
   |                              |     +--------------------+
   |    +------------------+      |
   +--->|Attributes [0..n] | -----+
   |    +------------------+             +--------------------+
   |                              +----->|Metric Name: String |
   |                              |      +--------------------+
   |    +------------------+      |
   +--> |      Metric      |------+    +--------------------------+
        +------------------+      |    |      TimeSeries 1..n     |
                                  +--->|    [{time, value}, ...]  |
                                       +--------------------------+


]]></artwork>
      <t>The devices or systems publishing the metrics are referred  to as "Resources" and have an
unique "ResourceID".</t>
      <t>Each metric reported by a <tt>Resource</tt> has an associated <tt>timeseries</tt>. A metric's timeseries
is time ordered set of values (observations at points in time) for the corresponding metric.
Metric names are represented as strings and may contain ASCII letters, digits, underscores,
and colon. A metric's value can be one of "Gauge" or "Counter". The "Gauge" value type
represents a scalar  value that always represents the current value being measured. The "Counter"
value type is a cumulative value that represents a single monotonically increasing value that can
increase or be reset to zero on restart. The Gauge and Counter can represent either a 64-bit
floating point value or a 64-bit integer value.</t>
      <t>Resources also define zero or more <tt>Attributes</tt>. Attributes capture the dimensional data to
identify any given combination of them for the metrics reported by the resource.
Attributes are represented as key-value pairs and represented as strings.</t>
      <t>The data model specified in this section is consistent with the
OpenTelemetry metrics data model <xref target="OTEL"/> when at rest (also known as
Timeseries model). See <xref target="moqt-mapping"/> for streaming model where
MOQT is used for transporting the metric data.</t>
      <section anchor="resourceid">
        <name>ResourceID</name>
        <t>Each resource that creates metrics has a unique "ResourceID". This is created by
taking the MAC address of the primary network interface in binary,
computing the SHA-1 hash of it, and truncating to lower 64 bits. Note
that SHA-1 does not provide any security properties here; it is just a
hash that is widely implemented in hardware. If this is not possible, any
other random stable 64-bit identifier <bcp14>MAY</bcp14> be used. The advantage of using
the MAC address is that many other management systems use this address and it
makes it easier to correlate. The disadvantage is that it reveals the
MAC address.</t>
        <t>When carried in MOQT names, the ResourceID is encoded as exactly 16
lowercase hexadecimal ASCII characters.</t>
      </section>
    </section>
    <section anchor="moqt-mapping">
      <name>Metrics and MOQT</name>
      <t>This section maps the metrics data model defined in this specification to
the MOQT Object Data Model (<xref section="2" sectionFormat="of" target="MOQT"/>). The
core idea is that the names of the MOQT tracks are set up such that a
subscriber can discover and subscribe to each resource reporting metrics
separately, pick the right granularity level, and select individual metrics
using MOQT filters, while relays cache and serve past metric values.</t>
      <section anchor="naming">
        <name>Track Naming</name>
        <t>Each resource publishes its metrics under the Track Namespace consisting of
the following three Track Namespace Fields, each encoded as ASCII:</t>
        <artwork><![CDATA[
("metrics.moq.arpa", "v1", <resourceID>)
]]></artwork>
        <t>The Track Namespace Prefix <tt>("metrics.moq.arpa", "v1")</tt> is common to all
resources, which allows a collector to discover all resources
(see <xref target="discovery"/>). Within a resource's namespace the following tracks are
defined:</t>
        <ul spacing="normal">
          <li>
            <t>One data track per granularity level. The Track Name is a single ASCII
digit identifying the level (see <xref target="levels"/>).</t>
          </li>
          <li>
            <t>One catalog track with the Track Name <tt>catalog</tt> (see <xref target="catalog"/>).</t>
          </li>
        </ul>
        <t>Using the serialization format in <xref section="8.8" sectionFormat="of" target="MOQT"/>,
the Warning level track of the resource with ResourceID
<tt>8f2c4a1b0e9d7c63</tt> is rendered as:</t>
        <artwork><![CDATA[
metrics.2emoq.2earpa-v1-8f2c4a1b0e9d7c63--4
]]></artwork>
      </section>
      <section anchor="levels">
        <name>Granularity Levels</name>
        <t>Following granularity levels are defined in this specification, along
with their associated track names and default publisher priorities
(see <xref target="priorities"/>). Higher levels carry more detailed metrics: in this
document, "lower levels" refers to Emergency (0) towards Error (3), and
"higher levels" to Warning (4) towards Debug (7).</t>
        <table>
          <thead>
            <tr>
              <th align="left">Level</th>
              <th align="center">Track Name</th>
              <th align="center">Default Publisher Priority</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Emergency</td>
              <td align="center">
                <tt>0</tt></td>
              <td align="center">128</td>
            </tr>
            <tr>
              <td align="left">Alert</td>
              <td align="center">
                <tt>1</tt></td>
              <td align="center">144</td>
            </tr>
            <tr>
              <td align="left">Critical</td>
              <td align="center">
                <tt>2</tt></td>
              <td align="center">160</td>
            </tr>
            <tr>
              <td align="left">Error</td>
              <td align="center">
                <tt>3</tt></td>
              <td align="center">176</td>
            </tr>
            <tr>
              <td align="left">Warning</td>
              <td align="center">
                <tt>4</tt></td>
              <td align="center">192</td>
            </tr>
            <tr>
              <td align="left">Notice</td>
              <td align="center">
                <tt>5</tt></td>
              <td align="center">208</td>
            </tr>
            <tr>
              <td align="left">Informational</td>
              <td align="center">
                <tt>6</tt></td>
              <td align="center">224</td>
            </tr>
            <tr>
              <td align="left">Debug</td>
              <td align="center">
                <tt>7</tt></td>
              <td align="center">240</td>
            </tr>
          </tbody>
        </table>
        <t>Mapping of metrics and its reporting frequency at the aforementioned levels by
a resource is application defined. However, it can be typical of an implementation to
report metrics that represent aggregation of values over larger time intervals
or that represent erroneous conditions, to use granularity that is one of
Emergency, Alert, Critical and Error. Such metrics have characteristics of
being less frequent and hence consume lesser bandwidth. Metrics that are
captured more frequently and capture detailed view of system being measured
typically are reported at the Warning through Debug levels. Such metrics,
however, consume high bandwidth when published.</t>
      </section>
      <section anchor="catalog">
        <name>Catalog Track</name>
        <t>The catalog track describes the resource and the metrics it publishes.
Each catalog group is one version of the catalog, and its objects mirror
the objects of data groups:</t>
        <ul spacing="normal">
          <li>
            <t>Object ID 0 carries the catalog header.</t>
          </li>
          <li>
            <t>Object ID N, for N &gt; 0, carries the Metric Description of the metric
with Metric Index N.</t>
          </li>
        </ul>
        <t>The Metric Index of a metric is the Object ID of its Metric Description in
the catalog group, and is also the Object ID that carries the metric's
value in data groups (<xref target="groups"/>). It is not encoded in the Metric
Description itself. Metric Indices are unique across all data tracks of
the resource within a catalog version. A subscriber uses the Metric
Description with index N to interpret Object ID N of any data group that
refers to that catalog version.</t>
        <t>The catalog header and metric description are encoded as follows, using
the notation of <xref section="1.3" sectionFormat="of" target="RFC9000"/> and the variable-length
integer (vi64) of <xref section="8.1" sectionFormat="of" target="MOQT"/>.</t>
        <figure>
          <name>Catalog Header (Object ID 0)</name>
          <artwork><![CDATA[
Catalog Header {
  Version (vi64),
  Number of Attributes (vi64),
  Attribute (..) ...,
}

Attribute {
  Key Length (vi64),
  Key (..),
  Value Length (vi64),
  Value (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Version: The catalog format version. This document defines version 1.</t>
          </li>
          <li>
            <t>Attribute: A resource attribute, where Key and Value are UTF-8 strings.</t>
          </li>
        </ul>
        <figure>
          <name>Metric Description (Object ID N &gt; 0)</name>
          <artwork><![CDATA[
Metric Description {
  Metric Type (vi64),
  Value Representation (vi64),
  Name Length (vi64),
  Name (..),
  Unit Length (vi64),
  Unit (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Metric Type: 0x0 for Gauge, 0x1 for Counter (see <xref target="model"/>).</t>
          </li>
          <li>
            <t>Value Representation: The encoding of the metric value in data objects
(see <xref target="groups"/>): 0x0 for an unsigned integer, 0x1 for a signed
integer, 0x2 for a floating point number.</t>
          </li>
          <li>
            <t>Name: The metric name, in ASCII (see <xref target="model"/>).</t>
          </li>
          <li>
            <t>Unit: The unit of the value following <xref target="OTEL"/> conventions, or empty
if not specified.</t>
          </li>
        </ul>
        <t>Receivers <bcp14>MUST</bcp14> ignore any bytes following the fields defined in this
document, to allow future extension.</t>
        <t>The Group ID of a catalog group is the catalog version number. The first
version has Group ID 1, and each new version increments it by one, so the
reference carried in every data group (see <xref target="groups"/>) stays small. The
publisher <bcp14>MUST</bcp14> publish a catalog group before any data group that refers
to it.</t>
        <t>Metric Indices are scoped to a catalog version: a new catalog version <bcp14>MAY</bcp14>
assign indices differently. Publishers <bcp14>SHOULD</bcp14> keep indices stable across
versions, which keeps Object ID filters valid (see <xref target="filtering"/>) and
allows unchanged metric descriptions to be reused.</t>
        <t>Because each metric is described by its own object, a subscriber does not
need the complete catalog before decoding data. It can decode the value
in data Object ID N as soon as it has catalog Object ID N of the referenced
version, and it can retrieve only the descriptions it needs by applying
the same Object ID filter to the catalog track as to the data track.</t>
        <t>A subscriber <bcp14>SHOULD</bcp14> subscribe to the catalog track in parallel with the
data tracks, using FILL_PARAMETERS selecting the current group
(<xref section="3.5" sectionFormat="of" target="MOQT"/>), and hold data objects until the referenced
catalog objects are received. Catalog versions rarely change, so
subscribers <bcp14>MAY</bcp14> cache them per Track Namespace and catalog version and
use a cached version without waiting. A subscriber that receives a data
group referring to a catalog version it does not have retrieves it with
FETCH.</t>
        <t>The catalog track <bcp14>MUST</bcp14> use subgroup delivery and <bcp14>SHOULD</bcp14> carry the
following Track Properties:</t>
        <ul spacing="normal">
          <li>
            <t>MAX_CACHE_DURATION no shorter than that of any data track of the
resource, so that cached data remains interpretable.</t>
          </li>
          <li>
            <t>DEFAULT_PUBLISHER_PRIORITY numerically lower than that of any data
track of the resource, so that catalog objects arrive ahead of the data
that depends on them. This can place the catalog ahead of media using
the default priority, which is acceptable given its small size and
infrequent changes.</t>
          </li>
          <li>
            <t>No OBJECT_DELIVERY_TIMEOUT.</t>
          </li>
        </ul>
      </section>
      <section anchor="groups">
        <name>Groups and Objects</name>
        <t>Each group in a data track holds the set of metrics captured by the
resource at one point in time. The Group ID is the capture time in
milliseconds since the UNIX Epoch (00:00:00 UTC on 1 January 1970). This
satisfies the requirement that Group IDs increase with time
(<xref section="2.3.1" sectionFormat="of" target="MOQT"/>) and allows subscribers to
express time ranges directly as Location filters (see <xref target="retrieval"/>).</t>
        <t>Each group is independently useful: decoding a group requires only the
objects in that group and the catalog version it refers to. Objects
within a group are:</t>
        <ul spacing="normal">
          <li>
            <t>Object ID 0 is <bcp14>REQUIRED</bcp14> and carries the Capture Info.</t>
          </li>
          <li>
            <t>Object ID N, for N &gt; 0, carries the Metric Value of the metric with
Metric Index N in the referenced catalog version, observed at the
capture time.</t>
          </li>
        </ul>
        <figure>
          <name>Capture Info (Object ID 0)</name>
          <artwork><![CDATA[
Capture Info {
  Capture Timestamp Offset (vi64),
  Catalog Version (vi64),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Capture Timestamp Offset: The nanoseconds to add to the Group ID, in
milliseconds, to obtain the precise capture time. The value is less
than 1000000.</t>
          </li>
          <li>
            <t>Catalog Version: The Group ID of the catalog version used by this
group (see <xref target="catalog"/>).</t>
          </li>
        </ul>
        <t>The Metric Value is the entire object payload, encoded according to the
Value Representation of the metric:</t>
        <ul spacing="normal">
          <li>
            <t>Unsigned integer: a vi64.</t>
          </li>
          <li>
            <t>Signed integer: a 64-bit two's complement integer in network byte
order.</t>
          </li>
          <li>
            <t>Floating point: an IEEE 754 binary64 value in network byte order.</t>
          </li>
        </ul>
        <t>A resource that does not report a given metric at a capture time simply
omits that object.
A subscriber or relay cannot infer anything from a missing Object ID
(<xref section="2.1.2" sectionFormat="of" target="MOQT"/>). The publisher <bcp14>MUST</bcp14> therefore include the
Prior Object ID Gap Object Property (<xref section="10.9" sectionFormat="of" target="MOQT"/>) on the
object that follows any skipped Object IDs, signaling that they do not
exist in the group. The publisher <bcp14>MUST</bcp14> also end each group with an
object with the End of Group Object Status (<xref section="11.1.1" sectionFormat="of" target="MOQT"/>)
and an Object ID one greater than the largest Object ID carrying a metric
value, so that the receiver knows that no further metrics exist in the
group, including skipped metrics after the last value. Object Status is not
carried in FETCH responses, which convey non-existent objects as
described in <xref section="3.2.2" sectionFormat="of" target="MOQT"/>.</t>
        <t>Resources typically do not capture metrics every millisecond, so Group IDs
in a data track are sparse. The publisher <bcp14>SHOULD</bcp14> include the Prior Group ID
Gap Object Property (<xref section="10.8" sectionFormat="of" target="MOQT"/>) on Object 0, set to the
number of milliseconds since the previous capture minus one. This allows relays and fetches to know that
the intervening groups will never exist, rather than leaving them in the
unknown state.</t>
        <t>All objects of a group <bcp14>MUST</bcp14> be sent in a single subgroup with Subgroup ID
0, so that Object 0 is delivered ahead of the values that depend on it.
The Datagram delivery mode <bcp14>MUST NOT</bcp14> be used. An example of a group is
shown in <xref target="examples"/>.</t>
      </section>
      <section anchor="track-properties">
        <name>Track Properties</name>
        <t>Publishers <bcp14>SHOULD</bcp14> include the following Track Properties
(<xref section="8.4" sectionFormat="of" target="MOQT"/>) on each data track:</t>
        <ul spacing="normal">
          <li>
            <t>DEFAULT_PUBLISHER_PRIORITY: see <xref target="priorities"/>.</t>
          </li>
          <li>
            <t>DEFAULT_PUBLISHER_GROUP_ORDER: Ascending (0x1), so that collectors
receive samples in capture order. Subscribers interested only in the
freshest value, such as live dashboards, <bcp14>MAY</bcp14> request Descending group
order.</t>
          </li>
          <li>
            <t>MAX_CACHE_DURATION: the retention time for which relays may serve
cached samples. Lower granularity levels are typically retained longer
than higher granularity levels.</t>
          </li>
          <li>
            <t>OBJECT_DELIVERY_TIMEOUT: for high granularity levels, a timeout after
which a stale sample is dropped rather than delivered late.</t>
          </li>
        </ul>
      </section>
      <section anchor="priorities">
        <name>Priorities</name>
        <t>Metrics are expected to yield to the primary application under
congestion. The publisher <bcp14>SHOULD</bcp14> set the DEFAULT_PUBLISHER_PRIORITY Track
Property of each data track to the value in <xref target="levels"/>, or another value
that keeps lower granularity levels ahead of higher granularity levels.
These values are in the lower priority half of the range, behind the
MOQT default of 128 typically used for media, with Emergency at par with
the default.</t>
        <t>Subscribers can adjust the relative importance of metrics against other
subscriptions in the session using the SUBSCRIBER_PRIORITY parameter,
which is considered before publisher priority.</t>
      </section>
      <section anchor="discovery">
        <name>Discovery and Subscription</name>
        <t>A collector discovers resources by sending SUBSCRIBE_NAMESPACE with the
Track Namespace Prefix <tt>("metrics.moq.arpa", "v1")</tt>. The relay responds
with a NAMESPACE message for each resource namespace, and NAMESPACE_DONE
when a resource stops publishing.</t>
        <t>For each discovered resource, the collector subscribes by name to the
catalog track and to the data tracks of the levels it wants to receive
continuously, for example levels 0 to 3. Resources that start publishing
later are learned from subsequent NAMESPACE messages. Tracks of other
levels are not subscribed to and remain available from the relay cache
via FETCH (see <xref target="retrieval"/>).</t>
      </section>
      <section anchor="filtering">
        <name>Filtering</name>
        <t>MOQT Range Filters (<xref section="3.3.2" sectionFormat="of" target="MOQT"/>) carried
in SUBSCRIBE, FETCH or FILL_PARAMETERS allow a collector to further reduce
the data delivered within a track:</t>
        <ul spacing="normal">
          <li>
            <t>An Object ID range filter selects specific metrics by Metric Index.
The filter <bcp14>MUST</bcp14> include Object ID 0, which identifies the catalog
version. For example, ranges <tt>[0, 0]</tt> and
<tt>[3, 5]</tt> deliver Object 0 and the metrics with indices 3 to 5. The same
filter applied to the catalog track delivers only the catalog header
and the descriptions of those metrics. A subscriber updates its filters
when a new catalog version assigns indices differently.</t>
          </li>
          <li>
            <t>An Object Property range filter selects individual samples based on
application-defined Object Properties. For example, an application can
mark samples that cross a configured threshold with an Object Property
from the application-specific range, so that a collector subscribed to
a high granularity level receives only those samples. Such properties
are outside the scope of this document.</t>
          </li>
        </ul>
        <t>Range Filters are only available when the relay advertises a non-zero
MAX_FILTER_RANGES. Collectors therefore treat filtering as an
optimization and <bcp14>MUST</bcp14> be able to process unfiltered tracks.</t>
      </section>
      <section anchor="retrieval">
        <name>Retrieval of Past Metrics</name>
        <t>Since Group IDs are capture times in milliseconds, a time range of
metrics corresponds directly to a range of Locations:</t>
        <ul spacing="normal">
          <li>
            <t>A collector retrieves past samples for a time window <tt>[T1, T2]</tt> by
sending FETCH with a Location filter from {T1, 0} to {T2, max}. The
request is served from the relay cache, subject to MAX_CACHE_DURATION.</t>
          </li>
          <li>
            <t>A collector that wants recent history followed by live samples sends a
SUBSCRIBE with a Location filter starting at the Next Object, together
with FILL_PARAMETERS whose Location filter selects the starting point
of the history. The relay delivers the history on a fill fetch stream
and live samples on the subscription, without gaps or duplicates
(<xref section="3.4" sectionFormat="of" target="MOQT"/>).</t>
          </li>
          <li>
            <t>A collector that only needs live samples subscribes with a Location
filter starting at the Next Group.</t>
          </li>
        </ul>
        <t>This enables the "just in time" collection model: resources publish all
levels to a nearby relay, while collectors subscribe to the low
granularity levels and fetch the high granularity levels for the time
windows of interest, for example around an alert.</t>
      </section>
      <section anchor="examples">
        <name>Examples</name>
        <t>This example follows a resource that reports two metrics on its Warning
level track: <tt>cpu_usage_percentage</tt> and <tt>cpu_temperature</tt>.</t>
        <section anchor="example-catalog">
          <name>Catalog</name>
          <t>The resource publishes catalog version 1 as Group 1 of its catalog track.</t>
          <figure>
            <name>Catalog track example</name>
            <artwork type="ascii-art"><![CDATA[
Track "catalog", Group 1 (catalog version 1)

 Obj  Content
 ---  ------------------------------------------------------------
  0   Catalog Header      version 1
                          location = us-east-2, os = ubuntu20.4
  1   Metric Description  cpu_usage_percentage  Gauge  unsigned  %
  2   Metric Description  cpu_temperature       Gauge  float     Cel
]]></artwork>
          </figure>
        </section>
        <section anchor="example-data">
          <name>Data</name>
          <t>The resource captures both metrics at 15:59:51.000123456 UTC on 7 July
2024 (Group 1720367991000). One second later it captures only
<tt>cpu_temperature</tt> (Group 1720367992000).</t>
          <figure>
            <name>Data track example</name>
            <artwork type="ascii-art"><![CDATA[
Track "4", Group 1720367991000

 Obj  Content                       Meaning
 ---  ----------------------------  ------------------------------
  0   Capture Info                  captured 15:59:51.000123456,
        offset 123456 ns            decode with catalog version 1
        catalog 1
  1   Metric Value  99              cpu_usage_percentage = 99 %
  2   Metric Value  45.1            cpu_temperature = 45.1 Cel
  3   End of Group                  no further metrics

Track "4", Group 1720367992000

 Obj  Content                       Meaning
 ---  ----------------------------  ------------------------------
  0   Capture Info                  captured 15:59:52.000004211,
        offset 4211 ns              decode with catalog version 1
        catalog 1
        [Prior Group ID Gap 999]    no groups since previous one
  2   Metric Value  44.8            cpu_temperature = 44.8 Cel
        [Prior Object ID Gap 1]     Object 1 not reported
  3   End of Group                  no further metrics

[ ] denotes an Object Property.
]]></artwork>
          </figure>
        </section>
        <section anchor="example-result">
          <name>Result</name>
          <t>A collector holding catalog version 1 turns the two groups into the
following time series (<xref target="model"/>), with capture times in UTC on 7 July
2024:</t>
          <table>
            <name>Decoded time series</name>
            <thead>
              <tr>
                <th align="left">Capture time</th>
                <th align="left">Metric</th>
                <th align="right">Value</th>
                <th align="left">Unit</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">15:59:51.000123456</td>
                <td align="left">cpu_usage_percentage</td>
                <td align="right">99</td>
                <td align="left">%</td>
              </tr>
              <tr>
                <td align="left">15:59:51.000123456</td>
                <td align="left">cpu_temperature</td>
                <td align="right">45.1</td>
                <td align="left">Cel</td>
              </tr>
              <tr>
                <td align="left">15:59:52.000004211</td>
                <td align="left">cpu_temperature</td>
                <td align="right">44.8</td>
                <td align="left">Cel</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="msf">
      <name>Use with MSF</name>
      <t>An MOQT Streaming Format (MSF) <xref target="MSF"/> catalog can
direct a client to publish metrics using a <tt>publishTracks</tt> entry with a
<tt>packaging</tt> of <tt>"moqmetrics"</tt> and a <tt>role</tt> of <tt>"metrics"</tt>. In such an
entry:</t>
      <ul spacing="normal">
        <li>
          <t><tt>namespace</tt> is the Track Namespace of <xref target="naming"/> rendered using
<xref section="8.8" sectionFormat="of" target="MOQT"/>, with <tt>%resourceId%</tt> as a placeholder for the
client's ResourceID: <tt>metrics.2emoq.2earpa-v1-%resourceId%</tt>.</t>
        </li>
        <li>
          <t><tt>name</tt> is the data track for a granularity level (<xref target="levels"/>). A
catalog can include one entry per level it wants the client to
publish.</t>
        </li>
      </ul>
      <t>A client publishing any data track in this way also publishes the
catalog track (<xref target="catalog"/>) in the same namespace. The <tt>connectionUri</tt>
and <tt>token</tt> of the entry apply to the catalog track as well.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="MOQT">
          <front>
            <title>Media over QUIC Transport</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <date day="1" month="October" year="2026"/>
            <abstract>
              <t>   This document defines Media over QUIC Transport (MOQT), a publish/
   subscribe protocol that runs over QUIC and WebTransport.  MOQT
   leverages the features of these transports, such as streams,
   datagrams, priorities, and partial reliability.  MOQT operates both
   point-to-point and through intermediate relays, enabling scalable
   low-latency delivery.  Despite its name, MOQT is media agnostic and
   can be used for a wide range of use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-22"/>
        </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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="OTEL" target="https://opentelemetry.io/docs/specs/otel/metrics/data-model/">
          <front>
            <title>OpenTelemetry Metrics Data Model</title>
            <author>
              <organization>OpenTelemetry</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MSF">
          <front>
            <title>MOQT Streaming Format</title>
            <author fullname="Will Law" initials="W." surname="Law">
              <organization>Akamai</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="2" month="June" year="2026"/>
            <abstract>
              <t>   This document specifies the MOQT Streaming Format, designed to
   operate on Media Over QUIC Transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-msf-01"/>
        </reference>
      </references>
    </references>
    <?line 668?>

<section anchor="changes-from-the-ietf122-version">
      <name>Changes from the ietf122 Version</name>
      <ul spacing="normal">
        <li>
          <t>Aligned with draft-ietf-moq-transport-22.</t>
        </li>
        <li>
          <t>Added an Architecture Overview describing metrics sharing a session
with media, and metrics as the primary data.</t>
        </li>
        <li>
          <t>Track Namespace is now the tuple ("metrics.moq.arpa", "v1",
resourceID); the string form uses the MOQT serialization format
instead of a moq:// URL.</t>
        </li>
        <li>
          <t>Group ID is the capture time in milliseconds since the UNIX Epoch as a
full 64-bit value.</t>
        </li>
        <li>
          <t>Attributes and metric names moved to a versioned catalog track with
one object per metric. Each data group refers to the catalog version
that maps its Object IDs to metrics, which removes the dependency on
previous groups.</t>
        </li>
        <li>
          <t>Object payloads use a binary encoding following the MOQT notation.</t>
        </li>
        <li>
          <t>Each group is sent as a single subgroup, ending with an End of Group
object, and skipped metrics are signaled with Prior Object ID Gap.</t>
        </li>
        <li>
          <t>Added the use of Prior Group ID Gap, Track Properties for priority,
group order, caching and delivery timeouts, SUBSCRIBE_NAMESPACE for
discovery, range filters for metric selection, and FETCH and fill for
time range retrieval.</t>
        </li>
        <li>
          <t>Added use with MSF.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to TODO for contributions and suggestions to this
specification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9U96XLbyJn/+yl65UpFypAwScsXk3FWI8kzylqSoyPZKdes
BZJNETEIcHBIZiTlWfZZ9sn2u/oACGkm2V/LmhpTALrx9Xdf3ez3+6pKqtSM
9daxqYpkWur8xhT6+PTPF1sqnkwKcwP3lvnPVX/JD2ypWT7N4iWMmRXxvOr/
zWRZkl2XfXjKPtQfvFDTuDLXebEe6ySb56qsJ8ukLJM8q9YrGHx0ePFeJati
rKuiLqvRYPB2MFJxYeKxjotK3ebFl+sir1fw/i31xazhwmysdF/LO+hr/rNS
ZRVns89xmmcw7dqUqlzCBJ9/rvPKlGOd5WqVjPWnKp/2dJkXVWHmJXxbL/HL
T0rFdbXIC5xaafgkGQzaj/SfZF10kRe8X6epyZp38uI6zpK/xxWsDJ5IymlO
180yTtKxnqf1fL7+9yRJomlMN6Z5nVWIlv04i2dx47XnkT6BxcRfalhC8OLz
ehGX7Vu/8OYy48f/fYp3omm+bL7+8nxPqSwvljDBjYHlE9WBMP2DiCmbmGpO
VK2KOCtXgLr+aKQUkjMYdXpx+GFMU1tWOl2Z7MKkBgm11paxDuIq1sf5zKRb
/HRcXJtqrBdVtSrHz5/nMKqyo6Ikfw58Vj4vVwb+D5RMnwvdn89gIgALJnpO
Ezn6acHKWDcgUKrf7+t4UsIyppVSx3G2BvKXlVmWelXks3pqdJlcZ8k8mcZZ
pW/ytF4aEIW55TV9u0imC22SagHSAUwKiKt0nKY6M2ZmZjquNNzSJVAL0AD/
AxQBqrOyXq6QPnqyhj+Be6b41/P4+row10Q5ZbLZKk+yCt5X6GW8hmnLHB5e
rkzF80yAkLfJrFroWwCAXrQqEmADeHa1SgFonKgHN+pSma/x1BQTuJRdIwTX
piQA4OsswW+lNojUBKBfA9fpNL/t+zdkpkLJKyN1YFKgcIHTwBtLw5ohLqaL
pIJl1AVgyGTxJIXlw+pW9SRNysVzkPNyWiQTwIPlGp0mX4w6NrMk5kn+fHm0
ry/c7W1kvB19d4f/Pjz0FICW35YO+UhwXeV6QuvOC1jG3+GliAyAH9HRXGdl
vlZIPLijOhClQZRuDdAulgXgEtN8GqdA1RmsCl41jacwLU7NQOibOK2NAJGC
Zit0gTfMDQByA+vKzK2WpRPBAYHqYpEA8PkUmAm4ipA+T2D+RX6LM5VAebdG
VIpesgBIp4cj5t9lMpulRqln+gjkF5mWuEedCyPn8wpUU7kA5iS4hZAB89Ql
wIr85JgaEKhA4abEsUukT084PVmuQFZKwQAS7uc6TpNqHTl5thxKs/AzDWbt
AYYASuEfvTJxCEx8A0oKmQcxEXC0ahAKEMTrmsZ12WLoJ1j3AqTUaEB+rIGe
ScEvcfxm1w9CG2fIGUUObweiWvZa6xQImyqigZdrN0HMiAlBJQREmkjeYt8q
V1X8BR6f3YB2ia8N8WaCGuZ2YbIAx5ME3lER5BOTIpdYxOHlnkJU53Ul1Glg
lsZ5pDKZESSlPrJk4uPLtpFnZSMA04XCpPGaZABegSslUShVtQB0lVVeGDfL
NM1LQu0t4RtgWaNutDp1FgGrAnPGSETidgBBAWJBHEWqUNJYK+YF2GQ3MZAF
5IzePENCC1DID07sVJ6BAiMMshLueWne+hu4FDgQ0bwFTECqbB1odLVdGgMq
R6aL04eHHcAViNd+nt2AvJKmxBcemHmSseZEkTYafBGNzkgJTtPl+cVWj//V
J6f0/ewQ1NvZ4QF+P/9h78MH90XJE+c/nF5+OPDf/Mj90+Pjw5MDHgxXdeOS
2jre+xHuIFRbpx8vjk5P9j5s0TIbmiYurKYCs2KKFawRTVSpQBhINRNOv9v/
+D//PdwFHPzb2fv90XD49uFB/ngzfL0LfyBu+W0O1T2iMgqpiQucBW3gNF4l
FTBSD9mlBO2WaWQIQOfvPiFmfhrrP0ymq+HuO7mAC25ctDhrXCScbV7ZGMxI
7LjU8RqHzcb1Fqab8O792Pjb4j24+Ic/AtMZ3R+++eM7RTy0F1hJfQqsd5OA
fbh7htbzQQxDyb6AtkQBmbvN4a9Vmq+JjOTilA2N7Y0CiJaa5Kxly7wupjBe
TLDXbyLS6Pd8KbVwPDvzQEEQFGB6knRFAsa0dkLoBFMHNp2U9ZJMHgtlpM9Y
OElalR1d4oOgMYJZUKqt9PIsZEiBTZ49c1blHAwYSnCszw1FC+zzsPPACOyT
kZsBHo+E8wlTCL22zhSADFYsRgvgDBzYjjmwZUYmaZomgGMlKAPkJVUpWhiR
wH8FSHdWgDBaMmyMMHK73H3ybeBVGZO3hyjD2eClQKmSsRbJgkJ806pUhzdT
5GnTqyG0+hfgJASVdY6M027+ClJ6BnqgWCKr3uIcxIOAKmeEvPlwRlXBQ2my
BF6eAZ322MsVZlluLAEVD7DrbVygTwwLnyVzQnmFXA4Gi2xlORZ3QSx/Tk71
CmK2ZJqswESWTUZEBt3kyp5a5UCECSimagFx4vVCJrJseWEhBcUI9EWHHe0E
uwJGHHYQOeWAhKkmZp0TSQ1LDcVfbAfQSzAF4hIw8Y9//AO4a5okfYxV9cYH
YtE2J7Se2mYu7iD2jvqmH3y+2ZxdfxPeZWTqxiC4oe61PrTioO95oDzLn3s3
370d9e5efwwIoe9hlm/8u+6/3fi8C2bpgM/Bci8sr++D53Q4lvSI3nilBZzp
3wbc3eh6pVUq948Avk06a6exfO1Uke6EZRtkSg9Hb6JotDvYacISfNu3fEqz
/HMEfQyJwHRK/RWlNWCafDqtQbnmLMJW//22bKiIfPI3g+68BEWL5Bol5Roc
2jqNyeG1aCTHlyUZ55snBThS7EzMkD7oSGTgapHXf/rdnw73Lz4fHH44+svh
2Y+fL46OD08vL3p6BrKyQo8MoonUeregSuosBlmbojbx8qmQ75OsDiMvVlCV
xrRHYaYG3LcZa4XYq4CGRVE+WGObGXMgfptkM/CkYeXkDAHWJH7jgOL94cX+
D484g4FZEo//o0STlMsQawSqDoOALoMUUgRTTmKTSvAHDPq7NkabmZsEDThA
DRq5RF9YNaJDfn2C+QHwuSgeDlyBwxhzE1bUGybN2WPxAUiXiv7mSI8yDpKO
AARibiQAmZ0/0NGFWjZc/yecgw312OR+ECmnloYoejZnCLcelZP7Dh0rn5vO
UZsC1b4SjmoANRJ98C7QSf3OK/i30xbdUh4oGd195T7QFd3L/GfX8igW/2tj
6vtw4SdNamw+3AXSky98ai2AvIO4XExy8Baeou+vnM4pyH3PmjPMfKKc+Bwb
MnSbY63SC3SE1Qh2hjVoBKvN2AVCSaTEEY8tq3jtIlWJmUHdVUmqJEXYpWP0
cQ2+6So1kiskreBdV6/pSPOpmcVXj1TfxjpsmoIkXZwiCZ1t6gDVv3eSOSan
saRUSMbBwQSzkk0Nx8Ob+VvQfKTgQOF9R2mKVcKRDgSCnBfEl5Krt0hWYDqq
W2OsfarIHdWSuJO3wmRPa42GpNLnTMKeTd60n70KAJ/UlbFDdN+NOjrYENgn
GLjzuW9U92s3P/TQf5j1WJ9XFNzQxV8x/BuRE63/gunHcPyvGX7/a4DvuG1V
l5Lb7+4dKkv9aRBF2U8w9lfP839FIg98J96cPuGKCGPi16Ph/46Hd3YmAYRv
Bo92s5N/z2NgfBPAKa+4ANfl3BQoKUPAt4fjFz5MLvz26Q7dnx4nrh96Ooqi
n37dHI9jy65FsaZFDy50XWxJxecbQ58MXcrCQKSFUQ85IqXesvJYbpGKW8Q3
EIZmqs6Sn2vjbx8dbIF+ID9HMoeFwUwslx5ifWUfvCKPEbO6ZZlPMac701eU
ayVkXkV6T2YAD9lfxzCXvMUcIleErzQUaxPySr2dT9BniyUpCD4WGxNJMO6Q
v8mRO6yuXOWsVvlFkRJ+kVCS0LCCx7DcNSN/kHiZbRO6Y+gPo5+3d75/dAQG
pqrILsyS6wR9sjoDGMEswRQ9hWPATORZY2VcrZA0Kvlvc731fVxfmy2k1NY+
FgFNscVeuL0jNQ6sRDgI0QyV0xiiBG3vo2sep7doVYLHaPl1QcE+PzgxjIS4
BJsgDr97s/Iv40T9tF7WKRUVw/c04YD5MJrIIZbPM3C6uYI1hWiefPlgHCxd
yR0kKqIB56FQ5u+myDFeQjsPhoYBIxQQBQRCCS7k9a70p1/t9idJpeZpziU2
tqT86tw/QJ7ENYygO8C8jtM55T7DrLIRWAo2vFdezSKjep0rdpUtJjBchsmn
OLWFMZXM0K7OQRLAe78GFGKEuJxIvkWivqXjUiuRoQyxU8MgRip4dwe/fjHr
Pi94FUN8KGn5LpaOREk4K++qYDOXtrZ50IRC1jIBJYJJKal0qmYxuVES5Bnv
7rACLelqTTwDMd42YflLhsnouFQXTtR5FLhe5x3ZUEJRiemhJfEuvYCqG4oy
bBjC2iqaKwc1FR2BxsFj4GzcPbPITTBOJE1mrwjHYk7K+Kwj6THdpQi5yITo
oiFIPiwwWTCO9/Z1PJtRspEp76rFNt4kL3ceT7FAoJFNinVPYT2vdos5/2Gv
P0QgFuQWV5LqLOpsynwPggSuHzD4q12sW5WRPskrw2UiHuzSbqsivwEWJe4E
ateUcPDpNCoW/B6jfVgTFW5iRS+uJEt5C4NR0pcrZANiMYB7AX7wLXBnpI/m
zEmJvI7zggZBXitJCgL0+RK9dExvWhFlsUkwkN77EXUEEpf1QaNYR6kC1UYu
2gyEkGJmfg18hSFc7hVrWGOJjKqCMozTy2oZf6EQXaPywgRzztYDkxMMAsQe
Hgr7sgT5+8YAd5N0BPBENjcUF4XIF/EsmR3ORQQMmWDte5rPWFyxaQDTn8NX
iog6RbW5gKszkNYlaBo2RVPAOTwI1qcZGrgMNAYGgTy1Kh1wuWwooECKWR8G
WoH1hFRXsYS6kNz7KeWywnBk++7uXF4xQnJxG8EOYVGhnURKxw6FVB2PpcHD
TSthE6o7tBP1iuMwtnbKhVpsF1xguRFOmoZks4YNKq+qNKsYa7Xpuodh0xdW
vMn1omqk4yiqZJkrDcaAgJhZAlJUAzHsXJzBIujnScpOAoeoRVCSkUmKG1TX
pa1+i2vDiuqCUt0nrPTunmX0ZUNNtWslTEPyRmgVbhbwgFC3iDbHOfM50W+e
Y6GZVUxhNke8T0w6g0UYTmg59iTuG7PXub0lb46A1aK4WMVYK70Zwv//UDj+
frfjXdT2Wz6CF5p81VePzrRzxcZouSTWwxqnclU2mzeTmnkYpFPBwzJGmvrK
XFc2IdJ/5f6V2D0HjlvmoGzhy3GnEkkBdPxOn2ZiXLlYsWoldYmLWJl4JLC7
Jb4UYRZiAvItrUJcWyNA423ighMdnBnlN4NwxmkuwPnepOBVV/LIlZ1E/uZZ
Lkv7IjTNcSq9bJqbYFAVeMF+E73xot0jbvprXPgMjAAhEu14loDyak9dvZmP
prvxcDIwb2evp69eEKnBaWW3Py6FyyxnjAzyxsggd/Rvhv328H5/lxkNpOj7
APMfOCt090ywptR7R8sNCrHWeVIDgioAH/9aWSQnRRjhtEtVMFVcpz4VXPxS
aTDSP3BJQOBBG7Jmp3RmIBbBHi9BydgCqGy/AQgNewI8eIujPMo1Hy5NcQ2C
vNbbA6w0Y2Ww1IdFAdKy/WKHFJzaWoTv3sJxlrTbu37UgZnUcOU1cs49IzgI
8QOmu8eWDVr/R7f+j7ax517dj5vhbPj3uH0z/IwpWepWxO+9Glzxl+HozWOx
NI7bS8HZCeC9Gtpxu7tPjdtHGkGk48aN7LhXg6fGMY6D972w416/emqcxbwb
t2vHvR09NQ6cv8Ql43DcSxk3GjyJlyPf8gaLhHGv7LjRk3hhbgje99qO230C
L+qYPZOwtdOW+72tnhcGnG6ksXgLMcBIXh1ACZIgQgJut9fdpFWDfjCRZhAs
EA1Q+T303CQgh6CXSApAwAXn1jpXhyHx9e9GIKyD3tEgRUFGJ8WW2oIzGeTj
w81SUdTXmMIAc2Qmr8ugK5QaFdBZDdWT9cA5haAc8/eYn3uePRGLxHMQWNXT
RRDGgN/h/EZ0B7CjYq44OZCiQyzorjgDBNO7bDjdN0FPoe8+ZL8MzKHExjPW
VnaudE2z2cDZKTHqw8FuNPLOWykKJYRJ1zbq5fBYuMCKhs2sMwsyMzRX3VML
S3W7EtRxYSMveupWPc/YC9sXc8qq7O6ZtZXsxTSNbdA0FJq7WHoXLPaToBwY
sTtn56HeektbLEf6TIF9pudkw9aPlwmSmKxvUFImD4TmK9krYQ8dooyBRCNl
OC3QGOKKImo+etKjqPpEv9ODXmOYpM8OjGuutXDyMsF9kR4heu4IbPlXfSKp
h8ZFFDjr/yY8uQeAwtyy621JpkLwaaWCG8nmNGeSDJRfgc3LSdLLlnAZZRi+
8DcyxEeVjWOtAyylEgZMNQCrIDiYR8EiKReLzCuJg3ha5CV1pAZ+Ymn98Yab
RK6oXaMwBCYVg9AH1EP5GCxEgoRxTz1PtvUwpDGrvHWwfEKW8h6D4K4JRVMC
mH2CFiGRBoYDFx+EDuxCY9bUxfCAW6c9vYM5jF7gBWx/fDsYDB4enDDdgC7E
tEE/Ndk1tkRJZm/7JnkF/kljljfR0LupXNJSVq5/YLjvgF//IvLGU/Tgykm9
RAzD2CD35m+7i3o7inYwmd9TD8rn6WjW/zDoeCKMwUi8iGPwO1WRNh/hy/zQ
A4F8N+bNHN9utYDfDmR7Z+sBRVjWMtYhjcSFd2zUbIVn41g6tTMkXeAWMwau
8yrNXu1JmzEuCEnDUCO5Ly/e998EKUdcQYcYI4rk8gWmndsIOLP2kbkjoA16
lRtYo6sWs5cZqNqNR+hqN1474NsOBeWdw28A8lgPvg5ITVK6ugd/DulPm7N2
LZ5YnZVIrWtxTCwSE/GGNrY6uD4T1vNK28mdrvLQgBdTZ7iDhrQVSYeHLdZ8
R+nw3kjutfLoGYkBwc11vgsPF8Y3Pe3qIl1rRYTzmBpRL+viBflg2mWMp77V
u4dZeLNcVWuEc04K2OWqKX1PTUigpKiBGVaE7gbqsskaRTVMbWDbFCYy2iFd
EDFV0nSv5zU5KOZrxVl90XXfk25kqxRv2uzQHFkhEtTR6qltS9k7mEp2Ew7Z
clGKBTet2IeoWrKkSgtgbrJGv6DHbbyG9TN7Zj67yJ38gSpvMwg1RUAgu4Sl
cjLOB6SERduw3F7hxMwtdluWQmJLRU21gKsOy1dO8xW3eW6Ys7HmjTpt1B3v
/aggnAaiUpoNZwqaQiMfR5ZaOsu/GLNyz0pWmW2txbpLFOGjZWAEJVWHXJm4
rhC+KB3ZGBRLeqnOwHfOrk2XqSulL68wlLbGZgzcJmOYtt7N8V3/QFXy5m4z
EeseSqe37zZjr7hRlgqaGJ1UntuENDMjqoOqHei0UFoUrxovc8oqkVCzYXUo
511Y0uBn5245CuyhCOPNLF6tU9psJ6cNClQeC/GTcMtvSUViCM7W1gWgRpk2
SWwXTdPTjkt73TtQ2Aod4k2YYqMfpzkTIANzv2mKNSVb3gq8sp5tSTz68OHz
x72zvePDi8Ozc0kAW9Via6wkEypIfb+IXgbJb0bTIk9nDTXOLUlt1Fo47UMc
/XDXZeTiEsvYuoD7gG7mTNQRQXq8pFKK2z63pJxkOwPLoVlTBpHpkXlju+3H
3rCdS7dxgkhouaSiFAhW2u8F0yrWF9xsILWqDV2AzOEqVBSlWmYivqH+VmoO
jbriL1JfCC6Awm9ze4xwccIQnEZDMnvzwLj46KpfFDEd7/3n5/29/R8OPx9c
nu3hBhMAC7fSFBWvMeOFhu5zmPAEm2Udpp7fesF4pIe5X630XjlqLDKZB4fv
9y4/XHz+ePndh6PzHw7PPn88Ozo9O7r4ES0K6CQOiDnD1wkJvLwz+RpC0uav
Auv88UL2hlnpwpnw+ZlZmWxmm5qX4j6iwK9Smxu3c7pJuMmY3XwtukDSoJL8
c5sbAYLp1KxYbXO9HPUiGSrwVv5OHEr+istNMLOX7Jnk+pHO50gSwRTXISOc
yorvnolVlKKKWPJMOFYQiOJaSkK8CnNULsnBlXoVeMcUv7PzJO0o0tBgDb5z
F6SHgJNDapmkYNMMJoBKrAYIWi9Pjv5TH65ygHF7MBjTf+Bg7yMthvpPcVZj
IXn49vVgh8miSvDfynniUhE/1wk7EkxLC0epXT8GKz+AI1Rfo+hFGDvtcMsj
W8FQvVS5Ml9XVEmlpRREF7DXoAQo7VPqD7kk4ayp7W7vDglRUuiKXMfJIxDt
eZ2OvZ2zToisr3QWR1mmTkQy+DkbPHZoHRfsRpY9lIu/ZXBhNhIpAKLdJSf6
0+cX9oW2mEz9Z9MqHB40IwBSfrqVULF5CG832ovDfQZUaLQpM5gjZDsXD3to
KSizF6hJo4qXK306n6ME+EjK2qB24LwZrgZzdwSrj72Kg4YsznIrEmgzZjNr
yS0XY/wB4ITCQ858PqGOLW62gKihbAoci6QEViWlNVnXgVAN6BMxdI1VjpuC
3EzOOY6ihhTSCwlO2nDFG+W2izbRRTNgBFTYhB64KGsIyWgzrSRRptO8mIkZ
RaJ2RssNBhpzLNaMCNH5RqrRSs83bklPRnWb/7YUt5OUiM22JJnf0g4Rl9Lc
q0ezvW8EkWOMR48ODw/165e70t7yateHteE0bpIg48AmyLoGkoyPxU6IhGDy
ualSS8zjr1W+TCrJTjNCo6armBeuRTzD6RPck4imtFpw6SFfYo4ST0rJAo+4
qSmH0Uafg26FVtiOwq46qN20Zq9cURks0A7fxyv7l3gk67CbYjiI3oYqme2x
aDxepOTXuLfnS4K7fvz82MwOhI5Tdl5ZKeB+PAoyzNdENmkvDLNt50oowWps
yMrsTRYkziwkrvR8SAcGiMgIGOfAoXXZWNYQMBjaGuqiBKYJksEZgmTiwP0y
XF4pw4QmOXhsHiQXTVzmPR9WmJw6oG404Q3w7uZ1wT1DYuNDdCjJMTPt8AUW
t65qNa+k7SLFpg7uMmwtmfPIKgjZyaHV3KJa+l4GyoOs4eGsT1Cg3DlfrbVt
PAw4RiEfNnocfSWFie1kxa2WjwHwepRw5pwF1XaNKLKH8Kk0bSYRXztgc672
usnUL3P5mxaXy9NgMaVnFGmSuRTtI74TKMSbhKpqdrFJVlOBpXkwRHCawdxU
tFOk4l5FzobjXFy+Mxk3DJA/eZvQeTO0nwWp1MNDHxaWQVMT30iMuLRcVGfc
AAmWrkLruwcTBHUb626QmE0M7wYmxEt3iAtuSMDO7V+A0oFncYsrTjVQEIRW
I/TtpUYZ+PaaXCE6qYM6ua6LeOlDKMzpaXtQgO/L28uwUQ0tQwg9uqB05gAx
pzxQEj+61iYfboEnTgzV9/2HD+6IjCDBE7LT48FbqJbfRLstLiKF5Xl4/HS4
NdabjRmPRGjfn51efvx8enZweDbWe+VUtvFsD74Od3odW+8pPCQlhJkPRA8i
y3Ipm0Akr3Oy7TYoI0c/CD9prK9iLVEUjt+rhITTbnsSKBbMAlDsBM9ikltA
5KxFaLs3Q9+xaM2KU7P+PCVWViI92ChPziY5mRTpytoiCABuuzqhZFurU00Y
BlN+FltrTGE9so7dsVLkJde6O/IbE4RU5d0c2JPNqJjGIMWNJUvuIkPZTC1Z
SIR462xDtr1YpSzIwNgfHZsASwc8Y3OivFgIlWi7LSqYNSalW8ftNHoWqJVP
+b3Fj2haUokot49nDkhOlFO2IBYtWbBgOKfM95dRJh4ccVo+pxGJnTmPmj5K
WqtwniDfBZ1jJdooJt+ITShN6g7/WcTp3CUzOMc1MeCeUUTHjeA2tQBPYeOP
56ngkCU+Tgk1p28awr0jccEBVpCiAJKG4oeZjnhGrdAsCrIxAlxM8EVjtDdh
A8s1pnYqbkFWjUOo7ALlvApJMOKV88vvzvfPjr4LqYbZySWeEdFTLlFCTZzc
HCep342msjUz5IFtbuQMWAAGMKjvfERX27dM2utlcIzJZO02JjooP5/sHR+e
f9zbP/Sp03+hrzM8FUI26nDwDYLo3wATlthzjWRs9vO69kxOr7ohnw9OTw4V
b0DwT5dVvgq3Q0XYBShT2oWjpLt8GWfcLW5c1EAoyWhvJ3sirQx1NttMUbvm
ZhEPTGnSiQ7wpNgCu+8ePBbsRqbVinmVQQN8+kWkA7+OT4GKiypYl+IN9ShQ
4IUUqFEpjsEFSPpsA7l4QIeDkzk30NFUfbPL51oO7TGh7e/BKVf4lspRlE+g
waNp2M99dFf/e1ttAc70lRfFon2GEi+PNMKGF9GLRtxla2HoqzpG7cm7AZnt
PD4X/FoNwzYKoLPS+BADIqJX+S435J2IvTBUIQ1lSxhcK/DNo05JTNaNdE4E
FogLhTSMa5ri8gRZE5cxtTslGqVHmMMV+N977unZnNzVJ5hg8NOVZFOvPr3o
6Zfwp6zNe47ttiXbS0LVtReIppcsuVi3QS+EoSbbZWbd1RZ5iU/UtfpHYBr7
2kbNiMQGzzWzSqTVArOa0TYdjPIlvUjGnCS/q7bIdcWys7DYpKUzl50UDfr/
rQ83iUty0HAp3oz3bdW5OS2eW9OkEp9956w/bpnT4FYVX9wLZGMSdRDR8UnJ
NWWhsXu/pNqSBOLtJZCnKLIZgubYsrClI35H3KX2kLC4tEe8Kl/1EQoj0ZwL
SO143sfHedDVrSu0ZmwTsU7M5A56UzCKbSgAGoYv8GrHHZjEaiee3eBLSqo/
YQyNm/oU+rWgAUDyP5/tnXx/eB7p4GQCn57hs4icFqKN/5nKgRuXth+ettdI
jGaPTISlTTEHXmc81HaBl3brmeg8XOBHzBBYrxB3oll9CF4HBa8+Rx8XzcQl
eRDNbGcc5N2xkcwfCWL3vgbZeD5vRB51iXkueoV+gK+90R4Vy4Cb57hcfboY
9vTFCNTIBNnMegqsdcWUtwoAzIt3OHDwgCDdXYx6wOlfH7grQbtIJZHDWWad
pgXDHUl95R1xS9ReFLE2W13kVTCDwGlwYy0RJedt0zAsK6nuhYUwZ1EeWxRZ
YeIY9hJP8HywUynrV/m1IaMqvZFtW3RL0rIxpegaEg87PeVUMWRjf0KW0Dhf
y6ra4D7GvzHOm3KOQ3ZVitZtrFmOLgod156r+l7jnjF0FGvWIiTKDaMcRt3d
JCDx5UaAJrK9g9XCsbcxnVgmebEHvPIZuLz41rmT/sRf3uU27jisDzcXiedD
wpKBBzVZB2f0pOap03YwdlFd4ZBNLglROuNStyOYinEsYY1jUJpeYQzL5kRp
jN3frGkOJeECisXlXixmZJzLEbdy7Jxa53MP3WF7XIqVXmsV7O0Z66vpqv5c
o/f4GdQ6ChR8Je+Cb1VmCddjVF5XBJzvqXbA9Ztd1R2b29oGfKhd+9TQNgk3
XI2Nk0s4MNmShyD4sKO3N+beUQplFs8LyzDfofBYDa0f34Tyyx/gXdwB0Wrc
pI977ROnQKRWJ3wL0WLfgDbug7LMS/x7UmdVPRpEuzB+qHVXr7TuopGW7fW+
S1D/BqYYPTFFQEsBTKaghkG6sG/SR5pV2QMUimPhD1lBzuyyfIBedpsJ3Pk1
eLJmeEzw8OX45dvxy2E0GAyGoxe7L1/Zmvhr/ac6XavRYLSrt4XOr0eDF69e
v32Lpb2diLbKsfWUk8eSyr8JdZPa4N6NqUY01SOMtutZLHx1i7UeofexiUnS
fpnxfoktHeMFJdiNj+tk2ERpz3FlzuVfwXRWhhNIjxkp7A1xUv41fGfY5FQu
Xeq3b1tAdfHst/hYi01l/O7LaNgeHzLst/wEMqiG+EU361Ibn81ikHqCtKP/
L6QdRVTZ3h0NhxukxYstwv4rpOXPp2a9h6qab9++/UlwK+UTrtO4Gk2emW7a
7kaNDWsdtMUnmLaN9zfLqkN6vb04DGrJ1Ar9r3HFJ/0TYCnL6WCOjagraqnD
A59ubenCM1Ni9tJrw4IutJJzGOHRWbkbFhEwkbHHg7ZbEAxOQ95qduPKOJ+7
se17tXuWxq1AY1OnjnGv535YZ+fPfeMQJve5Fyrec+v95mZP+jyyyVOOcrJ7
QHGXYYfev+/WFnTmEiiMe/0bAuSpwRu27V5Uyj2yVWNwIENPDUaOdIMDBjDc
whGQgThAX9ourOPz93hoQzlH0suBEefu/JP3vItjG57Cn2f4I/z7Lf48iPth
EBz44PgDMwgc+WFATwcsU6jaOpaak9CxvpIbnAe8wj4UiBvYE1dXK7gYX8OT
VygjV/gbNPYXaK7kINCrIk+NvW3v4cnYUpbC39bAnzrBoODKpW6vbN9LO39M
G3nk7IMHvyfcdhQ+thedIb76jTt8YPabKz6+j5oVUYgwBGVPG4tVhJjflsG2
dHBtH9tw3pg2citxiwhKKhwsb+ZJtsO9+3pP6ZBgLuuHHQ9MgZXdix0kjTF9
ZgkKEwjlqG9GrgenfrVaVO2G9lv72ybe195MZm+HTUuufIG5b0dADj2v/Pm2
l0VyRS0cV1X+xWRXNlTl5VDj96O93fhDIBH9qsbeyR7aU6p2yElfd8+SOIsf
2r/kgT3roJ1pRDy1v/bxTJ/bs22a08Dw04NT/hWPCdbF8EcGuJ3UpxlQpIaj
kW39ojg2ZV+Z+OuJX+ThoHdGvVrZI0fPSwtH+BsQpTtpXapDNlcglavGwd5l
o2goRxz9bkOEqOOEf7aiqjH0e/y0jqBl+ehg5/eScyCIcPNYsNeQD1zfPCCC
GnTd70vgQTI/j58/15dnHwi2X2iAfayJI2iAjTkTM6/T1Lan2dO8fhdu0wt2
IvIZDMv8xu5AEZsZNEv60zIUnxNuG++coZcTfYOtL+H+yI0OQNs1TcfrYHTq
+69whN2T7MrnCJ0oD+l4na45i+ycI7boYSuptAXyeUaxdNX5HWTN7U987pBs
s6RZmr22vI+93Gw0wa5Dms/mlUMXCdFld63gkTbtjqjCSLeZlZkOtyyQFQQU
F4MJ0g3/sbfZOILq1XWSu0ZLamToUX6QVd/Mt7FIyR9Q31XHhPno4BUpjPYa
af/wZx/sBhC794VTnZTgofQazRPkZF1+N1hsHRh80lV7U2wNAlRd054vcBq4
vcnMvt2ag5YmV/ECtBQfGo0azP6mFfO9+32Usr6WfgFhUGzICc8uidT/Atnp
R6NobgAA

-->

</rfc>
