<?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.29 (Ruby 3.4.4) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-14" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-14"/>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <author initials="A." surname="Frindell" fullname="Alan Frindell" role="editor">
      <organization>Meta</organization>
      <address>
        <email>afrind@meta.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <abstract>
      <?line 59?>

<t>This document defines the core behavior for Media over QUIC Transport
(MOQT), a media transport protocol designed to operate over QUIC and
WebTransport, which have similar functionality. MOQT allows a producer of
media to publish data and have it consumed via subscription by a
multiplicity of endpoints. It supports intermediate content distribution
networks and is designed for high scale and low latency distribution.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moq-wg.github.io/moq-transport/draft-ietf-moq-transport.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-transport/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/moq-wg/moq-transport"/>.</t>
    </note>
  </front>
  <middle>
    <?line 68?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media Over QUIC Transport (MOQT) is a protocol that is optimized
for the QUIC protocol <xref target="QUIC"/>, either directly or via WebTransport
<xref target="WebTransport"/>, for the dissemination of media. MOQT utilizes a
publish/subscribe workflow in which producers of media publish data in
response to subscription requests from a multiplicity of endpoints. MOQT
supports wide range of use-cases with different resiliency and latency
(live, interactive) needs without compromising the scalability and cost
effectiveness associated with content delivery networks.</t>
      <t>MOQT is a generic protocol designed to work in concert with multiple
MoQ Streaming Formats. These MoQ Streaming Formats define how content is
encoded, packaged, and mapped to MOQT objects, along with policies for
discovery and subscription.</t>
      <ul spacing="normal">
        <li>
          <t><xref target="model"/> describes the data model employed by MOQT.</t>
        </li>
        <li>
          <t><xref target="session"/> covers aspects of setting up an MOQT session.</t>
        </li>
        <li>
          <t><xref target="priorities"/> covers mechanisms for prioritizing subscriptions.</t>
        </li>
        <li>
          <t><xref target="relays-moq"/> covers behavior at the relay entities.</t>
        </li>
        <li>
          <t><xref target="message"/> covers how control messages are encoded on the wire.</t>
        </li>
        <li>
          <t><xref target="data-streams"/> covers how data messages are encoded on the wire.</t>
        </li>
      </ul>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>The development of MOQT is driven by goals in a number of areas -
specifically latency, the robust feature set of QUIC and relay
support.</t>
        <section anchor="latency">
          <name>Latency</name>
          <t>Latency is necessary to correct for variable network throughput. Ideally live
content is consumed at the same bitrate it is produced. End-to-end latency would
be fixed and only subject to encoding and transmission delays. Unfortunately,
networks have variable throughput, primarily due to congestion. Attempting to
deliver content encoded at a higher bitrate than the network can cause
queuing along the path from producer to consumer. The speed at which a protocol
can detect and respond to congestion determines the overall latency. TCP-based
protocols are simple but are slow to detect congestion and suffer from
head-of-line blocking. Protocols utilizing UDP directly can avoid queuing, but
the application is then responsible for the complexity of fragmentation,
congestion control, retransmissions, receiver feedback, reassembly, and
more. One goal of MOQT is to achieve the best of both these worlds: leverage the
features of QUIC to create a simple yet flexible low latency protocol that can
rapidly detect and respond to congestion.</t>
        </section>
        <section anchor="leveraging-quic">
          <name>Leveraging QUIC</name>
          <t>The parallel nature of QUIC streams can provide improvements in the face
of loss. A goal of MOQT is to design a streaming protocol to leverage
the transmission benefits afforded by parallel QUIC streams as well
exercising options for flexible loss recovery.</t>
        </section>
        <section anchor="convergence">
          <name>Convergence</name>
          <t>Some live media architectures today have separate protocols for ingest and
distribution, for example RTMP and HTTP based HLS or DASH. Switching protocols
necessitates intermediary origins which re-package the
media content. While specialization can have its benefits, there are efficiency
gains to be had in not having to re-package content. A goal of MOQT is to
develop a single protocol which can be used for transmission from contribution
to distribution. A related goal is the ability to support existing encoding and
packaging schemas, both for backwards compatibility and for interoperability
with the established content preparation ecosystem.</t>
        </section>
        <section anchor="relays">
          <name>Relays</name>
          <t>An integral feature of a protocol being successful is its ability to
deliver media at scale. Greatest scale is achieved when third-party
networks, independent of both the publisher and subscriber, can be
leveraged to relay the content. These relays must cache content for
distribution efficiency while simultaneously routing content and
deterministically responding to congestion in a multi-tenant network. A
goal of MOQT is to treat relays as first-class citizens of the protocol
and ensure that objects are structured such that information necessary
for distribution is available to relays while the media content itself
remains opaque and private.</t>
        </section>
      </section>
      <section anchor="terms-and-definitions">
        <name>Terms 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?>

<t>The following terms are used with the first letter capitalized.</t>
        <dl>
          <dt>Application:</dt>
          <dd>
            <t>The entity using MOQT to transmit and receive data.</t>
          </dd>
          <dt>Client:</dt>
          <dd>
            <t>The party initiating a Transport Session.</t>
          </dd>
          <dt>Server:</dt>
          <dd>
            <t>The party accepting an incoming Transport Session.</t>
          </dd>
          <dt>Endpoint:</dt>
          <dd>
            <t>A Client or Server.</t>
          </dd>
          <dt>Peer:</dt>
          <dd>
            <t>The other endpoint than the one being described</t>
          </dd>
          <dt>Publisher:</dt>
          <dd>
            <t>An endpoint that handles subscriptions by sending requested Objects from the requested track.</t>
          </dd>
          <dt>Subscriber:</dt>
          <dd>
            <t>An endpoint that subscribes to and receives tracks.</t>
          </dd>
          <dt>Original Publisher:</dt>
          <dd>
            <t>The initial publisher of a given track.</t>
          </dd>
          <dt>End Subscriber:</dt>
          <dd>
            <t>A subscriber that initiates a subscription and does not send the data on to other subscribers.</t>
          </dd>
          <dt>Relay:</dt>
          <dd>
            <t>An entity that is both a Publisher and a Subscriber, is not the Original
Publisher or End Subscriber, and conforms to all requirements in <xref target="relays-moq"/>.</t>
          </dd>
          <dt>Upstream:</dt>
          <dd>
            <t>In the direction of the Original Publisher</t>
          </dd>
          <dt>Downstream:</dt>
          <dd>
            <t>In the direction of the End Subscriber(s)</t>
          </dd>
          <dt>Transport Session:</dt>
          <dd>
            <t>A raw QUIC connection or a WebTransport session.</t>
          </dd>
          <dt>Stream:</dt>
          <dd>
            <t>A bidirectional or unidirectional bytestream provided by the
QUIC transport or WebTransport.</t>
          </dd>
          <dt>Congestion:</dt>
          <dd>
            <t>Packet loss and queuing caused by degraded or overloaded networks.</t>
          </dd>
          <dt>Group:</dt>
          <dd>
            <t>A temporal sequence of objects. A group represents a join point in a
track. See (<xref target="model-group"/>).</t>
          </dd>
          <dt>Object:</dt>
          <dd>
            <t>An object is an addressable unit whose payload is a sequence of
bytes. Objects form the base element in the MOQT data model. See
(<xref target="model-object"/>).</t>
          </dd>
          <dt>Track:</dt>
          <dd>
            <t>A track is a collection of groups. See (<xref target="model-track"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="stream-management-terms">
        <name>Stream Management Terms</name>
        <t>This document uses stream management terms described in <xref section="1.3" sectionFormat="comma" target="RFC9000"/> including STOP_SENDING, RESET_STREAM and FIN.</t>
      </section>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>This document uses the conventions detailed in (<xref section="1.3" sectionFormat="comma" target="RFC9000"/>)
when describing the binary encoding.</t>
        <t>As a quick reference, the following list provides a non normative summary
of the parts of RFC9000 field syntax that are used in this specification.</t>
        <dl>
          <dt>x (L):</dt>
          <dd>
            <t>Indicates that x is L bits long</t>
          </dd>
          <dt>x (i):</dt>
          <dd>
            <t>Indicates that x holds an integer value using the variable-length
encoding as described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>)</t>
          </dd>
          <dt>x (..):</dt>
          <dd>
            <t>Indicates that x can be any length including zero bits long.  Values
 in this format always end on a byte boundary.</t>
          </dd>
          <dt>[x (L)]:</dt>
          <dd>
            <t>Indicates that x is optional and has a length of L</t>
          </dd>
          <dt>x (L) ...:</dt>
          <dd>
            <t>Indicates that x is repeated zero or more times and that each instance
has a length of L</t>
          </dd>
        </dl>
        <t>This document extends the RFC9000 syntax and with the additional field types:</t>
        <dl>
          <dt>x (b):</dt>
          <dd>
            <t>Indicates that x consists of a variable length integer encoding as
described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>), followed by that many bytes
of binary data</t>
          </dd>
          <dt>x (tuple):</dt>
          <dd>
            <t>Indicates that x is a tuple, consisting of a variable length integer encoded
as described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>), followed by that many variable
length tuple fields, each of which are encoded as (b) above.</t>
          </dd>
        </dl>
        <t>To reduce unnecessary use of bandwidth, variable length integers <bcp14>SHOULD</bcp14>
be encoded using the least number of bytes possible to represent the
required value.</t>
        <section anchor="location-structure">
          <name>Location Structure</name>
          <t>Location identifies a particular Object in a Group within a Track.</t>
          <figure anchor="moq-location">
            <name>Location structure</name>
            <artwork><![CDATA[
Location {
  Group (i),
  Object (i)
}
]]></artwork>
          </figure>
          <t>In this document, the constituent parts of any Location A can be referred to
using A.Group or A.Object.</t>
          <t>Location A &lt; Location B if:</t>
          <t><tt>A.Group &lt; B.Group || (A.Group == B.Group &amp;&amp; A.Object &lt; B.Object)</tt></t>
        </section>
        <section anchor="key-value-pair-structure">
          <name>Key-Value-Pair Structure</name>
          <t>Key-Value-Pair is a flexible structure designed to carry key/value
pairs in which the key is a variable length integer and the value
is either a variable length integer or a byte field of arbitrary
length.</t>
          <t>Key-Value-Pair is used in both the data plane and control plane, but
is optimized for use in the data plane.</t>
          <figure anchor="moq-key-value-pair">
            <name>MOQT Key-Value-Pair</name>
            <artwork><![CDATA[
Key-Value-Pair {
  Type (i),
  [Length (i),]
  Value (..)
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Type: an unsigned integer, encoded as a varint, identifying the
type of the value and also the subsequent serialization.</t>
            </li>
            <li>
              <t>Length: Only present when Type is odd. Specifies the length of the Value field.
The maximum length of a value is 2^16-1 bytes.  If an endpoint receives a
length larger than the maximum, it <bcp14>MUST</bcp14> close the session with a Protocol
Violation.</t>
            </li>
            <li>
              <t>Value: A single varint encoded value when Type is even, otherwise a
sequence of Length bytes.</t>
            </li>
          </ul>
          <t>If a receiver understands a Type, and the following Value or Length/Value does
not match the serialization defined by that Type, the receiver <bcp14>MUST</bcp14> terminate
the session with error code <tt>KEY_VALUE_FORMATTING_ERROR</tt>.</t>
        </section>
        <section anchor="reason-phrase">
          <name>Reason Phrase Structure</name>
          <t>Reason Phrase provides a way for the sender to encode additional diagnostic
information about the error condition, where appropriate.</t>
          <artwork><![CDATA[
Reason Phrase {
  Reason Phrase Length (i),
  Reason Phrase Value (..)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Reason Phrase Length: A variable-length integer specifying the length of the
reason phrase in bytes. The reason phrase length has a maximum length of
1024 bytes. If an endpoint receives a length exceeding the maximum, it <bcp14>MUST</bcp14>
close the session with a <tt>PROTOCOL_VIOLATION</tt></t>
            </li>
            <li>
              <t>Reason Phrase Value: Additional diagnostic information about the error condition.
The reason phrase value is encoded as UTF-8 string and does not carry information,
such as language tags, that would aid comprehension by any entity other than
the one that created the text.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="model">
      <name>Object Data Model</name>
      <t>MOQT has a hierarchical data model, comprised of tracks which contain
groups, and groups that contain objects. Inside of a group, the objects
can be organized into subgroups.</t>
      <t>To give an example of how an application might use this data model,
consider an application sending high and low resolution video using a
codec with temporal scalability. Each resolution is sent as a separate
track to allow the subscriber to pick the appropriate resolution given
the display environment and available bandwidth. Each independently
coded sequence of pictures in a resolution is sent as a group as the
first picture in the sequence can be used as a random access point.
This allows the client to join at the logical points where decoding
of the media can start without needing information before the join
points. The temporal layers are sent as separate subgroups to allow
the priority mechanism to favor lower temporal layers when there is
not enough bandwidth to send all temporal layers. Each frame of video
is sent as a single object.</t>
      <section anchor="model-object">
        <name>Objects</name>
        <t>The basic data element of MOQT is an object.  An object is an
addressable unit whose payload is a sequence of bytes.  All objects
belong to a group, indicating ordering and potential
dependencies (see <xref target="model-group"/>).  An object is uniquely identified by
its track namespace, track name, group ID, and object ID, and must be an
identical sequence of bytes regardless of how or where it is retrieved.
An Object can become unavailable, but its contents <bcp14>MUST NOT</bcp14> change over
time.</t>
        <t>Objects are comprised of two parts: metadata and a payload.  The metadata is
never encrypted and is always visible to relays (see <xref target="relays-moq"/>). The
payload portion may be encrypted, in which case it is only visible to the
Original Publisher and End Subscribers. The Original Publisher is solely
responsible for the content of the object payload. This includes the
underlying encoding, compression, any end-to-end encryption, or
authentication. A relay <bcp14>MUST NOT</bcp14> combine, split, or otherwise modify object
payloads.</t>
        <t>Objects within a Group are ordered numerically by their Object ID.</t>
      </section>
      <section anchor="model-subgroup">
        <name>Subgroups</name>
        <t>A subgroup is a sequence of one or more objects from the same group
(<xref target="model-group"/>) in ascending order by Object ID. Objects in a subgroup
have a dependency and priority relationship consistent with sharing a
stream and are sent on a single stream whenever possible. A Group is delivered
using at least as many streams as there are Subgroups,
typically with a one-to-one mapping between Subgroups and streams.</t>
        <t>When a Track's forwarding preference (see <xref target="object-properties"/>) is
"Datagram", Objects are not sent in Subgroups and the
description in the remainder of this section does not apply.</t>
        <t>Streams offer in-order reliable delivery and the ability to cancel sending
and retransmission of data. Furthermore, many implementations offer the ability
to control the relative priority of streams, which allows control over the
scheduling of sending data on active streams.</t>
        <t>Every object within a Group belongs to exactly one Subgroup.</t>
        <t>Objects from two subgroups cannot be sent on the same stream. Objects from the
same Subgroup <bcp14>MUST NOT</bcp14> be sent on different streams, unless one of the streams
was reset prematurely, or upstream conditions have forced objects from a Subgroup
to be sent out of Object ID order.</t>
        <t>Original publishers assign each Subgroup a Subgroup ID, and do so as they see fit.  The
scope of a Subgroup ID is a Group, so Subgroups from different Groups <bcp14>MAY</bcp14> share a Subgroup
ID without implying any relationship between them. In general, publishers assign
objects to subgroups in order to leverage the features of streams as described
above.</t>
        <t>In general, if Object B is dependent on Object A, then delivery of B can follow
A, i.e. A and B can be usefully delivered over a single stream.  If an Object is
dependent on all previous Objects in a Subgroup, it likely fits best in that
Subgroup.  If an Object is not dependent on any of the Objects in a Subgroup, it
likely belongs in a different Subgroup.</t>
        <t>When assigning Objects to different Subgroups, the Original Publisher makes a
reasonable tradeoff between having an optimal mapping of Object relationships in
a Group and minimizing the number of streams used.</t>
      </section>
      <section anchor="model-group">
        <name>Groups</name>
        <t>A group is a collection of Objects and is a sub-unit of a Track
(<xref target="model-track"/>).  Groups <bcp14>SHOULD</bcp14> be independently useful, so Objects within a
Group <bcp14>SHOULD NOT</bcp14> depend on Objects in other Groups. A Group provides a join
point for subscriptions, so a subscriber that does not want to receive the
entire Track can opt to receive only Groups starting from a given Group ID.
Groups can contain any number of Objects.</t>
        <section anchor="group-ids">
          <name>Group IDs</name>
          <t>Within a track, the original publisher <bcp14>SHOULD</bcp14> publish Group IDs which increase
with time (where "time" is defined according to the internal clock of the media
being sent). In some cases, Groups will be produced in increasing order, but sent
to subscribers in a different order, for example when the subscription's Group
Order is Descending.  Due to network reordering and the partial reliability
features of MOQT, Groups can always be received out of order.</t>
          <t>As a result, subscribers cannot infer the existence of a Group until an object in
the Group is received. This can create gaps in a cache that can be filled
by doing a Fetch upstream, if necessary.</t>
          <t>Applications that cannot produce Group IDs that increase with time are limited
to the subset of MOQT that does not compare group IDs. Subscribers to these
Tracks <bcp14>SHOULD NOT</bcp14> use range filters which span multiple Groups in FETCH or
SUBSCRIBE.  SUBSCRIBE and FETCH delivery use Group Order, so a FETCH cannot
deliver Groups out of order and a subscription could have unexpected delivery
order if Group IDs do not increase with time.</t>
          <t>Note that the increase in time between two groups is not defined by the protocol.</t>
        </section>
      </section>
      <section anchor="model-track">
        <name>Track</name>
        <t>A track is a sequence of groups (<xref target="model-group"/>). It is the entity
against which a subscriber issues a subscription request.  A subscriber
can request to receive individual tracks starting at a group boundary,
including any new objects pushed by the publisher while the track is
active.</t>
        <section anchor="track-name">
          <name>Track Naming</name>
          <t>In MOQT, every track is identified by a Full Track Name, consisting of a Track
Namespace and a Track Name.</t>
          <t>Track Namespace is an ordered N-tuple of bytes where N can be between 1 and 32.
The structured nature of Track Namespace allows relays and applications to
manipulate prefixes of a namespace. If an endpoint receives a Track Namespace
tuple with an N of 0 or more than 32, it <bcp14>MUST</bcp14> close the session with a Protocol
Violation.</t>
          <t>Track Name is a sequence of bytes that identifies an individual track within the
namespace.</t>
          <t>The maximum total length of a Full Track Name is 4,096 bytes, computed as the
sum of the lengths of each Track Namespace tuple field and the Track Name length
field.  If an endpoint receives a Full Track Name exceeding this length, it <bcp14>MUST</bcp14>
close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>In this specification, both the Track Namespace tuple fields and the Track Name
are not constrained to a specific encoding. They carry a sequence of bytes and
comparison between two Track Namespace tuple fields or Track Names is done by
exact comparison of the bytes. Specifications that use MOQT may constrain the
information in these fields, for example by restricting them to UTF-8. Any such
specification needs to specify the canonicalization into the bytes in the Track
Namespace or Track Name such that exact comparison works.</t>
        </section>
      </section>
      <section anchor="malformed-tracks">
        <name>Malformed Tracks</name>
        <t>There are multiple ways a publisher can transmit a Track that does not conform
to MOQT constraints. Such a Track is considered malformed.  Some example
conditions that constitute a malformed track when detected by a receiver
include:</t>
        <ol spacing="normal" type="1"><li>
            <t>An Object is received in a FETCH response with the same Group as the
previous Object, but whose Object ID is not strictly larger than the previous
object.</t>
          </li>
          <li>
            <t>An Object is received in an Ascending FETCH response whose Group ID is smaller
than the previous Object in the response.</t>
          </li>
          <li>
            <t>An Object is received in a Descending FETCH response whose Group ID is larger
than the previous Object in the resopnse.</t>
          </li>
          <li>
            <t>An Object is received whose Object ID is larger than the final Object in the
Subgroup.  The final Object in a Subgroup is the last Object received on a
Subgroup stream before a FIN.</t>
          </li>
          <li>
            <t>A Subgroup is received with two or more different final Objects.</t>
          </li>
          <li>
            <t>An Object is received in a Group whose Object ID is larger than the final
Object in the Group.  The final Object in a Group is the Object with Status
END_OF_GROUP or the last Object sent in a FETCH that requested the entire
Group.</t>
          </li>
          <li>
            <t>An Object is received on a Track whose Group and Object ID are larger than the
final Object in the Track.  The final Object in a Track is the Object with
Status END_OF_TRACK or the last Object sent in a FETCH whose response indicated
End of Track.</t>
          </li>
          <li>
            <t>The same Object is received more than once with different Payload or
 other immutable properties.</t>
          </li>
          <li>
            <t>An Object is received with a different Forwarding Preference than previously
 observed from the same Track.</t>
          </li>
        </ol>
        <t>The above list of conditions is not considered exhaustive.</t>
        <t>When a subscriber detects a Malformed Track, it <bcp14>MUST</bcp14> UNSUBSCRIBE any
subscription and FETCH_CANCEL any fetch for that Track from that publisher, and
<bcp14>SHOULD</bcp14> deliver an error to the application.  If a relay detects a Malformed
Track, it <bcp14>MUST</bcp14> immediately terminate downstream subscriptions with PUBLISH_DONE
and reset any fetch streams with Status Code <tt>MALFORMED_TRACK</tt>.</t>
        <section anchor="track-scope">
          <name>Scope</name>
          <t>An MOQT scope is a set of servers (as identified by their connection
URIs) for which the tuple of Track Namespace and Track Name are
guaranteed to be unique and identify a specific track. It is up to
the application using MOQT to define how broad or narrow the scope is.
An application that deals with connections between devices
on a local network may limit the scope to a single connection; by
contrast, an application that uses multiple CDNs to serve media may
require the scope to include all of those CDNs.</t>
          <t>Because the tuple of Track Namespace and Track Name are unique within an
MOQT scope, they can be used as a cache key for the track.
If, at a given moment in time, two tracks within the same scope contain
different data, they <bcp14>MUST</bcp14> have different names and/or namespaces.
MOQT provides subscribers with the ability to alter the specific manner in
which tracks are delivered via Parameters, but the actual content of the tracks
does not depend on those parameters; this is in contrast to protocols like HTTP,
where request headers can alter the server response.</t>
          <t>A publisher that loses state (e.g. crashes) and intends to resume publishing on
the same Track risks colliding with previously published Objects and violating
the above requirements.  A publisher can handle this in application specific
ways, for example:</t>
          <ol spacing="normal" type="1"><li>
              <t>Select a unique Track Name or Track Namespace whenever it resumes
publishing. For example, it can base one of the Namespace tuple fields on the
current time, or select a sufficiently large random value.</t>
            </li>
            <li>
              <t>Resume publishing under a previous Track Name and Namespace and set the
initial Group ID to a unique value guaranteed to be larger than all
previously used groups.  This can be done by choosing a Group ID based on the
current time.</t>
            </li>
            <li>
              <t>Use TRACK_STATUS or similar mechanism to query the previous state to
determine the largest published Group ID.</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="session">
      <name>Sessions</name>
      <section anchor="session-establishment">
        <name>Session establishment</name>
        <t>This document defines a protocol that can be used interchangeably both
over a QUIC connection directly <xref target="QUIC"/>, and over WebTransport
<xref target="WebTransport"/>.  Both provide streams and datagrams with similar
semantics (see <xref section="4" sectionFormat="comma" target="I-D.ietf-webtrans-overview"/>); thus, the
main difference lies in how the servers are identified and how the
connection is established. The [QUIC-DATAGRAM] extension
<bcp14>MUST</bcp14> be supported and negotiated in the QUIC connection used for MOQT,
which is already a requirement for WebTransport over HTTP/3. The
RESET_STREAM_AT <xref target="I-D.draft-ietf-quic-reliable-stream-reset"/>
extension to QUIC can be used by MOQT, but the protocol is also
designed to work correctly when the extension is not supported.</t>
        <t>There is no definition of the protocol over other transports,
such as TCP, and applications using MoQ might need to fallback to
another protocol when QUIC or WebTransport aren't available.</t>
        <section anchor="webtransport">
          <name>WebTransport</name>
          <t>An MOQT server that is accessible via WebTransport can be identified
using an HTTPS URI (<xref section="4.2.2" sectionFormat="comma" target="RFC9110"/>).  An MOQT session can be
established by sending an extended CONNECT request to the host and the
path indicated by the URI, as described in
(<xref section="3" sectionFormat="comma" target="WebTransport"/>).</t>
        </section>
        <section anchor="quic">
          <name>QUIC</name>
          <t>An MOQT server that is accessible via native QUIC can be identified by a
URI with a "moqt" scheme.  The "moqt" URI scheme is defined as follows,
using definitions from <xref target="RFC3986"/>:</t>
          <artwork><![CDATA[
moqt-URI = "moqt" "://" authority path-abempty [ "?" query ]
]]></artwork>
          <t>The <tt>authority</tt> portion <bcp14>MUST NOT</bcp14> contain an empty <tt>host</tt> portion.
The <tt>moqt</tt> URI scheme supports the <tt>/.well-known/</tt> path prefix defined in
<xref target="RFC8615"/>.</t>
          <t>This protocol does not specify any semantics on the <tt>path-abempty</tt> and
<tt>query</tt> portions of the URI.  The contents of those are left up to the
application.</t>
          <t>The client can establish a connection to a MoQ server identified by a given URI
by setting up a QUIC connection to the host and port identified by the
<tt>authority</tt> section of the URI. The <tt>authority</tt>, <tt>path-abempty</tt> and <tt>query</tt>
portions of the URI are also transmitted in SETUP parameters (see
<xref target="setup-params"/>).</t>
          <t>The ALPN value <xref target="RFC7301"/> used by the protocol is <tt>moq-00</tt>.</t>
        </section>
        <section anchor="connection-url">
          <name>Connection URL</name>
          <t>Each track <bcp14>MAY</bcp14> have one or more associated connection URLs specifying
network hosts through which a track may be accessed. The syntax of the
Connection URL and the associated connection setup procedures are
specific to the underlying transport protocol usage (see <xref target="session"/>).</t>
        </section>
      </section>
      <section anchor="version-negotiation">
        <name>Version and Extension Negotiation</name>
        <t>Endpoints use the exchange of Setup messages to negotiate the MOQT version and
any extensions to use.</t>
        <t>The client indicates the MOQT versions it supports in the CLIENT_SETUP message
(see <xref target="message-setup"/>). It also includes the union of all Setup Parameters
(see <xref target="setup-params"/>) required for a handshake by any of those versions.</t>
        <t>Within any MOQT version, clients request the use of extensions by adding Setup
parameters corresponding to that extension. No extensions are defined in this
document.</t>
        <t>The server replies with a SERVER_SETUP message that indicates the chosen
version, includes all parameters required for a handshake in that version, and
parameters for every extension requested by the client that it supports.</t>
        <t>New versions of MOQT <bcp14>MUST</bcp14> specify which existing extensions can be used with
that version. New extensions <bcp14>MUST</bcp14> specify the existing versions with which they
can be used.</t>
        <t>If a given parameter carries the same information in multiple versions,
but might have different optimal values in those versions, there <bcp14>SHOULD</bcp14> be
separate Setup parameters for that information in each version.</t>
      </section>
      <section anchor="session-init">
        <name>Session initialization</name>
        <t>The first stream opened is a client-initiated bidirectional control stream where
the endpoints exchange Setup messages (<xref target="message-setup"/>), followed by other
messages defined in <xref target="message"/>.</t>
        <t>This draft only specifies a single use of bidirectional streams. Objects are
sent on unidirectional streams.  Because there are no other uses of
bidirectional streams, a peer <bcp14>MAY</bcp14> close the session as a <tt>PROTOCOL_VIOLATION</tt> if
it receives a second bidirectional stream.</t>
        <t>The control stream <bcp14>MUST NOT</bcp14> be closed at the underlying transport layer while the
session is active.  Doing so results in the session being closed as a
<tt>PROTOCOL_VIOLATION</tt>.</t>
      </section>
      <section anchor="session-termination">
        <name>Termination</name>
        <t>The Transport Session can be terminated at any point.  When native QUIC
is used, the session is closed using the CONNECTION_CLOSE frame
(<xref section="19.19" sectionFormat="comma" target="QUIC"/>).  When WebTransport is used, the session is
closed using the CLOSE_WEBTRANSPORT_SESSION capsule (<xref section="5" sectionFormat="comma" target="WebTransport"/>).</t>
        <t>When terminating the Session, the application <bcp14>MAY</bcp14> use any error message
and <bcp14>SHOULD</bcp14> use a relevant code, as defined below:</t>
        <dl>
          <dt>NO_ERROR (0x0):</dt>
          <dd>
            <t>The session is being terminated without an error.</t>
          </dd>
          <dt>INTERNAL_ERROR (0x1):</dt>
          <dd>
            <t>An implementation specific error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x2):</dt>
          <dd>
            <t>The client is not authorized to establish a session.</t>
          </dd>
          <dt>PROTOCOL_VIOLATION (0x3):</dt>
          <dd>
            <t>The remote endpoint performed an action that was disallowed by the
specification.</t>
          </dd>
          <dt>INVALID_REQUEST_ID (0x4):</dt>
          <dd>
            <t>The session was closed because the endpoint used a Request ID that was
smaller than or equal to a previously received request ID, or the least-
significant bit of the request ID was incorrect for the endpoint.</t>
          </dd>
          <dt>DUPLICATE_TRACK_ALIAS (0x5):</dt>
          <dd>
            <t>The endpoint attempted to use a Track Alias that was already in use.</t>
          </dd>
          <dt>KEY_VALUE_FORMATTING_ERROR (0x6):</dt>
          <dd>
            <t>The key-value pair has a formatting error.</t>
          </dd>
          <dt>TOO_MANY_REQUESTS (0x7):</dt>
          <dd>
            <t>The session was closed because the endpoint used a Request ID equal to or
larger than the current Maximum Request ID.</t>
          </dd>
          <dt>INVALID_PATH (0x8):</dt>
          <dd>
            <t>The PATH parameter was used by a server, on a WebTransport session, or the
server does not support the path.</t>
          </dd>
          <dt>MALFORMED_PATH (0x9):</dt>
          <dd>
            <t>The PATH parameter does not conform to the rules in <xref target="path"/>.</t>
          </dd>
          <dt>GOAWAY_TIMEOUT (0x10):</dt>
          <dd>
            <t>The session was closed because the peer took too long to close the session
in response to a GOAWAY (<xref target="message-goaway"/>) message. See session migration
(<xref target="session-migration"/>).</t>
          </dd>
          <dt>CONTROL_MESSAGE_TIMEOUT (0x11):</dt>
          <dd>
            <t>The session was closed because the peer took too long to respond to a
control message.</t>
          </dd>
          <dt>DATA_STREAM_TIMEOUT (0x12):</dt>
          <dd>
            <t>The session was closed because the peer took too long to send data expected
on an open Data Stream (see <xref target="data-streams"/>). This includes fields of a
stream header or an object header within a data stream. If an endpoint
times out waiting for a new object header on an open subgroup stream, it
<bcp14>MAY</bcp14> send a STOP_SENDING on that stream or terminate the subscription.</t>
          </dd>
          <dt>AUTH_TOKEN_CACHE_OVERFLOW (0x13):</dt>
          <dd>
            <t>The Session limit <xref target="max-auth-token-cache-size"/> of the size of all
registered Authorization tokens has been exceeded.</t>
          </dd>
          <dt>DUPLICATE_AUTH_TOKEN_ALIAS (0x14):</dt>
          <dd>
            <t>Authorization Token attempted to register an Alias that was in use (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>VERSION_NEGOTIATION_FAILED (0x15):</dt>
          <dd>
            <t>The client didn't offer a version supported by the server.</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN (0x16):</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>UNKNOWN_AUTH_TOKEN_ALIAS (0x17):</dt>
          <dd>
            <t>No registered token found for the provided Alias (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x18):</dt>
          <dd>
            <t>Authorization token has expired (<xref target="authorization-token"/>).</t>
          </dd>
          <dt>INVALID_AUTHORITY (0x19):</dt>
          <dd>
            <t>The specified AUTHORITY does not correspond to this server or cannot be
used in this context.</t>
          </dd>
          <dt>MALFORMED_AUTHORITY (0x1A):</dt>
          <dd>
            <t>The AUTHORITY value is syntactically invalid.</t>
          </dd>
        </dl>
        <t>An endpoint <bcp14>MAY</bcp14> choose to treat a subscription or request specific error as a
session error under certain circumstances, closing the entire session in
response to a condition with a single subscription or message. Implementations
need to consider the impact on other outstanding subscriptions before making
this choice.</t>
      </section>
      <section anchor="session-migration">
        <name>Migration</name>
        <t>MOQT requires a long-lived and stateful session. However, a service
provider needs the ability to shutdown/restart a server without waiting for all
sessions to drain naturally, as that can take days for long-form media.
MOQT enables proactively draining sessions via the GOAWAY message (<xref target="message-goaway"/>).</t>
        <t>The server sends a GOAWAY message, signaling the client to establish a new
session and migrate any active subscriptions. The GOAWAY message optionally
contains a new URI for the new session, otherwise the current URI is
reused. The server <bcp14>SHOULD</bcp14> terminate the session with <tt>GOAWAY_TIMEOUT</tt> after a
sufficient timeout if there are still open subscriptions or fetches on a
connection.</t>
        <t>When the server is a subscriber, it <bcp14>SHOULD</bcp14> send a GOAWAY message to downstream
subscribers prior to any UNSUBSCRIBE messages to upstream publishers.</t>
        <t>After the client receives a GOAWAY, it's <bcp14>RECOMMENDED</bcp14> that the client waits until
there are no more active subscriptions before closing the session with NO_ERROR.
Ideally this is transparent to the application using MOQT, which involves
establishing a new session in the background and migrating active subscriptions
and published namespaces. The client can choose to delay closing the session if
it expects more OBJECTs to be delivered. The server closes the session with a
<tt>GOAWAY_TIMEOUT</tt> if the client doesn't close the session quickly enough.</t>
      </section>
      <section anchor="congestion-control">
        <name>Congestion Control</name>
        <t>MOQT does not specify a congestion controller, but there are important attributes
to consider when selecting a congestion controller for use with an application
built on top of MOQT.</t>
        <section anchor="bufferbloat">
          <name>Bufferbloat</name>
          <t>Traditional AIMD congestion controllers (ex. CUBIC <xref target="RFC9438"/> and Reno <xref target="RFC6582"/>)
are prone to Bufferbloat. Bufferbloat occurs when elements along the path build up
a substantial queue of packets, commonly more than doubling the round trip time.
These queued packets cause head-of-line blocking and latency, even when there is
no packet loss.</t>
        </section>
        <section anchor="application-limited">
          <name>Application-Limited</name>
          <t>The average bitrate for latency sensitive content needs to be less than the available
bandwidth, otherwise data will be queued and/or dropped. As such,
many MOQT applications will typically be limited by the available data to send, and
not the congestion controller. Many congestion control algorithms
only increase the congestion window or bandwidth estimate if fully utilized. This
combination can lead to underestimating the available network bandwidth. As a result,
applications might need to periodically ensure the congestion controller is not
app-limited for at least a full round trip to ensure the available bandwidth can be
measured.</t>
        </section>
        <section anchor="consistent-throughput">
          <name>Consistent Throughput</name>
          <t>Congestion control algorithms are commonly optimized for throughput, not consistency.
For example, BBR's PROBE_RTT state halves the sending rate for more than a round trip
in order to obtain an accurate minimum RTT. Similarly, Reno halves it's congestion
window upon detecting loss.  In both cases, the large reduction in sending rate might
cause issues with latency sensitive applications.</t>
        </section>
      </section>
    </section>
    <section anchor="modularity">
      <name>Modularity</name>
      <t>MOQT defines all messages necessary to implement both simple publishing or
subscribing endpoints as well as highly functional Relays.  Non-Relay endpoints
<bcp14>MAY</bcp14> implement only the subset of functionality required to perform necessary
tasks.  For example, a limited media player could operate using only SUBSCRIBE
related messages.  Limited endpoints <bcp14>SHOULD</bcp14> respond to any unsupported messages
with the appropriate <tt>NOT_SUPPORTED</tt> error code, rather than ignoring them.</t>
      <t>Relays <bcp14>MUST</bcp14> implement all MOQT messages defined in this document, as well as
processing rules described in <xref target="relays-moq"/>.</t>
    </section>
    <section anchor="publishing-and-retrieving-tracks">
      <name>Publishing and Retrieving Tracks</name>
      <section anchor="subscriptions">
        <name>Subscriptions</name>
        <t>A subscription can be initiated by either a publisher or a subscriber.  A
publisher initiates a subscription to a track by sending the PUBLISH message.
The subscriber either accepts or rejects the subscription using PUBLISH_OK or
PUBLISH_ERROR.  A subscriber initiates a subscription to a track by sending the
SUBSCRIBE message.  The publisher either accepts or rejects the subscription
using SUBSCRIBE_OK or SUBSCRIBE_ERROR.  Once either of these sequences is
successful, the subscription can be updated by the subscriber using
SUBSCRIBE_UPDATE, terminated by the subscriber using UNSUBSCRIBE, or terminated
by the publisher using PUBLISH_DONE.</t>
        <t>All subscriptions have a Forward State which is either 0 or 1.  If the Forward
State is 0, the publisher does not send objects for the subscription.  If the
Forward State is 1, the publisher sends objects.  The initiator of the
subscription sets the initial Forward State in either PUBLISH or SUBSCRIBE.  The
sender of PUBLISH_OK can update the Forward State based on its preference.  Once
the subscription is established, the subscriber can update the Forward State by
sending SUBSCRIBE_UPDATE.</t>
        <t>Either endpoint can initiate a subscription to a track without exchanging any
prior messages other than SETUP.  Relays <bcp14>MUST NOT</bcp14> send any PUBLISH messages
without knowing the client is interested in and authorized to receive the
content. The communication of intent and authorization can be accomplished by
the client sending SUBSCRIBE_NAMESPACE, or conveyed in other mechanisms out of
band.</t>
        <t>An endpoint <bcp14>MAY</bcp14> SUBSCRIBE to a Track it is publishing, though only Relays are
required to handle such a SUBSCRIBE.  Such self-subscriptions are identical to
subscriptions initiated by other endpoints, and all published Objects will be
forwarded back to the endpoint, subject to priority and congestion response
rules.</t>
        <t>A publisher <bcp14>MUST</bcp14> send exactly one SUBSCRIBE_OK or SUBSCRIBE_ERROR in response to
a SUBSCRIBE. It <bcp14>MUST</bcp14> send exactly one FETCH_OK or FETCH_ERROR in response to a
FETCH. A subscriber <bcp14>MUST</bcp14> send exactly one PUBLISH_OK or PUBLISH_ERROR in
response to a PUBLISH. The peer <bcp14>SHOULD</bcp14> close the session with a protocol error
if it receives more than one.</t>
        <t>Publishers <bcp14>MAY</bcp14> start sending Objects on PUBLISH-initiated subscriptions before
receiving a PUBLISH_OK response to reduce latency.  Doing so can consume
unnecessary resources in cases where the Subscriber rejects the subscription
with PUBLISH_ERROR or sets Forward State=0 in PUBLISH_OK. It can also result in
the Subscriber dropping Objects if its buffering limits are exceeded (see
<xref target="datagrams"/> and <xref target="subgroup-header"/>).</t>
        <t>A subscriber keeps subscription state until it sends UNSUBSCRIBE, or after
receipt of a PUBLISH_DONE or SUBSCRIBE_ERROR. Note that PUBLISH_DONE does not
usually indicate that state can immediately be destroyed, see
<xref target="message-publish-done"/>.</t>
        <t>A subscriber keeps FETCH state until it sends FETCH_CANCEL, receives
FETCH_ERROR, or receives a FIN or RESET_STREAM for the FETCH data stream. If the
data stream is already open, it <bcp14>MAY</bcp14> send STOP_SENDING for the data stream along
with FETCH_CANCEL, but <bcp14>MUST</bcp14> send FETCH_CANCEL.</t>
        <t>The Publisher can destroy subscription or fetch state as soon as it has received
UNSUBSCRIBE or FETCH_CANCEL, respectively. It <bcp14>MUST</bcp14> reset any open streams
associated with the SUBSCRIBE or FETCH. It can also destroy state after closing
the FETCH data stream.</t>
        <t>The publisher can immediately delete subscription state after sending
PUBLISH_DONE, but <bcp14>MUST NOT</bcp14> send it until it has closed all related streams. It
can destroy all FETCH state after closing the data stream.</t>
        <t>A SUBSCRIBE_ERROR indicates no objects will be delivered, and both endpoints can
immediately destroy relevant state. Objects <bcp14>MUST NOT</bcp14> be sent for requests that
end with an error.</t>
        <t>A FETCH_ERROR indicates that both endpoints can immediately destroy state.
Since a relay can start delivering FETCH Objects from cache before determining
the result of the request, some Objects could be received even if the FETCH
results in error.</t>
        <t>The Parameters in SUBSCRIBE, PUBLISH_OK and FETCH <bcp14>MUST NOT</bcp14> cause the publisher
to alter the payload of the objects it sends, as that would violate the track
uniqueness guarantee described in <xref target="track-scope"/>.</t>
      </section>
    </section>
    <section anchor="track-discovery">
      <name>Namespace Discovery</name>
      <t>Discovery of MOQT servers is always done out-of-band. Namespace discovery can be
done in the context of an established MOQT session.</t>
      <t>Given sufficient out of band information, it is valid for a subscriber to send a
SUBSCRIBE or FETCH message to a publisher (including a relay) without any
previous MOQT messages besides SETUP. However, SUBSCRIBE_NAMESPACE, PUBLISH and
PUBLISH_NAMESPACE messages provide an in-band means of discovery of publishers
for a namespace.</t>
      <t>The syntax of these messages is described in <xref target="message"/>.</t>
      <section anchor="subscribing-to-namespaces">
        <name>Subscribing to Namespaces</name>
        <t>If the subscriber is aware of a namespace of interest, it can send
SUBSCRIBE_NAMESPACE to publishers/relays it has established a session with. The
recipient of this message will send any relevant PUBLISH_NAMESPACE,
PUBLISH_NAMESPACE_DONE or PUBLISH messages for that namespace, or more specific
part of that namespace.  This includes echoing back PUBLISH or PUBLISH_NAMESPACE
messages to the endpoint that sent them.  If an endpoint accepts its own
PUBLISH, this behaves as self-subscription described in <xref target="subscriptions"/>.</t>
        <t>A publisher <bcp14>MUST</bcp14> send exactly one SUBSCRIBE_NAMESPACE_OK or
SUBSCRIBE_NAMESPACE_ERROR in response to a SUBSCRIBE_NAMESPACE. The subscriber
<bcp14>SHOULD</bcp14> close the session with a protocol error if it detects receiving more than
one.</t>
        <t>The receiver of a SUBSCRIBE_NAMESPACE_OK or SUBSCRIBE_NAMESPACE_ERROR ought to
forward the result to the application, so the application can decide which other
publishers to contact, if any.</t>
        <t>An UNSUBSCRIBE_NAMESPACE withdraws a previous SUBSCRIBE_NAMESPACE. It does not
prohibit original publishers from sending further PUBLISH_NAMESPACE or PUBLISH
messages, but relays <bcp14>MUST NOT</bcp14> send any further PUBLISH messages to a client
without knowing the client is interested in and authorized to receive the
content.</t>
      </section>
      <section anchor="publishing-namespaces">
        <name>Publishing Namespaces</name>
        <t>A publisher <bcp14>MAY</bcp14> send PUBLISH_NAMESPACE messages to any subscriber. A
PUBLISH_NAMESPACE indicates to the subscriber that the publisher has tracks
available in that namespace. A subscriber <bcp14>MAY</bcp14> send SUBSCRIBE or FETCH for tracks
in a namespace without having received a PUBLISH_NAMESPACE for it.</t>
        <t>If a publisher is authoritative for a given namespace, or is a relay that has
received an authorized PUBLISH_NAMESPACE for that namespace from an upstream
publisher, it <bcp14>MUST</bcp14> send a PUBLISH_NAMESPACE to any subscriber that has
subscribed via SUBSCRIBE_NAMESPACE for that namespace, or a prefix of that
namespace. A publisher <bcp14>MAY</bcp14> send the PUBLISH_NAMESPACE to any other subscriber.</t>
        <t>An endpoint <bcp14>SHOULD</bcp14> report the reception of a PUBLISH_NAMESPACE_OK or
PUBLISH_NAMESPACE_ERROR to the application to inform the search for additional
subscribers for a namespace, or to abandon the attempt to publish under this
namespace. This might be especially useful in upload or chat applications. A
subscriber <bcp14>MUST</bcp14> send exactly one PUBLISH_NAMESPACE_OK or PUBLISH_NAMESPACE_ERROR
in response to a PUBLISH_NAMESPACE. The publisher <bcp14>SHOULD</bcp14> close the session with
a protocol error if it receives more than one.</t>
        <t>A PUBLISH_NAMESPACE_DONE message withdraws a previous PUBLISH_NAMESPACE,
although it is not a protocol error for the subscriber to send a SUBSCRIBE or
FETCH message for a track in a namespace after receiving an
PUBLISH_NAMESPACE_DONE.</t>
        <t>A subscriber can send PUBLISH_NAMESPACE_CANCEL to revoke acceptance of an
PUBLISH_NAMESPACE, for example due to expiration of authorization
credentials. The message enables the publisher to PUBLISH_NAMESPACE again with
refreshed authorization, or discard associated state. After receiving an
PUBLISH_NAMESPACE_CANCEL, the publisher does not send PUBLISH_NAMESPACE_DONE.</t>
        <t>While PUBLISH_NAMESPACE indicates to relays how to connect publishers and
subscribers, it is not a full-fledged routing protocol and does not protect
against loops and other phenomena. In particular, PUBLISH_NAMESPACE <bcp14>SHOULD NOT</bcp14>
be used to find paths through richly connected networks of relays.</t>
        <t>A subscriber <bcp14>MAY</bcp14> send a SUBSCRIBE or FETCH for a track to any publisher. If it
has accepted a PUBLISH_NAMESPACE with a namespace that exactly matches the
namespace for that track, it <bcp14>SHOULD</bcp14> only request it from the senders of those
PUBLISH_NAMESPACE messages.</t>
      </section>
    </section>
    <section anchor="priorities">
      <name>Priorities</name>
      <t>MoQ priorities allow a subscriber and original publisher to influence
the transmission order of Objects within a session in the presence of
congestion.</t>
      <section anchor="definitions">
        <name>Definitions</name>
        <t>MOQT maintains priorities between different <em>schedulable objects</em>.
A schedulable object in MOQT is either:</t>
        <ol spacing="normal" type="1"><li>
            <t>The first or next Object in a Subgroup that is in response to a subscription.</t>
          </li>
          <li>
            <t>An Object in response to a subscription that belongs to a Track with
delivery preference Datagram.</t>
          </li>
          <li>
            <t>An Object in response to a FETCH where that Object is the next
Object in the response.</t>
          </li>
        </ol>
        <t>An Object is not schedulable if it is known that no part of it can be written
due to underlying transport flow control limits.</t>
        <t>A single subgroup or datagram has a single publisher priority. Within a
response to SUBSCRIBE, it can be useful to conceptualize this process as
scheduling subgroups or datagrams instead of individual objects on them.
FETCH responses however can contain objects with different publisher
priorities.</t>
        <t>A <em>priority number</em> is an unsigned integer with a value between 0 and 255.
A lower priority number indicates higher priority; the highest priority is 0.</t>
        <t><em>Subscriber Priority</em> is a priority number associated with an individual
request.  It is specified in the SUBSCRIBE or FETCH message, and can be
updated via SUBSCRIBE_UPDATE message.  The subscriber priority of an individual
schedulable object is the subscriber priority of the request that caused that
object to be sent. When subscriber priority is changed, a best effort <bcp14>SHOULD</bcp14> be
made to apply the change to all objects that have not been scheduled, but it is
implementation dependent what happens to objects that have already been
scheduled.</t>
        <t><em>Publisher Priority</em> is a priority number associated with an individual
schedulable object.  It is specified in the header of the respective subgroup or
datagram, or in each object in a FETCH response.</t>
        <t><em>Group Order</em> is a property of an individual subscription.  It can be either
'Ascending' (groups with lower group ID are sent first), or 'Descending'
(groups with higher group ID are sent first).  The subscriber optionally
communicates its group order preference in the SUBSCRIBE message; the
publisher's preference is used if the subscriber did not express one (by
setting Group Order field to value 0x0).  The group order of an existing
subscription cannot be changed.</t>
      </section>
      <section anchor="scheduling-algorithm">
        <name>Scheduling Algorithm</name>
        <t>When an MOQT publisher has multiple schedulable objects it can choose between,
the objects <bcp14>SHOULD</bcp14> be selected as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>If two objects have different subscriber priorities associated with them,
the one with <strong>the highest subscriber priority</strong> is scheduled to be sent first.</t>
          </li>
          <li>
            <t>If two objects have the same subscriber priority, but different publisher
priorities, the one with <strong>the highest publisher priority</strong> is scheduled to be
sent first.</t>
          </li>
          <li>
            <t>If two objects in response to the same request have the same subscriber
and publisher priority, but belong to two different groups of the same track,
<strong>the group order</strong> of the associated subscription is used to
decide the one that is scheduled to be sent first.</t>
          </li>
          <li>
            <t>If two objects in response to the same request belong to the same group of
the same track, the one with <strong>the lowest Subgroup ID</strong> (for tracks
with delivery preference Subgroup), or <strong>the lowest Object ID</strong> (for tracks
with delivery preference Datagram) is scheduled to be sent first.</t>
          </li>
        </ol>
        <t>The definition of "scheduled to be sent first" in the algorithm is implementation
dependent and is constrained by the prioritization interface of the underlying
transport. For some implementations, it could mean that the object is serialized
and passed to the underlying transport first.  Other implementations can
control the order packets are initially transmitted.</t>
        <t>This algorithm does not provide a well-defined ordering for objects that belong
to different subscriptions or FETCH responses, but have the same subscriber and
publisher priority.  The ordering in those cases is implementation-defined,
though the expectation is that all subscriptions will be able to send some data.</t>
        <t>Given the critical nature of control messages and their relatively
small size, the control stream <bcp14>SHOULD</bcp14> be prioritized higher than all
subscribed Objects.</t>
      </section>
      <section anchor="considerations-for-setting-priorities">
        <name>Considerations for Setting Priorities</name>
        <t>For downstream subscriptions, relays <bcp14>SHOULD</bcp14> respect the subscriber and original
publisher's priorities.  Relays can receive subscriptions with conflicting
subscriber priorities or Group Order preferences.  Relays <bcp14>SHOULD NOT</bcp14> directly
use Subscriber Priority or Group Order from incoming subscriptions for upstream
subscriptions. Relays' use of these fields for upstream subscriptions can be
based on factors specific to it, such as the popularity of the content or
policy, or relays can specify the same value for all upstream subscriptions.</t>
        <t>MoQ Sessions can span multiple namespaces, and priorities might not
be coordinated across namespaces.  The subscriber's priority is
considered first, so there is a mechanism for a subscriber to fix
incompatibilities between different namespaces prioritization schemes.
Additionally, it is anticipated that when multiple namespaces
are present within a session, the namespaces could be coordinating,
possibly part of the same application.  In cases when pooling among
namespaces is expected to cause issues, multiple MoQ sessions, either
within a single connection or on multiple connections can be used.</t>
        <t>Implementations that have a default priority <bcp14>SHOULD</bcp14> set it to a value in
the middle of the range (eg: 128) to allow non-default priorities to be
set either higher or lower.</t>
      </section>
    </section>
    <section anchor="relays-moq">
      <name>Relays</name>
      <t>Relays are leveraged to enable distribution scale in the MoQ
architecture. Relays can be used to form an overlay delivery network,
similar in functionality to Content Delivery Networks
(CDNs). Additionally, relays serve as policy enforcement points by
validating subscribe and publish requests at the edge of a network.</t>
      <t>Relays are endpoints, which means they terminate Transport Sessions in order to
have visibility of MoQ Object metadata.</t>
      <section anchor="caching-relays">
        <name>Caching Relays</name>
        <t>Relays <bcp14>MAY</bcp14> cache Objects, but are not required to.</t>
        <t>A caching relay saves Objects to its cache identified by the Object's Full Track
Name, Group ID and Object ID. If multiple objects are received with the same
Full Track Name, Group ID and Object ID, Relays <bcp14>MAY</bcp14> ignore subsequently received
Objects or <bcp14>MAY</bcp14> use them to update certain cached fields. Implementations that
update the cache need to protect against cache poisoning.  The only Object
fields that can be updated are the following:</t>
        <ol spacing="normal" type="1"><li>
            <t>Object Status can transition from any status to Object Does Not Exist in
cases where the object is no longer available.  Transitions between Normal,
End of Group and End of Track are invalid.</t>
          </li>
          <li>
            <t>Object Header Extensions can be added, removed or updated, subject
to the constraints of the specific header extension.</t>
          </li>
        </ol>
        <t>An endpoint that receives a duplicate Object with an invalid Object Status
change, or a Forwarding Preference, Subgroup ID, Priority or Payload that
differ from a previous version <bcp14>MUST</bcp14> treat the track as Malformed.</t>
        <t>Note that due to reordering, an implementation can receive a duplicate Object
with a status of Normal, End of Group or End of Track after receiving a previous
status of Object Does Not Exist.  The endpoint <bcp14>SHOULD NOT</bcp14> cache or forward the
duplicate object in this case.</t>
        <t>A cache <bcp14>MUST</bcp14> store all properties of an Object defined in
<xref target="object-properties"/>, with the exception of any extensions
(<xref target="object-extensions"/>) that specify otherwise.</t>
      </section>
      <section anchor="multiple-publishers">
        <name>Multiple Publishers</name>
        <t>A Relay can receive PUBLISH_NAMESPACE for the same Track Namespace or PUBLISH
messages for the same Track from multiple publishers.  The following sections
explain how Relays maintain subscriptions to all available publishers for a
given Track.</t>
        <t>There is no specified limit to the number of publishers of a Track Namespace or
Track.  An implementation can use mechanisms such as PUBLISH_ERROR,
PUBLISH_NAMESPACE_ERROR, UNSUBSCRIBE or PUBLISH_NAMESPACE_CANCEL if it cannot
accept an additional publisher due to implementation constraints.
Implementations can consider the establishment or idle time of the session or
subscription to determine which publisher to reject or disconnect.</t>
        <t>Relays <bcp14>MUST</bcp14> handle Objects for the same Track from multiple publishers and
forward them to active matching subscriptions. The Relay <bcp14>SHOULD</bcp14> attempt to
deduplicate Objects before forwarding, subject to implementation constraints.</t>
      </section>
      <section anchor="subscriber-interactions">
        <name>Subscriber Interactions</name>
        <t>Subscribers request Tracks by sending a SUBSCRIBE (see
<xref target="message-subscribe-req"/>) or FETCH (see <xref target="message-fetch"/>) control message for
each Track of interest. Relays <bcp14>MUST</bcp14> ensure subscribers are authorized to access
the content associated with the Track. The authorization information can be part
of request itself or part of the encompassing session. The specifics of how a
relay authorizes a user are outside the scope of this specification.</t>
        <t>The relay <bcp14>MUST</bcp14> have an established upstream subscription before sending
SUBSCRIBE_OK in response to a downstream SUBSCRIBE.  If a relay does not have
sufficient information to send a FETCH_OK immediately in response to a FETCH, it
<bcp14>MUST</bcp14> withhold sending FETCH_OK until it does.</t>
        <t>For successful subscriptions, the publisher maintains a list of subscribers for
each Track. Relays use the Track Alias (<xref target="track-alias"/>) of an incoming Object
to identify its Track and find the active subscribers.  Each new Object
belonging to the Track is forwarded to each active subscriber, as allowed by the
subscription's filter (see <xref target="message-subscribe-req"/>), and delivered according
to the priority (see <xref target="priorities"/>) and delivery timeout (see
<xref target="delivery-timeout"/>).</t>
        <t>A relay <bcp14>MUST NOT</bcp14> reorder or drop objects received on a multi-object stream when
forwarding to subscribers, unless it has application specific information.</t>
        <t>Relays <bcp14>MAY</bcp14> aggregate authorized subscriptions for a given Track when
multiple subscribers request the same Track. Subscription aggregation
allows relays to make only a single upstream subscription for the
Track. The published content received from the upstream subscription
request is cached and shared among the pending subscribers.
Because SUBSCRIBE_UPDATE only allows narrowing a subscription, relays that
aggregate upstream subscriptions can subscribe using the Largest Object
filter to avoid churn as downstream subscribers with disparate filters
subscribe and unsubscribe from a Track.</t>
        <t>A subscriber remains subscribed to a Track at a Relay until it unsubscribes, the
upstream publisher terminates the subscription, or the subscription expires (see
<xref target="message-subscribe-ok"/>).  A subscription with a filter can reach a state where
all possible Objects matching the filter have been delivered to the subscriber.
Since tracking this can be prohibitively expensive, Relays are not required or
expected to do so.</t>
        <section anchor="graceful-subscriber-relay-switchover">
          <name>Graceful Subscriber Relay Switchover</name>
          <t>This section describes behavior a subscriber <bcp14>MAY</bcp14> implement
to allow for a better user experience when a relay sends a GOAWAY.</t>
          <t>When a subscriber receives the GOAWAY message, it starts the process
of connecting to a new relay and sending the SUBSCRIBE requests for
all active subscriptions to the new relay. The new relay will send a
response to the subscribes and if they are successful, the subscriptions
to the old relay can be stopped with an UNSUBSCRIBE.</t>
        </section>
      </section>
      <section anchor="publisher-interactions">
        <name>Publisher Interactions</name>
        <t>There are two ways to publish through a relay:</t>
        <ol spacing="normal" type="1"><li>
            <t>Send a PUBLISH message for a specific Track to the relay. The relay <bcp14>MAY</bcp14>
respond with PUBLISH_OK in Forward State=0 until there are known subscribers for
new Tracks.</t>
          </li>
          <li>
            <t>Send a PUBLISH_NAMESPACE message for a Track Namespace to the relay. This
enables the relay to send SUBSCRIBE or FETCH messages to publishers for Tracks
in this Namespace in response to requests received from subscribers.</t>
          </li>
        </ol>
        <t>Relays <bcp14>MUST</bcp14> verify that publishers are authorized to publish the set of Tracks
whose Track Namespace matches the namespace in a PUBLISH_NAMESPACE, or the Full
Track Name in PUBLISH. The authorization and identification of the publisher
depends on the way the relay is managed and is application specific.</t>
        <t>When a publisher wants to stop new subscriptions for a published namespace it
sends a PUBLISH_NAMESPACE_DONE. A subscriber indicates it will no longer
subcribe to Tracks in a namespace it previously responded PUBLISH_NAMESPACE_OK
to by sending a PUBLISH_NAMESPACE_CANCEL.</t>
        <t>A Relay connects publishers and subscribers by managing sessions based on the
Track Namespace or Full Track Name. When a SUBSCRIBE message is sent, its Full
Track Name is matched exactly against existing upstream subscriptions.</t>
        <t>Namespace Prefix Matching is further used to decide which publishers receive a
SUBSCRIBE and which subscribers receive a PUBLISH. In this process, the tuples
in the Track Namespace are matched sequentially, requiring an exact match for
each field. If the published or subscribed Track Namespace has the same or fewer
fields than the Track Namespace in the message, it qualifies as a match.</t>
        <t>For example:
A SUBSCRIBE message with namespace=(foo, bar) and name=x will match sessions
that sent PUBLISH_NAMESPACE messages with namespace=(foo) or namespace=(foo,
bar).  It will not match a session with namespace=(foobar).</t>
        <t>Relays <bcp14>MUST</bcp14> forward SUBSCRIBE messages to all matching publishers and
PUBLISH_NAMESPACE or PUBLISH messages to all matching subscribers.</t>
        <t>When a Relay needs to make an upstream FETCH request, it determines the
available publishers using the same matching rules as SUBSCRIBE. When more than
one publisher is available, the Relay <bcp14>MAY</bcp14> send the FETCH to any of them.</t>
        <t>When a Relay receives an authorized SUBSCRIBE for a Track with one or more
active upstream subscriptions, it <bcp14>MUST</bcp14> reply with SUBSCRIBE_OK.  If the
SUBSCRIBE has Forward State=1 and the upstream subscriptions are in Forward
State=0, the Relay <bcp14>MUST</bcp14> send SUBSCRIBE_UPDATE with Forward=1 to all publishers.
If there are no active upstream subscriptions for the requested Track, the Relay
<bcp14>MUST</bcp14> send a SUBSCRIBE request to each publisher that has published the
subscription's namespace or prefix thereof.  If the SUBSCRIBE has Forward
=1, then the Relay <bcp14>MUST</bcp14> use Forward=1 when subscribing upstream.</t>
        <t>When a relay receives an incoming PUBLISH message, it <bcp14>MUST</bcp14> send a PUBLISH
request to each subscriber that has subscribed (via SUBSCRIBE_NAMESPACE)
to the Track's namespace or prefix thereof.</t>
        <t>When a relay receives an authorized PUBLISH_NAMESPACE for a namespace that
matches one or more existing subscriptions to other upstream sessions, it <bcp14>MUST</bcp14>
send a SUBSCRIBE to the publisher that sent the PUBLISH_NAMESPACE for each
matching subscription.  When it receives an authorized PUBLISH message for a
Track that has active subscribers, it <bcp14>MUST</bcp14> respond with PUBLISH_OK.  If at least
one downstream subscriber for the Track has Forward State=1, the Relay <bcp14>MUST</bcp14> use
Forward State=1 in the reply.</t>
        <t>If a Session is closed due to an unknown or invalid control message or Object,
the Relay <bcp14>MUST NOT</bcp14> propagate that message or Object to another Session, because
it would enable a single Session error to force an unrelated Session, which
might be handling other subscriptions, to be closed.</t>
        <section anchor="graceful-publisher-network-switchover">
          <name>Graceful Publisher Network Switchover</name>
          <t>This section describes a behavior that a publisher <bcp14>MAY</bcp14>
choose to implement to allow for a better user experience when
switching between networks, such as WiFi to Cellular or vice versa.</t>
          <t>If the original publisher detects it is likely to need to switch networks, for
example because the WiFi signal is getting weaker, and it does not have QUIC
connection migration available, it establishes a new session over the new
interface and sends PUBLISH_NAMESPACE and/or PUBLISH messages. The relay will
establish subscriptions and the publisher publishes Objects on both sessions.
Once the subscriptions have migrated over to the session on the new network, the
publisher can stop publishing Objects on the old network. The relay will attempt
to deduplicate Objects received on both subscriptions. Ideally, the
subscriptions downstream from the relay do no observe this change, and keep
receiving the Objects on the same subscription.</t>
        </section>
        <section anchor="graceful-publisher-relay-switchover">
          <name>Graceful Publisher Relay Switchover</name>
          <t>This section describes a behavior that a publisher <bcp14>MAY</bcp14> choose to implement
to allow for a better user experience when a relay sends them a GOAWAY.</t>
          <t>When a publisher receives a GOAWAY, it starts the process of connecting to a new
relay and sends PUBLISH_NAMESPACE and/or PUBLISH messages, but it does not
immediately stop publishing Objects to the old Relay. The new Relay will
establish subscriptions and the publisher can start sending new Objects to the
new relay instead of the old Relay. Once Objects are going to the new Relay, the
published namespaces and subscriptions to the old relay can be withdrawn or
terminated.</t>
        </section>
      </section>
      <section anchor="relay-object-handling">
        <name>Relay Object Handling</name>
        <t>MOQT encodes the delivery information via Object headers
(<xref target="message-object"/>).  A relay <bcp14>MUST NOT</bcp14> modify Object properties when
forwarding, except for Object Extension Headers as specified in
<xref target="object-extensions"/>.</t>
        <t>A relay <bcp14>MUST</bcp14> treat the object payload as opaque.  A relay <bcp14>MUST NOT</bcp14>
combine, split, or otherwise modify object payloads.  A relay <bcp14>SHOULD</bcp14>
prioritize sending Objects based on <xref target="priorities"/>.</t>
        <t>A publisher <bcp14>SHOULD</bcp14> begin sending incomplete objects when available to
avoid incurring additional latency.</t>
      </section>
    </section>
    <section anchor="message">
      <name>Control Messages</name>
      <t>MOQT uses a single bidirectional stream to exchange control messages, as
defined in <xref target="session-init"/>.  Every single message on the control stream is
formatted as follows:</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Message</name>
        <artwork><![CDATA[
MOQT Control Message {
  Message Type (i),
  Message Length (16),
  Message Payload (..),
}
]]></artwork>
      </figure>
      <t>The following Message Types are defined:</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x01</td>
            <td align="left">RESERVED (SETUP for version 00)</td>
          </tr>
          <tr>
            <td align="right">0x40</td>
            <td align="left">RESERVED (CLIENT_SETUP for versions &lt;= 10)</td>
          </tr>
          <tr>
            <td align="right">0x41</td>
            <td align="left">RESERVED (SERVER_SETUP for versions &lt;= 10)</td>
          </tr>
          <tr>
            <td align="right">0x20</td>
            <td align="left">CLIENT_SETUP (<xref target="message-setup"/>)</td>
          </tr>
          <tr>
            <td align="right">0x21</td>
            <td align="left">SERVER_SETUP (<xref target="message-setup"/>)</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</td>
          </tr>
          <tr>
            <td align="right">0x15</td>
            <td align="left">MAX_REQUEST_ID (<xref target="message-max-request-id"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1A</td>
            <td align="left">REQUESTS_BLOCKED (<xref target="message-requests-blocked"/>)</td>
          </tr>
          <tr>
            <td align="right">0x3</td>
            <td align="left">SUBSCRIBE (<xref target="message-subscribe-req"/>)</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x5</td>
            <td align="left">SUBSCRIBE_ERROR (<xref target="message-subscribe-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x2</td>
            <td align="left">SUBSCRIBE_UPDATE (<xref target="message-subscribe-update"/>)</td>
          </tr>
          <tr>
            <td align="right">0xA</td>
            <td align="left">UNSUBSCRIBE (<xref target="message-unsubscribe"/>)</td>
          </tr>
          <tr>
            <td align="right">0xB</td>
            <td align="left">PUBLISH_DONE (<xref target="message-publish-done"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1D</td>
            <td align="left">PUBLISH  (<xref target="message-publish"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1E</td>
            <td align="left">PUBLISH_OK (<xref target="message-publish-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x1F</td>
            <td align="left">PUBLISH_ERROR (<xref target="message-publish-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x16</td>
            <td align="left">FETCH (<xref target="message-fetch"/>)</td>
          </tr>
          <tr>
            <td align="right">0x18</td>
            <td align="left">FETCH_OK (<xref target="message-fetch-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x19</td>
            <td align="left">FETCH_ERROR (<xref target="message-fetch-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x17</td>
            <td align="left">FETCH_CANCEL (<xref target="message-fetch-cancel"/>)</td>
          </tr>
          <tr>
            <td align="right">0xD</td>
            <td align="left">TRACK_STATUS (<xref target="message-track-status"/>)</td>
          </tr>
          <tr>
            <td align="right">0xE</td>
            <td align="left">TRACK_STATUS_OK (<xref target="message-track-status-ok"/></td>
          </tr>
          <tr>
            <td align="right">0xF</td>
            <td align="left">TRACK_STATUS_ERROR (<xref target="message-track-status-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x6</td>
            <td align="left">PUBLISH_NAMESPACE  (<xref target="message-pub-ns"/>)</td>
          </tr>
          <tr>
            <td align="right">0x7</td>
            <td align="left">PUBLISH_NAMESPACE_OK (<xref target="message-pub-ns-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x8</td>
            <td align="left">PUBLISH_NAMESPACE_ERROR (<xref target="message-pub-ns-error"/>)</td>
          </tr>
          <tr>
            <td align="right">0x9</td>
            <td align="left">PUBLISH_NAMESPACE_DONE  (<xref target="message-pub-ns-done"/>)</td>
          </tr>
          <tr>
            <td align="right">0xC</td>
            <td align="left">PUBLISH_NAMESPACE_CANCEL (<xref target="message-pub-ns-cancel"/>)</td>
          </tr>
          <tr>
            <td align="right">0x11</td>
            <td align="left">SUBSCRIBE_NAMESPACE (<xref target="message-subscribe-ns"/>)</td>
          </tr>
          <tr>
            <td align="right">0x12</td>
            <td align="left">SUBSCRIBE_NAMESPACE_OK (<xref target="message-sub-ns-ok"/>)</td>
          </tr>
          <tr>
            <td align="right">0x13</td>
            <td align="left">SUBSCRIBE_NAMESPACE_ERROR (<xref target="message-sub-ns-error"/></td>
          </tr>
          <tr>
            <td align="right">0x14</td>
            <td align="left">UNSUBSCRIBE_NAMESPACE (<xref target="message-unsub-ns"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the session.
Control messages have a length to make parsing easier, but no control messages
are intended to be ignored. The length is set to the number of bytes in Message
Payload, which is defined by each message type.  If the length does not match
the length of the Message Payload, the receiver <bcp14>MUST</bcp14> close the session with
<tt>PROTOCOL_VIOLATION</tt>.</t>
      <section anchor="request-id">
        <name>Request ID</name>
        <t>Most MOQT control messages contain a session specific Request ID.  The Request
ID correlates requests and responses, allows endpoints to update or terminate
ongoing requests, and supports the endpoint's ability to limit the concurrency
and frequency of requests.  There are independent Request IDs for each endpoint.
The client's Request ID starts at 0 and are even and the server's Request ID
starts at 1 and are odd.  The Request ID increments by 2 with each FETCH,
SUBSCRIBE, SUBSCRIBE_UPDATE, SUBSCRIBE_NAMESPACE, PUBLISH, PUBLISH_NAMESPACE or
TRACK_STATUS request.  Other messages with a Request ID field reference the
Request ID of another message for correlation. If an endpoint receives a Request
ID that is not valid for the peer, or a new request with a Request ID that is
not expected, it <bcp14>MUST</bcp14> close the session with <tt>INVALID_REQUEST_ID</tt>.</t>
      </section>
      <section anchor="params">
        <name>Parameters</name>
        <t>Some messages include a Parameters field that encodes optional message
elements.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> repeat the same parameter type in a message unless the
parameter definition explicitly allows multiple instances of that type to
be sent in a single message. Receivers <bcp14>SHOULD</bcp14> check that there are no
unauthorized duplicate parameters and close the session as a
<tt>PROTOCOL_VIOLATION</tt> if found.  Receivers <bcp14>MUST</bcp14> allow duplicates of unknown
parameters.</t>
        <t>Receivers ignore unrecognized parameters.</t>
        <t>The number of parameters in a message is not specifically limited, but the
total length of a control message is limited to 2^16-1 bytes.</t>
        <t>Parameters are serialized as Key-Value-Pairs <xref target="moq-key-value-pair"/>.</t>
        <t>Setup message parameters use a namespace that is constant across all MoQ
Transport versions. All other messages use a version-specific namespace.
For example, the integer '1' can refer to different parameters for Setup
messages and for all other message types. SETUP message parameter types
are defined in <xref target="setup-params"/>. Version-specific parameter types are defined
in <xref target="version-specific-params"/>.</t>
        <section anchor="version-specific-params">
          <name>Version Specific Parameters</name>
          <t>Each version-specific parameter definition indicates the message types in which
it can appear. If it appears in some other type of message, it <bcp14>MUST</bcp14> be ignored.
Note that since Setup parameters use a separate namespace, it is impossible for
these parameters to appear in Setup messages.</t>
          <section anchor="authorization-token">
            <name>AUTHORIZATION TOKEN</name>
            <t>The AUTHORIZATION TOKEN parameter (Parameter Type 0x03) <bcp14>MAY</bcp14> appear in a
CLIENT_SETUP, SERVER_SETUP, PUBLISH, SUBSCRIBE, SUBSCRIBE_UPDATE,
SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE, TRACK_STATUS or FETCH message. This
parameter conveys information to authorize the sender to perform the operation
carrying the parameter.</t>
            <t>The AUTHORIZATION TOKEN parameter <bcp14>MAY</bcp14> be repeated within a message.</t>
            <t>The parameter value is a Token structure containing an optional Session-specific
Alias. The Alias allows the sender to reference a previously transmitted Token
Type and Token Value in future messages. The Token structure is serialized as
follows:</t>
            <figure anchor="moq-token">
              <name>Token structure</name>
              <artwork><![CDATA[
Token {
  Alias Type (i),
  [Token Alias (i),]
  [Token Type (i),]
  [Token Value (..)]
}
]]></artwork>
            </figure>
            <ul spacing="normal">
              <li>
                <t>Alias Type - an integer defining both the serialization and the processing
behavior of the receiver. This Alias type has the following code points:</t>
              </li>
            </ul>
            <table>
              <thead>
                <tr>
                  <th align="right">Code</th>
                  <th align="left">Name</th>
                  <th align="left">Serialization and behavior</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="right">0x0</td>
                  <td align="left">DELETE</td>
                  <td align="left">There is an Alias but no Type or Value. This Alias</td>
                </tr>
                <tr>
                  <td align="right"> </td>
                  <td align="left"> </td>
                  <td align="left">and the Token Value it was previously associated with</td>
                </tr>
                <tr>
                  <td align="right"> </td>
                  <td align="left"> </td>
                  <td align="left">
                    <bcp14>MUST</bcp14> be retired. Retiring removes them from the pool</td>
                </tr>
                <tr>
                  <td align="right"> </td>
                  <td align="left"> </td>
                  <td align="left">of actively registered tokens.</td>
                </tr>
                <tr>
                  <td align="right">0x1</td>
                  <td align="left">REGISTER</td>
                  <td align="left">There is an Alias, a Type and a Value. This Alias</td>
                </tr>
                <tr>
                  <td align="right"> </td>
                  <td align="left"> </td>
                  <td align="left">
                    <bcp14>MUST</bcp14> be associated with the Token Value for the</td>
                </tr>
                <tr>
                  <td align="right"> </td>
                  <td align="left"> </td>
                  <td align="left">duration of the Session or it is deleted. This action</td>
                </tr>
                <tr>
                  <td align="right"> </td>
                  <td align="left"> </td>
                  <td align="left">is termed "registering" the Token.</td>
                </tr>
                <tr>
                  <td align="right">0x2</td>
                  <td align="left">USE_ALIAS</td>
                  <td align="left">There is an Alias but no Type or Value. Use the Token</td>
                </tr>
                <tr>
                  <td align="right"> </td>
                  <td align="left"> </td>
                  <td align="left">Type and Value previously registered with this Alias.</td>
                </tr>
                <tr>
                  <td align="right">0x3</td>
                  <td align="left">USE_VALUE</td>
                  <td align="left">There is no Alias and there is a Type and Value. Use</td>
                </tr>
                <tr>
                  <td align="right"> </td>
                  <td align="left"> </td>
                  <td align="left">the Token Value as provided. The Token Value may be</td>
                </tr>
                <tr>
                  <td align="right"> </td>
                  <td align="left"> </td>
                  <td align="left">discarded after processing.</td>
                </tr>
              </tbody>
            </table>
            <ul spacing="normal">
              <li>
                <t>Token Alias - a Session-specific integer identifier that references a Token
Value. There are separate Alias spaces for the client and server (e.g.: they
can each register Alias=1). Once a Token Alias has been registered, it cannot
be re-registered by the same sender in the Session without first being
deleted. Use of the Token Alias is optional.</t>
              </li>
              <li>
                <t>Token Type - a numeric identifier for the type of Token payload being
transmitted. This type is defined by the IANA table "MOQT Auth Token Type" (see
<xref target="iana"/>). Type 0 is reserved to indicate that the type is not defined in the
table and is negotiated out-of-band between client and receiver.</t>
              </li>
              <li>
                <t>Token Value - the payload of the Token. The contents and serialization of this
payload are defined by the Token Type.</t>
              </li>
            </ul>
            <t>If the Token structure cannot be decoded, the receiver <bcp14>MUST</bcp14> close the Session
with Key-Value Formatting error.  The receiver of a message attempting to
register an Alias which is already registered <bcp14>MUST</bcp14> close the Session with
<tt>DUPLICATE_AUTH_TOKEN_ALIAS</tt>. The receiver of a message referencing an Alias
that is not currently registered <bcp14>MUST</bcp14> reject the message with
<tt>UNKNOWN_AUTH_TOKEN_ALIAS</tt>.</t>
            <t>The receiver of a message containing a well-formed Token structure but otherwise
invalid AUTHORIZATION TOKEN parameter <bcp14>MUST</bcp14> reject that message with an
<tt>MALFORMED_AUTH_TOKEN</tt> error.</t>
            <t>The receiver of a message carrying an AUTHORIZATION TOKEN with Alias Type
REGISTER that does not result in a Session error <bcp14>MUST</bcp14> register the Token Alias,
in the token cache, even if the message fails for other reasons, including
<tt>Unauthorized</tt>.  This allows senders to pipeline messages that refer to
previously registered tokens without potentially terminating the entire Session.
A receiver <bcp14>MAY</bcp14> store an error code (eg: <tt>UNAUTHORIZED</tt> or
<tt>MALFORMED_AUTH_TOKEN</tt>) in place of the Token Type and Token Alias if any future
message referencing the Token Alias will result in that error. The size of a
registered cache entry includes the length of the Token Value, regardless of
whether it is stored.</t>
            <t>If a receiver detects that an authorization token has expired, it <bcp14>MUST</bcp14> retain
the registered Alias until it is deleted by the sender, though it <bcp14>MAY</bcp14> discard
other state associated with the token that is no longer needed.  Expiration does
not affect the size occupied by a token in the token cache.  Any message that
references the token with Alias Type USE_ALIAS fails with <tt>EXPIRED_AUTH_TOKEN</tt>.</t>
            <t>Using an Alias to refer to a previously registered Token Type and Value is for
efficiency only and has the same effect as if the Token Type and Value was
included directly.  Retiring an Alias that was previously used to authorize a
message has no retroactive effect on the original authorization, nor does it
prevent that same Token Type and Value from being re-registered.</t>
            <t>Senders of tokens <bcp14>SHOULD</bcp14> only register tokens which they intend to re-use during
the Session and <bcp14>SHOULD</bcp14> retire previously registered tokens once their utility
has passed.</t>
            <t>By registering a Token, the sender is requiring the receiver to store the Token
Alias and Token Value until they are deleted, or the Session ends. The receiver
can protect its resources by sending a SETUP parameter defining the
MAX_AUTH_TOKEN_CACHE_SIZE limit (see <xref target="max-auth-token-cache-size"/>) it is
willing to accept. If a registration is attempted which would cause this limit
to be exceeded, the receiver <bcp14>MUST</bcp14> termiate the Session with a
<tt>AUTH_TOKEN_CACHE_OVERFLOW</tt> error.</t>
          </section>
          <section anchor="delivery-timeout">
            <name>DELIVERY TIMEOUT Parameter</name>
            <t>The DELIVERY TIMEOUT parameter (Parameter Type 0x02) <bcp14>MAY</bcp14> appear in a
TRACK_STATUS, TRACK_STATUS_OK, PUBLISH, PUBLISH_OK, SUBSCRIBE, SUBSCRIBE_OK, or
SUBSCRIBE_UDPATE message.  It is the duration in milliseconds the relay <bcp14>SHOULD</bcp14>
continue to attempt forwarding Objects after they have been received.  The start
time for the timeout is based on when the Object Headers are received, and does
not depend upon the forwarding preference. There is no explicit signal that an
Object was not sent because the delivery timeout was exceeded.</t>
            <t>If both the subscriber and publisher specify the parameter, they use the min of
the two values for the subscription.  The publisher <bcp14>SHOULD</bcp14> always specify the
value received from an upstream subscription when there is one, and nothing
otherwise.</t>
            <t>Publishers can, at their discretion, discontinue forwarding Objects earlier than
the negotiated DELIVERY TIMEOUT, subject to stream closure and ordering
constraints described in <xref target="closing-subgroup-streams"/>.  However, if neither the
subscriber nor publisher specifies DELIVERY TIMEOUT, all Objects in the track
matching the subscription filter are delivered as indicated by their Group Order
and Priority.  If a subscriber fails to consume Objects at a sufficient rate,
causing the publisher to exceed its resource limits, the publisher <bcp14>MAY</bcp14> terminate
the subscription with error <tt>TOO_FAR_BEHIND</tt>.</t>
            <t>If an object in a subgroup exceeds the delivery timeout, the publisher <bcp14>MUST</bcp14>
reset the underlying transport stream (see <xref target="closing-subgroup-streams"/>).</t>
            <t>When sent by a subscriber, this parameter is intended to be specific to a
subscription, so it <bcp14>SHOULD NOT</bcp14> be forwarded upstream by a relay that intends
to serve multiple subscriptions for the same track.</t>
            <t>Publishers <bcp14>SHOULD</bcp14> consider whether the entire Object can likely be
successfully delivered within the timeout period before sending any data
for that Object, taking into account priorities, congestion control, and
any other relevant information.</t>
          </section>
          <section anchor="max-cache-duration">
            <name>MAX CACHE DURATION Parameter</name>
            <t>The MAX_CACHE_DURATION parameter (Parameter Type 0x04) <bcp14>MAY</bcp14> appear in a PUBLISH,
SUBSCRIBE_OK, FETCH_OK or TRACK_STATUS_OK message.  It is an integer expressing
the number of milliseconds an object can be served from a cache. If present, the
relay <bcp14>MUST NOT</bcp14> start forwarding any individual Object received through this
subscription or fetch after the specified number of milliseconds has elapsed
since the beginning of the Object was received.  This means Objects earlier in a
multi-object stream will expire earlier than Objects later in the stream. Once
Objects have expired from cache, their state becomes unknown, and a relay that
handles a downstream request that includes those Objects re-requests them.</t>
          </section>
        </section>
      </section>
      <section anchor="message-setup">
        <name>CLIENT_SETUP and SERVER_SETUP</name>
        <t>The <tt>CLIENT_SETUP</tt> and <tt>SERVER_SETUP</tt> messages are the first messages exchanged
by the client and the server; they allow the endpoints to establish the mutually
supported version and agree on the initial configuration before any objects are
exchanged. It is a sequence of key-value pairs called Setup parameters; the
semantics and format of which can vary based on whether the client or server is
sending.  To ensure future extensibility of MOQT, endpoints <bcp14>MUST</bcp14> ignore unknown
setup parameters. TODO: describe GREASE for those.</t>
        <t>The wire format of the Setup messages are as follows:</t>
        <figure anchor="moq-transport-setup-format">
          <name>MOQT Setup Messages</name>
          <artwork><![CDATA[
CLIENT_SETUP Message {
  Type (i) = 0x20,
  Length (16),
  Number of Supported Versions (i),
  Supported Versions (i) ...,
  Number of Parameters (i),
  Setup Parameters (..) ...,
}

SERVER_SETUP Message {
  Type (i) = 0x21,
  Length (16),
  Selected Version (i),
  Number of Parameters (i),
  Setup Parameters (..) ...,
}
]]></artwork>
        </figure>
        <t>The available versions and Setup parameters are detailed in the next sections.</t>
        <section anchor="setup-versions">
          <name>Versions</name>
          <t>MOQT versions are a 32-bit unsigned integer, encoded as a varint.
This version of the specification is identified by the number 0x00000001.
Versions with the most significant 16 bits of the version number cleared are
reserved for use in future IETF consensus documents.</t>
          <t>The client offers the list of the protocol versions it supports; the
server <bcp14>MUST</bcp14> reply with one of the versions offered by the client. If the
server does not support any of the versions offered by the client, or
the client receives a server version that it did not offer, the
corresponding peer <bcp14>MUST</bcp14> close the session with <tt>VERSION_NEGOTIATION_FAILED</tt>.</t>
          <t>[[RFC editor: please remove the remainder of this section before
publication.]]</t>
          <t>The version number for the final version of this specification (0x00000001), is
reserved for the version of the protocol that is published as an RFC.
Version numbers used to identify IETF drafts are created by adding the draft
number to 0xff000000. For example, draft-ietf-moq-transport-13 would be
identified as 0xff00000D.</t>
        </section>
        <section anchor="setup-params">
          <name>Setup Parameters</name>
          <section anchor="authority">
            <name>AUTHORITY</name>
            <t>The AUTHORITY parameter (Parameter Type 0x05) allows the client to specify the
authority component of the MoQ URI when using native QUIC (<xref target="QUIC"/>).  It <bcp14>MUST
NOT</bcp14> be used by the server, or when WebTransport is used.  When an AUTHORITY
parameter is received from a server, or when an AUTHORITY parameter is received
while WebTransport is used, or when an AUTHORITY parameter is received by a
server but the server does not support the specified authority, the session <bcp14>MUST</bcp14>
be closed with Invalid Authority.</t>
            <t>The AUTHORITY parameter follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the AUTHORITY parameter to the <tt>authority</tt> portion of the
URI. If an AUTHORITY parameter does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with Malformed Authority.</t>
          </section>
          <section anchor="path">
            <name>PATH</name>
            <t>The PATH parameter (Parameter Type 0x01) allows the client to specify the path
of the MoQ URI when using native QUIC (<xref target="QUIC"/>).  It <bcp14>MUST NOT</bcp14> be used by
the server, or when WebTransport is used.  When a PATH parameter is received
from a server, or when a PATH parameter is received while WebTransport is used,
or when a PATH parameter is received by a server but the server does not
support the specified path, the session <bcp14>MUST</bcp14> be closed with Invalid Path.</t>
            <t>The PATH parameter follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the PATH parameter to the <tt>path-abempty</tt> portion of the
URI; if <tt>query</tt> is present, the client <bcp14>MUST</bcp14> concatenate <tt>?</tt>, followed by
the <tt>query</tt> portion of the URI to the parameter. If a PATH does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with Malformed Path.</t>
          </section>
          <section anchor="max-request-id">
            <name>MAX_REQUEST_ID</name>
            <t>The MAX_REQUEST_ID parameter (Parameter Type 0x02) communicates an initial
value for the Maximum Request ID to the receiving endpoint. The default
value is 0, so if not specified, the peer <bcp14>MUST NOT</bcp14> send requests.</t>
          </section>
          <section anchor="max-auth-token-cache-size">
            <name>MAX_AUTH_TOKEN_CACHE_SIZE</name>
            <t>The MAX_AUTH_TOKEN_CACHE_SIZE parameter (Parameter Type 0x04) communicates the
maximum size in bytes of all actively registered Authorization tokens that the
server is willing to store per Session. This parameter is optional. The default
value is 0 which prohibits the use of token Aliases.</t>
            <t>The token size is calculated as 16 bytes + the size of the Token Value field
(see <xref target="moq-token"/>). The total size as restricted by the
MAX_AUTH_TOKEN_CACHE_SIZE parameter is calculated as the sum of the token sizes
for all registered tokens (Alias Type value of 0x01) minus the sum of the token
sizes for all deregistered tokens (Alias Type value of 0x00), since Session
initiation.</t>
          </section>
          <section anchor="setup-auth-token">
            <name>AUTHORIZATION TOKEN</name>
            <t>See <xref target="authorization-token"/>.  The endpoint can specify one or more tokens in
CLIENT_SETUP or SERVER_SETUP that the peer can use to authorize MOQT session
establishment.</t>
            <t>If a server receives an AUTHORIZATION TOKEN parameter in CLIENT_SETUP with Alias
Type REGISTER_TOKEN that exceeds its MAX_AUTH_TOKEN_CACHE_SIZE, it <bcp14>MUST NOT</bcp14> fail
the session with <tt>AUTH_TOKEN_CACHE_OVERFLOW</tt>.  Instead, it <bcp14>MUST</bcp14> treat the
parameter as Alias Type USE_VALUE.  A client <bcp14>MUST</bcp14> handle registration failures
of this kind by purging any Token Aliases that failed to register based on the
MAX_AUTH_TOKEN_CACHE_SIZE parameter in SERVER_SETUP (or the default value of 0).</t>
          </section>
          <section anchor="moqt-implementation">
            <name>MOQT IMPLEMENTATION</name>
            <t>The MOQT_IMPLEMENTATION parameter (Parameter Type 0x05) identifies the name and
version of the sender's MOQT implementation.  This <bcp14>SHOULD</bcp14> be a UTF-8 encoded
string [RFC3629], though the message does not carry information, such as
language tags, that would aid comprehension by any entity other than the one
that created the text.</t>
          </section>
        </section>
      </section>
      <section anchor="message-goaway">
        <name>GOAWAY</name>
        <t>An endpoint sends a <tt>GOAWAY</tt> message to inform the peer it intends to close
the session soon.  Servers can use GOAWAY to initiate session migration
(<xref target="session-migration"/>) with an optional URI.</t>
        <t>The GOAWAY message does not impact subscription state. A subscriber
<bcp14>SHOULD</bcp14> individually UNSUBSCRIBE for each existing subscription, while a
publisher <bcp14>MAY</bcp14> reject new requests after sending a GOAWAY.</t>
        <t>Upon receiving a GOAWAY, an endpoint <bcp14>SHOULD NOT</bcp14> initiate new requests to the
peer including SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE and TRACK_SATUS.</t>
        <t>The endpoint <bcp14>MUST</bcp14> terminate the session with a <tt>PROTOCOL_VIOLATION</tt>
(<xref target="session-termination"/>) if it receives multiple GOAWAY messages.</t>
        <figure anchor="moq-transport-goaway-format">
          <name>MOQT GOAWAY Message</name>
          <artwork><![CDATA[
GOAWAY Message {
  Type (i) = 0x10,
  Length (16),
  New Session URI Length (i),
  New Session URI (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>New Session URI: When received by a client, indicates where the client can
connect to continue this session.  The client <bcp14>MUST</bcp14> use this URI for the new
session if provided. If the URI is zero bytes long, the current URI is reused
instead. The new session URI <bcp14>SHOULD</bcp14> use the same scheme
as the current URI to ensure compatibility.  The maxmimum length of the New
Session URI is 8,192 bytes.  If an endpoint receives a length exceeding the
maximum, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.  </t>
            <t>
If a server receives a GOAWAY with a non-zero New Session URI Length it <bcp14>MUST</bcp14>
terminate the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-max-request-id">
        <name>MAX_REQUEST_ID</name>
        <t>An endpoint sends a MAX_REQUEST_ID message to increase the number of requests
the peer can send within a session.</t>
        <t>The Maximum Request ID <bcp14>MUST</bcp14> only increase within a session, and
receipt of a MAX_REQUEST_ID message with an equal or smaller Request ID
value is a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <figure anchor="moq-transport-max-request-id">
          <name>MOQT MAX_REQUEST_ID Message</name>
          <artwork><![CDATA[
MAX_REQUEST_ID Message {
  Type (i) = 0x15,
  Length (16),
  Request ID (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The new Maximum Request ID for the session plus 1. If a Request ID
equal to or larger than this is received by the endpoint that sent the
MAX_REQUEST_ID in any request message (PUBLISH_NAMESPACE, FETCH, SUBSCRIBE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_UDPATE or TRACK_STATUS), the endpoint <bcp14>MUST</bcp14>
close the session with an error of <tt>TOO_MANY_REQUESTS</tt>.</t>
          </li>
        </ul>
        <t>MAX_REQUEST_ID is similar to MAX_STREAMS in (<xref section="4.6" sectionFormat="comma" target="RFC9000"/>), and
similar considerations apply when deciding how often to send MAX_REQUEST_ID.
For example, implementations might choose to increase MAX_REQUEST_ID as
subscriptions are closed to keep the number of available subscriptions roughly
consistent.</t>
      </section>
      <section anchor="message-requests-blocked">
        <name>REQUESTS_BLOCKED</name>
        <t>The REQUESTS_BLOCKED message is sent when an endpoint would like to send a new
request, but cannot because the Request ID would exceed the Maximum Request ID
value sent by the peer.  The endpoint <bcp14>SHOULD</bcp14> send only one REQUESTS_BLOCKED for
a given Maximum Request ID.</t>
        <t>An endpoint <bcp14>MAY</bcp14> send a MAX_REQUEST_ID upon receipt of REQUESTS_BLOCKED, but it
<bcp14>MUST NOT</bcp14> rely on REQUESTS_BLOCKED to trigger sending a MAX_REQUEST_ID, because
sending REQUESTS_BLOCKED is not required.</t>
        <figure anchor="moq-transport-requests-blocked">
          <name>MOQT REQUESTS_BLOCKED Message</name>
          <artwork><![CDATA[
REQUESTS_BLOCKED Message {
  Type (i) = 0x1A,
  Length (16),
  Maximum Request ID (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Maximum Request ID: The Maximum Request ID for the session on which the
endpoint is blocked. More on Request ID in <xref target="request-id"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-req">
        <name>SUBSCRIBE</name>
        <t>A subscription causes the publisher to send newly published objects for a track.
A subscriber <bcp14>MUST NOT</bcp14> make multiple active subscriptions for a track within a
single session and publishers <bcp14>SHOULD</bcp14> treat this as a protocol violation.</t>
        <t><strong>Filter Types</strong></t>
        <t>The subscriber specifies a filter on the subscription to allow
the publisher to identify which objects need to be delivered.</t>
        <t>All filters have a Start Location and an optional End Group.  Only objects
published or received via a subscription having Locations greater than or
equal to Start and strictly less than or equal to the End Group (when
present) pass the filter.</t>
        <t>The <tt>Largest Object</tt> is defined to be the object with the largest Location
(<xref target="location-structure"/>) in the track from the perspective of the endpoint
processing the SUBSCRIBE message. Largest Object updates when the first byte of
an Object with a larger Location than the previous value is published or
received through a subscription.</t>
        <t>There are 4 types of filters:</t>
        <t>Largest Object (0x2): The filter Start Location is <tt>{Largest Object.Group,
Largest Object.Object + 1}</tt> and <tt>Largest Object</tt> is communicated in
SUBSCRIBE_OK. If no content has been delivered yet, the filter Start Location is
{0, 0}. There is no End Group - the subscription is open ended.  Note that due
to network reordering or prioritization, relays can receive Objects with
Locations smaller than  <tt>Largest Object</tt> after the SUBSCRIBE is processed, but
these Objects do not pass the Largest Object filter.</t>
        <t>Next Group Start (0x1): The filter Start Location is <tt>{Largest Object.Group + 1,
0}</tt> and <tt>Largest Object</tt> is communicated in SUBSCRIBE_OK. If no content has been
delivered yet, the filter Start Location is {0, 0}.  There is no End Group -
the subscription is open ended. For scenarios where the subscriber intends to
start from more than one group in the future, it can use an AbsoluteStart filter
instead.</t>
        <t>AbsoluteStart (0x3):  The filter Start Location is specified explicitly in the
SUBSCRIBE message. The <tt>Start</tt> specified in the SUBSCRIBE message <bcp14>MAY</bcp14> be less
than the <tt>Largest Object</tt> observed at the publisher. There is no End Group - the
subscription is open ended.  To receive all Objects that are published or are
received after this subscription is processed, a subscriber can use an
AbsoluteStart filter with <tt>Start</tt> = {0, 0}.</t>
        <t>AbsoluteRange (0x4):  The filer Start Location and End Group are specified
explicitly in the SUBSCRIBE message. The <tt>Start</tt> specified in the SUBSCRIBE
message <bcp14>MAY</bcp14> be less than the <tt>Largest Object</tt> observed at the publisher. If the
specified <tt>End Group</tt> is the same group specified in <tt>Start</tt>, the remainder of
that Group passes the filter. <tt>End Group</tt> <bcp14>MUST</bcp14> specify the same or a larger Group
than specified in <tt>Start</tt>.</t>
        <t>An endpoint that receives a filter type other than the above <bcp14>MUST</bcp14> be close the
session with <tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>Subscribe only delivers newly published or received Objects.  Objects from the
past are retrieved using FETCH (<xref target="message-fetch"/>).</t>
        <t>A Subscription can also request a publisher to not forward Objects for a given
track by setting the <tt>Forward</tt> field to 0. This allows the publisher or relay to
prepare to serve the subscription in advance, reducing the time to receive
objects in the future. Relays <bcp14>SHOULD</bcp14> set the <tt>Forward</tt> flag to 1 if a new
subscription needs to be sent upstream, regardless of the value of the <tt>Forward</tt>
field from the downstream subscription. Subscriptions that are not forwarded
consume resources from the publisher, so a publisher might deprioritize, reject,
or close those subscriptions to ensure other subscriptions can be delivered.
Control messages, such as SUBCRIBE_DONE (<xref target="message-publish-done"/>) are still
sent.</t>
        <t>The format of SUBSCRIBE is as follows:</t>
        <figure anchor="moq-transport-subscribe-format">
          <name>MOQT SUBSCRIBE Message</name>
          <artwork><![CDATA[
SUBSCRIBE Message {
  Type (i) = 0x3,
  Length (16),
  Request ID (i),
  Track Namespace (tuple),
  Track Name Length (i),
  Track Name (..),
  Subscriber Priority (8),
  Group Order (8),
  Forward (8),
  Filter Type (i),
  [Start Location (Location)],
  [End Group (i)],
  Number of Parameters (i),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Subscriber Priority: Specifies the priority of a subscription relative to
other subscriptions in the same session. Lower numbers get higher priority.
See <xref target="priorities"/>.</t>
          </li>
          <li>
            <t>Group Order: Allows the subscriber to request Objects be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
A value of 0x0 indicates the original publisher's Group Order <bcp14>SHOULD</bcp14> be
used. Values larger than 0x2 are a protocol error.</t>
          </li>
          <li>
            <t>Forward: If 1, Objects matching the subscription are forwarded
to the subscriber. If 0, Objects are not forwarded to the subscriber.
Any other value is a protocol error and <bcp14>MUST</bcp14> terminate the
session with a <tt>PROTOCOL_VIOLATION</tt> (<xref target="session-termination"/>).</t>
          </li>
          <li>
            <t>Filter Type: Identifies the type of filter, which also indicates whether
the Start and End Group fields will be present.</t>
          </li>
          <li>
            <t>Start Location: The starting location for this subscriptions. Only present for
"AbsoluteStart" and "AbsoluteRange" filter types.</t>
          </li>
          <li>
            <t>End Group: The end Group ID. Only present for the "AbsoluteRange"
filter type.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
        <t>On successful subscription, the publisher <bcp14>MUST</bcp14> reply with a SUBSCRIBE_OK,
allowing the subscriber to determine the start group/object when not explicitly
specified and the publisher <bcp14>SHOULD</bcp14> start delivering objects.</t>
        <t>If a publisher cannot satisfy the requested start or end or if the end has
already been published it <bcp14>SHOULD</bcp14> send a SUBSCRIBE_ERROR with code
<tt>INVALID_RANGE</tt>.  A publisher <bcp14>MUST NOT</bcp14> send objects from outside the requested
start and end.</t>
      </section>
      <section anchor="message-subscribe-ok">
        <name>SUBSCRIBE_OK</name>
        <t>A publisher sends a SUBSCRIBE_OK control message for successful
subscriptions.</t>
        <figure anchor="moq-transport-subscribe-ok">
          <name>MOQT SUBSCRIBE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_OK Message {
  Type (i) = 0x4,
  Length (16),
  Request ID (i),
  Track Alias (i),
  Expires (i),
  Group Order (8),
  Content Exists (8),
  [Largest Location (Location)],
  Number of Parameters (i),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the SUBSCRIBE this message is replying to
<xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>). The same Track Alias <bcp14>MUST NOT</bcp14> be used to refer to two
different Tracks simultaneously. If a subscriber receives a SUBSCRIBE_OK that
uses the same Track Alias as a different track with an active subscription, it
<bcp14>MUST</bcp14> close the session with error <tt>DUPLICATE_TRACK_ALIAS</tt>.</t>
          </li>
          <li>
            <t>Expires: Time in milliseconds after which the subscription is no
longer valid. A value of 0 indicates that the subscription does not expire
or expires at an unknown time.  Expires is advisory and a subscription can
end prior to the expiry time or last longer.</t>
          </li>
          <li>
            <t>Group Order: Indicates the subscription will be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
Values of 0x0 and those larger than 0x2 are a protocol error.</t>
          </li>
          <li>
            <t>Content Exists: 1 if an object has been published on this track, 0 if not.
If 0, then the Largest Group ID and Largest Object ID fields will not be
present. Any other value is a protocol error and <bcp14>MUST</bcp14> terminate the
session with a <tt>PROTOCOL_VIOLATION</tt> (<xref target="session-termination"/>).</t>
          </li>
          <li>
            <t>Largest Location: The location of the largest object available for this track. This
field is only present if Content Exists has a value of 1.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-error">
        <name>SUBSCRIBE_ERROR</name>
        <t>A publisher sends a SUBSCRIBE_ERROR control message in response to a
failed SUBSCRIBE.</t>
        <figure anchor="moq-transport-subscribe-error">
          <name>MOQT SUBSCRIBE_ERROR Message</name>
          <artwork><![CDATA[
SUBSCRIBE_ERROR Message {
  Type (i) = 0x5,
  Length (16),
  Request ID (i),
  Error Code (i),
  Error Reason (Reason Phrase),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the SUBSCRIBE this message is replying to
<xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for subscription failure.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for subscription error. See <xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in SUBSCRIBE_ERROR,
as defined below:</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x1):</dt>
          <dd>
            <t>The subscriber is not authorized to subscribe to the given track.</t>
          </dd>
          <dt>TIMEOUT (0x2):</dt>
          <dd>
            <t>The subscription could not be completed before an implementation specific
timeout. For example, a relay could not establish an upstream subscription
within the timeout.</t>
          </dd>
          <dt>NOT_SUPPORTED (0x3):</dt>
          <dd>
            <t>The endpoint does not support the SUBSCRIBE method.</t>
          </dd>
          <dt>TRACK_DOES_NOT_EXIST (0x4):</dt>
          <dd>
            <t>The requested track is not available at the publisher.</t>
          </dd>
          <dt>INVALID_RANGE (0x5):</dt>
          <dd>
            <t>The end of the SUBSCRIBE range is earlier than the beginning, or the end of
the range has already been published.</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN (0x10):</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x12):</dt>
          <dd>
            <t>Authorization token has expired (<xref target="authorization-token"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-subscribe-update">
        <name>SUBSCRIBE_UPDATE</name>
        <t>A subscriber sends a SUBSCRIBE_UPDATE to a publisher to modify an existing
subscription. Subscriptions can only be narrowed, not widened, as an attempt to
widen could fail. If Objects with Locations smaller than the current
subscription's Start Location are required, FETCH can be used to retrieve
them. The Start Location <bcp14>MUST NOT</bcp14> decrease and the End Group <bcp14>MUST NOT</bcp14> increase.
A publisher <bcp14>MUST</bcp14> terminate the session with a <tt>PROTOCOL_VIOLATION</tt> if the
SUBSCRIBE_UPDATE violates these rules or if the subscriber specifies a request
ID that has not existed within the Session.</t>
        <t>When a subscriber narrows their subscription, it might still receive objects
outside the new range if the publisher sent them before the update was
processed.</t>
        <t>There is no control message in response to a SUBSCRIBE_UPDATE, because it is
expected that it will always succeed and the worst outcome is that it is not
processed promptly and some extra objects from the existing subscription are
delivered.</t>
        <t>Unlike a new subscription, SUBSCRIBE_UPDATE can not cause an Object to be
delivered multiple times.  Like SUBSCRIBE, End Group <bcp14>MUST</bcp14> be greater than or
equal to the Group specified in <tt>Start</tt>.</t>
        <t>If a parameter included in <tt>SUBSCRIBE</tt> is not present in
<tt>SUBSCRIBE_UPDATE</tt>, its value remains unchanged.  There is no mechanism to
remove a parameter from a subscription.</t>
        <t>The format of SUBSCRIBE_UPDATE is as follows:</t>
        <figure anchor="moq-transport-subscribe-update-format">
          <name>MOQT SUBSCRIBE_UPDATE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_UPDATE Message {
  Type (i) = 0x2,
  Length (16),
  Request ID (i),
  Subscription Request ID (i),
  Start Location (Location),
  End Group (i),
  Subscriber Priority (8),
  Forward (8),
  Number of Parameters (i),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Subscription Request ID: The Request ID of the SUBSCRIBE
(<xref target="message-subscribe-req"/>) this message is updating.  This <bcp14>MUST</bcp14> match an
existing Request ID.</t>
          </li>
          <li>
            <t>Start Location : The starting location.</t>
          </li>
          <li>
            <t>End Group: The end Group ID, plus 1. A value of 0 means the subscription is
open-ended.</t>
          </li>
          <li>
            <t>Subscriber Priority: Specifies the priority of a subscription relative to
other subscriptions in the same session. Lower numbers get higher priority.
See <xref target="priorities"/>.</t>
          </li>
          <li>
            <t>Forward: If 1, Objects matching the subscription are forwarded
to the subscriber. If 0, Objects are not forwarded to the subscriber.
Any other value is a protocol error and <bcp14>MUST</bcp14> terminate the
session with a <tt>PROTOCOL_VIOLATION</tt> (<xref target="session-termination"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-unsubscribe">
        <name>UNSUBSCRIBE</name>
        <t>A Subscriber issues an <tt>UNSUBSCRIBE</tt> message to a Publisher indicating it is no
longer interested in receiving the specified Track, indicating that the
Publisher stop sending Objects as soon as possible.</t>
        <t>The format of <tt>UNSUBSCRIBE</tt> is as follows:</t>
        <figure anchor="moq-transport-unsubscribe-format">
          <name>MOQT UNSUBSCRIBE Message</name>
          <artwork><![CDATA[
UNSUBSCRIBE Message {
  Type (i) = 0xA,
  Length (16),
  Request ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the subscription that is being terminated. See
<xref target="message-subscribe-req"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-publish-done">
        <name>PUBLISH_DONE</name>
        <t>A publisher sends a <tt>PUBLISH_DONE</tt> message to indicate it is done publishing
Objects for that subscription.  The Status Code indicates why the subscription
ended, and whether it was an error. Because PUBLISH_DONE is sent on the control
stream, it is likely to arrive at the receiver before late-arriving objects, and
often even late-opening streams. However, the receiver uses it as an indication
that it should receive any late-opening streams in a relatively short time.</t>
        <t>Note that some objects in the subscribed track might never be delivered,
because a stream was reset, or never opened in the first place, due to the
delivery timeout.</t>
        <t>A sender <bcp14>MUST NOT</bcp14> send PUBLISH_DONE until it has closed all streams it will ever
open, and has no further datagrams to send, for a subscription. After sending
PUBLISH_DONE, the sender can immediately destroy subscription state, although
stream state can persist until delivery completes. The sender might persist
subscription state to enforce the delivery timeout by resetting streams on which
it has already sent FIN, only deleting it when all such streams have received
ACK of the FIN.</t>
        <t>A sender <bcp14>MUST NOT</bcp14> destroy subscription state until it sends PUBLISH_DONE, though
it can choose to stop sending objects (and thus send PUBLISH_DONE) for any
reason.</t>
        <t>A subscriber that receives PUBLISH_DONE <bcp14>SHOULD</bcp14> set a timer of at least its
delivery timeout in case some objects are still inbound due to prioritization or
packet loss. The subscriber <bcp14>MAY</bcp14> dispense with a timer if it sent UNSUBSCRIBE or
is otherwise no longer interested in objects from the track. Once the timer has
expired, the receiver destroys subscription state once all open streams for the
subscription have closed. A subscriber <bcp14>MAY</bcp14> discard subscription state earlier,
at the cost of potentially not delivering some late objects to the
application. The subscriber <bcp14>SHOULD</bcp14> send STOP_SENDING on all streams related to
the subscription when it deletes subscription state.</t>
        <t>The format of <tt>PUBLISH_DONE</tt> is as follows:</t>
        <figure anchor="moq-transport-subscribe-fin-format">
          <name>MOQT PUBLISH_DONE Message</name>
          <artwork><![CDATA[
PUBLISH_DONE Message {
  Type (i) = 0xB,
  Length (16),
  Request ID (i),
  Status Code (i),
  Stream Count (i),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the subscription that is being terminated. See
<xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Status Code: An integer status code indicating why the subscription ended.</t>
          </li>
          <li>
            <t>Stream Count: An integer indicating the number of data streams the publisher
opened for this subscription.  This helps the subscriber know if it has received
all of the data published in this subscription by comparing the number of
streams received.  The subscriber can immediately remove all subscription state
once the same number of streams have been processed.  If the track had
Forwarding Preference = Datagram, the publisher <bcp14>MUST</bcp14> set Stream Count to 0.  If
the publisher is unable to set Stream Count to the exact number of streams
opened for the subscription, it <bcp14>MUST</bcp14> set Stream Count to 2^62 - 1. Subscribers
<bcp14>SHOULD</bcp14> use a timeout or other mechanism to remove subscription state in case
the publisher set an incorrect value, reset a stream before the SUBGROUP_HEADER,
or set the maximum value.  If a subscriber receives more streams for a
subscription than specified in Stream Count, it <bcp14>MAY</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for subscription error. See <xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant status code in PUBLISH_DONE, as defined
below:</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x1):</dt>
          <dd>
            <t>The subscriber is no longer authorized to subscribe to the given track.</t>
          </dd>
          <dt>TRACK_ENDED (0x2):</dt>
          <dd>
            <t>The track is no longer being published.</t>
          </dd>
          <dt>SUBSCRIPTION_ENDED (0x3):</dt>
          <dd>
            <t>The publisher reached the end of an associated Subscribe filter.</t>
          </dd>
          <dt>GOING_AWAY (0x4):</dt>
          <dd>
            <t>The subscriber or publisher issued a GOAWAY message.</t>
          </dd>
          <dt>EXPIRED (0x5):</dt>
          <dd>
            <t>The publisher reached the timeout specified in SUBSCRIBE_OK.</t>
          </dd>
          <dt>TOO_FAR_BEHIND (0x6):</dt>
          <dd>
            <t>The publisher's queue of objects to be sent to the given subscriber exceeds
its implementation defined limit.</t>
          </dd>
          <dt>MALFORMED_TRACK (0x7):</dt>
          <dd>
            <t>A relay publisher detected the track was malformed (see
<xref target="malformed-tracks"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-publish">
        <name>PUBLISH</name>
        <t>The publisher sends the PUBLISH control message to initiate a subscription to a
track. The receiver verifies the publisher is authorized to publish this track.</t>
        <figure anchor="moq-transport-publish-format">
          <name>MOQT PUBLISH Message</name>
          <artwork><![CDATA[
PUBLISH Message {
  Type (i) = 0x1D,
  Length (i),
  Request ID (i),
  Track Namespace (tuple),
  Track Name Length (i),
  Track Name (..),
  Track Alias (i),
  Group Order (8),
  Content Exists (8),
  [Largest Location (Location),]
  Forward (8),
  Number of Parameters (i),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in (<xref target="track-name"/>)</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>). The same Track Alias <bcp14>MUST NOT</bcp14> be used to refer to two
different Tracks simultaneously. If a subscriber receives a PUBLISH that
uses the same Track Alias as a different track with an active subscription, it
<bcp14>MUST</bcp14> close the session with error <tt>DUPLICATE_TRACK_ALIAS</tt>.</t>
          </li>
          <li>
            <t>Group Order: Indicates the subscription will be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
Values of 0x0 and those larger than 0x2 are a protocol error.</t>
          </li>
          <li>
            <t>Content Exists: 1 if an object has been published on this track, 0 if not.
If 0, then the Largest Group ID and Largest Object ID fields will not be
present. Any other value is a protocol error and <bcp14>MUST</bcp14> terminate the
session with a <tt>PROTOCOL_VIOLATION</tt> (<xref target="session-termination"/>).</t>
          </li>
          <li>
            <t>Largest Location: The location of the largest object available for this track.</t>
          </li>
          <li>
            <t>Forward: The forward mode for this subscription.  Any value other than 0 or 1
is a <tt>PROTOCOL_VIOLATION</tt>.  0 indicates the publisher will not transmit any
objects until the subscriber sets the Forward State to 1. 1 indicates the
publisher will start transmitting objects immediately, even before PUBLISH_OK.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
        <t>A subscriber receiving a PUBLISH for a Track it does not wish to receive <bcp14>SHOULD</bcp14>
send PUBLISH_ERROR with error code <tt>UNINTERESTED</tt>, and abandon reading any
publisher initiated streams associated with that subscription using a
STOP_SENDING frame.</t>
      </section>
      <section anchor="message-publish-ok">
        <name>PUBLISH_OK</name>
        <t>The subscriber sends a PUBLISH_OK control message to acknowledge the successful
authorization and acceptance of a PUBLISH message, and establish a subscription.</t>
        <figure anchor="moq-transport-publish-ok">
          <name>MOQT PUBLISH_OK Message</name>
          <artwork><![CDATA[
PUBLISH_OK Message {
  Type (i) = 0x1E,
  Length (i),
  Request ID (i),
  Forward (8),
  Subscriber Priority (8),
  Group Order (8),
  Filter Type (i),
  [Start Location (Location)],
  [End Group (i)],
  Number of Parameters (i),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the PUBLISH this message is replying to
<xref target="message-publish"/>.</t>
          </li>
          <li>
            <t>Forward: The Forward State for this subscription, either 0 (don't
forward) or 1 (forward).</t>
          </li>
          <li>
            <t>Subscriber Priority: The Subscriber Priority for this subscription.</t>
          </li>
          <li>
            <t>Group Order: Indicates the subscription will be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
Values of 0x0 and those larger than 0x2 are a protocol error. This
overwrites the GroupOrder specified PUBLISH.</t>
          </li>
          <li>
            <t>Filter Type, Start Location, End Group: See <xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Parameters: Parameters associated with this message.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-publish-error">
        <name>PUBLISH_ERROR</name>
        <t>The subscriber sends a PUBLISH_ERROR control message to reject
a subscription initiated by PUBLISH.</t>
        <figure anchor="moq-transport-publish-error">
          <name>MOQT PUBLISH_ERROR Message</name>
          <artwork><![CDATA[
PUBLISH_ERROR Message {
  Type (i) = 0x1F,
  Length (i),
  Request ID (i),
  Error Code (i),
  Error Reason (Reason Phrase),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the PUBLISH this message is replying to
<xref target="message-publish"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for failure.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for subscription error. See <xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in PUBLISH_ERROR, as defined
below:</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x1):</dt>
          <dd>
            <t>The publisher is not authorized to publish the given namespace or track.</t>
          </dd>
          <dt>TIMEOUT (0x2):</dt>
          <dd>
            <t>The subscription could not be established before an implementation specific
timeout.</t>
          </dd>
          <dt>NOT_SUPPORTED (0x3):</dt>
          <dd>
            <t>The endpoint does not support the PUBLISH method.</t>
          </dd>
          <dt>UNINTERESTED (0x4):</dt>
          <dd>
            <t>The namespace or track is not of interest to the endpoint.</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-fetch">
        <name>FETCH</name>
        <t>A subscriber issues a FETCH to a publisher to request a range of already
published objects within a track.</t>
        <t>There are three types of Fetch messages.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Fetch Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x1</td>
              <td align="left">Standalone Fetch</td>
            </tr>
            <tr>
              <td align="left">0x2</td>
              <td align="left">Relative Joining Fetch</td>
            </tr>
            <tr>
              <td align="left">0x3</td>
              <td align="left">Absolute Joining Fetch</td>
            </tr>
          </tbody>
        </table>
        <t>An endpoint that receives a Fetch Type other than 0x1, 0x2 or 0x3 <bcp14>MUST</bcp14> be close
the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <section anchor="standalone-fetch">
          <name>Standalone Fetch</name>
          <t>A Fetch of Objects performed independently of any Subscribe.</t>
          <t>A Standalone Fetch includes this structure:</t>
          <artwork><![CDATA[
Standalone Fetch {
  Track Namespace (tuple),
  Track Name Length (i),
  Track Name (..),
  Start Location (Location),
  End Location (Location)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-name"/>).</t>
            </li>
            <li>
              <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
            </li>
            <li>
              <t>Start Location: The start Location.</t>
            </li>
            <li>
              <t>End Location: The end Location, plus 1. A Location.Object value of 0
means the entire group is requested.</t>
            </li>
          </ul>
        </section>
        <section anchor="joining-fetches">
          <name>Joining Fetches</name>
          <t>A Joining Fetch is associated with a Subscribe request by
specifying the Request ID of an active subscription.
A publisher receiving a Joining Fetch uses properties of the associated
Subscribe to determine the Track Namespace, Track Name
and End Location such that it is contiguous with the associated
Subscribe.  The subscriber can set the Start Location to an absolute Location or
a Location relative to the current group.</t>
          <t>A Subscriber can use a Joining Fetch to, for example, fill a playback buffer with a
certain number of groups prior to the live edge of a track.</t>
          <t>A Joining Fetch is only permitted when the associated Subscribe has the Filter
Type Largest Object; any other value results in closing the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>If no Objects have been published for the track, and the SUBSCRIBE_OK has a
Content Exists value of 0, the publisher <bcp14>MUST</bcp14> respond with a FETCH_ERROR with
error code <tt>INVALID_RANGE</tt>.</t>
          <t>A Joining Fetch includes this structure:</t>
          <artwork><![CDATA[
Joining Fetch {
  Joining Request ID (i),
  Joining Start (i)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Joining Request ID: The Request ID of the existing subscription to be
joined. If a publisher receives a Joining Fetch with a Request ID that does
not correspond to an existing Subscribe in the same session, it <bcp14>MUST</bcp14> respond
with a Fetch Error with code Invalid Joining Request ID.</t>
            </li>
            <li>
              <t>Joining Start : A relative or absolute value used to determing the Start
Location, described below.</t>
            </li>
          </ul>
          <section anchor="joining-fetch-range-calculation">
            <name>Joining Fetch Range Calculation</name>
            <t>The Largest Location value from the corresponding
subscription is used to calculate the end of a Joining Fetch so the
Objects retrieved by the FETCH and SUBSCRIBE are contiguous and non-overlapping.</t>
            <t>The publisher receiving a Joining Fetch sets the End Location to {Subscribe
Largest Location.Object + 1}.</t>
            <t>Note: the last Object included in the Joining FETCH response is Subscribe
Largest Location.  The <tt>+ 1</tt> above indicates the equivalent Standalone Fetch
encoding.</t>
            <t>For a Relative Joining Fetch, the publisher sets the Start Location to
{Subscribe Largest Location.Group - Joining Start, 0}.</t>
            <t>For an Absolute Joining Fetch, the publisher sets the Start Location to
Joining Start.</t>
          </section>
        </section>
        <section anchor="fetch-handling">
          <name>Fetch Handling</name>
          <t>The format of FETCH is as follows:</t>
          <figure anchor="moq-transport-fetch-format">
            <name>MOQT FETCH Message</name>
            <artwork><![CDATA[
FETCH Message {
  Type (i) = 0x16,
  Length (16),
  Request ID (i),
  Subscriber Priority (8),
  Group Order (8),
  Fetch Type (i),
  [Standalone (Standalone Fetch)],
  [Joining (Joining Fetch)],
  Number of Parameters (i),
  Parameters (..) ...
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Request ID: See <xref target="request-id"/>.</t>
            </li>
            <li>
              <t>Subscriber Priority: Specifies the priority of a fetch request relative to
other subscriptions or fetches in the same session. Lower numbers get higher
priority. See <xref target="priorities"/>.</t>
            </li>
            <li>
              <t>Group Order: Allows the subscriber to request Objects be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.  A
value of 0x0 indicates the original publisher's Group Order <bcp14>SHOULD</bcp14> be
used. Values larger than 0x2 are a protocol error.</t>
            </li>
            <li>
              <t>Fetch Type: Identifies the type of Fetch, whether Standalone, Relative
Joining or Absolute Joining.</t>
            </li>
            <li>
              <t>Standalone: Standalone Fetch structure included when Fetch Type is 0x1</t>
            </li>
            <li>
              <t>Joining: Joining Fetch structure included when Fetch Type is 0x2 or 0x3.</t>
            </li>
            <li>
              <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
            </li>
          </ul>
          <t>A publisher responds to a FETCH request with either a FETCH_OK or a FETCH_ERROR
message.  The publisher creates a new unidirectional stream that is used to send the
Objects.  The FETCH_OK or FETCH_ERROR can come at any time relative to object
delivery.</t>
          <t>The publisher responding to a FETCH is
responsible for delivering all available Objects in the requested range in the
requested order. The Objects in the response are delivered on a single
unidirectional stream. Any gaps in the Group and Object IDs in the response
stream indicate objects that do not exist (eg: they implicitly have status
<tt>Object Does Not Exist</tt>).  For Ascending Group Order this includes ranges
between the first requested object and the first object in the stream; between
objects in the stream; and between the last object in the stream and the Largest
Group/Object indicated in FETCH_OK, so long as the fetch stream is terminated by
a FIN.  If no Objects exist in the requested range, the publisher returns
FETCH_ERROR with code <tt>NO_OBJECTS</tt>.</t>
          <t>A relay that has cached objects from the beginning of the range <bcp14>MAY</bcp14> start
sending objects immediately in response to a FETCH.  If it encounters an object
in the requested range that is not cached and has unknown status, the relay <bcp14>MUST</bcp14>
pause subsequent delivery until it has confirmed the object's status upstream.
If the upstream FETCH fails, the relay sends a FETCH_ERROR and can reset the
unidirectional stream.  It can choose to do so immediately or wait until the
cached objects have been delivered before resetting the stream.</t>
          <t>The Object Forwarding Preference does not apply to fetches.</t>
          <t>Fetch specifies an inclusive range of Objects starting at Start Location and
ending at End Location. End Location <bcp14>MUST</bcp14> specify the same or a larger Location
than Start Location for Standalone and Absolute Joining Fetches.</t>
          <t>Objects that are not yet published will not be retrieved by a FETCH.  The
Largest available Object in the requested range is indicated in the FETCH_OK,
and is the last Object a fetch will return if the End Location have not yet been
published.</t>
          <t>If Start Location is greater than the <tt>Largest Object</tt>
(<xref target="message-subscribe-req"/>) the publisher <bcp14>MUST</bcp14> return FETCH_ERROR with error
code <tt>INVALID_RANGE</tt>.</t>
          <t>A publisher <bcp14>MUST</bcp14> send fetched groups in the determined group order, either
ascending or descending. Within each group, objects are sent in Object ID order;
subgroup ID is not used for ordering.</t>
          <t>If an Original Publisher receives a FETCH with a range that includes an object with
unknown status, it <bcp14>MUST</bcp14> return FETCH_ERROR with code UNKNOWN_STATUS_IN_RANGE.</t>
        </section>
      </section>
      <section anchor="message-fetch-ok">
        <name>FETCH_OK</name>
        <t>A publisher sends a FETCH_OK control message in response to successful fetches.
A publisher <bcp14>MAY</bcp14> send Objects in response to a FETCH before the FETCH_OK message is sent,
but the FETCH_OK <bcp14>MUST NOT</bcp14> be sent until the End Location is known.</t>
        <figure anchor="moq-transport-fetch-ok">
          <name>MOQT FETCH_OK Message</name>
          <artwork><![CDATA[
FETCH_OK Message {
  Type (i) = 0x18,
  Length (16),
  Request ID (i),
  Group Order (8),
  End Of Track (8),
  End Location (Location),
  Number of Parameters (i),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the FETCH this message is replying to
<xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Group Order: Indicates the fetch will be delivered in
Ascending (0x1) or Descending (0x2) order by group. See <xref target="priorities"/>.
Values of 0x0 and those larger than 0x2 are a protocol error.</t>
          </li>
          <li>
            <t>End Of Track: 1 if all Objects have been published on this Track, and
the End Location is the final Object in the Track, 0 if not.</t>
          </li>
          <li>
            <t>End Location: The largest object covered by the FETCH response.
The End Location is determined as follows:
            </t>
            <ul spacing="normal">
              <li>
                <t>If the requested FETCH End Location was beyond the Largest known (possibly
final) Object, End Location is {Largest.Group, Largest.Object + 1}</t>
              </li>
              <li>
                <t>If End Location.Object in the FETCH request was 0 and the response covers
the last Object in the Group, End Location is {Fetch.End Location.Group, 0}</t>
              </li>
              <li>
                <t>Otherwise, End Location is Fetch.End Location
Where Fetch.End Location is either Fetch.Standalone.End Location or the computed
End Location described in <xref target="joining-fetch-range-calculation"/>.</t>
              </li>
            </ul>
            <t>
If the relay is subscribed to the track, it uses its knowledge of the largest
{Group, Object} to set End Location.  If it is not subscribed and the
requested End Location exceeds its cached data, the relay makes an upstream
request to complete the FETCH, and uses the upstream response to set End
Location.  </t>
            <t>
If End Location is smaller than the Start Location in the corresponding FETCH
the receiver <bcp14>MUST</bcp14> close the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-fetch-error">
        <name>FETCH_ERROR</name>
        <t>A publisher sends a FETCH_ERROR control message in response to a
failed FETCH.</t>
        <figure anchor="moq-transport-fetch-error">
          <name>MOQT FETCH_ERROR Message</name>
          <artwork><![CDATA[
FETCH_ERROR Message {
  Type (i) = 0x19,
  Length (16),
  Request ID (i),
  Error Code (i),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the FETCH this message is replying to
<xref target="message-subscribe-req"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for fetch failure.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for fetch error. See <xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in FETCH_ERROR,
as defined below:</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x1):</dt>
          <dd>
            <t>The subscriber is not authorized to fetch from the given track.</t>
          </dd>
          <dt>TIMEOUT (0x2):</dt>
          <dd>
            <t>The fetch could not be completed before an implementation specific timeout.
For example, a relay could not FETCH missing objects within the timeout.</t>
          </dd>
          <dt>NOT_SUPPORTED (0x3):</dt>
          <dd>
            <t>The endpoint does not support the FETCH method.</t>
          </dd>
          <dt>TRACK_DOES_NOT_EXIST (0x4):</dt>
          <dd>
            <t>The requested track is not available at the publisher.</t>
          </dd>
          <dt>INVALID_RANGE (0x5):</dt>
          <dd>
            <t>The end of the requested range is earlier than the beginning, the start of
the requested range is beyond the Largest Location, or the track has not
published any Objects yet.</t>
          </dd>
          <dt>NO_OBJECTS (0x6):</dt>
          <dd>
            <t>No Objects exist between the requested Start and End Locations.</t>
          </dd>
          <dt>INVALID_JOINING_REQUEST_ID (0x7):</dt>
          <dd>
            <t>The joining Fetch referenced a Request ID that did not belong to an active
Subscription.</t>
          </dd>
          <dt>UNKNOWN_STATUS_IN_RANGE (0x8):</dt>
          <dd>
            <t>The requested range contains objects with unknown status.</t>
          </dd>
          <dt>MALFORMED_TRACK (0x9):</dt>
          <dd>
            <t>A relay publisher detected the track was malformed (see
<xref target="malformed-tracks"/>).</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN (0x10):</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x12):</dt>
          <dd>
            <t>Authorization token has expired (<xref target="authorization-token"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-fetch-cancel">
        <name>FETCH_CANCEL</name>
        <t>A subscriber sends a FETCH_CANCEL message to a publisher to indicate it is no
longer interested in receiving objects for the fetch identified by the 'Request
ID'. The publisher <bcp14>SHOULD</bcp14> promptly close the unidirectional stream, even if it
is in the middle of delivering an object.</t>
        <t>The format of <tt>FETCH_CANCEL</tt> is as follows:</t>
        <figure anchor="moq-transport-fetch-cancel">
          <name>MOQT FETCH_CANCEL Message</name>
          <artwork><![CDATA[
FETCH_CANCEL Message {
  Type (i) = 0x17,
  Length (16),
  Request ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the FETCH (<xref target="message-fetch"/>) this message is
cancelling.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status">
        <name>TRACK_STATUS</name>
        <t>A potential subscriber sends a <tt>TRACK_STATUS</tt> message on the control
stream to obtain information about the current status of a given track.</t>
        <t>The TRACK_STATUS message format is identical to the SUBSCRIBE message
(<xref target="message-subscribe-req"/>).</t>
        <t>The receiver of a TRACK_STATUS message treats it identically as if it had
received a SUBSCRIBE message, except it does not create downstream subscription
state or send any Objects.  Relays without an active subscription <bcp14>MAY</bcp14> forward
TRACK_STATUS to one or more publishers, or <bcp14>MAY</bcp14> initiate a subscription (subject
to authorization) as described in <xref target="publisher-interactions"/> to determine the
response. The publisher does not send PUBLISH_DONE for this request, and the
subscriber cannot send SUBSCRIBE_UPDATE or UNSUBSCRIBE.</t>
      </section>
      <section anchor="message-track-status-ok">
        <name>TRACK_STATUS_OK</name>
        <t>The publisher sends a TRACK_STATUS_OK control message in response
to a successful TRACK_STATUS message.</t>
        <t>The TRACK_STATUS_OK message format is identical to the SUBSCRIBE_OK message
(<xref target="message-subscribe-ok"/>).</t>
        <t>The publisher populates the fields of TRACK_STATUS_OK exactly as it would have
populated a SUBSCRIBE_OK, setting Track Alias to 0. It is not considered an error
if Track Alias 0 is already in use by an active subscription.</t>
      </section>
      <section anchor="message-track-status-error">
        <name>TRACK_STATUS_ERROR</name>
        <t>The publisher sends a TRACK_STATUS_ERROR control message in response
to a failed TRACK_STATUS message.</t>
        <t>The TRACK_STATUS_ERROR message format is identical to the SUBSCRIBE_ERROR
message (<xref target="message-subscribe-error"/>).</t>
        <t>The publisher populates the fields of TRACK_STATUS_ERROR exactly as it would
have populated a SUBSCRIBE_ERROR.</t>
      </section>
      <section anchor="message-pub-ns">
        <name>PUBLISH_NAMESPACE</name>
        <t>The publisher sends the PUBLISH_NAMESPACE control message to advertise that it
has tracks available within a Track Namespace. The receiver verifies the
publisher is authorized to publish tracks under this namespace.</t>
        <figure anchor="moq-transport-pub-ns-format">
          <name>MOQT PUBLISH_NAMESPACE Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE Message {
  Type (i) = 0x6,
  Length (16),
  Request ID (i),
  Track Namespace (tuple),
  Number of Parameters (i),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-name"/>)</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-pub-ns-ok">
        <name>PUBLISH_NAMESPACE_OK</name>
        <t>The subscriber sends a PUBLISH_NAMESPACE_OK control message to acknowledge the
successful authorization and acceptance of a PUBLISH_NAMESPACE message.</t>
        <figure anchor="moq-transport-pub-ns-ok">
          <name>MOQT PUBLISH_NAMESPACE_OK Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE_OK Message {
  Type (i) = 0x7,
  Length (16),
  Request ID (i)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the PUBLISH_NAMESPACE this message is replying
to <xref target="message-pub-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-pub-ns-error">
        <name>PUBLISH_NAMESPACE_ERROR</name>
        <t>The subscriber sends a PUBLISH_NAMESPACE_ERROR control message for tracks that
failed authorization.</t>
        <figure anchor="moq-transport-pub-ns-error">
          <name>MOQT PUBLISH_NAMESPACE_ERROR Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE_ERROR Message {
  Type (i) = 0x8,
  Length (16),
  Request ID (i),
  Error Code (i),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the PUBLISH_NAMESPACE this message is replying
to <xref target="message-pub-ns"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for publish namespace failure.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for publish namespace error. See
<xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in PUBLISH_NAMESPACE_ERROR, as
defined below:</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x1):</dt>
          <dd>
            <t>The subscriber is not authorized to announce the given namespace.</t>
          </dd>
          <dt>TIMEOUT (0x2):</dt>
          <dd>
            <t>The announce could not be completed before an implementation specific
timeout.</t>
          </dd>
          <dt>NOT_SUPPORTED (0x3):</dt>
          <dd>
            <t>The endpoint does not support the PUBLISH_NAMESPACE method.</t>
          </dd>
          <dt>UNINTERESTED (0x4):</dt>
          <dd>
            <t>The namespace is not of interest to the endpoint.</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN (0x10):</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x12):</dt>
          <dd>
            <t>Authorization token has expired (<xref target="authorization-token"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-pub-ns-done">
        <name>PUBLISH_NAMESPACE_DONE</name>
        <t>The publisher sends the <tt>PUBLISH_NAMESPACE_DONE</tt> control message to indicate its
intent to stop serving new subscriptions for tracks within the provided Track
Namespace.</t>
        <figure anchor="moq-transport-pub-ns-done-format">
          <name>MOQT PUBLISH_NAMESPACE_DONE Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE_DONE Message {
  Type (i) = 0x9,
  Length (16),
  Track Namespace (tuple),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-name"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="message-pub-ns-cancel">
        <name>PUBLISH_NAMESPACE_CANCEL</name>
        <t>The subscriber sends an <tt>PUBLISH_NAMESPACE_CANCEL</tt> control message to
indicate it will stop sending new subscriptions for tracks
within the provided Track Namespace.</t>
        <figure anchor="moq-transport-pub-ns-cancel-format">
          <name>MOQT PUBLISH_NAMESPACE_CANCEL Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE_CANCEL Message {
  Type (i) = 0xC,
  Length (16),
  Track Namespace (tuple),
  Error Code (i),
  Error Reason (Reason Phrase),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for canceling the publish.
PUBLISH_NAMESPACE_CANCEL uses the same error codes as PUBLISH_NAMESPACE_ERROR
(<xref target="message-pub-ns-error"/>).</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for publish cancelation. See
<xref target="reason-phrase"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-ns">
        <name>SUBSCRIBE_NAMESPACE</name>
        <t>The subscriber sends the SUBSCRIBE_NAMESPACE control message to a publisher to
request the current set of matching published namespaces and established
subscriptions, as well as future updates to the set.</t>
        <figure anchor="moq-transport-subscribe-ns-format">
          <name>MOQT SUBSCRIBE_NAMESPACE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE Message {
  Type (i) = 0x11,
  Length (16),
  Request ID (i),
  Track Namespace Prefix (tuple),
  Number of Parameters (i),
  Parameters (..) ...,
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace Prefix: An ordered N-Tuple of byte fields which are matched
against track namespaces known to the publisher.  For example, if the publisher
is a relay that has received PUBLISH_NAMESPACE messages for namespaces
("example.com", "meeting=123", "participant=100") and ("example.com",
"meeting=123", "participant=200"), a SUBSCRIBE_NAMESPACE for ("example.com",
"meeting=123") would match both.  If an endpoint receives a Track Namespace
Prefix tuple with an N of 0 or more than 32, it <bcp14>MUST</bcp14> close the session with a
Protocol Violation.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="version-specific-params"/>.</t>
          </li>
        </ul>
        <t>The publisher will respond with SUBSCRIBE_NAMESPACE_OK or
SUBSCRIBE_NAMESPACE_ERROR.  If the SUBSCRIBE_NAMESPACE is successful, the
publisher will immediately forward existing PUBLISH_NAMESPACE and PUBLISH
messages that match the Track Namespace Prefix that have not already been sent
to this subscriber.  If the set of matching PUBLISH_NAMESPACE messages changes,
the publisher sends the corresponding PUBLISH_NAMESPACE or
PUBLISH_NAMESPACE_DONE message.</t>
        <t>A subscriber cannot make overlapping namespace subscriptions on a single
session.  Within a session, if a publisher receives a SUBSCRIBE_NAMESPACE with a
Track Namespace Prefix that is a prefix of, suffix of, or equal to an active
SUBSCRIBE_NAMESPACE, it <bcp14>MUST</bcp14> respond with SUBSCRIBE_NAMESPACE_ERROR, with error
code <tt>NAMESPACE_PREFIX_OVERLAP</tt>.</t>
        <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform this
namespace subscription.</t>
        <t>SUBSCRIBE_NAMESPACE is not required for a publisher to send PUBLISH_NAMESPACE,
PUBLISH_NAMESPACE_DONE or PUBLISH messages to a subscriber.  It is useful in
applications or relays where subscribers are only interested in or authorized to
access a subset of available namespaces and tracks.</t>
      </section>
      <section anchor="message-sub-ns-ok">
        <name>SUBSCRIBE_NAMESPACE_OK</name>
        <t>A publisher sends a SUBSCRIBE_NAMESPACE_OK control message for successful
namespace subscriptions.</t>
        <figure anchor="moq-transport-sub-ann-ok">
          <name>MOQT SUBSCRIBE_NAMESPACE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE_OK Message {
  Type (i) = 0x12,
  Length (16),
  Request ID (i),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the SUBSCRIBE_NAMESPACE this message is replying
to <xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-sub-ns-error">
        <name>SUBSCRIBE_NAMESPACE_ERROR</name>
        <t>A publisher sends a SUBSCRIBE_NAMESPACE_ERROR control message in response to
a failed SUBSCRIBE_NAMESPACE.</t>
        <figure anchor="moq-transport-sub-ann-error">
          <name>MOQT SUBSCRIBE_NAMESPACE_ERROR Message</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE_ERROR Message {
  Type (i) = 0x13,
  Length (16),
  Request ID (i),
  Error Code (i),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: The Request ID of the SUBSCRIBE_NAMESPACE this message is replying
to <xref target="message-subscribe-ns"/>.</t>
          </li>
          <li>
            <t>Error Code: Identifies an integer error code for the namespace subscription
failure.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for the namespace subscription error.
See <xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in SUBSCRIBE_NAMESPACE_ERROR,
as defined below:</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x1):</dt>
          <dd>
            <t>The subscriber is not authorized to subscribe to the given namespace prefix.</t>
          </dd>
          <dt>TIMEOUT (0x2):</dt>
          <dd>
            <t>The operation could not be completed before an implementation specific
timeout.</t>
          </dd>
          <dt>NOT_SUPPORTED (0x3):</dt>
          <dd>
            <t>The endpoint does not support the SUBSCRIBE_NAMESPACE method.</t>
          </dd>
          <dt>NAMESPACE_PREFIX_UNKNOWN (0x4):</dt>
          <dd>
            <t>The namespace prefix is not available for subscription.</t>
          </dd>
          <dt>NAMESPACE_PREFIX_OVERLAP (0x5):</dt>
          <dd>
            <t>The namespace prefix overlaps with another SUBSCRIBE_NAMESPACE in the same
session.</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN (0x10):</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="authorization-token"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x12):</dt>
          <dd>
            <t>Authorization token has expired (<xref target="authorization-token"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="message-unsub-ns">
        <name>UNSUBSCRIBE_NAMESPACE</name>
        <t>A subscriber issues a <tt>UNSUBSCRIBE_NAMESPACE</tt> message to a publisher indicating
it is no longer interested in PUBLISH_NAMESPACE, PUBLISH_NAMESPACE_DONE and
PUBLISH messages for the specified track namespace prefix.</t>
        <t>The format of <tt>UNSUBSCRIBE_NAMESPACE</tt> is as follows:</t>
        <figure anchor="moq-transport-unsub-ann-format">
          <name>MOQT UNSUBSCRIBE_NAMESPACE Message</name>
          <artwork><![CDATA[
UNSUBSCRIBE_NAMESPACE Message {
  Type (i) = 0x14,
  Length (16),
  Track Namespace Prefix (tuple)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Prefix: As defined in <xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="data-streams">
      <name>Data Streams and Datagrams</name>
      <t>A publisher sends Objects matching a subscription on Data Streams or Datagrams.</t>
      <t>All unidirectional MOQT streams start with a variable-length integer indicating
the type of the stream in question.</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x10-0x1D</td>
            <td align="left">SUBGROUP_HEADER  (<xref target="subgroup-header"/>)</td>
          </tr>
          <tr>
            <td align="right">0x05</td>
            <td align="left">FETCH_HEADER  (<xref target="fetch-header"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>All MOQT datagrams start with a variable-length integer indicating the type of
the datagram.</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x00-0x07,0x20-21</td>
            <td align="left">OBJECT_DATAGRAM (<xref target="object-datagram"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown stream or datagram type <bcp14>MUST</bcp14> close the
session.</t>
      <t>Every Track has a single 'Object Forwarding Preference' and the Original
Publisher <bcp14>MUST NOT</bcp14> mix different forwarding preferences within a single track
(see <xref target="malformed-tracks"/>).</t>
      <section anchor="track-alias">
        <name>Track Alias</name>
        <t>To optimize wire efficiency, Subgroups and Datagrams refer to a track by a
numeric identifier, rather than the Full Track Name.  Track Alias is chosen by
the publisher and included in SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>) or PUBLISH
(<xref target="message-publish"/>).</t>
        <t>Objects can arrive after a subscription has been cancelled.  Subscribers <bcp14>SHOULD</bcp14>
retain sufficient state to quickly discard these unwanted Objects, rather than
treating them as belonging to an unknown Track Alias.</t>
      </section>
      <section anchor="message-object">
        <name>Objects</name>
        <t>An Object contains a range of contiguous bytes from the
specified track, as well as associated metadata required to deliver,
cache, and forward it.  Objects are sent by publishers.</t>
        <section anchor="object-properties">
          <name>Canonical Object Properties</name>
          <t>A canonical MoQ Object has the following information:</t>
          <ul spacing="normal">
            <li>
              <t>Track Namespace and Track Name: The track this object belongs to.</t>
            </li>
            <li>
              <t>Group ID: The object is a member of the indicated group ID
<xref target="model-group"/> within the track.</t>
            </li>
            <li>
              <t>Object ID: The order of the object within the group.</t>
            </li>
            <li>
              <t>Publisher Priority: An 8 bit integer indicating the publisher's priority for
the Object <xref target="priorities"/>.</t>
            </li>
            <li>
              <t>Object Forwarding Preference: An enumeration indicating how a publisher sends
an object. The preferences are Subgroup and Datagram.  When in response to a
SUBSCRIBE, an Object <bcp14>MUST</bcp14> be sent according to its <tt>Object Forwarding
Preference</tt>, described below.</t>
            </li>
            <li>
              <t>Subgroup ID: The object is a member of the indicated subgroup ID (<xref target="model-subgroup"/>)
within the group. This field is omitted if the Object Forwarding Preference is
Datagram.</t>
            </li>
            <li>
              <t>Object Status: As enumeration used to indicate missing
objects or mark the end of a group or track. See <xref target="object-status"/> below.</t>
            </li>
            <li>
              <t>Object Extension Length: The total length of the Object Extension Headers
block, in bytes.</t>
            </li>
            <li>
              <t>Object Extensions : A sequence of Object Extension Headers. See
<xref target="object-extensions"/> below.</t>
            </li>
            <li>
              <t>Object Payload: An opaque payload intended for an End Subscriber and <bcp14>SHOULD
NOT</bcp14> be processed by a relay. Only present when 'Object Status' is Normal (0x0).</t>
            </li>
          </ul>
          <section anchor="object-status">
            <name>Object Status</name>
            <t>The Object Status informs subscribers what objects will not be received
because they were never produced, are no longer available, or because they
are beyond the end of a group or track.</t>
            <t><tt>Status</tt> can have following values:</t>
            <ul spacing="normal">
              <li>
                <t>0x0 := Normal object. This status is implicit for any non-zero length object.
       Zero-length objects explicitly encode the Normal status.</t>
              </li>
              <li>
                <t>0x1 := Indicates Object Does Not Exist. Indicates that this Object does not
       exist at any publisher and it will not be published in the future. This
       <bcp14>SHOULD</bcp14> be cached.</t>
              </li>
              <li>
                <t>0x3 := Indicates End of Group. Object ID is one greater than the largest
       Object produced in the Group identified by the Group ID. If the Object
       ID is 0, it indicates there are no Objects in this Group. This <bcp14>SHOULD</bcp14>
       be cached. A publisher <bcp14>MAY</bcp14> use an end of Group object to signal the end
       of all open Subgroups in a Group. A non-zero-length Object can be the
       End of Group, as signaled in the DATAGRAM or SUBGROUP_HEADER Type field
       (see <xref target="object-datagram"/> and <xref target="subgroup-header"/>).</t>
              </li>
              <li>
                <t>0x4 := Indicates End of Track. Group ID is either the largest Group produced
       in this Track with Object ID one greater than the largest Object
       produced in that Group, or Group ID is one greater than the largest
       Group produced in this Track with Object ID zero. This status also
       indicates the specified Group has ended. Publishers <bcp14>MUST NOT</bcp14> publish an
       Object with a Location larger than this Location (see
       <xref target="malformed-tracks"/>). This <bcp14>SHOULD</bcp14> be cached.</t>
              </li>
            </ul>
            <t>Any other value <bcp14>SHOULD</bcp14> be treated as a protocol error and the session <bcp14>SHOULD</bcp14>
be terminated with a <tt>PROTOCOL_VIOLATION</tt> (<xref target="session-termination"/>).
Any object with a status code other than zero <bcp14>MUST</bcp14> have an empty payload.</t>
          </section>
          <section anchor="object-extensions">
            <name>Object Extension Header</name>
            <t>Any Object may have extension headers except those with Object Status 'Object
Does Not Exist'.  If an endpoint receives a non-existent Object containing
extension headers it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>Object Extension Headers are visible to relays and allow the transmission of
future metadata relevant to MOQT Object distribution. Any Object metadata never
accessed by the transport or relays <bcp14>SHOULD</bcp14> be serialized as part of the Object
payload and not as an extension header.</t>
            <t>Extension Headers are defined in external specifications and registered in an
IANA table <xref target="iana"/>. These specifications define the type and value of the
header, along with any rules concerning processing, modification, caching and
forwarding. A relay which is coded to implement these rules is said to
"support" the extension.</t>
            <t>If unsupported by the relay, Extension Headers <bcp14>MUST NOT</bcp14> be modified, <bcp14>MUST</bcp14> be
cached as part of the Object and <bcp14>MUST</bcp14> be forwarded by relays.</t>
            <t>If supported by the relay and subject to the processing rules specified in the
definition of the extension, Extension Headers <bcp14>MAY</bcp14> be modified, added, removed,
and/or cached by relays.</t>
            <t>Object Extension Headers are serialized as Key-Value-Pairs (see
<xref target="moq-key-value-pair"/>).</t>
            <t>Header types are registered in the IANA table 'MOQ Extension Headers'.
See <xref target="iana"/>.</t>
          </section>
        </section>
      </section>
      <section anchor="datagrams">
        <name>Datagrams</name>
        <t>A single object can be conveyed in a datagram.  The Track Alias field
<xref target="track-alias"/> indicates the track this Datagram belongs to.  If an endpoint
receives a datagram with an unknown Track Alias, it <bcp14>MAY</bcp14> drop the datagram or
choose to buffer it for a brief period to handle reordering with the control
message that establishes the Track Alias.</t>
        <t>An Object received in an <tt>OBJECT_DATAGRAM</tt> or <tt>OBJECT_DATAGRAM_STATUS</tt> message
has an <tt>Object Forwarding Preference</tt> = <tt>Datagram</tt>.</t>
        <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Datagram</tt>, determine
the length of the header and payload and send the Object as datagram.  When the
total size is larger than maximum datagram size for the session, the Object will
be dropped without any explicit notification.</t>
        <t>Each session along the path between the Original Publisher and End Subscriber
might have different maximum datagram sizes. Additionally, Object Extension
Headers (<xref target="object-extensions"/>) can be added to Objects as they pass through
the MOQT network, increasing the size of the Object and the chances it will
exceed the maximum datagram size of a downstream session and be dropped.</t>
        <section anchor="object-datagram">
          <name>Object Datagram</name>
          <t>An <tt>OBJECT_DATAGRAM</tt> carries a single object in a datagram.</t>
          <figure anchor="object-datagram-format">
            <name>MOQT OBJECT_DATAGRAM</name>
            <artwork><![CDATA[
OBJECT_DATAGRAM {
  Type (i) = 0x0-0x7,0x20-21
  Track Alias (i),
  Group ID (i),
  [Object ID (i),]
  Publisher Priority (8),
  [Extension Headers Length (i),
  Extension headers (...)],
  [Object Status (i),]
  [Object Payload (..),]
}
]]></artwork>
          </figure>
          <t>The Type value determines which fields are present in the OBJECT_DATAGRAM.
There are 10 defined Type values for OBJECT_DATAGRAM.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Type</th>
                <th align="left">End Of Group</th>
                <th align="left">Extensions</th>
                <th align="left">Object ID</th>
                <th align="left">Status / Payload</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left"> </td>
                <td align="left"> </td>
                <td align="left">Present</td>
                <td align="left">Present</td>
                <td align="left"> </td>
              </tr>
              <tr>
                <td align="left">0x00</td>
                <td align="left">No</td>
                <td align="left">No</td>
                <td align="left">Yes</td>
                <td align="left">Payload</td>
              </tr>
              <tr>
                <td align="left">0x01</td>
                <td align="left">No</td>
                <td align="left">Yes</td>
                <td align="left">Yes</td>
                <td align="left">Payload</td>
              </tr>
              <tr>
                <td align="left">0x02</td>
                <td align="left">Yes</td>
                <td align="left">No</td>
                <td align="left">Yes</td>
                <td align="left">Payload</td>
              </tr>
              <tr>
                <td align="left">0x03</td>
                <td align="left">Yes</td>
                <td align="left">Yes</td>
                <td align="left">Yes</td>
                <td align="left">Payload</td>
              </tr>
              <tr>
                <td align="left">0x04</td>
                <td align="left">No</td>
                <td align="left">No</td>
                <td align="left">No</td>
                <td align="left">Payload</td>
              </tr>
              <tr>
                <td align="left">0x05</td>
                <td align="left">No</td>
                <td align="left">Yes</td>
                <td align="left">No</td>
                <td align="left">Payload</td>
              </tr>
              <tr>
                <td align="left">0x06</td>
                <td align="left">Yes</td>
                <td align="left">No</td>
                <td align="left">No</td>
                <td align="left">Payload</td>
              </tr>
              <tr>
                <td align="left">0x07</td>
                <td align="left">Yes</td>
                <td align="left">Yes</td>
                <td align="left">No</td>
                <td align="left">Payload</td>
              </tr>
              <tr>
                <td align="left">0x20</td>
                <td align="left">No</td>
                <td align="left">No</td>
                <td align="left">Yes</td>
                <td align="left">Status</td>
              </tr>
              <tr>
                <td align="left">0x21</td>
                <td align="left">No</td>
                <td align="left">Yes</td>
                <td align="left">Yes</td>
                <td align="left">Status</td>
              </tr>
            </tbody>
          </table>
          <ul spacing="normal">
            <li>
              <t>End of Group: For Type values where End of Group is "Yes" the Object is the
last Object in the Group.</t>
            </li>
            <li>
              <t>Extensions Present: If Extensions Present is "Yes" the Extension Headers
Length and Extension headers fields are included. If an endpoint receives a
datagram with Extensions Present as "Yes" and a Extension Headers Length of 0,
it <bcp14>MUST</bcp14> close the session with PROTOCOL_VIOLATION.</t>
            </li>
            <li>
              <t>Object ID Present: If Object ID Present is No, the Object ID field is omitted
and the Object ID is 0.  When Object ID Present is Yes, the Object ID field is
present and encodes the Object ID.</t>
            </li>
            <li>
              <t>Payload and Status: The Object Status field and Object Payload are mutually
exclusive.  </t>
              <ul spacing="normal">
                <li>
                  <t>For Type values 0x00 through 0x07, the Object Payload is present
and the Object Status field is omitted.      </t>
                  <t>
There is no explicit length field for the Object Payload. The entirety of the
transport datagram following the Object header fields contains the payload.</t>
                </li>
                <li>
                  <t>For Type values 0x20 and 0x21, the Object Status field is present
and there is no Object Payload.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="streams">
        <name>Streams</name>
        <t>When Objects are sent on streams, the stream begins with a Subgroup or Fetch
Header and is followed by one or more sets of serialized Object fields.
If a stream ends gracefully (i.e., the stream terminates with a FIN) in the
middle of a serialized Object, the session <bcp14>SHOULD</bcp14> be terminated with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>A publisher <bcp14>SHOULD NOT</bcp14> open more than one stream at a time with the same Subgroup
Header field values.</t>
        <section anchor="stream-cancellation">
          <name>Stream Cancellation</name>
          <t>Streams aside from the control stream <bcp14>MAY</bcp14> be canceled due to congestion
or other reasons by either the publisher or subscriber. Early termination of a
stream does not affect the MoQ application state, and therefore has no
effect on outstanding subscriptions.</t>
        </section>
        <section anchor="subgroup-header">
          <name>Subgroup Header</name>
          <t>All Objects on a Subgroup stream belong to the track identified by <tt>Track Alias</tt>
(see <xref target="track-alias"/>) and the Subgroup indicated by 'Group ID' and <tt>Subgroup
ID</tt> in the SUBGROUP_HEADER.</t>
          <t>If an endpoint receives a subgroup with an unknown Track Alias, it <bcp14>MAY</bcp14> abandon
the stream, or choose to buffer it for a brief period to handle reordering with
the control message that establishes the Track Alias.  The endpoint <bcp14>MAY</bcp14> withhold
stream flow control beyond the SUBGROUP_HEADER until the Track Alias has been
established.  To prevent deadlocks, the publisher <bcp14>MUST</bcp14> allocate connection flow
control to the control stream before allocating it any data streams. Otherwise,
a receiver might wait for a control message containing a Track Alias to release
flow control, while the sender waits for flow control to send the message.</t>
          <figure anchor="object-header-format">
            <name>MOQT SUBGROUP_HEADER</name>
            <artwork><![CDATA[
SUBGROUP_HEADER {
  Type (i) = 0x10..0x1D,
  Track Alias (i),
  Group ID (i),
  [Subgroup ID (i),]
  Publisher Priority (8),
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>SUBGROUP_HEADER</tt> have an
<tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>.</t>
          <t>There are 12 defined Type values for SUBGROUP_HEADER:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Type</th>
                <th align="left">Subgroup ID</th>
                <th align="left">Subgroup ID</th>
                <th align="left">Extensions</th>
                <th align="left">Contains End</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left"> </td>
                <td align="left">Field Present</td>
                <td align="left">Value</td>
                <td align="left">Present</td>
                <td align="left">of Group</td>
              </tr>
              <tr>
                <td align="left">0x10</td>
                <td align="left">No</td>
                <td align="left">0</td>
                <td align="left">No</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">0x11</td>
                <td align="left">No</td>
                <td align="left">0</td>
                <td align="left">Yes</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">0x12</td>
                <td align="left">No</td>
                <td align="left">First Object ID</td>
                <td align="left">No</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">0x13</td>
                <td align="left">No</td>
                <td align="left">First Object ID</td>
                <td align="left">Yes</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">0x14</td>
                <td align="left">Yes</td>
                <td align="left">N/A</td>
                <td align="left">No</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">0x15</td>
                <td align="left">Yes</td>
                <td align="left">N/A</td>
                <td align="left">Yes</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">0x18</td>
                <td align="left">No</td>
                <td align="left">0</td>
                <td align="left">No</td>
                <td align="left">Yes</td>
              </tr>
              <tr>
                <td align="left">0x19</td>
                <td align="left">No</td>
                <td align="left">0</td>
                <td align="left">Yes</td>
                <td align="left">Yes</td>
              </tr>
              <tr>
                <td align="left">0x1A</td>
                <td align="left">No</td>
                <td align="left">First Object ID</td>
                <td align="left">No</td>
                <td align="left">Yes</td>
              </tr>
              <tr>
                <td align="left">0x1B</td>
                <td align="left">No</td>
                <td align="left">First Object ID</td>
                <td align="left">Yes</td>
                <td align="left">Yes</td>
              </tr>
              <tr>
                <td align="left">0x1C</td>
                <td align="left">Yes</td>
                <td align="left">N/A</td>
                <td align="left">No</td>
                <td align="left">Yes</td>
              </tr>
              <tr>
                <td align="left">0x1D</td>
                <td align="left">Yes</td>
                <td align="left">N/A</td>
                <td align="left">Yes</td>
                <td align="left">Yes</td>
              </tr>
            </tbody>
          </table>
          <t>For Type values where Contains End of Group is Yes, the last Object in this
Subgroup stream before a FIN is the last Object in the Group.  If the Subgroup
stream is terminated with a RESET_STREAM or RESET_STREAM_AT, the receiver cannot
determine the End of Group Object ID.</t>
          <t>For Type values where Subgroup ID Field Present is No, there is no explicit
Subgroup ID field in the header and the Subgroup ID is either 0 (for Types
0x10-11 and 0x18-19) or the Object ID of the first object transmitted in this
subgroup (for Types 0x12-13 and 0x1A-1B).</t>
          <t>For Type values where Extensions Present is No, Extensions Headers Length is
not present and all Objects have no extensions.  When Extensions Present is
Yes, Extension Headers Length is present in all Objects in this subgroup.
Objects with no extensions set Extension Headers Length to 0.</t>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>, find the open
stream that is associated with the subscription, <tt>Group ID</tt> and <tt>Subgroup ID</tt>,
or open a new one and send the <tt>SUBGROUP_HEADER</tt>. Then serialize the
following fields.</t>
          <t>The Object Status field is only sent if the Object Payload Length is zero.</t>
          <t>The Object ID Delta + 1 is added to the previous Object ID in the Subgroup
stream if there was one.  The Object ID is the Object ID Delta if it's the first
Object in the Subgroup stream. For example, a Subgroup of sequential Object IDs
starting at 0 will have 0 for all Object ID Delta values. A consumer cannot
infer information about the existence of Objects between the current and
previous Object ID in the Subgroup (e.g. when Object ID Delta is non-zero)
unless there is an Prior Object ID Gap extesnion header (see
<xref target="prior-object-id-gap"/>).</t>
          <figure anchor="object-subgroup-format">
            <name>MOQT Subgroup Object Fields</name>
            <artwork><![CDATA[
{
  Object ID Delta (i),
  [Extension Headers Length (i),
  Extension headers (...)],
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
]]></artwork>
          </figure>
        </section>
        <section anchor="closing-subgroup-streams">
          <name>Closing Subgroup Streams</name>
          <t>Subscribers will often need to know if they have received all objects in a
Subgroup, particularly if they serve as a relay or cache. QUIC and Webtransport
streams provide signals that can be used for this purpose. Closing Subgroups
promptly frees system resources and often unlocks flow control credit to open
more streams.</t>
          <t>If a sender has delivered all objects in a Subgroup to the QUIC stream, except
any Objects with Locations smaller than the subscription's Start Location, it
<bcp14>MUST</bcp14> close the stream with a FIN.</t>
          <t>If a sender closes the stream before delivering all such objects to the QUIC
stream, it <bcp14>MUST</bcp14> use a RESET_STREAM or RESET_STREAM_AT
<xref target="I-D.draft-ietf-quic-reliable-stream-reset"/> frame. This includes an open
Subgroup exceeding its Delivery Timeout, early termination of subscription due
to an UNSUBSCRIBE message, a publisher's decision to end the subscription early,
or a SUBSCRIBE_UPDATE moving the subscription's End Group to a smaller Group or
the Start Location to a larger Location.  When RESET_STREAM_AT is used, the
reliable_size <bcp14>SHOULD</bcp14> include the stream header so the receiver can identify the
corresponding subscription and accurately account for reset data streams when
handling PUBLISH_DONE (see <xref target="message-publish-done"/>).  Publishers that reset
data streams without using RESET_STREAM_AT with an appropriate reliable_size can
cause subscribers to hold on to subscription state until a timeout expires.</t>
          <t>A sender might send all objects in a Subgroup and the FIN on a QUIC stream,
and then reset the stream. In this case, the receiving application would receive
the FIN if and only if all objects were received. If the application receives
all data on the stream and the FIN, it can ignore any RESET_STREAM it receives.</t>
          <t>If a sender will not deliver any objects from a Subgroup, it <bcp14>MAY</bcp14> send
a SUBGROUP_HEADER on a new stream, with no objects, and then send RESET_STREAM_AT
with a reliable_size equal to the length of the stream header. This explicitly
tells the receiver there is an unsent Subgroup.</t>
          <t>A relay <bcp14>MUST NOT</bcp14> forward an Object on an existing Subgroup stream unless it is
the next Object in that Subgroup.  A relay knows that an Object is the next
Object in the Subgroup if at least one of the following is true:</t>
          <ul spacing="normal">
            <li>
              <t>the Object ID is one greater than the previous Object sent on this Subgroup
stream.</t>
            </li>
            <li>
              <t>the Object was received on the same upstream Subgroup stream as the
previously sent Object on the downstream Subgroup stream, with no other
Objects in between.</t>
            </li>
            <li>
              <t>it knows all Object IDs between the current and previous Object IDs
on the Subgroup stream belong to different Subgroups or do not exist.</t>
            </li>
          </ul>
          <t>If the relay does not know if an Object is the next Object, it <bcp14>MUST</bcp14> reset the
Subgroup stream and open a new one to forward it.</t>
          <t>Since SUBSCRIBEs always end on a group boundary, an ending subscription can
always cleanly close all its subgroups. A sender that terminates a stream
early for any other reason (e.g., to handoff to a different sender) <bcp14>MUST</bcp14>
use RESET_STREAM or RESET_STREAM_AT. Senders <bcp14>SHOULD</bcp14> terminate a stream on
Group boundaries to avoid doing so.</t>
          <t>An MOQT implementation that processes a stream FIN is assured it has received
all objects in a subgroup from the start of the subscription. If a relay, it
can forward stream FINs to its own subscribers once those objects have been
sent. A relay <bcp14>MAY</bcp14> treat receipt of EndOfGroup, GroupDoesNotExist, or
EndOfTrack objects as a signal to close corresponding streams even if the FIN
has not arrived, as further objects on the stream would be a protocol violation.</t>
          <t>Similarly, an EndOfGroup message indicates the maximum Object ID in the
Group, so if all Objects in the Group have been received, a FIN can be sent on
any stream where the entire subgroup has been sent. This might be complex to
implement.</t>
          <t>Processing a RESET_STREAM or RESET_STREAM_AT means that there might be other
objects in the Subgroup beyond the last one received. A relay might immediately
reset the corresponding downstream stream, or it might attempt to recover the
missing Objects in an effort to send all the Objects in the subgroups and the FIN.
It also might send RESET_STREAM_AT with reliable_size set to the last Object it
has, so as to reliably deliver the Objects it has while signaling that other
Objects might exist.</t>
          <t>A subscriber <bcp14>MAY</bcp14> send a QUIC STOP_SENDING frame for a subgroup stream if the Group
or Subgroup is no longer of interest to it. The publisher <bcp14>SHOULD</bcp14> respond with
RESET_STREAM or RESET_STREAM_AT. If RESET_STREAM_AT is sent, note that the receiver
has indicated no interest in the objects, so setting a reliable_size beyond the
stream header is of questionable utility.</t>
          <t>RESET_STREAM and STOP_SENDING on SUBSCRIBE data streams have no impact on other
Subgroups in the Group or the subscription, although applications might cancel all
Subgroups in a Group at once.</t>
          <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in RESET_STREAM or
RESET_STREAM_AT, as defined below:</t>
          <dl>
            <dt>INTERNAL_ERROR (0x0):</dt>
            <dd>
              <t>An implementation specific error.</t>
            </dd>
            <dt>CANCELLED (0x1):</dt>
            <dd>
              <t>The subscriber requested cancellation via UNSUBSCRIBE, FETCH_CANCEL or
STOP_SENDING, or the publisher ended the subscription, in which case
PUBLISH_DONE (<xref target="message-publish-done"/>) will have a more detailed status
code.</t>
            </dd>
            <dt>DELIVERY_TIMEOUT (0x2):</dt>
            <dd>
              <t>The DELIVERY TIMEOUT <xref target="delivery-timeout"/> was exceeded for this stream.</t>
            </dd>
            <dt>SESSION_CLOSED (0x3):</dt>
            <dd>
              <t>The publisher session is being closed.</t>
            </dd>
          </dl>
        </section>
        <section anchor="fetch-header">
          <name>Fetch Header</name>
          <t>When a stream begins with <tt>FETCH_HEADER</tt>, all objects on the stream belong to the
track requested in the Fetch message identified by <tt>Request ID</tt>.</t>
          <figure anchor="fetch-header-format">
            <name>MOQT FETCH_HEADER</name>
            <artwork><![CDATA[
FETCH_HEADER {
  Type (i) = 0x5,
  Request ID (i),
}
]]></artwork>
          </figure>
          <t>Each object sent on a fetch stream after the FETCH_HEADER has the following format:</t>
          <figure anchor="object-fetch-format">
            <name>MOQT Fetch Object Fields</name>
            <artwork><![CDATA[
{
  Group ID (i),
  Subgroup ID (i),
  Object ID (i),
  Publisher Priority (8),
  Extension Headers Length (i),
  [Extension headers (...)],
  Object Payload Length (i),
  [Object Status (i)],
  Object Payload (..),
}
]]></artwork>
          </figure>
          <t>The Object Status field is only sent if the Object Payload Length is zero.</t>
          <t>The Subgroup ID field of an object with a Forwarding Preference of "Datagram"
(see <xref target="object-properties"/>) is set to the Object ID.</t>
        </section>
      </section>
      <section anchor="examples">
        <name>Examples</name>
        <t>Sending a subgroup on one stream:</t>
        <artwork><![CDATA[
Stream = 2

SUBGROUP_HEADER {
  Type = 0x14
  Track Alias = 2
  Group ID = 0
  Subgroup ID = 0
  Publisher Priority = 0
}
{
  Object ID = 0
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID = 1
  Object Payload Length = 4
  Payload = "efgh"
}
]]></artwork>
        <t>Sending a group on one stream, with the first object containing two
Extension Headers.</t>
        <artwork><![CDATA[
Stream = 2

SUBGROUP_HEADER {
  Type = 0x15
  Track Alias = 2
  Group ID = 0
  Subgroup ID = 0
  Publisher Priority = 0
}
{
  Object ID Delta = 0 (Object ID is 0)
  Extension Headers Length = 33
    { Type = 4
      Value = 2186796243
    },
    { Type = 77
      Length = 21
      Value = "traceID:123456"
    }
  Object Payload Length = 4
  Payload = "abcd"
}
{
  Object ID Delta = 0 (Object ID is 1)
  Extension Headers Length = 0
  Object Payload Length = 4
  Payload = "efgh"
}

]]></artwork>
      </section>
    </section>
    <section anchor="extension-headers">
      <name>Extension Headers</name>
      <t>The following Object Extension Headers are defined in MOQT.</t>
      <section anchor="prior-group-id-gap">
        <name>Prior Group ID Gap</name>
        <t>Prior Group ID Gap (Extension Header Type 0x3C) is a variable length integer
containing the number of Groups prior to the current Group that do not and will
never exist. This is equivalent to receiving an <tt>End of Group</tt> status with
Object ID 0 for each skipped Group. For example, if the Original Publisher is
publishing an Object in Group 7 and knows it will never publish any Objects in
Group 8 or Group 9, it can include Prior Group ID Gap = 2 in any number of
Objects in Group 10, as it sees fit.  A Track is considered malformed (see
<xref target="malformed-tracks"/>) if any of the following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Group ID Gap</t>
          </li>
          <li>
            <t>A Group contains more than one Object with different values for Prior Group
 ID Gap</t>
          </li>
          <li>
            <t>An Object has a Prior Group ID Gap larger than the Group ID</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Group ID Gap covering an Object
it previously received</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Group ID within a previously
communicated gap</t>
          </li>
        </ul>
        <t>This extension is optional, as publishers might not know the prior gap gize, or
there may not be a gap. If Prior Group ID Gap is not present, the receiver
cannot infer any information about the existence of prior groups (see
<xref target="group-ids"/>).</t>
        <t>This extension can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This extension <bcp14>MUST NOT</bcp14> be modified or removed.</t>
      </section>
      <section anchor="immutable-extensions">
        <name>Immutable Extensions</name>
        <t>The Immutable Extensions (Extension Header Type 0xB) contains a sequence of
Key-Value-Pairs (see <xref target="moq-key-value-pair"/>) which are also Object Extension
Headers of the Object.</t>
        <artwork><![CDATA[
Immutable Extensions {
  Type (0xB),
  Length (i),
  Key-Value-Pair (..) ...
}
]]></artwork>
        <t>This extension can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
Relays. This extension <bcp14>MUST NOT</bcp14> be modified or removed. Relays <bcp14>MUST</bcp14> cache this
extension if the Object is cached and <bcp14>MUST</bcp14> forward this extension if the
enclosing Object is forwarded. Relays <bcp14>MAY</bcp14> decode and view these extensions.</t>
        <t>A Track is considered malformed (see <xref target="malformed-tracks"/>) if any of the
following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains an Immutable Extensions header that contains another
Immutable Extensions key</t>
          </li>
          <li>
            <t>A Key-Value-Pair cannot be parsed</t>
          </li>
        </ul>
        <t>The following figure shows an example Object structure with a combination of
mutable and immutable extensions and end to end encrypted metadata in the Object
payload.</t>
        <artwork><![CDATA[
                   Object Header                      Object Payload
<------------------------------------------------> <------------------->
+--------+-------+------------+-------+-----------+--------------------+
| Object | Ext 1 | Immutable  | Ext N | [Payload] | Private Extensions |
| Fields |       | Extensions |       | [Length]  | App Payload        |
+--------+-------+------------+-------+-----------+--------------------+
                  xxxxxxxxxxxx                     xxxxxxxxxxxxxxxxxxxx
                                                   yyyyyyyyyyyyyyyyyyyy
x = e2e Authenticated Data
y = e2e Encrypted Data
EXT 1 and EXT N can be modified or removed by Relays
]]></artwork>
      </section>
      <section anchor="prior-object-id-gap">
        <name>Prior Object ID Gap</name>
        <t>Prior Object ID Gap (Extension Header Type 0x3E) is a variable length integer
containing the number of Objects prior to the current Object that do not and
will never exist. This is equivalent to receiving an <tt>Object Does Not Exist</tt>
status for each skipped Object ID. For example, if the Original Publisher is
publishing Object 10 in Group 3 and knows it will never publish Objects 8 or 9
in this Group, it can include Prior Object ID Gap = 2.  A Track is considered
malformed (see <xref target="malformed-tracks"/>) if any of the following conditions are
detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Object ID Gap</t>
          </li>
          <li>
            <t>An Object has a Prior Object ID Gap larger than the Object ID</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Object ID Gap covering an Object
it previously received</t>
          </li>
          <li>
            <t>An endpoint receives an Object with an Object ID within a previously
communicated gap</t>
          </li>
        </ul>
        <t>This extension is optional, as publishers might not know the prior gap gize, or
there may not be a gap. If Prior Object ID Gap is not present, the receiver
cannot infer any information about the existence of prior objects (see
<xref target="model-object"/>).</t>
        <t>This extension can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This extension <bcp14>MUST NOT</bcp14> be modified or removed.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>TODO: Expand this section, including subscriptions.</t>
      <t>TODO: Describe Cache Poisoning attacks</t>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>Live content requires significant bandwidth and resources.  Failure to
set limits will quickly cause resource exhaustion.</t>
        <t>MOQT uses stream limits and flow control to impose resource limits at
the network layer.  Endpoints <bcp14>SHOULD</bcp14> set flow control limits based on the
anticipated bitrate.</t>
        <t>Endpoints <bcp14>MAY</bcp14> impose a MAX STREAM count limit which would restrict the
number of concurrent streams which an application could have in
flight.</t>
        <t>The publisher prioritizes and transmits streams out of order.  Streams
might be starved indefinitely during congestion.  The publisher and
subscriber <bcp14>MUST</bcp14> cancel a stream, preferably the lowest priority, after
reaching a resource limit.</t>
      </section>
      <section anchor="timeouts">
        <name>Timeouts</name>
        <t>Implementations are advised to use timeouts to prevent resource
exhaustion attacks by a peer that does not send expected data within
an expected time.  Each implementation is expected to set its own limits.</t>
      </section>
      <section anchor="relay-security-considerations">
        <name>Relay security considerations</name>
        <section anchor="state-maintenance">
          <name>State maintenance</name>
          <t>A Relay <bcp14>SHOULD</bcp14> have mechanisms to prevent malicious endpoints from flooding it
with PUBLISH_NAMESPACE or SUBSCRIBE_NAMESPACE requests that could bloat data
structures. It could use the advertised MAX_REQUEST_ID to limit the number of
such requests, or could have application-specific policies that can reject
incoming PUBLISH_NAMESPACE or SUBSCRIBE_NAMESPACE requests that cause the state
maintenance for the session to be excessive.</t>
        </section>
        <section anchor="subscribenamespace-with-short-prefixes">
          <name>SUBSCRIBE_NAMESPACE with short prefixes</name>
          <t>A Relay can use authorization rules in order to prevent subscriptions closer
to the root of a large prefix tree. Otherwise, if an entity sends a relay a
SUBSCRIBE_NAMESPACE message with a short prefix, it can cause the relay to send
a large volume of PUBLISH_NAMESPACE messages. As churn continues in the tree of
prefixes, the relay would have to continue to send
PUBLISH_NAMESPACE/PUBLISH_NAMESPACE_DONE messages to the entity that had sent
the SUBSCRIBE_NAMESPACE.</t>
          <t>TODO: Security/Privacy Considerations of MOQT_IMPLEMENTATION parameter</t>
        </section>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TODO: fill out currently missing registries:</t>
      <ul spacing="normal">
        <li>
          <t>MOQT version numbers</t>
        </li>
        <li>
          <t>Setup parameters</t>
        </li>
        <li>
          <t>Non-setup Parameters - List which params can be repeated in the table.</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
        <li>
          <t>MOQ Extension headers - we wish to reserve extension types 0-63 for
standards utilization where space is a premium, 64 - 16383 for
standards utilization where space is less of a concern, and 16384 and
above for first-come-first-served non-standardization usage.
List which headers can be repeated in the table.</t>
        </li>
        <li>
          <t>MOQT Auth Token Type</t>
        </li>
      </ul>
      <t>TODO: register the URI scheme and the ALPN and grease the Extension types</t>
      <section anchor="iana-error-codes">
        <name>Error Codes</name>
        <section anchor="iana-session-termination">
          <name>Session Termination Error Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">NO_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">PROTOCOL_VIOLATION</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_REQUEST_ID</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_TRACK_ALIAS</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">KEY_VALUE_FORMATTING_ERROR</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">TOO_MANY_REQUESTS</td>
                <td align="center">0x7</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_PATH</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_PATH</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">GOAWAY_TIMEOUT</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">CONTROL_MESSAGE_TIMEOUT</td>
                <td align="center">0x11</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">DATA_STREAM_TIMEOUT</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">AUTH_TOKEN_CACHE_OVERFLOW</td>
                <td align="center">0x13</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x14</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">VERSION_NEGOTIATION_FAILED</td>
                <td align="center">0x15</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x16</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x17</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x18</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_AUTHORITY</td>
                <td align="center">0x19</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTHORITY</td>
                <td align="center">0x1A</td>
                <td align="left">
                  <xref target="session-termination"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-subscribe-error">
          <name>SUBSCRIBE_ERROR Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="message-subscribe-error"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-subscribe-error"/></td>
              </tr>
              <tr>
                <td align="left">TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-subscribe-error"/></td>
              </tr>
              <tr>
                <td align="left">NOT_SUPPORTED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-subscribe-error"/></td>
              </tr>
              <tr>
                <td align="left">TRACK_DOES_NOT_EXIST</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-subscribe-error"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_RANGE</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="message-subscribe-error"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="message-subscribe-error"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="message-subscribe-error"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-publish-done">
          <name>PUBLISH_DONE Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">TRACK_ENDED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">SUBSCRIPTION_ENDED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">TOO_FAR_BEHIND</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x7</td>
                <td align="left">
                  <xref target="message-publish-done"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-publish-error">
          <name>PUBLISH_ERROR Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="message-publish-error"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-publish-error"/></td>
              </tr>
              <tr>
                <td align="left">TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-publish-error"/></td>
              </tr>
              <tr>
                <td align="left">NOT_SUPPORTED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-publish-error"/></td>
              </tr>
              <tr>
                <td align="left">UNINTERESTED</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-publish-error"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-fetch-error">
          <name>FETCH_ERROR Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">NOT_SUPPORTED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">TRACK_DOES_NOT_EXIST</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_RANGE</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">NO_OBJECTS</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_JOINING_REQUEST_ID</td>
                <td align="center">0x7</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_STATUS_IN_RANGE</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="message-fetch-error"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-announce-error">
          <name>ANNOUNCE_ERROR Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="message-pub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-pub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-pub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">NOT_SUPPORTED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-pub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">UNINTERESTED</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-pub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="message-pub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="message-pub-ns-error"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-subscribe-namespace-error">
          <name>SUBSCRIBE_NAMESPACE_ERROR Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="message-sub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="message-sub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="message-sub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">NOT_SUPPORTED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="message-sub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">NAMESPACE_PREFIX_UNKNOWN</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="message-sub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">NAMESPACE_PREFIX_OVERLAP</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="message-sub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="message-sub-ns-error"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="message-sub-ns-error"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-reset-stream">
          <name>Data Stream Reset Error Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">CANCELLED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">DELIVERY_TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
              <tr>
                <td align="left">SESSION_CLOSED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="closing-subgroup-streams"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>The original design behind this protocol was inspired by three independent
proposals: WARP <xref target="I-D.draft-lcurley-warp"/> by Luke Curley, RUSH
<xref target="I-D.draft-kpugin-rush"/> by Kirill Pugin, Nitin Garg, Alan Frindell, Jordi
Cenzano and Jake Weissman, and QUICR <xref target="I-D.draft-jennings-moq-quicr-proto"/> by
Cullen Jennings, Suhas Nandakumar and Christian Huitema.  The authors of those
documents merged their proposals to create the first draft of moq-transport.
The IETF MoQ Working Group received an enormous amount of support from many
people. The following people provided substantive contributions to this
document:</t>
      <ul spacing="normal">
        <li>
          <t>Ali Begen</t>
        </li>
        <li>
          <t>Charles Krasic</t>
        </li>
        <li>
          <t>Christian Huitema</t>
        </li>
        <li>
          <t>Cullen Jennings</t>
        </li>
        <li>
          <t>James Hurley</t>
        </li>
        <li>
          <t>Jordi Cenzano</t>
        </li>
        <li>
          <t>Kirill Pugin</t>
        </li>
        <li>
          <t>Luke Curley</t>
        </li>
        <li>
          <t>Martin Duke</t>
        </li>
        <li>
          <t>Mike English</t>
        </li>
        <li>
          <t>Mo Zanaty</t>
        </li>
        <li>
          <t>Will Law</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="QUIC">
          <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="WebTransport">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Facebook</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   WebTransport [OVERVIEW] is a protocol framework that enables
   application clients constrained by the Web security model to
   communicate with a remote application server using a secure
   multiplexed transport.  This document describes a WebTransport
   protocol that is based on HTTP/3 [HTTP3] and provides support for
   unidirectional streams, bidirectional streams, and datagrams, all
   multiplexed within the same HTTP/3 connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-13"/>
        </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="I-D.draft-ietf-quic-reliable-stream-reset">
          <front>
            <title>QUIC Stream Resets with Partial Delivery</title>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <date day="14" month="June" year="2025"/>
            <abstract>
              <t>   QUIC defines a RESET_STREAM frame to abort sending on a stream.  When
   a sender resets a stream, it also stops retransmitting STREAM frames
   for this stream in the event of packet loss.  On the receiving side,
   there is no guarantee that any data sent on that stream is delivered.

   This document defines a new QUIC frame, the RESET_STREAM_AT frame,
   that allows resetting a stream, while guaranteeing delivery of stream
   data up to a certain byte offset.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-reliable-stream-reset-07"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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.ietf-webtrans-overview">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   The WebTransport Protocol Framework enables clients constrained by
   the Web security model to communicate with a remote server using a
   secure multiplexed transport.  It consists of a set of individual
   protocols that are safe to expose to untrusted applications, combined
   with an abstract model that allows them to be used interchangeably.

   This document defines the overall requirements on the protocols used
   in WebTransport, as well as the common features of the protocols,
   support for some of which may be optional.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-10"/>
        </reference>
        <reference anchor="RFC9438">
          <front>
            <title>CUBIC for Fast and Long-Distance Networks</title>
            <author fullname="L. Xu" initials="L." surname="Xu"/>
            <author fullname="S. Ha" initials="S." surname="Ha"/>
            <author fullname="I. Rhee" initials="I." surname="Rhee"/>
            <author fullname="V. Goel" initials="V." surname="Goel"/>
            <author fullname="L. Eggert" initials="L." role="editor" surname="Eggert"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>CUBIC is a standard TCP congestion control algorithm that uses a cubic function instead of a linear congestion window increase function to improve scalability and stability over fast and long-distance networks. CUBIC has been adopted as the default TCP congestion control algorithm by the Linux, Windows, and Apple stacks.</t>
              <t>This document updates the specification of CUBIC to include algorithmic improvements based on these implementations and recent academic work. Based on the extensive deployment experience with CUBIC, this document also moves the specification to the Standards Track and obsoletes RFC 8312. This document also updates RFC 5681, to allow for CUBIC's occasionally more aggressive sending behavior.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9438"/>
          <seriesInfo name="DOI" value="10.17487/RFC9438"/>
        </reference>
        <reference anchor="RFC6582">
          <front>
            <title>The NewReno Modification to TCP's Fast Recovery Algorithm</title>
            <author fullname="T. Henderson" initials="T." surname="Henderson"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="A. Gurtov" initials="A." surname="Gurtov"/>
            <author fullname="Y. Nishida" initials="Y." surname="Nishida"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>RFC 5681 documents the following four intertwined TCP congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. RFC 5681 explicitly allows certain modifications of these algorithms, including modifications that use the TCP Selective Acknowledgment (SACK) option (RFC 2883), and modifications that respond to "partial acknowledgments" (ACKs that cover new data, but not all the data outstanding when loss was detected) in the absence of SACK. This document describes a specific algorithm for responding to partial acknowledgments, referred to as "NewReno". This response to partial acknowledgments was first proposed by Janey Hoe. This document obsoletes RFC 3782. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6582"/>
          <seriesInfo name="DOI" value="10.17487/RFC6582"/>
        </reference>
        <reference anchor="I-D.draft-lcurley-warp">
          <front>
            <title>Warp - Live Media Transport over QUIC</title>
            <author fullname="Luke Curley" initials="L." surname="Curley">
              <organization>Twitch</organization>
            </author>
            <author fullname="Kirill Pugin" initials="K." surname="Pugin">
              <organization>Meta</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   This document defines the core behavior for Warp, a live media
   transport protocol over QUIC.  Media is split into objects based on
   the underlying media encoding and transmitted independently over QUIC
   streams.  QUIC streams are prioritized based on the delivery order,
   allowing less important objects to be starved or dropped during
   congestion.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lcurley-warp-04"/>
        </reference>
        <reference anchor="I-D.draft-kpugin-rush">
          <front>
            <title>RUSH - Reliable (unreliable) streaming protocol</title>
            <author fullname="Kirill Pugin" initials="K." surname="Pugin">
              <organization>Meta</organization>
            </author>
            <author fullname="Nitin Garg" initials="N." surname="Garg">
              <organization>Meta</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Jorge Cenzano Ferret" initials="J. C." surname="Ferret">
              <organization>Meta</organization>
            </author>
            <author fullname="Jake Weissman" initials="J." surname="Weissman">
              <organization>Meta</organization>
            </author>
            <date day="21" month="April" year="2025"/>
            <abstract>
              <t>   RUSH is an application-level protocol for ingesting live video.  This
   document describes the protocol and how it maps onto QUIC.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the mailing list (), which
   is archived at .

   Source for this draft and an issue tracker can be found at
   https://github.com/afrind/draft-rush.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kpugin-rush-03"/>
        </reference>
        <reference anchor="I-D.draft-jennings-moq-quicr-proto">
          <front>
            <title>QuicR - Media Delivery Protocol over QUIC</title>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="11" month="July" year="2022"/>
            <abstract>
              <t>   Recently new use cases have emerged requiring higher scalability of
   media delivery for interactive realtime applications and much lower
   latency for streaming applications and a combination thereof.

   draft-jennings-moq-arch specifies architectural aspects of QuicR, a
   media delivery protocol based on publish/subscribe metaphor and Relay
   based delivery tree, that enables a wide range of realtime
   applications with different resiliency and latency needs.

   This specification defines the protocol aspects of the QuicR media
   delivery architecture.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jennings-moq-quicr-proto-01"/>
        </reference>
      </references>
    </references>
    <?line 3984?>

<section anchor="change-log">
      <name>Change Log</name>
      <t>RFC Editor's Note: Please remove this section prior to publication of a final version of this document.</t>
      <t>Issue and pull request numbers are listed with a leading octothorp.</t>
      <section anchor="since-draft-ietf-moq-transport-13">
        <name>Since draft-ietf-moq-transport-13</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add an AUTHORITY parameter (#1058)</t>
          </li>
          <li>
            <t>Add a free-form SETUP parameter identifying the implementation (#1114)</t>
          </li>
          <li>
            <t>Add a Request ID to SUBSCRIBE_UDPATE (#1106)</t>
          </li>
          <li>
            <t>Indicate which params can appear PUBLISH* messages (#1071)</t>
          </li>
          <li>
            <t>Add TRACK_STATUS to the list of request types affected by GOAWAY (#1105)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Object IDs within Subgroups (#1042)</t>
          </li>
          <li>
            <t>Use a bit in Datagram Type to convey Object ID = 0 (#1055)</t>
          </li>
          <li>
            <t>Corrected missed code point updates to Object Datagram Status (#1082)</t>
          </li>
          <li>
            <t>Merge OBJECT_DATAGRAM and OBJECT_DATAGRAM_STATUS description (#1179)</t>
          </li>
          <li>
            <t>Objects are not schedulable if flow-control blocked (#1054)</t>
          </li>
          <li>
            <t>Clarify DELIVERY_TIMEOUT reordering computation (#1120)</t>
          </li>
          <li>
            <t>Receiving unrequested Objects (#1112)</t>
          </li>
          <li>
            <t>Clarify End of Track (#1111)</t>
          </li>
          <li>
            <t>Malformed tracks apply to FETCH (#1083)</t>
          </li>
          <li>
            <t>Remove early FIN from the definition of malformed tracks (#1096)</t>
          </li>
          <li>
            <t>Prior Object ID Gap Extension header (#939)</t>
          </li>
          <li>
            <t>Add Extension containing immutable extensions (#1025)</t>
          </li>
        </ul>
        <t><strong>Relay Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain FETCH routing for relays (#1165)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> for multi-publisher relay handling (#1115)</t>
          </li>
          <li>
            <t>Filters don't (usually) determine the end of subscription (#1113)</t>
          </li>
          <li>
            <t>Allow self-subscriptions (#1110)</t>
          </li>
          <li>
            <t>Explain Namespace Prefix Matching in more detail (#1116)</t>
          </li>
        </ul>
        <t><strong>Explanatory</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain Modularity of MOQT (#1107)</t>
          </li>
          <li>
            <t>Explain how to resume publishing after losing state (#1087)</t>
          </li>
        </ul>
        <t><strong>Major Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename ANNOUNCE to PUBLISH_NAMESPACE (#1104)</t>
          </li>
          <li>
            <t>Rename SUBSCRIBE_DONE to PUBLISH_DONE (#1108)</t>
          </li>
          <li>
            <t>Major FETCH Reorganization (#1173)</t>
          </li>
          <li>
            <t>Reformat Error Codes (#1091)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-12">
        <name>Since draft-ietf-moq-transport-12</name>
        <ul spacing="normal">
          <li>
            <t>TRACK_STATUS_REQUEST and TRACK_STATUS have changed to directly mirror
SUBSCRIBE/OK/ERROR (#1015)</t>
          </li>
          <li>
            <t>SUBSCRIBE_ANNOUNCES was renamed back to SUBSCRIBE_NAMESPACE (#1049)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-11">
        <name>Since draft-ietf-moq-transport-11</name>
        <ul spacing="normal">
          <li>
            <t>Move Track Alias from SUBSCRIBE to SUBSCRIBE_OK (#977)</t>
          </li>
          <li>
            <t>Expand cases FETCH_OK returns Invalid Range (#946) and clarify fields (#936)</t>
          </li>
          <li>
            <t>Add an error code to FETCH_ERROR when an Object status is unknown (#825)</t>
          </li>
          <li>
            <t>Rename Latest Object to Largest Object (#1024) and clarify what to
do when it's incomplete (#937)</t>
          </li>
          <li>
            <t>Explain Malformed Tracks and what to do with them (#938)</t>
          </li>
          <li>
            <t>Allow End of Group to be indicated in a normal Object (#1011)</t>
          </li>
          <li>
            <t>Relays <bcp14>MUST</bcp14> have an upstream subscription to send SUBSCRIBE_OK (#1017)</t>
          </li>
          <li>
            <t>Allow AUTHORIZATION TOKEN in CLIENT_SETUP, SERVER_SETUP and
other fixes (#1013)</t>
          </li>
          <li>
            <t>Add PUBLISH for publisher initiated subscriptions (#995) and
fix the PUBLISH codepoints (#1048, #1051)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-10">
        <name>Since draft-ietf-moq-transport-10</name>
        <ul spacing="normal">
          <li>
            <t>Added Common Structure definitions - Location, Key-Value-Pair and Reason
Phrase</t>
          </li>
          <li>
            <t>Limit lengths of all variable length fields, including Track Namespace and Name</t>
          </li>
          <li>
            <t>Control Message length is now 16 bits instead of variable length</t>
          </li>
          <li>
            <t>Subscribe ID became Request ID, and was added to most control messages. Request ID
is used to correlate OK/ERROR responses for ANNOUNCE, SUBSCRIBE_NAMESPACE,
and TRACK_STATUS.  Like Subscribe ID, Request IDs are flow controlled.</t>
          </li>
          <li>
            <t>Explain rules for caching in more detail</t>
          </li>
          <li>
            <t>Changed the SETUP parameter format for even number parameters to match the
Object Header Extension format</t>
          </li>
          <li>
            <t>Rotated SETUP code points</t>
          </li>
          <li>
            <t>Added Parameters to TRACK_STATUS and TRACK_STATUS_REQUEST</t>
          </li>
          <li>
            <t>Clarified how subscribe filters work</t>
          </li>
          <li>
            <t>Added Next Group Filter to SUBSCRIBE</t>
          </li>
          <li>
            <t>Added Forward flag to SUBSCRIBE</t>
          </li>
          <li>
            <t>Renamed FETCH_OK field to End and clarified how to set it</t>
          </li>
          <li>
            <t>Added Absolute Joining Fetch</t>
          </li>
          <li>
            <t>Clarified No Error vs Invalid Range FETCH_ERROR cases</t>
          </li>
          <li>
            <t>Use bits in SUBGROUP_HEADER and DATAGRAM* types to compress subgroup ID and
extensions</t>
          </li>
          <li>
            <t>Coalesced END_OF_GROUP and END_OF_TRACK_AND_GROUP status</t>
          </li>
          <li>
            <t>Objects that Do Not Exist cannot have extensions when sent on the wire</t>
          </li>
          <li>
            <t>Specified error codes for resetting data streams</t>
          </li>
          <li>
            <t>Defined an Object Header Extension for communicating a known Group ID gap</t>
          </li>
          <li>
            <t>Replaced AUTHORIZATION_INFO with AUTHORIZATION_TOKEN, which has more structure,
compression, and additional Auth related error codes (#760)</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
h9s735/YzraPfPtnq9p/3//biZ3B+/4JlAPfPj7eG7zlvYT2z1e1P97fP/lh
e/A3WcBRuH8v1l3/wfbxt4n9f7mqva9j3ugB2r9a1f7t/vaP2z6grkE/myva
7+wPjg/t8dtH52j7bV935FCilp7f9vG2RElGk3C4Tsva+0rqJzvbO9/2sYD8
m3f7P3L7J2vTj+qJiMhhJy1rb0fDeMFB/+3+8R5egJM323sQmOnQjtY7P1UT
Xq3/+cr7+/1g/8dBc/bc/sWK9omK9MH+v1yTfpmLHP8top9Xt1p/0IPDIGpv
H4m4dG9Dvu+K0OLTsYTnr2T3+KNWlr+S2wvHT3Nsxeyb9XNp6ssYtuL1y5un
LnrA6pc3H+wfnxy9PzjYPzzuh5z6yVqjI4/e3e8fnUBP/b/uWR1eM/rlzd1j
sT142w9Gf7ZO8/RdU2xuefP0VVFcallzpNQgIjog0yAmuoVGVxNoC3WuJs0W
ukwQZRi83UaRCXJMNCRq6A92PSklCDHRkG/8AXJbap8gwUTDt/vwvMOLF1DP
05UN+ezjO/Ns9RqtfPBm+/Dkm/63e4Nd1/D5yoaeWHGbpOGLFQ0DOkvwQ2nQ
yg3XYIMJMluD+yVobAl9LWF5S4hrCadbQllLGNwSsgpniCuz8p+bYQtNRRyB
ItsT50TR3averPVO7C70lBV6RnSKevZr6Rlbq9qn3622k222Tz9crv2TleMn
Xy7X/umq9umny7V/tnr+J1Tt5CiL/yX4Sfv431kOCDxQ6VsJtpI6P5IzqbDU
yd7Ar0TpKe3tE+xMz//V+u3TcvLmivar5NzHS9vjXd0eDPbfD3aSYia4FBeT
4V1ImZ8jYt5KvrQsqTupP024TLRdW7JMtF1brEzOOeC97Zcy0XZtiTDRdm1x
sNG2zTC/XH+ZWHpCm+A6r8LnkNlnUlqa2Op1iS1Nb4nmrS9CWplZj+TSVJdq
7g7t4LD/Zu+vJ8wgW5SZlc3BbPFu+6BFmVmPbrMk6SaatzLDtDKToF6I1ZLy
G4eYs56wuWIyOwN2pcl1LZ07Tapr6dtpMlXkyTGtHlKPfdhi3XJZtk3SXNG0
kauqyHJF0ygHNSDJpU3NfUTaxdq71aw2v7wm70ox+vreeT6uC8kDrCQIxZ5W
eQGW/stSIkAcSMQ1ppDXgEPF0Svg8QKn/RRSgCdzwNKbVrXt+HX24/bhgZ3e
//HYbePhYjYubrrX+WxqZ2c7eLf4qch28NNOdvj+6FsTNPhpurCT6s4W9SX9
/vtyBj6lA/i4kw3KOQSg5bOLTrY9zifZmxnMZTzuZN9Vs1FpdorJv/JJhZ6F
73I71I9FWddXOftLIN3/MJziP4sJhKzUXQg1h/iRWRdXj8ObncV4XEyy7/hH
nexoARFdA3Ci/LS4ygltd+dyBhBJdj7fLsp5cZVz3AL5TzkOvaoLM6qGC/DV
19lVMbugDOoSwil4D9FTiBBFKvsO5wl9wAwdImKPwu/7x2+wdsyP1ewncLNR
cJ7HZQSXajW7Ak98foURI5Wrkkseebs5N2ZaVNNxQUAFPk6OPhXMRSyhC/6j
uQTvSIFn9k2WtVvga2O6kNSXfVNcFBP73zuX+Qzcx9/P8roc4gfRnsFn4W7b
T76DB8/+AugF/oRDzviQ7d+aOuyfirjsXz8gHmq2az+Ev8qfIND0AjQw+LPK
/svypzn88Efo411+befc7WZn+fAnvEWX+eSiyN5VF8YcvtnJ+qPSXqgHGG9Z
vM4OsM4Ih1sFcVM+/BMVvqEvAASAvPbCidsTycK2k00DjKS6XpCTbGr3QiIB
xEGKkSfjslag1XYWGE5RDecVENuU4jsI6kgBKAa00916YsyjR+RsRQLm+KQD
e6eKR4/AQbs9QurxFlnnlM0e3t/afPZyQ36EKJqYhGy51vH7A/VLQf+TUNko
WMV2tLX11Hekcsvt7ilQxN0DAEWEn28+h5/vMapF0wGcT6eFvZVs/Xjkvecw
6RdbMhapcqTIOFQS8IDaM5FN56LJWGyJuB85SmgezzZgC/ENxF2zVGQP5w2l
YsOefsvwhLSdlJxJheU0FBdHU3owCpjn08cwz/cY8XVWYtKeK3CKQcoUUPCh
uFExj5j4CSfzDBrvAHQMzhsc8AAAAQNTmOdiOiIoH5c643qXLHTbz0ucxA/A
p+Iim1TaLlluGF4TB5QFG/Xi1YYr/0cEjHFOkHayGGN0dXmOQXJdV+QIIFch
sBcWg9SxM85ngCHZeE9VESZA+lkounq8CS0PXdT0YuLBEWQ2SH+P9Qicm0kR
x/g1kswPLtqYgosxBAjDSdB4Q/v1hAZEfkCgXgBp5OCrwnLiV3GP0MUrJO5U
MGscp2B//urJK6Fm/60KTU8mg8Aoj4l0KdQnpNL+z9Oxbc6rsgQ5Z2wFrlWO
W/IcCUzShbKrxXhedn2IHkW/OHBO3ERs8aYcY+zGqJo8mGcPFzWWQdzIQgj9
gk4gAFzDPnB7t+Fpsox2fN4Ng47wJ3jksoaB6EoIOlD+bA9xTgF/5URjjFDT
57gn2Na+CtXsJtyQHyqgVoyV41AZ4gIv9IiXELuMQSMQVKTTbxHFglOnCOsT
KeYFDvpD/k+7jfS8AKY3PTw1TeCwAJ3P2R2g/2aoEk7l6Yb/uWed6GZQjQiI
BX7/kggbxqbjPrSX6SKfSGQIXl6maUaY0PI90qu9HGs9N49hKZrniu0JOUnA
jDFgaohbMCJsQeBjGEgEowMggCzuq/3vv2LUHDsZIjK/ctmyIwZphI0Z4ese
Pi7BNm4+tZdqnRVtYRATXPWglD1cdg9tFIyz/z1c2hdCMbBwAMmp2f5rv57Z
93hmaXlv8iEfl6PsEAUQ2+jpcyqpN2QuxUUzgQc83/BvtQIjEs7E+g6iq/so
fk4TAaxfrpT38P7Lx88UAb2DB8LnrFT2g9mF+gT5yNNwVtcIQFVBzdmKRkTE
e4x/tM8+Ev2rJ8GN8Xz1mPkqZNVTP9gL41BcYdOXngMEhTYo6tEjXWF2Aki9
HiAfCWSLFuhzJLm0mQfrDLiOgKNFR2g7euEnIuYLCnshPdqOv/Nurz84PkF5
yCoN/UP7bNFfHK1FOI8YNEh9PpGD5JuKvNVzVXw6cHUx33v16tkGd4qBlRCI
z10AKXDwLdL2y04Gb+rWeiS+yWJgAfLh1RVgYLlcRP+YYSyegxiPch/hOA8R
yxJwJC5nAAr1KHuHAbeUVEVRbVbUjZOtiMZ1DgJdNM/WoXP4C6UdEh0kxG/s
wGogn2TrOUhRqMjO7esJI0ajAeMQIxs8uWfFEG6Bl0dJfQRG4upGXFX1PC5N
WPdUG6iVTGjaJK/N4GW0t8BxLQKAqzn3X/hVJ8WbOlzyWLPKHgTt/VQEM++o
8Una0vkHY8gL8bePAnrPGXq/+TLCxgojhvjSSLjnRwGTzQChkqOnffAm7hI8
uox4GyaOeqGFOoK7Wc2RxGkkL7HWjhAPgs6DhyPeHnlinHQHCTLwRDtzKoSr
YleQxeGGGADuLDEWklgCNu5+xqBGdn/zi/gXh/zYOM5O2Ej2V/3JSPFMmZEL
1He9b5/V1XhhieW7iqQ5KiWslzKo+D3+EL8YmvPjE8PKBF+CBpI1TEjE+Ees
9iDFXkHylIezhZtBjMZLlHj5cktHQzul/mD3ZP/NCXZO+Zv0AYfl2T/oK8Z0
82oBBjPvVj6VUbKmkUMr+fWa4bQdTPK1FQ/g9pLt0M7BP4K1R49HMVYDDaJG
Rugz/llMEabKa6NcEXovHToEZLrBgdsbBTsQPAcne4M3+/SGhZ/jM9GRaNuc
EwxdBkMH0e5o85GrIjj+iFIW7ZuGIbfETML1Prz/4rmVgf8fEt92rP2fAgA=

-->

</rfc>
