<?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.6.17 (Ruby 3.0.2) -->
<?rfc docindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-qlog-main-schema-13" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title abbrev="qlog">qlog: Structured Logging for Network Protocols</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-13"/>
    <author initials="R." surname="Marx" fullname="Robin Marx" role="editor">
      <organization>Akamai</organization>
      <address>
        <email>rmarx@akamai.com</email>
      </address>
    </author>
    <author initials="L." surname="Niccolini" fullname="Luca Niccolini" role="editor">
      <organization>Meta</organization>
      <address>
        <email>lniccolini@meta.com</email>
      </address>
    </author>
    <author initials="M." surname="Seemann" fullname="Marten Seemann" role="editor">
      <organization/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>qlog provides extensible structured logging for network protocols, allowing for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. All schemas are defined
independent of serialization format, allowing logs to be represented in various
ways such as JSON, CSV, or protobuf.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Endpoint logging is a useful strategy for capturing and understanding how
applications using network protocols are behaving, particularly where protocols
have an encrypted wire image that restricts observers' ability to see what is
happening.</t>
      <t>Many applications implement logging using a custom, non-standard logging format.
This has an effect on the tools and methods that are used to
analyze the logs, for example to perform root cause analysis of an
interoperability failure between distinct implementations. A lack of a common
format impedes the development of common tooling that can be used by all parties
that have access to logs.</t>
      <t>qlog is an extensible structured logging for network protocols that allows for
easy sharing of data that benefits common debug and analysis methods and
tooling. This document describes key concepts of qlog: formats, files, traces,
events, and extension points. This definition includes the high-level log file
schemas, and generic event schemas. Requirements and guidelines for creating
protocol-specific event schemas are also presented. Accompanying documents
define event schemas for QUIC (<xref target="QLOG-QUIC"/>) and HTTP/3 (<xref target="QLOG-H3"/>).</t>
      <t>The goal of qlog is to provide amenities and default characteristics that each
logging file should contain (or should be able to contain), such that generic
and reusable toolsets can be created that can deal with logs from a variety of
different protocols and use cases.</t>
      <t>As such, qlog provides versioning, metadata inclusion, log aggregation, event
grouping and log file size reduction techniques.</t>
      <t>All qlog schemas can be serialized in many ways (e.g., JSON, CBOR, protobuf,
etc). This document describes only how to employ <xref target="JSON"/>, its subset
<xref target="I-JSON"/>, and its streamable derivative
<xref target="JSON-Text-Sequences"/>.</t>
      <section anchor="conventions-and-terminology">
        <name>Conventions and Terminology</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>
        <t>Serialization examples in this document use JSON (<xref target="JSON"/>) unless
otherwise indicated.</t>
        <t>Events are defined with an importance level as described in <xref target="importance"/>}.</t>
      </section>
      <section anchor="use-of-cddl">
        <name>Use of CDDL</name>
        <t>To define events and data structures, all qlog documents use the Concise Data
Definition Language <xref target="CDDL"/>. This document uses the basic syntax, the
specific <tt>text</tt>, <tt>uint</tt>, <tt>float32</tt>, <tt>float64</tt>, <tt>bool</tt>, and <tt>any</tt> types, as well
as the <tt>.default</tt>, <tt>.size</tt>, and <tt>.regexp</tt> control operators, the <tt>~</tt> unwrapping
operator, and the <tt>$</tt> and <tt>$$</tt> extension points syntax from <xref target="CDDL"/>.</t>
        <t>Additionally, this document defines the following custom types for
clarity:</t>
        <figure anchor="cddl-custom-types-def">
          <name>Additional CDDL type definitions</name>
          <sourcecode type="cddl"><![CDATA[
; CDDL's uint is defined as being 64-bit in size
; but for many protocol fields it is better to be restrictive
; and explicit
uint8 = uint .size 1
uint16 = uint .size 2
uint32 = uint .size 4
uint64 = uint .size 8

; an even-length lowercase string of hexadecimally encoded bytes
; examples: 82dc, 027339, 4cdbfd9bf0
; this is needed because the default CDDL binary string (bytes/bstr)
; is only CBOR and not JSON compatible
hexstring = text .regexp "([0-9a-f]{2})*"
]]></sourcecode>
        </figure>
        <t>All timestamps and time-related values (e.g., offsets) in qlog are
logged as <tt>float64</tt> in the millisecond resolution.</t>
        <t>Other qlog documents can define their own CDDL-compatible (struct) types
(e.g., separately for each Packet type that a protocol supports).</t>
        <t>The ordering of member fields in qlog CDDL type definitions is not significant.
The ordering of member fields in the serialization formats defined in this
document, JSON (<xref target="format-json"/>) and JSON Text Sequences (<xref target="format-json-seq"/>),
is not significant and qlog tools <bcp14>MUST NOT</bcp14> assume so. Other qlog serialization
formats <bcp14>MAY</bcp14> define field order significance, if they do they <bcp14>MUST</bcp14> define
requirements for qlog tools supporting those formats.</t>
        <ul empty="true">
          <li>
            <t>Note to RFC editor: Please remove the following text in this section before
publication.</t>
          </li>
        </ul>
        <t>The main general CDDL syntax conventions in this document a reader
should be aware of for easy reading comprehension are:</t>
        <ul spacing="normal">
          <li>
            <tt>? obj</tt> : this object is optional</li>
          <li>
            <tt>TypeName1 / TypeName2</tt> : a union of these two types (object can be either type 1 OR
type 2)</li>
          <li>
            <tt>obj: TypeName</tt> : this object has this concrete type</li>
          <li>
            <tt>obj: [* TypeName]</tt> : this object is an array of this type with
minimum size of 0 elements</li>
          <li>
            <tt>obj: [+ TypeName]</tt> : this object is an array of this type with
minimum size of 1 element</li>
          <li>
            <tt>TypeName = ...</tt> : defines a new type</li>
          <li>
            <tt>EnumName = "entry1" / "entry2" / entry3 / ...</tt>: defines an enum</li>
          <li>
            <tt>StructName = { ... }</tt> : defines a new struct type</li>
          <li>
            <tt>;</tt> : single-line comment</li>
          <li>
            <tt>* text =&gt; any</tt> : special syntax to indicate 0 or more fields that
have a string key that maps to any value. Used to indicate a generic
JSON object.</li>
        </ul>
        <t>All timestamps and time-related values (e.g., offsets) in qlog are
logged as <tt>float64</tt> in the millisecond resolution.</t>
        <t>Other qlog documents can define their own CDDL-compatible (struct) types
(e.g., separately for each Packet type that a protocol supports).</t>
      </section>
    </section>
    <section anchor="design-overview">
      <name>Design Overview</name>
      <t>The main tenets for the qlog design are:</t>
      <ul spacing="normal">
        <li>Streamable, event-based logging</li>
        <li>A flexible format that can reduce log producer overhead, at the cost of
increased complexity for consumers (e.g. tools)</li>
        <li>Extensible and pragmatic</li>
        <li>Aggregation and transformation friendly (e.g., the top-level element
for the non-streaming format is a container for individual traces,
group_ids can be used to tag events to a particular context)</li>
        <li>Metadata is stored together with event data</li>
      </ul>
      <t>This is achieved by a logical logging hierarchy of:</t>
      <ul spacing="normal">
        <li>
          <t>Log file
          </t>
          <ul spacing="normal">
            <li>
              <t>Trace(s)
              </t>
              <ul spacing="normal">
                <li>Event(s)</li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
      <t>An abstract LogFile class is declared (<xref target="abstract-logfile"/>), from which all
concrete log file formats derive using log file schemas. This document defines
the QLogFile (<xref target="qlog-file-schema"/>) and QLogFileSeq (<xref target="qlog-file-seq-schema"/>)
log file schemas.</t>
      <t>A trace is conceptually fluid but the conventional use case is to group events
related to a single data flow, such as a single logical QUIC connection, at a
single vantage point (<xref target="vantage-point"/>). Concrete trace definitions relate to
the log file schemas they are contained in; see (<xref target="traces"/>, <xref target="trace"/>, and
<xref target="traceseq"/>).</t>
      <t>Events are logged at a time instant and convey specific details of the logging
use case. For example, a network packet being sent or received. This document
declares an abstract Event class (<xref target="abstract-event"/>) containing common fields,
which all concrete events derive from. Concrete events are defined by event
schemas that declare or extend a namespace, which contains one or more related
event types or their extensions. For example, this document defines two event
schemas for two generic event namespaces <tt>loglevel</tt> and <tt>simulation</tt> (see
<xref target="generic-event-schema"/>).</t>
    </section>
    <section anchor="abstract-logfile">
      <name>Abstract LogFile Class</name>
      <t>A Log file is intended to contain a collection of events that are in some way
related. An abstract LogFile class containing fields common to all log files is
defined in <xref target="abstract-logfile-def"/>. Each concrete log file schema derives from
this using the CDDL unwrap operator (~) and can extend it by defining semantics
and any custom fields.</t>
      <figure anchor="abstract-logfile-def">
        <name>LogFile definition</name>
        <sourcecode type="cddl"><![CDATA[
LogFile = {
    file_schema: text
    serialization_format: text
    ? title: text
    ? description: text
}
]]></sourcecode>
      </figure>
      <t>The required "file_schema" field identifies the concrete log file schema. It
<bcp14>MUST</bcp14> have a value that is an absolute URI; see <xref target="schema-uri"/> for rules and
guidance.</t>
      <t>The required "serialization_format" field indicates the serialization
format using a media type <xref target="RFC2046"/>. It is case-insensitive.</t>
      <t>In order to make it easier to parse and identify qlog files and their
serialization format, the "file_schema" and "serialization_format" fields and
their values <bcp14>SHOULD</bcp14> be in the first 256 characters/bytes of the resulting log
file.</t>
      <t>The optional "title" and "description" fields provide additional free-text
information about the file.</t>
      <section anchor="schema-uri">
        <name>Concrete Log File Schema URIs</name>
        <t>Concrete log file schemas <bcp14>MUST</bcp14> identify themselves using a URI <xref target="RFC3986"/>.</t>
        <t>Log file schemas defined by RFCs <bcp14>MUST</bcp14> register a URI in the "qlog log file
schema URIs" registry and <bcp14>SHOULD</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:file:&lt;schema-identifier&gt;</tt>, where <tt>&lt;schema-identifier&gt;</tt> is
a globally-unique text name using only characters in the URI unreserved range;
see <xref section="2.3" sectionFormat="of" target="RFC3986"/>. This document registers
<tt>urn:ietf:params:qlog:file:contained</tt> (<xref target="qlog-file-schema"/>) and
<tt>urn:ietf:params:qlog:file:sequential</tt> (<xref target="qlog-file-seq-schema"/>).</t>
        <t>Private or non-standard log file schemas <bcp14>MAY</bcp14> register a URI in the "qlog log
file schema URIs" registry but <bcp14>MUST NOT</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:file:&lt;schema-identifier&gt;</tt>. URIs that contain a domain name
<bcp14>SHOULD</bcp14> also contain a month-date in the form mmyyyy. For example,
"https://example.org/072024/globallyuniquelogfileschema". The definition of the
log file schema and assignment of the URI <bcp14>MUST</bcp14> have been authorized by the owner
of the domain name on or very close to that date. This avoids problems when
domain names change ownership. The URI does not need to be dereferencable,
allowing for confidential use or to cover the case where the log file schema
continues to be used after the organization that defined them ceases to exist.</t>
        <t>The "qlog log file schema URIs" registry operates under the Expert Review
policy, per <xref section="4.5" sectionFormat="of" target="RFC8126"/>.  When reviewing requests, the expert
<bcp14>MUST</bcp14> check that the URI is appropriate to the concrete log file schema and
satisfies the requirements in this section. A request to register a private or
non-standard log file schema URI using a URN of the form
<tt>urn:ietf:params:qlog:file:&lt;schema-identifier&gt;</tt> <bcp14>MUST</bcp14> be rejected.</t>
        <t>Registration requests should use the template defined in <xref target="iana"/>.</t>
      </section>
    </section>
    <section anchor="qlog-file-schema">
      <name>QlogFile schema</name>
      <t>A qlog file using the QlogFile schema can contain several individual traces and
logs from multiple vantage points that are in some way related. The top-level
element in this schema defines only a small set of "header" fields and an array
of component traces. This is defined in <xref target="qlog-file-def"/> as:</t>
      <figure anchor="qlog-file-def">
        <name>QlogFile definition</name>
        <sourcecode type="cddl"><![CDATA[
QlogFile = {
    ~LogFile
    ? traces: [+ Trace /
                TraceError]
}
]]></sourcecode>
      </figure>
      <t>The QlogFile schema URI is <tt>urn:ietf:params:qlog:file:contained</tt>.</t>
      <t>QlogFile extends LogFile using the CDDL unwrap operator (~), which copies the
fields presented in <xref target="abstract-logfile"/>. Additionally, the optional "traces"
field contains an array of qlog traces (<xref target="trace"/>), each of which contain
metadata and an array of qlog events (<xref target="abstract-event"/>).</t>
      <t>The default serialization format for QlogFile is JSON; see <xref target="format-json"/> for
guidance on populating the "serialization_format" field and other
considerations. Where a qlog file is serialized to a JSON format, one of the
downsides is that it is inherently a non-streamable format. Put differently, it
is not possible to simply append new qlog events to a log file without "closing"
this file at the end by appending "]}]}". Without these closing tags, most JSON
parsers will be unable to parse the file entirely. The alternative QlogFileSeq
(<xref target="qlog-file-seq-schema"/>) is better suited to streaming use cases.</t>
      <t>JSON serialization example:</t>
      <figure anchor="qlog-file-ex">
        <name>QlogFile example</name>
        <artwork><![CDATA[
{
    "file_schema": "urn:ietf:params:qlog:file:contained",
    "serialization_format": "application/qlog+json",
    "title": "Name of this particular qlog file (short)",
    "description": "Description for this group of traces (long)",
    "traces": [...]
}
]]></artwork>
      </figure>
      <section anchor="traces">
        <name>Traces</name>
        <t>It can be advantageous to group several related qlog traces together in a single
file. For example, it is possible to simultaneously perform logging on the
client, on the server, and on a single point on their common network path. For
analysis, it is useful to aggregate these three individual traces together into
a single file, so it can be uniquely stored, transferred, and annotated.</t>
        <t>The QlogFile "traces" field is an array that contains a list of individual qlog
traces. When capturing a qlog at a vantage point, it is expected that the traces
field contains a single entry. Files can be aggregated, for example as part of a
post-processing operation, by copying the traces in component to files into the
combined "traces" array of a new, aggregated qlog file.</t>
      </section>
      <section anchor="trace">
        <name>Trace</name>
        <t>The exact conceptual definition of a Trace can be fluid. For example, a trace
could contain all events for a single connection, for a single endpoint, for a
single measurement interval, for a single protocol, etc. In the normal use case
however, a trace is a log of a single data flow collected at a single location
or vantage point. For example, for QUIC, a single trace only contains events for
a single logical QUIC connection for either the client or the server.</t>
        <t>A Trace contains some metadata in addition to qlog events, defined in
<xref target="trace-def"/> as:</t>
        <figure anchor="trace-def">
          <name>Trace definition</name>
          <sourcecode type="cddl"><![CDATA[
Trace = {
    ? title: text
    ? description: text
    ? common_fields: CommonFields
    ? vantage_point: VantagePoint
    event_schemas: [+text]
    events: [* Event]
}
]]></sourcecode>
        </figure>
        <t>The optional "title" and "description" fields provide additional free-text
information about the trace.</t>
        <t>The optional "common_fields" field is described in <xref target="common-fields"/>.</t>
        <t>The optional "vantage_point" field is described in <xref target="vantage-point"/>.</t>
        <t>The required "event_schemas" field contains event schema URIs that identify
concrete event namespaces and their associated types recorded in the "events"
field. Requirements and guidelines are defined in <xref target="event-types-and-schema"/>.</t>
        <t>The semantics and context of the trace can mainly be deduced from the entries in
the "common_fields" list and "vantage_point" field.</t>
        <t>JSON serialization example:</t>
        <figure anchor="trace-ex">
          <name>Trace example</name>
          <artwork><![CDATA[
{
    "title": "Name of this particular trace (short)",
    "description": "Description for this trace (long)",
    "common_fields": {
        "ODCID": "abcde1234",
        "time_format": "relative_to_epoch",
        "reference_time": {
            "clock_type": "system",
            "epoch": "1970-01-01T00:00:00.000Z"
        },
    },
    "vantage_point": {
        "name": "backend-67",
        "type": "server"
    },
    "event_schemas": ["urn:ietf:params:qlog:events:quic"],
    "events": [...]
}
]]></artwork>
        </figure>
      </section>
      <section anchor="traceerror">
        <name>TraceError</name>
        <t>A TraceError indicates that an attempt to find/convert a file for inclusion in
the aggregated qlog was made, but there was an error during the process. Rather
than silently dropping the erroneous file, it can be explicitly included in the
qlog file as an entry in the "traces" array, defined in <xref target="trace-error-def"/> as:</t>
        <figure anchor="trace-error-def">
          <name>TraceError definition</name>
          <sourcecode type="cddl"><![CDATA[
TraceError = {
    error_description: text

    ; the original URI used for attempted find of the file
    ? uri: text
    ? vantage_point: VantagePoint
}
]]></sourcecode>
        </figure>
        <t>JSON serialization example:</t>
        <figure anchor="trace-error-ex">
          <name>TraceError example</name>
          <artwork><![CDATA[
{
    "error_description": "File could not be found",
    "uri": "/srv/traces/today/latest.qlog",
    "vantage_point": { type: "server" }
}
]]></artwork>
        </figure>
        <t>Note that another way to combine events of different traces in a single qlog file
is through the use of the "group_id" field, discussed in <xref target="group-ids"/>.</t>
      </section>
    </section>
    <section anchor="qlog-file-seq-schema">
      <name>QlogFileSeq schema</name>
      <t>A qlog file using the QlogFileSeq schema can be serialized to a streamable JSON
format called JSON Text Sequences (JSON-SEQ) (<xref target="RFC7464"/>). The top-level
element in this schema defines only a small set of "header" fields and an array
of component traces. This is defined in <xref target="qlog-file-def"/> as:</t>
      <figure anchor="qlog-file-seq-def">
        <name>QlogFileSeq definition</name>
        <sourcecode type="cddl"><![CDATA[
QlogFileSeq = {
    ~LogFile
    trace: TraceSeq
}
]]></sourcecode>
      </figure>
      <t>The QlogFileSeq schema URI is <tt>urn:ietf:params:qlog:file:sequential</tt>.</t>
      <t>QlogFile extends LogFile using the CDDL unwrap operator (~), which copies the
fields presented in <xref target="abstract-logfile"/>. Additionally, the required "trace"
field contains a singular trace (<xref target="trace"/>). All qlog events in the file are
related to this trace; see <xref target="traceseq"/>.</t>
      <t>See <xref target="format-json-seq"/> for guidance on populating the "serialization_format"
field and other serialization considerations.</t>
      <t>JSON-SEQ serialization example:</t>
      <figure anchor="json-seq-ex">
        <name>Top-level element</name>
        <artwork><![CDATA[
// list of qlog events, serialized in accordance with RFC 7464,
// starting with a Record Separator character and ending with a
// newline.
// For display purposes, Record Separators are rendered as <RS>

<RS>{
    "file_schema": "urn:ietf:params:qlog:file:sequential",
    "serialization_format": "application/qlog+json-seq",
    "title": "Name of JSON Text Sequence qlog file (short)",
    "description": "Description for this trace file (long)",
    "trace": {
      "common_fields": {
        "group_id":"127ecc830d98f9d54a42c4f0842aa87e181a",
        "time_format": "relative_to_epoch",
        "reference_time": {
            "clock_type": "system",
            "epoch": "1970-01-01T00:00:00.000Z"
        },
      },
      "vantage_point": {
        "name":"backend-67",
        "type":"server"
      },
      "event_schemas": ["urn:ietf:params:qlog:events:quic",
                        "urn:ietf:params:qlog:events:http3"]
    }
}
<RS>{"time": 2, "name": "quic:parameters_set", "data": { ... } }
<RS>{"time": 7, "name": "quic:packet_sent", "data": { ... } }
...
]]></artwork>
      </figure>
      <section anchor="traceseq">
        <name>TraceSeq</name>
        <t>TraceSeq is used with QlogFileSeq. It is conceptually similar to a Trace, with
the exception that qlog events are not contained within it, but rather appended
after it in a QlogFileSeq.</t>
        <figure anchor="trace-seq-def">
          <name>TraceSeq definition</name>
          <sourcecode type="cddl"><![CDATA[
TraceSeq = {
    ? title: text
    ? description: text
    ? common_fields: CommonFields
    ? vantage_point: VantagePoint
    event_schemas: [+text]
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="vantage-point">
      <name>VantagePoint</name>
      <t>A VantagePoint describes the vantage point from which a trace originates,
defined in <xref target="vantage-point-def"/> as:</t>
      <figure anchor="vantage-point-def">
        <name>VantagePoint definition</name>
        <sourcecode type="cddl"><![CDATA[
VantagePoint = {
    ? name: text
    type: VantagePointType
    ? flow: VantagePointType
}

; client = endpoint which initiates the connection
; server = endpoint which accepts the connection
; network = observer in between client and server
VantagePointType = "client" /
                   "server" /
                   "network" /
                   "unknown"
]]></sourcecode>
      </figure>
      <t>JSON serialization examples:</t>
      <figure anchor="vantage-point-ex">
        <name>VantagePoint example</name>
        <artwork><![CDATA[
{
    "name": "aioquic client",
    "type": "client"
}

{
    "name": "wireshark trace",
    "type": "network",
    "flow": "client"
}
]]></artwork>
      </figure>
      <t>The flow field is only required if the type is "network" (for example, the trace
is generated from a packet capture). It is used to disambiguate events like
"packet sent" and "packet received". This is indicated explicitly because for
multiple reasons (e.g., privacy) data from which the flow direction can be
otherwise inferred (e.g., IP addresses) might not be present in the logs.</t>
      <t>Meaning of the different values for the flow field:</t>
      <ul spacing="normal">
        <li>"client" indicates that this vantage point follows client data flow semantics (a
"packet sent" event goes in the direction of the server).</li>
        <li>"server" indicates that this vantage point follow server data flow semantics (a
"packet sent" event goes in the direction of the client).</li>
        <li>"unknown" indicates that the flow's direction is unknown.</li>
      </ul>
      <t>Depending on the context, tools confronted with "unknown" values in the
vantage_point can either try to heuristically infer the semantics from
protocol-level domain knowledge (e.g., in QUIC, the client always sends the
first packet) or give the user the option to switch between client and server
perspectives manually.</t>
    </section>
    <section anchor="abstract-event">
      <name>Abstract Event Class</name>
      <t>Events are logged at a time instant and convey specific details of the logging
use case. An abstract Event class containing fields common to all events is
defined in <xref target="event-def"/>.</t>
      <figure anchor="event-def">
        <name>Event definition</name>
        <sourcecode type="cddl"><![CDATA[
Event = {
    time: float64
    name: text
    data: $ProtocolEventData
    ? tuple: TupleID
    ? time_format: TimeFormat
    ? group_id: GroupID
    ? system_info: SystemInformation

    ; events can contain any amount of custom fields
    * text => any
}
]]></sourcecode>
      </figure>
      <t>Each qlog event <bcp14>MUST</bcp14> contain the mandatory fields: "time"
(<xref target="time-based-fields"/>), "name" (<xref target="event-types-and-schema"/>), and "data"
(<xref target="data-field"/>).</t>
      <t>Each qlog event is an instance of a concrete event type that derives from the
abstract Event class; see <xref target="event-types-and-schema"/>. They extend it by defining
the specific values and semantics of common fields, in particular the <tt>name</tt> and
<tt>data</tt> fields. Furthermore, they can optionally add custom fields.</t>
      <t>Each qlog event <bcp14>MAY</bcp14> contain the optional fields: "time_format"
(<xref target="time-based-fields"/>), tuple (<xref target="tuple-field"/>) "trigger" (<xref target="trigger-field"/>),
and "group_id" (<xref target="group-ids"/>).</t>
      <t>Multiple events can appear in a Trace or TraceSeq and they might contain fields
with identical values. It is possible to optimize out this duplication using
"common_fields" (<xref target="common-fields"/>).</t>
      <t>Example qlog event:</t>
      <figure anchor="event-ex">
        <name>Event example</name>
        <artwork><![CDATA[
{
    "time": 1553986553572,

    "name": "quic:packet_sent",
    "data": { ... },

    "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",

    "time_format": "relative_to_epoch",

    "ODCID": "127ecc830d98f9d54a42c4f0842aa87e181a"
}
]]></artwork>
      </figure>
      <section anchor="time-based-fields">
        <name>Timestamps</name>
        <t>Each event <bcp14>MUST</bcp14> include a "time" field to indicate the timestamp that it
occurred. It is a duration measured from some point in time; its units depend on
the type of clock chosen and system used. The time field is a float64 and it is
typically used to represent a duration in milliseconds, with a fractional component
to microsecond or nanosecond resolution.</t>
        <t>There are several options for generating and logging timestamps, these are
governed by the ReferenceTime type (optionally included in the "reference_time"
field contained in a trace's "common_fields" (<xref target="common-fields"/>)) and TimeFormat
type (optionally included in the "time_format" field contained in the event
itself, or a trace's "common_fields").</t>
        <t>There is no requirement that events in the same trace use the same time format.
However, using a single time format for related events can make them easier to
analyze.</t>
        <t>The reference time governs from which point in time the "time" field values are measured and is defined as:</t>
        <figure anchor="reference-time-def">
          <name>ReferenceTime definition</name>
          <sourcecode type="cddl"><![CDATA[
ReferenceTime = {
    clock_type: "system" / "monotonic" / text .default "system"
    epoch: RFC3339DateTime / "unknown" .default "1970-01-01T00:00:00.000Z"

    ? wall_clock_time: RFC3339DateTime
}

RFC3339DateTime = text
]]></sourcecode>
        </figure>
        <t>The required "clock_type" field represents the type of clock used for time
measurements. The value "system" represents a clock that uses system time,
commonly measured against a chosen or well-known epoch. However, depending on the system, System time can potentially jump forward or back. In contrast, a clock using monotonic time is generally guaranteed to never go backwards. The value "monotonic" represents such a clock.</t>
        <t>The required "epoch" field is the start of the ReferenceTime. When using the
"system" clock type, the epoch field <bcp14>SHOULD</bcp14> have a date/time value using the
format defined in <xref target="RFC3339"/>. However, the value "unknown" <bcp14>MAY</bcp14> be used.</t>
        <t>When using the "monotonic" clock type, the epoch field <bcp14>MUST</bcp14> have the value
"unknown".</t>
        <t>The optional "wall_clock_time" field can be used to provide an approximate
date/time value that logging commenced at if the epoch value is "unknown". It uses
the format defined in <xref target="RFC3339"/>. Note that conversion of timestamps to
calendar time based on wall clock times cannot be safely relied on.</t>
        <t>The time format details how "time" values are encoded relative to the reference time and is defined as:</t>
        <figure anchor="time-format-def">
          <name>TimeFormat definition</name>
          <sourcecode type="cddl"><![CDATA[
TimeFormat = "relative_to_epoch" /
             "relative_to_previous_event" .default "relative_to_epoch"
]]></sourcecode>
        </figure>
        <dl>
          <dt>relative_to_epoch:</dt>
          <dd>
            <t>A duration relative to the ReferenceTime "epoch" field. This approach uses the
largest amount of characters. It is good for stateless loggers. This is the default value of the "time_format" field.</t>
          </dd>
          <dt>relative_to_previous_event:</dt>
          <dd>
            <t>A delta-encoded value, based on the previously logged value. The first event
in a trace is always relative to the ReferenceTime. This approach uses the
least amount of characters. It is suitable for stateful loggers.</t>
          </dd>
        </dl>
        <t>Events in each individual trace <bcp14>SHOULD</bcp14> be logged in strictly ascending timestamp
order (though not necessarily absolute value, for the "relative_to_previous_event"
format). Tools <bcp14>MAY</bcp14> sort all events on the timestamp before processing them,
though are not required to (as this could impose a significant processing
overhead). This can be a problem especially for multi-threaded and/or streaming
loggers, who could consider using a separate post-processor to order qlog events
in time if a tool do not provide this feature.</t>
        <t>Tools <bcp14>SHOULD NOT</bcp14> assume the ability to derive the absolute calendar timestamp of an event
from qlog traces. Tools should not rely on timestamps to be consistent across
traces, even those generated by the same logging endpoint. For reasons of
privacy, the reference time <bcp14>MAY</bcp14> have minimization or anonymization applied.</t>
        <t>Example of a log using the relative_to_epoch format:</t>
        <figure anchor="rel-epoch-time-ex">
          <name>Relative to epoch timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_epoch",
    "reference_time": {
          "clock_type": "system",
          "epoch": "1970-01-01T00:00:00.000Z"
    },
},
"events": [
  {
    "time": 1553986553572,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 1553986553577,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 1553986553587,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 1553986553597,
    "name": "quic:packet_received",
    "data": { ... },
  },
]
]]></artwork>
        </figure>
        <t>Example of a log using the relative_to_previous_event format:</t>
        <figure anchor="rel-last-event-time-ex">
          <name>Relative-to-previous-event timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_previous_event",
    "reference_time": {
          "clock_type": "system",
          "epoch": "1970-01-01T00:00:00.000Z"
    },
},
"events": [
  {
    "time": 1553986553572,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 5,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 10,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 10,
    "name": "quic:packet_received",
    "data": { ... },
  },
]
]]></artwork>
        </figure>
        <t>Example of a monotonic log using the relative_to_epoch format:</t>
        <figure anchor="mono-time-ex">
          <name>Monotonic timestamps</name>
          <artwork><![CDATA[
"common_fields": {
    "time_format": "relative_to_epoch",
    "reference_time": {
          "clock_type": "monotonic",
          "epoch": "unknown",
          "wall_clock_time": "2024-10-10T10:10:10.000Z"
    },
},
"events": [
  {
    "time": 0,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 5,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 15,
    "name": "quic:packet_received",
    "data": { ... },
  },
  {
    "time": 25,
    "name": "quic:packet_received",
    "data": { ... },
  },
]
]]></artwork>
        </figure>
      </section>
      <section anchor="tuple-field">
        <name>Tuple</name>
        <t>A qlog event is typically associated with a single network "path", which is
usually aligned with a four-tuple of IP addresses and ports. In many cases, this
tuple will be the same for all events in a given trace, and does not need to be
logged explicitly with each event. In this case, the "tuple" field can be
omitted (in which case the default value of "" is assumed) or reflected in
"common_fields" instead (see <xref target="common-fields"/>).</t>
        <t>However, in some situations, such as during QUIC's Connection Migration or when
using Multipath features, it is useful to be able to split events across
multiple (concurrent) tuples and/or paths.</t>
        <t>Definition:</t>
        <figure anchor="tuple-def">
          <name>TupleID definition</name>
          <sourcecode type="cddl"><![CDATA[
TupleID = text .default ""
]]></sourcecode>
        </figure>
        <t>The "tuple" field is an identifier that is associated with a single network
four-tuple. This document intentionally does not define further how to choose
this identifier's value per-tuple or how to potentially log other parameters
that can be associated with such a tuple. This is left for other documents.
Implementers are free to encode tuple information directly into the TupleID or
to log associated info in a separate event. For example, QUIC has the
"tuple_assigned" event to couple the TupleID value to a specific tuple
configuration, see <xref target="QLOG-QUIC"/>.</t>
      </section>
      <section anchor="group-ids">
        <name>Grouping</name>
        <t>As discussed in <xref target="trace"/>, a single qlog file can contain several traces taken
from different vantage points. However, a single trace from one endpoint can also
contain events from a variety of sources. For example, a server implementation
might choose to log events for all incoming connections in a single large
(streamed) qlog file. As such, a method for splitting up events belonging
to separate logical entities is required.</t>
        <t>The simplest way to perform this splitting is by associating a "group id" to
each event that indicates to which conceptual "group" each event belongs. A
post-processing step can then extract events per group. However, this group
identifier can be highly protocol and context-specific. In the example above,
the QUIC "Original Destination Connection ID" could be used to uniquely identify
a connection. As such, they might add a "ODCID" field to each event.
Additionally, a service providing different levels of Quality of Service (QoS)
to their users might wish to group connections per QoS level applied. They might
instead prefer a "qos" field.</t>
        <t>As such, to provide consistency and ease of tooling in cross-protocol and
cross-context setups, qlog instead defines the common "group_id" field, which
contains a string value. Implementations are free to use their preferred string
serialization for this field, so long as it contains a unique value per logical
group. Some examples can be seen in <xref target="group-id-ex"/>.</t>
        <figure anchor="group-id-def">
          <name>GroupID definition</name>
          <sourcecode type="cddl"><![CDATA[
GroupID = text
]]></sourcecode>
        </figure>
        <t>JSON serialization example for events grouped either by QUIC Connection IDs, or
according to an endpoint-specific Quality of Service (QoS) logic that includes
the service level:</t>
        <figure anchor="group-id-ex">
          <name>GroupID example</name>
          <artwork><![CDATA[
"events": [
    {
        "time": 1553986553579,
        "group_id": "qos=premium",
        "name": "quic:packet_received",
        "data": { ... }
    },
    {
        "time": 1553986553581,
        "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
        "name": "quic:packet_sent",
        "data": { ... }
    }
]
]]></artwork>
        </figure>
        <t>Note that in some contexts (for example a Multipath transport protocol) it might
make sense to add additional contextual per-event fields (for example TupleID,
see <xref target="tuple-field"/>), rather than use the group_id field for that purpose.</t>
        <t>Note also that, typically, a single trace only contains events belonging to a
single logical group (for example, an individual QUIC connection). As such,
instead of logging the "group_id" field with an identical value for each event
instance, this field is typically logged once in "common_fields", see
<xref target="common-fields"/>.</t>
      </section>
      <section anchor="systeminformation">
        <name>SystemInformation</name>
        <t>The "system_info" field can be used to record system-specific details related to an
event. This is useful, for instance, where an application splits work across
CPUs, processes, or threads and events for a single trace occur on potentially
different combinations thereof. Each field is optional to support deployment
diversity.</t>
        <sourcecode type="cddl"><![CDATA[
SystemInformation = {
  ? processor_id: uint32
  ? process_id: uint32
  ? thread_id: uint32
}
]]></sourcecode>
      </section>
      <section anchor="common-fields">
        <name>CommonFields</name>
        <t>As discussed in the previous sections, information for a typical qlog event
varies in three main fields: "time", "name" and associated data. Additionally,
there are also several more advanced fields that allow mixing events from
different protocols and contexts inside of the same trace (for example
"group_id"). In most "normal" use cases however, the values of these advanced
fields are consistent for each event instance (for example, a single trace
contains events for a single QUIC connection).</t>
        <t>To reduce file size and making logging easier, qlog uses the "common_fields" list
to indicate those fields and their values that are shared by all events in this
component trace. This prevents these fields from being logged for each individual
event. An example of this is shown in <xref target="common-fields-ex"/>.</t>
        <figure anchor="common-fields-ex">
          <name>CommonFields example</name>
          <artwork><![CDATA[
JSON serialization with repeated field values
per-event instance:

{
    "events": [{
            "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
            "time_format": "relative_to_epoch",
            "reference_time": {
              "clock_type": "system",
              "epoch": "2019-03-29T:22:55:53.572Z"
            },

            "time": 2,
            "name": "quic:packet_received",
            "data": { ... }
        },{
            "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
            "time_format": "relative_to_epoch",
            "reference_time": {
              "clock_type": "system",
              "epoch": "2019-03-29T:22:55:53.572Z"
            },

            "time": 7,
            "name": "http:frame_parsed",
            "data": { ... }
        }
    ]
}

JSON serialization with repeated field values instead
extracted to common_fields:

{
    "common_fields": {
        "group_id": "127ecc830d98f9d54a42c4f0842aa87e181a",
        "time_format": "relative_to_epoch",
        "reference_time": {
            "clock_type": "system",
            "epoch": "2019-03-29T:22:55:53.572Z"
        },
    },
    "events": [
        {
            "time": 2,
            "name": "quic:packet_received",
            "data": { ... }
        },{
            "time": 7,
            "name": "http:frame_parsed",
            "data": { ... }
        }
    ]
}
]]></artwork>
        </figure>
        <t>An event's "common_fields" field is a generic dictionary of key-value pairs, where the
key is always a string and the value can be of any type, but is typically also a
string or number. As such, unknown entries in this dictionary <bcp14>MUST</bcp14> be disregarded
by the user and tools (i.e., the presence of an unknown field is explicitly NOT an
error).</t>
        <t>The list of default qlog fields that are typically logged in common_fields (as
opposed to as individual fields per event instance) are shown in the listing
below:</t>
        <figure anchor="common-fields-def">
          <name>CommonFields definition</name>
          <sourcecode type="cddl"><![CDATA[
CommonFields = {
    ? tuple: TupleID
    ? time_format: TimeFormat
    ? reference_time: ReferenceTime
    ? group_id: GroupID
    * text => any
}
]]></sourcecode>
        </figure>
        <t>Tools <bcp14>MUST</bcp14> be able to deal with these fields being defined either on each event
individually or combined in common_fields. Note that if at least one event in a
trace has a different value for a given field, this field <bcp14>MUST NOT</bcp14> be added to
common_fields but instead defined on each event individually. Good example of such
fields are "time" and "data", who are divergent by nature.</t>
      </section>
    </section>
    <section anchor="event-types-and-schema">
      <name>Concrete Event Types and Event Schemas</name>
      <t>Concrete event types, as well as related data types, are grouped in event
namespaces which in turn are defined in one or multiple event schemas.</t>
      <t>As an example, the <tt>QUICPacketSent</tt> and <tt>QUICPacketHeader</tt> event and data types
would be part of the <tt>quic</tt> namespace, which is defined in an event schema with
URI <tt>urn:ietf:params:qlog:events:quic</tt>. A later extension that adds a new QUIC
frame <tt>QUICNewFrame</tt> would also be part of the <tt>quic</tt> namespace, but defined in
a new event schema with URI
<tt>urn:ietf:params:qlog:events:quic#new-frame-extension</tt>.</t>
      <t>Concrete event types <bcp14>MUST</bcp14> belong to a single event namespace and <bcp14>MUST</bcp14> have a
registered non-empty identifier of type <tt>text</tt>.</t>
      <t>New namespaces <bcp14>MUST</bcp14> have a registered non-empty globally-unique text identifier
using only characters in the URI unreserved range; see <xref section="2.3" sectionFormat="of" target="RFC3986"/>. Namespaces are mutable and <bcp14>MAY</bcp14> be extended with new events.</t>
      <t>The value of a qlog event <tt>name</tt> field <bcp14>MUST</bcp14> be the concatenation of namespace
identifier, colon (':'), and event type identifier (for example:
quic:packet_sent). The resulting concatenation <bcp14>MUST</bcp14> be globally unique, so log
files can contain events from multiple event schemas without the risk of name
collisions.</t>
      <t>A single event schema can contain exactly one of the below:</t>
      <ul spacing="normal">
        <li>A definition for a new event namespace</li>
        <li>An extension of an existing namespace (adding new events/data types and/or
extending existing events/data types within the namespace with new fields)</li>
      </ul>
      <t>A single document can define multiple event schemas (for example see
<xref target="generic-event-schema"/>).</t>
      <t>An event schema <bcp14>MUST</bcp14> have a single URI <xref target="RFC3986"/> that <bcp14>MUST</bcp14> be absolute. The
URI <bcp14>MUST</bcp14> include the namespace identifier. Event schemas that extend an existing
namespace <bcp14>MUST</bcp14> furthermore include a non-empty globally-unique "extension"
identifier using a URI fragment (characters after a "#" in the URI) using only
characters in the URI unreserved range; see <xref section="2.3" sectionFormat="of" target="RFC3986"/>.
Registration guidance and requirement for event schema URIs are provided in
<xref target="event-schema-reg"/>. Event schemas by themselves are immutable and <bcp14>MUST NOT</bcp14> be
extended.</t>
      <t>Implementations that record concrete event types <bcp14>SHOULD</bcp14> list all event schemas
in use. This is achieved by including the appropriate URIs in the
<tt>event_schemas</tt> field of the Trace (<xref target="trace"/>) and TraceSeq (<xref target="traceseq"/>)
classes. The <tt>event_schemas</tt> is a hint to tools about the possible event
namespaces, their extensions, and the event types/data types contained therein,
that a qlog trace might contain. The trace <bcp14>MAY</bcp14> still contain event types that do
not belong to a listed event schema. Inversely, not all event types associated
with an event schema listed in <tt>event_schemas</tt> are guaranteed to be logged in a
qlog trace. Tools <bcp14>MUST NOT</bcp14> treat either of these as an error; see <xref target="tooling"/>.</t>
      <t>In the following hypothetical example, a qlog trace contains events belonging to:</t>
      <ul spacing="normal">
        <li>The two event namespaces defined by event schemas in this document
(<xref target="generic-event-schema"/>).</li>
        <li>Events in a namespace named <tt>rick</tt> specified in a hypothetical RFC</li>
        <li>Extentions to the <tt>rick</tt> namespace defined in two separate new event schemas
(with URI extension identifiers <tt>astley</tt> and <tt>moranis</tt>)</li>
        <li>Events from three private event schemas, detailing definitions for and
extensions to two namespaces (<tt>pickle</tt> and <tt>cucumber</tt>)</li>
      </ul>
      <t>The standardized schema URIs use a URN format, the private schemas use a URI
with domain name.</t>
      <figure anchor="event-schemas">
        <name>Example event_schemas serialization</name>
        <artwork><![CDATA[
"event_schemas": [
  "urn:ietf:params:qlog:events:loglevel",
  "urn:ietf:params:qlog:events:simulation",
  "urn:ietf:params:qlog:events:rick",
  "urn:ietf:params:qlog:events:rick#astley",
  "urn:ietf:params:qlog:events:rick#moranis",
  "https://example.com/032024/pickle.html",
  "https://example.com/032024/pickle.html#lilly",
  "https://example.com/032025/cucumber.html"
]
]]></artwork>
      </figure>
      <section anchor="event-schema-reg">
        <name>Event Schema URIs</name>
        <t>Event schemas defined by RFCs <bcp14>MUST</bcp14> register all namespaces and concrete event
types they contain in the "qlog event schema URIs" registry.</t>
        <t>Event schemas that define a new namespace <bcp14>SHOULD</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:events:&lt;namespace identifier&gt;</tt>, where <tt>&lt;namespace
identifier&gt;</tt> is globally unique. For example, this document defines two event
schemas (<xref target="generic-event-schema"/>) for two namespaces: <tt>loglevel</tt> and <tt>sim</tt>.
Other examples of event schema define the <tt>quic</tt> <xref target="QLOG-QUIC"/> and <tt>http3</tt>
          <xref target="QLOG-H3"/> namespaces.</t>
        <t>Event schemas that extend an existing namespace <bcp14>SHOULD</bcp14> use a URN of the form
<tt>urn:ietf:params:qlog:events:&lt;namespace identifier&gt;#&lt;extension identifier&gt;</tt>,
where the combination of <tt>&lt;namespace identifier&gt;</tt> and <tt>&lt;extension identifier&gt;</tt>
is globally unique.</t>
        <t>Private or non-standard event schemas <bcp14>MAY</bcp14> be registered in the "qlog event
schema URIs" registry but <bcp14>MUST NOT</bcp14> use a URN of the forms outlined above. URIs
that contain a domain name <bcp14>SHOULD</bcp14> also contain a month-date in the form mmyyyy.
For example, "https://example.org/072024/customeventschema#customextension". The
definition of the event schema and assignment of the URI <bcp14>MUST</bcp14> have been
authorized by the owner of the domain name on or very close to that date. This
avoids problems when domain names change ownership. The URI does not need to be
dereferencable, allowing for confidential use or to cover the case where the
event schemas continue to be used after the organization that defined them
ceases to exist.</t>
        <t>The "qlog event schema URIs" registry operates under the Expert Review policy,
per <xref section="4.5" sectionFormat="of" target="RFC8126"/>.  When reviewing requests, the expert <bcp14>MUST</bcp14> check
that the URI is appropriate to the event schema and satisfies the requirements
in <xref target="event-types-and-schema"/> and this section. A request to register a private
or non-standard schema URI using a URN of the forms reserved for schemas defined
by an RFC above <bcp14>MUST</bcp14> be rejected.</t>
        <t>Registration requests should use the template defined in <xref target="iana"/>.</t>
      </section>
      <section anchor="data-field">
        <name>Extending the Data Field</name>
        <t>An event's "data" field is a generic key-value map (e.g., JSON object). It
defines the per-event metadata that is to be logged. Its specific subfields and
their semantics are defined per concrete event type. For example, data field
definitions for QUIC and HTTP/3 can be found in <xref target="QLOG-QUIC"/> and <xref target="QLOG-H3"/>.</t>
        <t>In order to keep qlog fully extensible, two separate CDDL extension points
("sockets" or "plugs") are used to fully define data fields.</t>
        <t>Firstly, to allow existing data field definitions to be extended (for example by
adding an additional field needed for a new protocol feature), a CDDL "group
socket" is used. This takes the form of a subfield with a name of <tt>*
$$NAMESPACE-EVENTTYPE-extension</tt>. This field acts as a placeholder that can
later be replaced with newly defined fields by assigning them to the socket with
the <tt>//=</tt> operator. Multiple extensions can be assigned to the same group
socket. An example is shown in <xref target="groupsocket-extension-example"/>.</t>
        <figure anchor="groupsocket-extension-example">
          <name>Example of using a generic CDDL group socket to extend an existing event data definition</name>
          <artwork><![CDATA[
; original definition in event schema A
MyNSEventX = {
    field_a: uint8

    * $$myns-eventx-extension
}

; later extension of EventX in event schema B
$$myns-eventx-extension //= (
  ? additional_field_b: bool
)

; another extension of EventX in event schema C
$$myns-eventx-extension //= (
  ? additional_field_c: text
)

; if schemas A, B and C are then used in conjunction,
; the combined MyNSEventX CDDL is equivalent to this:
MyNSEventX = {
    field_a: uint8

    ? additional_field_b: bool
    ? additional_field_c: text
}
]]></artwork>
        </figure>
        <t>Secondly, to allow documents to define fully new event data field definitions
(as opposed to extend existing ones), a CDDL "type socket" is used. For this
purpose, the type of the "data" field in the qlog Event type (see <xref target="event-def"/>)
is the extensible <tt>$ProtocolEventData</tt> type. This field acts as an open enum of
possible types that are allowed for the data field. As such, any new event data
field is defined as its own CDDL type and later merged with the existing
<tt>$ProtocolEventData</tt> enum using the <tt>/=</tt> extension operator. Any generic
key-value map type can be assigned to <tt>$ProtocolEventData</tt>. The example in
<xref target="protocoleventdata-def"/> demonstrates <tt>$ProtocolEventData</tt> being extended with
two types.</t>
        <figure anchor="protocoleventdata-def">
          <name>ProtocolEventData extension</name>
          <artwork><![CDATA[
; We define two new concrete events in a new event schema
MyNSEvent1 /= {
    field_1: uint8

    * $$myns-event1-extension
}

MyNSEvent2 /= {
    field_2: bool

    * $$myns-event2-extension
}

; the events are both merged with the existing
; $ProtocolEventData type enum
$ProtocolEventData /= MyNSEvent1 / MyNSEvent2

; the "data" field of a qlog event can now also be of type
; MyNSEvent1 and MyNSEvent2
]]></artwork>
        </figure>
        <t>Event schema defining new qlog events <bcp14>MUST</bcp14> properly extend <tt>$ProtocolEventData</tt>
when defining data fields to enable automated validation of aggregated qlog
schemas. Furthermore, they <bcp14>SHOULD</bcp14> add a <tt>* $$NAMESPACE-EVENTTYPE-extension</tt>
extension field to newly defined event data to allow the new events to be
properly extended by other event schema.</t>
        <t>A combined but purely illustrative example of the use of both extension points
for a conceptual QUIC "packet_sent" event is shown in <xref target="data-ex"/>:</t>
        <figure anchor="data-ex">
          <name>Example of an extended 'data' field for a conceptual QUIC packet_sent event</name>
          <artwork><![CDATA[
; defined in the main QUIC event schema
QUICPacketSent = {
    ? packet_size: uint16
    header: QUICPacketHeader
    ? frames:[* QUICFrame]

    * $$quic-packetsent-extension
}

; Add the event to the global list of recognized qlog events
$ProtocolEventData /= QUICPacketSent

; Defined in a separate event schema that describes a
; theoretical QUIC protocol extension
$$quic-packetsent-extension //= (
  ? additional_field: bool
)

; If both schemas are utilized at the same time,
; the following JSON serialization would pass an automated
; CDDL schema validation check:

{
  "time": 123456,
  "name": "quic:packet_sent",
  "data": {
      "packet_size": 1280,
      "header": {
          "packet_type": "1RTT",
          "packet_number": 123
      },
      "frames": [
          {
              "frame_type": "stream",
              "offset": 456
          },
          {
              "frame_type": "padding"
          }
      ],
      additional_field: true
  }
}
]]></artwork>
        </figure>
        <section anchor="trigger-field">
          <name>Triggers</name>
          <t>It can be useful to understand the cause or trigger of an event. Sometimes,
events are caused by a variety of other events and additional information is
needed to identify the exact details. Commonly, the context of the surrounding
log messages gives a hint about the cause. However, in highly-parallel and
optimized implementations, corresponding log messages might be separated in
time, making it difficult to build an accurate context.</t>
          <t>Including a "trigger" as part of the event itself is one method for providing
fine-grained information without much additional overhead. In circumstances
where a trigger is useful, it is <bcp14>RECOMMENDED</bcp14> for the purpose of consistency that
the event data definition contains an optional field named "trigger", holding a
string value.</t>
          <t>For example, the QUIC "packet_dropped" event (<xref section="5.7" sectionFormat="of" target="QLOG-QUIC"/>)
includes a trigger field that identifies the precise reason why a QUIC packet
was dropped:</t>
          <figure anchor="trigger-ex">
            <name>Trigger example</name>
            <artwork><![CDATA[
QUICPacketDropped = {

    ; Primarily packet_type should be filled here,
    ; as other fields might not be decrypteable or parseable
    ? header: PacketHeader
    ? raw: RawInfo
    ? datagram_id: uint32
    ? details: {* text => any}
    ? trigger:
        "internal_error" /
        "rejected" /
        "unsupported" /
        "invalid" /
        "duplicate" /
        "connection_unknown" /
        "decryption_failure" /
        "key_unavailable" /
        "general"

    * $$quic-packetdropped-extension
}
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="importance">
        <name>Event Importance Levels</name>
        <t>Depending on how events are designed, it may be that several events allow the
logging of similar or overlapping data. For example the separate QUIC
<tt>connection_started</tt> event overlaps with the more generic
<tt>connection_state_updated</tt>. In these cases, it is not always clear which event
should be logged or used, and which event should take precedence if e.g., both are
present and provide conflicting information.</t>
        <t>To aid in this decision making, qlog defines three event importance levels, in
decreasing order of importance and expected usage:</t>
        <ul spacing="normal">
          <li>Core</li>
          <li>Base</li>
          <li>Extra</li>
        </ul>
        <t>Concrete event types <bcp14>SHOULD</bcp14> define an importance level.</t>
        <t>Core-level events <bcp14>SHOULD</bcp14> be present in all qlog files for a given protocol.
These are typically tied to basic packet and frame parsing and creation, as well
as listing basic internal metrics. Tool implementers <bcp14>SHOULD</bcp14> expect and add
support for these events, though <bcp14>SHOULD NOT</bcp14> expect all Core events to be present
in each qlog trace.</t>
        <t>Base-level events add additional debugging options and <bcp14>MAY</bcp14> be present in qlog
files. Most of these can be implicitly inferred from data in Core events (if
those contain all their properties), but for many it is better to log the events
explicitly as well, making it clearer how the implementation behaves. These
events are for example tied to passing data around in buffers, to how internal
state machines change, and used to help show when decisions are actually made
based on received data. Tool implementers <bcp14>SHOULD</bcp14> at least add support for
showing the contents of these events, if they do not handle them explicitly.</t>
        <t>Extra-level events are considered mostly useful for low-level debugging of the
implementation, rather than the protocol. They allow more fine-grained tracking
of internal behavior. As such, they <bcp14>MAY</bcp14> be present in qlog files and tool
implementers <bcp14>MAY</bcp14> add support for these, but they are not required to.</t>
        <t>Note that in some cases, implementers might not want to log for example data
content details in Core-level events due to performance or privacy considerations.
In this case, they <bcp14>SHOULD</bcp14> use (a subset of) relevant Base-level events instead to
ensure usability of the qlog output. As an example, implementations that do not
log QUIC <tt>packet_received</tt> events and thus also not which (if any) ACK frames the
packet contains, <bcp14>SHOULD</bcp14> log <tt>packets_acked</tt> events instead.</t>
        <t>Finally, for event types whose data (partially) overlap with other event types'
definitions, where necessary the event definition document should include explicit
guidance on which to use in specific situations.</t>
      </section>
      <section anchor="tooling-expectations">
        <name>Tooling Expectations</name>
        <t>qlog is an extensible format and it is expected that new event schema will
emerge that define new namespaces, event types, event fields (e.g., a field
indicating an event's privacy properties), as well as values for the "trigger"
property within the "data" field, or other member fields of the "data" field, as
they see fit.</t>
        <t>It <bcp14>SHOULD NOT</bcp14> be expected that general-purpose tools will recognize or visualize
all forms of qlog extension. Tools <bcp14>SHOULD</bcp14> allow for the presence of unknown
event fields and make an effort to visualize even unknown data if possible,
otherwise they <bcp14>MUST</bcp14> ignore it.</t>
      </section>
      <section anchor="further-design-guidance">
        <name>Further Design Guidance</name>
        <t>There are several ways of defining concrete event types. In practice, two main
types of approach have been observed: a) those that map directly to concepts
seen in the protocols (e.g., <tt>packet_sent</tt>) and b) those that act as aggregating
events that combine data from several possible protocol behaviors or code paths
into one (e.g., <tt>parameters_set</tt>). The latter are typically used as a means to
reduce the amount of unique event definitions, as reflecting each possible
protocol event as a separate qlog entity would cause an explosion of event
types.</t>
        <t>Additionally, logging duplicate data is typically prevented as much as possible.
For example, packet header values that remain consistent across many packets are
split into separate events (for example <tt>spin_bit_updated</tt> or
<tt>connection_id_updated</tt> for QUIC).</t>
        <t>Finally, when logging additional state change events, those state changes can
often be directly inferred from data on the wire (for example flow control limit
changes). As such, if the implementation is bug-free and spec-compliant, logging
additional events is typically avoided. Exceptions have been made for common
events that benefit from being easily identifiable or individually logged (for
example <tt>packets_acked</tt>).</t>
      </section>
    </section>
    <section anchor="generic-event-schema">
      <name>The Generic Event Schemas</name>
      <t>The two following generic event schemas define two namespaces and several
concrete event types that are common across protocols, applications, and use
cases.</t>
      <section anchor="loglevel-events">
        <name>Loglevel events</name>
        <t>In typical logging setups, users utilize a discrete number of well-defined
logging categories, levels or severities to log freeform (string) data. The
loglevel event namespace replicates this approach to allow implementations to
fully replace their existing text-based logging by qlog. This is done by
providing events to log generic strings for the typical well-known logging
levels (error, warning, info, debug, verbose). The namespace identifier is
"loglevel". The event schema URI is <tt>urn:ietf:params:qlog:events:loglevel</tt>.</t>
        <figure anchor="loglevel-events-def">
          <name>LogLevelEventData and ProtocolEventData extension</name>
          <sourcecode type="cddl"><![CDATA[
LogLevelEventData = LogLevelError /
                    LogLevelWarning /
                    LogLevelInfo /
                    LogLevelDebug /
                    LogLevelVerbose

$ProtocolEventData /= LogLevelEventData
]]></sourcecode>
        </figure>
        <t>The event types are further defined below, their identifier is the heading name.</t>
        <section anchor="error">
          <name>error</name>
          <t>Used to log details of an internal error that might not get reflected on the
wire. It has Core importance level.</t>
          <figure anchor="loglevel-error-def">
            <name>LogLevelError definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelError = {
    ? code: uint64
    ? message: text

    * $$loglevel-error-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="warning">
          <name>warning</name>
          <t>Used to log details of an internal warning that might not get reflected on the
wire. It has Base importance level.</t>
          <figure anchor="loglevel-warning-def">
            <name>LogLevelWarning definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelWarning = {
    ? code: uint64
    ? message: text

    * $$loglevel-warning-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="info">
          <name>info</name>
          <t>Used mainly for implementations that want to use qlog as their one and only
logging format but still want to support unstructured string messages. The event
has Extra importance level.</t>
          <figure anchor="loglevel-info-def">
            <name>LogLevelInfo definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelInfo = {
    message: text

    * $$loglevel-info-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="debug">
          <name>debug</name>
          <t>Used mainly for implementations that want to use qlog as their one and only
logging format but still want to support unstructured string messages. The event
has Extra importance level.</t>
          <figure anchor="loglevel-debug-def">
            <name>LogLevelDebug definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelDebug = {
    message: text

    * $$loglevel-debug-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="verbose">
          <name>verbose</name>
          <t>Used mainly for implementations that want to use qlog as their one and only
logging format but still want to support unstructured string messages. The event
has Extra importance level.</t>
          <figure anchor="loglevel-verbose-def">
            <name>LogLevelVerbose definition</name>
            <sourcecode type="cddl"><![CDATA[
LogLevelVerbose = {
    message: text

    * $$loglevel-verbose-extension
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="sim-events">
        <name>Simulation Events</name>
        <t>When evaluating a protocol implementation, one typically sets up a series of
interoperability or benchmarking tests, in which the test situations can change
over time. For example, the network bandwidth or latency can vary during the
test, or the network can be fully disable for a short time. In these setups, it
is useful to know when exactly these conditions are triggered, to allow for
proper correlation with other events. This namespace defines event types to
allow logging of such simulation metadata and its identifier is "simulation".
The event schema URI is <tt>urn:ietf:params:qlog:events:simulation</tt>.</t>
        <figure anchor="sim-events-def">
          <name>SimulationEventData and ProtocolEventData extension</name>
          <sourcecode type="cddl"><![CDATA[
SimulationEventData = SimulationScenario /
                SimulationMarker

$ProtocolEventData /= SimulationEventData
]]></sourcecode>
        </figure>
        <t>The event types are further defined below, their identifier is the heading name.</t>
        <section anchor="scenario">
          <name>scenario</name>
          <t>Used to specify which specific scenario is being tested at this particular
instance. This supports, for example, aggregation of several simulations into
one trace (e.g., split by <tt>group_id</tt>). It has Extra importance level; see
<xref target="importance"/>.</t>
          <figure anchor="simulation-scenario-def">
            <name>SimulationScenario definition</name>
            <sourcecode type="cddl"><![CDATA[
SimulationScenario = {
    ? name: text
    ? details: {* text => any }

    * $$simulation-scenario-extension
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="marker">
          <name>marker</name>
          <t>Used to indicate when specific emulation conditions are triggered at set times
(e.g., at 3 seconds in 2% packet loss is introduced, at 10s a NAT rebind is
triggered). It has Extra importance level.</t>
          <figure anchor="simulation-marker-def">
            <name>SimulationMarker definition</name>
            <sourcecode type="cddl"><![CDATA[
SimulationMarker = {
    ? type: text
    ? message: text

    * $$simulation-marker-extension
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="raw-info">
      <name>Raw packet and frame information</name>
      <t>While qlog is a high-level logging format, it also allows the inclusion of most
raw wire image information, such as byte lengths and byte values. This is useful
when for example investigating or tuning packetization behavior or determining
encoding/framing overheads. However, these fields are not always necessary, can
take up considerable space, and can have a considerable privacy and security
impact (see <xref target="privacy"/>). Where applicable, these fields are grouped in a
separate, optional, field named "raw" of type RawInfo. The exact definition of
entities, headers, trailers and payloads depend on the protocol used.</t>
      <figure anchor="raw-info-def">
        <name>RawInfo definition</name>
        <sourcecode type="cddl"><![CDATA[
RawInfo = {

    ; the full byte length of the entity (e.g., packet or frame),
    ; including possible headers and trailers
    ? length: uint64

    ; the byte length of the entity's payload,
    ; excluding possible headers or trailers
    ? payload_length: uint64

    ; the (potentially truncated) contents of the full entity,
    ; including headers and possibly trailers
    ? data: hexstring
}
]]></sourcecode>
      </figure>
      <t>All fields in RawInfo are defined as optional. It is acceptable to log any field
without the others. Logging length related fields and omitting the data field
permits protocol debugging without the risk of logging potentially sensitive
data. The data field, if logged, is not required to contain the contents of a
full entity and can be truncated, see <xref target="truncated-values"/>. The length fields,
if logged, should indicate the length of the the full entity, even if the data
field is omitted or truncated.</t>
      <t>Protocol entities containing an on-the-wire length field (for example a packet
header or QUIC's stream frame) are strongly recommended to re-use the
<tt>raw.length</tt> field instead of defining a separate length field, to maintain
consistency and prevent data duplication.</t>
      <t>This document does not specify explicit header_length or trailer_length fields.
In protocols without trailers, header_length can be calculated by subtracting
the payload_length from the length. In protocols with trailers (e.g., QUIC's
AEAD tag), event definition documents <bcp14>SHOULD</bcp14> define how to support header_length
calculation.</t>
    </section>
    <section anchor="concrete-formats">
      <name>Serializing qlog</name>
      <t>qlog schema definitions in this document are intentionally agnostic to
serialization formats. The choice of format is an implementation decision.</t>
      <t>Other documents related to qlog (for example event definitions for specific
protocols), <bcp14>SHOULD</bcp14> be similarly agnostic to the employed serialization format
and <bcp14>SHOULD</bcp14> clearly indicate this. If not, they <bcp14>MUST</bcp14> include an explanation on
which serialization formats are supported and on how to employ them correctly.</t>
      <t>Serialization formats make certain tradeoffs between usability, flexibility,
interoperability, and efficiency. Implementations should take these into
consideration when choosing a format. Some examples of possible formats are
JSON, CBOR, CSV, protocol buffers, flatbuffers, etc. which each have their own
characteristics. For instance, a textual format like JSON can be more flexible
than a binary format but more verbose, typically making it less efficient than a
binary format. A plaintext readable (yet relatively large) format like JSON is
potentially more usable for users operating on the logs directly, while a more
optimized yet restricted format can better suit the constraints of a large scale
operation. A custom or restricted format could be more efficient for analysis
with custom tooling but might not be interoperable with general-purpose qlog
tools.</t>
      <t>Considering these tradeoffs, JSON-based serialization formats provide features
that make them a good starting point for qlog flexibility and interoperability.
For these reasons, JSON is a recommended default and expanded considerations are
given to how to map qlog to JSON (<xref target="format-json"/>, and its streaming counterpart
JSON Text Sequences (<xref target="format-json-seq"/>. <xref target="json-interop"/> presents
interoperability considerations for both formats, and <xref target="optimizations"/> presents
potential optimizations.</t>
      <t>Serialization formats require appropriate deserializers/parsers. The
"serialization_format" field (<xref target="abstract-logfile"/>) is used to indicate the
chosen serialization format.</t>
      <section anchor="format-json">
        <name>qlog to JSON mapping</name>
        <t>As described in <xref target="qlog-file-schema"/>, JSON is the default qlog serialization.
When mapping qlog to normal JSON, QlogFile (<xref target="qlog-file-def"/>) is used. The
Media Type is "application/qlog+json" per <xref target="RFC6839"/>. The file
extension/suffix <bcp14>SHOULD</bcp14> be ".qlog".</t>
        <t>In accordance with <xref section="8.1" sectionFormat="of" target="RFC8259"/>, JSON files are required to use
UTF-8 both for the file itself and the string values it contains. In addition,
all qlog field names <bcp14>MUST</bcp14> be lowercase when serialized to JSON.</t>
        <t>In order to serialize CDDL-based qlog event and data structure
definitions to JSON, the official CDDL-to-JSON mapping defined in
<xref section="E" sectionFormat="of" target="CDDL"/> <bcp14>SHOULD</bcp14> be employed.</t>
      </section>
      <section anchor="format-json-seq">
        <name>qlog to JSON Text Sequences mapping</name>
        <t>One of the downsides of using normal JSON is that it is inherently a
non-streamable format. A qlog serializer could work around this by opening a
file, writing the required opening data, streaming qlog events by appending
them, and then finalizing the log by appending appropriate closing tags e.g.,
"]}]}". However, failure to append closing tags, could lead to problems because
most JSON parsers will fail if a document is malformed. Some streaming JSON
parsers are able to handle missing closing tags, however they are not widely
deployed in popular environments (e.g., Web browsers)</t>
        <t>To overcome the issues related to JSON streaming, a qlog mapping to a streamable
JSON format called JSON Text Sequences (JSON-SEQ) (<xref target="RFC7464"/>) is provided.</t>
        <t>JSON Text Sequences are very similar to JSON, except that objects are
serialized as individual records, each prefixed by an ASCII Record Separator
(&lt;RS&gt;, 0x1E), and each ending with an ASCII Line Feed character (\n, 0x0A). Note
that each record can also contain any amount of newlines in its body, as long as
it ends with a newline character before the next &lt;RS&gt; character.</t>
        <t>In order to leverage the streaming capability, each qlog event is serialized and
interpreted as an individual JSON Text Sequence record, that is appended as a
new object to the back of an event stream or log file. Put differently, unlike
default JSON, it does not require a document to be wrapped as a full object with
"{ ... }" or "[... ]".</t>
        <t>This alternative record streaming approach cannot be accommodated by QlogFile
(<xref target="qlog-file-def"/>). Instead, QlogFileSeq is defined in <xref target="qlog-file-seq-def"/>,
which notably includes only a single trace (TraceSeq) and omits an explicit
"events" array. An example is provided in <xref target="json-seq-ex"/>. The "group_id" field
can still be used on a per-event basis to include events from conceptually
different sources in a single JSON-SEQ qlog file.</t>
        <t>When mapping qlog to JSON-SEQ, the Media Type is "application/qlog+json-seq" per
<xref target="RFC8091"/>. The file extension/suffix <bcp14>SHOULD</bcp14> be ".sqlog" (for "streaming"
qlog).</t>
        <t>While not specifically required by the JSON-SEQ specification, all qlog field
names <bcp14>MUST</bcp14> be lowercase when serialized to JSON-SEQ.</t>
        <t>In order to serialize all other CDDL-based qlog event and data structure
definitions to JSON-SEQ, the official CDDL-to-JSON mapping defined in
<xref section="E" sectionFormat="of" target="CDDL"/> <bcp14>SHOULD</bcp14> be employed.</t>
        <section anchor="supporting-json-text-sequences-in-tooling">
          <name>Supporting JSON Text Sequences in tooling</name>
          <t>Note that JSON Text Sequences are not supported in most default programming
environments (unlike normal JSON). However, several custom JSON-SEQ parsing
libraries exist in most programming languages that can be used and the format is
easy enough to parse with existing implementations (i.e., by splitting the file
into its component records and feeding them to a normal JSON parser individually,
as each record by itself is a valid JSON object).</t>
        </section>
      </section>
      <section anchor="json-interop">
        <name>JSON Interoperability</name>
        <t>Some JSON implementations have issues with the full JSON format, especially those
integrated within a JavaScript environment (e.g., Web browsers, NodeJS). I-JSON
(Internet-JSON) is a subset of JSON for such environments; see
<xref target="I-JSON"/>. One of the key limitations of JavaScript, and thus I-JSON,
is that it cannot represent full 64-bit integers in standard operating mode
(i.e., without using BigInt extensions), instead being limited to the range
-(2<sup>53</sup>)+1 to (2<sup>53</sup>)-1.</t>
        <t>To accommodate such constraints in CDDL, <xref section="E" sectionFormat="of" target="CDDL"/> recommends
defining new CDDL types for int64 and uint64 that limit their values to the
restricted 64-bit integer range. However, some of the protocols that qlog is
intended to support (e.g., QUIC, HTTP/3), can use the full range of uint64
values.</t>
        <t>As such, to support situations where I-JSON is in use, seralizers <bcp14>MAY</bcp14> encode
uint64 values using JSON strings. qlog parsers, therefore, <bcp14>SHOULD</bcp14> support
parsing of uint64 values from JSON strings or JSON numbers unless there is out-of-band
information indicating that neither the serializer nor parser are constrained by
I-JSON.</t>
      </section>
      <section anchor="truncated-values">
        <name>Truncated values</name>
        <t>For some use cases (e.g., limiting file size, privacy), it can be necessary not
to log a full raw blob (using the <tt>hexstring</tt> type) but instead a truncated
value. For example, one might only store the first 100 bytes of an HTTP response
body to be able to discern which file it actually contained. In these cases, the
original byte-size length cannot be obtained from the serialized value directly.</t>
        <t>As such, all qlog schema definitions <bcp14>SHOULD</bcp14> include a separate,
length-indicating field for all fields of type <tt>hexstring</tt> they specify, see for
example <xref target="raw-info"/>. This not only ensures the original length can always be
retrieved, but also allows the omission of any raw value bytes of the field
completely (e.g., out of privacy or security considerations).</t>
        <t>To reduce overhead however and in the case the full raw value is logged, the
extra length-indicating field can be left out. As such, tools <bcp14>SHOULD</bcp14> be able to
deal with this situation and derive the length of the field from the raw value
if no separate length-indicating field is present. The main possible
permutations are shown by example in <xref target="truncated-values-ex"/>.</t>
        <figure anchor="truncated-values-ex">
          <name>Example for serializing truncated hexstrings</name>
          <artwork><![CDATA[
// both the content's value and its length are present
// (length is redundant)
{
    "content_length": 5,
    "content": "051428abff"
}

// only the content value is present, indicating it
// represents the content's full value. The byte
// length is obtained by calculating content.length / 2
{
    "content": "051428abff"
}

// only the length is present, meaning the value
// was omitted
{
    "content_length": 5,
}

// both value and length are present, but the lengths
// do not match: the value was truncated to
// the first three bytes.
{
    "content_length": 5,
    "content": "051428"
}
]]></artwork>
        </figure>
      </section>
      <section anchor="optimizations">
        <name>Optimization of serialized data</name>
        <t>Both the JSON and JSON-SEQ formatting options described above are serviceable in
general small to medium scale (debugging) setups. However, these approaches tend
to be relatively verbose, leading to larger file sizes. Additionally, generalized
JSON(-SEQ) (de)serialization performance is typically (slightly) lower than that
of more optimized and predictable formats. Both aspects present challenges to
large scale setups, though they may still be practical to deploy; see <xref target="ANRW-2020"/>.
JSON and JSON-SEQ compress very well using commonly-available algorithms such as
GZIP or Brotli.</t>
        <t>During the development of qlog, a multitude of alternative formatting
and optimization options were assessed and the results are <eref target="https://github.com/quiclog/internet-drafts/issues/30#issuecomment-617675097">summarized on the qlog
github
repository</eref>.</t>
        <t>Formal definition of additional qlog formats or encodings that use the
optimization techniques described here, or any other optimization technique is
left to future activity that can apply the following guidelines.</t>
        <t>In order to help tools correctly parse and process serialized qlog, it is
<bcp14>RECOMMENDED</bcp14> that new formats also define suitable file extensions and media
types. This provides a clear signal and avoids the need to provide out-of-band
information or to rely on heuristic fallbacks; see <xref target="tooling"/>.</t>
      </section>
    </section>
    <section anchor="methods-of-access-and-generation">
      <name>Methods of access and generation</name>
      <t>Different implementations will have different ways of generating and storing
qlogs. However, there is still value in defining a few default ways in which to
steer this generation and access of the results.</t>
      <section anchor="set-file-output-destination-via-an-environment-variable">
        <name>Set file output destination via an environment variable</name>
        <t>To provide users control over where and how qlog files are created, two
environment variables are defined. The first, QLOGFILE, indicates a full path to
where an individual qlog file should be stored. This path <bcp14>MUST</bcp14> include the full
file extension. The second, QLOGDIR, sets a general directory path in which qlog
files should be placed. This path <bcp14>MUST</bcp14> include the directory separator character
at the end.</t>
        <t>In general, QLOGDIR should be preferred over QLOGFILE if an endpoint is prone to
generate multiple qlog files. This can for example be the case for a QUIC server
implementation that logs each QUIC connection in a separate qlog file. An
alternative that uses QLOGFILE would be a QUIC server that logs all connections in
a single file and uses the "group_id" field (<xref target="group-ids"/>) to allow post-hoc
separation of events.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> provide support for QLOGDIR and <bcp14>MAY</bcp14> provide support for
QLOGFILE.</t>
        <t>When using QLOGDIR, it is up to the implementation to choose an appropriate naming
scheme for the qlog files themselves. The chosen scheme will typically depend on
the context or protocols used. For example, for QUIC, it is recommended to use the
Original Destination Connection ID (ODCID), followed by the vantage point type of
the logging endpoint. Examples of all options for QUIC are shown in
<xref target="qlogdir-example"/>.</t>
        <figure anchor="qlogdir-example">
          <name>Environment variable examples for a QUIC implementation</name>
          <artwork><![CDATA[
Command: QLOGFILE=/srv/qlogs/client.qlog quicclientbinary

Should result in the the quicclientbinary executable logging a
single qlog file named client.qlog in the /srv/qlogs directory.
This is for example useful in tests when the client sets up
just a single connection and then exits.

Command: QLOGDIR=/srv/qlogs/ quicserverbinary

Should result in the quicserverbinary executable generating
several logs files, one for each QUIC connection.
Given two QUIC connections, with ODCID values "abcde" and
"12345" respectively, this would result in two files:
/srv/qlogs/abcde_server.qlog
/srv/qlogs/12345_server.qlog

Command: QLOGFILE=/srv/qlogs/server.qlog quicserverbinary

Should result in the the quicserverbinary executable logging
a single qlog file named server.qlog in the /srv/qlogs directory.
Given that the server handled two QUIC connections before it was
shut down, with ODCID values "abcde" and "12345" respectively,
this would result in event instances in the qlog file being
tagged with the "group_id" field with values "abcde" and "12345".
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="tooling">
      <name>Tooling requirements</name>
      <t>Tools ingestion qlog <bcp14>MUST</bcp14> indicate which qlog version(s), qlog format(s), qlog
file and event schema(s), compression methods and potentially other input file
formats (for example .pcap) they support. Tools <bcp14>SHOULD</bcp14> at least support .qlog
files in the default JSON format (<xref target="format-json"/>). Additionally, they <bcp14>SHOULD</bcp14>
indicate exactly which values for and properties of the name
(namespace:event_type) and data fields they look for to execute their logic.
Tools <bcp14>SHOULD</bcp14> perform a (high-level) check if an input qlog file adheres to the
expected qlog file and event schemas. If a tool determines a qlog file does not
contain enough supported information to correctly execute the tool's logic, it
<bcp14>SHOULD</bcp14> generate a clear error message to this effect.</t>
      <t>Tools <bcp14>MUST NOT</bcp14> produce breaking errors for any field names and/or values in the
qlog format that they do not recognize. Tools <bcp14>SHOULD</bcp14> indicate even unknown event
occurrences within their context (e.g., marking unknown events on a timeline for
manual interpretation by the user).</t>
      <t>Tool authors should be aware that, depending on the logging implementation, some
events will not always be present in all traces. For example, using a circular
logging buffer of a fixed size, it could be that the earliest events (e.g.,
connection setup events) are later overwritten by "newer" events. Alternatively,
some events can be intentionally omitted out of privacy or file size
considerations. Tool authors are encouraged to make their tools robust enough to
still provide adequate output for incomplete logs.</t>
    </section>
    <section anchor="privacy">
      <name>Security and privacy considerations</name>
      <t>Protocols such as TLS <xref target="RFC8446"/> and QUIC <xref target="RFC9000"/> offer secure protection
for the wire image <xref target="RFC8546"/>. Logging can reveal aspects of the wire image
that would ordinarily be protected, creating tension between observability,
security and privacy, especially if data can be correlated across data sources.</t>
      <t>qlog permits logging of a broad and detailed range of data. Operators and
implementers are responsible for deciding what data is logged to address their
requirements and constraints. As per <xref target="RFC6973"/>, operators must be aware that
data could be compromised, risking the privacy of all participants. Where
entities expect protocol features to ensure data privacy, logging might
unknowingly be subject to broader privacy risks, undermining their ability to
assess or respond effectively.</t>
      <section anchor="data-at-risk">
        <name>Data at risk</name>
        <t>qlog operators and implementers need to consider security and privacy risks when
handling qlog data, including logging, storage, usage, and more. The
considerations presented in this section may pose varying risks depending on the
the data itself or its handling.</t>
        <t>The following is a non-exhaustive list of example data types that could contain
sensitive information that might allow identification or correlation of
individual connections, endpoints, users or sessions across qlog or other data
sources (e.g., captures of encrypted packets):</t>
        <ul spacing="normal">
          <li>IP addresses and transport protocol port numbers.</li>
          <li>Session, Connection, or User identifiers e.g., QUIC Connection IDs <xref section="9.5" sectionFormat="of" target="RFC9000"/>).</li>
          <li>System-level information e.g., CPU, process, or thread identifiers.</li>
          <li>Stored State e.g., QUIC address validation and retry tokens, TLS session
tickets, and HTTP cookies.</li>
          <li>TLS decryption keys, passwords, and HTTP-level API access or authorization tokens.</li>
          <li>High-resolution event timestamps or inter-event timings, event counts, packet
sizes, and frame sizes.</li>
          <li>Full or partial raw packet and frame payloads that are encrypted.</li>
          <li>Full or partial raw packet and frame payloads that are plaintext e.g., HTTP Field
values, HTTP response data, or TLS SNI field values.</li>
        </ul>
      </section>
      <section anchor="operational-implications-and-recommendations">
        <name>Operational implications and recommendations</name>
        <t>Operational considerations should focus on authorizing capture and access to logs. Logging of
Internet protocols using qlog can be equivalent to the ability to store or read plaintext
communications. Without a more detailed analysis, all of the security considerations of plaintext access apply.</t>
        <t>It is recommended that qlog capture is subject to access control and auditing.
These controls should support granular levels of information capture based on
role and permissions (e.g., capture of more-sensitive data requires higher
privileges).</t>
        <t>It is recommended that access to stored qlogs is subject to access control and
auditing.</t>
        <t>End users might not understand the implications of qlog to security or privacy,
and their environments might limit access control techniques. Implementations should
make enabling qlog conspicuous (e.g., requiring clear and explicit actions to
start a capture) and resistant to social engineering, automation, or drive-by
attacks; for example, isolation or sandboxing of capture from other activities
in the same process or component.</t>
        <t>It is recommended that data retention policies are defined for the storage of
qlog files.</t>
        <t>It is recommended that qlog files are encrypted in transit and at rest.</t>
      </section>
      <section anchor="data-minimization-or-anonymization">
        <name>Data minimization or anonymization</name>
        <t>Applying data minimization or anonymization techniques to qlog might help
address some security and privacy risks. However, removing or anonymizing data
without sufficient care might not enhance privacy or security and
could diminish the utility of qlog data.</t>
        <t>Operators and implementers should balance the value of logged data with the
potential risks of voluntary or involuntary disclosure to trusted or untrusted
entities. Importantly, both the breadth and depth of the data needed to make it
 useful, as well as the definition of entities depend greatly on the intended
use cases. For example, a research project might be tightly scoped, time bound,
and require participants to explicitly opt in to having their data collected
with the intention for this to be shared in a publication. Conversely, a server
administrator might desire to collect telemetry, from users whom they have no
relationship with, for continuing operational needs.</t>
        <t>The most extreme form of minimization or anonymization is deleting a field,
equivalent to not logging it. qlog implementations should offer fine-grained
control for this on a per-use-case or per-connection basis.</t>
        <t>Data can undergo anonymization, pseudonymization, permutation, truncation,
re-encryption, or aggregation; see <xref section="B" sectionFormat="of" target="DNS-PRIVACY"/> for
techniques, especially regarding IP addresses. However, operators should be
cautious because many anonymization methods have been shown to be insufficient to safeguard
user privacy or identity, particularly with large or easily correlated data sets.</t>
        <t>Operators should consider end user rights and preferences. Active user participation (as
indicated by <xref target="RFC6973"/>) on a per-qlog basis is challenging but aligning qlog
capture, storage, and removal with existing user preference and privacy controls
is crucial. Operators should consider agressive approaches to deletion or
aggregation.</t>
        <t>The most sensitive data in qlog is typically contained in RawInfo type fields
(see <xref target="raw-info"/>). Therefore, qlog users should exercise caution and limit the
inclusion of such fields for all but the most stringent use cases.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to register a new entry in the "IETF URN Sub-namespace for
Registered Protocol Parameter Identifiers" registry (<xref target="RFC3553"/>)":</t>
      <dl>
        <dt>Registered Parameter Identifier:</dt>
        <dd>
          <t>qlog</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This Document</t>
        </dd>
        <dt>IANA Registry Reference:</dt>
        <dd>
          <t><eref brackets="angle" target="https://www.iana.org/assignments/qlog"/></t>
        </dd>
      </dl>
      <t>IANA is requested to create the "qlog log file schema URIs" registry
at <eref target="https://www.iana.org/assignments/qlog"/> for the purpose of registering
log file schema. It has the following format/template:</t>
      <dl>
        <dt>Log File Schema URI:</dt>
        <dd>
          <t>[the log file schema identifier]</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>[a description of the log file schema]</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>[to a specification defining the log file schema]</t>
        </dd>
      </dl>
      <t>This document furthermore adds the following two new entries to the "qlog log
file schema URIs" registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Log File Schema URI</th>
            <th align="left">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">urn:ietf:params:qlog:file:contained</td>
            <td align="left">Concrete log file schema that can contain several traces from multiple vantage points.</td>
            <td align="left">
              <xref target="qlog-file-schema"/></td>
          </tr>
          <tr>
            <td align="left">urn:ietf:params:qlog:file:sequential</td>
            <td align="left">Concrete log file schema containing a single trace, optimized for seqential read and write access.</td>
            <td align="left">
              <xref target="qlog-file-seq-schema"/></td>
          </tr>
        </tbody>
      </table>
      <t>IANA is requested to create the "qlog event schema URIs" registry
at <eref target="https://www.iana.org/assignments/qlog"/> for the purpose of registering
event schema. It has the following format/template:</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>[the event schema identifier]</t>
        </dd>
        <dt>Namespace:</dt>
        <dd>
          <t>[the identifier of the namespace that this event schema either defines or extends]</t>
        </dd>
        <dt>Event Types:</dt>
        <dd>
          <t>[a comma-separated list of concrete event types defined in the event schema]</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>[a description of the event schema]</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>[to a specification defining the event schema definition]</t>
        </dd>
      </dl>
      <t>This document furthermore adds the following two new entries to the "qlog event
schema URIs" registry:</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:loglevel</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>loglevel</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>error,warning,info,debug,verbose</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Well-known logging levels for free-form text.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t><xref target="loglevel-events"/></t>
        </dd>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:simulation</t>
        </dd>
        <dt>Namespace</dt>
        <dd>
          <t>simulation</t>
        </dd>
        <dt>Event Types</dt>
        <dd>
          <t>scenario,marker</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Events for simulation testing.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t><xref target="sim-events"/></t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="JSON">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="I-JSON">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="JSON-Text-Sequences">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="February" year="2015"/>
            <abstract>
              <t>This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq". A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7464"/>
          <seriesInfo name="DOI" value="10.17487/RFC7464"/>
        </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="CDDL">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </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="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC7464">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="February" year="2015"/>
            <abstract>
              <t>This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq". A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7464"/>
          <seriesInfo name="DOI" value="10.17487/RFC7464"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC6839">
          <front>
            <title>Additional Media Type Structured Syntax Suffixes</title>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>A content media type name sometimes includes partitioned meta- information distinguished by a structured syntax to permit noting an attribute of the media as a suffix to the name. This document defines several structured syntax suffixes for use with media type registrations. In particular, it defines and registers the "+json", "+ber", "+der", "+fastinfoset", "+wbxml" and "+zip" structured syntax suffixes, and provides a media type structured syntax suffix registration form for the "+xml" structured syntax suffix. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6839"/>
          <seriesInfo name="DOI" value="10.17487/RFC6839"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8091">
          <front>
            <title>A Media Type Structured Syntax Suffix for JSON Text Sequences</title>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+json-seq" as a structured syntax suffix for JSON text sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8091"/>
          <seriesInfo name="DOI" value="10.17487/RFC8091"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="DNS-PRIVACY">
          <front>
            <title>Recommendations for DNS Privacy Service Operators</title>
            <author fullname="S. Dickinson" initials="S." surname="Dickinson"/>
            <author fullname="B. Overeinder" initials="B." surname="Overeinder"/>
            <author fullname="R. van Rijswijk-Deij" initials="R." surname="van Rijswijk-Deij"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <date month="October" year="2020"/>
            <abstract>
              <t>This document presents operational, policy, and security considerations for DNS recursive resolver operators who choose to offer DNS privacy services. With these recommendations, the operator can make deliberate decisions regarding which services to provide, as well as understanding how those decisions and the alternatives impact the privacy of users.</t>
              <t>This document also presents a non-normative framework to assist writers of a Recursive operator Privacy Statement, analogous to DNS Security Extensions (DNSSEC) Policies and DNSSEC Practice Statements described in RFC 6841.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="232"/>
          <seriesInfo name="RFC" value="8932"/>
          <seriesInfo name="DOI" value="10.17487/RFC8932"/>
        </reference>
        <reference anchor="RFC3553">
          <front>
            <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <date month="June" year="2003"/>
            <abstract>
              <t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items. The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources. 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="73"/>
          <seriesInfo name="RFC" value="3553"/>
          <seriesInfo name="DOI" value="10.17487/RFC3553"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="QLOG-QUIC">
          <front>
            <title>QUIC event definitions for qlog</title>
            <author fullname="Robin Marx" initials="R." surname="Marx">
              <organization>Akamai</organization>
            </author>
            <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
              <organization>Meta</organization>
            </author>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   This document describes a qlog event schema containing concrete qlog
   event definitions and their metadata for the core QUIC protocol and
   selected extensions.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-11"/>
        </reference>
        <reference anchor="QLOG-H3">
          <front>
            <title>HTTP/3 qlog event definitions</title>
            <author fullname="Robin Marx" initials="R." surname="Marx">
              <organization>Akamai</organization>
            </author>
            <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
              <organization>Meta</organization>
            </author>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   This document defines a qlog event schema containing concrete events
   for the core HTTP/3 protocol and selected extensions.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-11"/>
        </reference>
        <reference anchor="ANRW-2020" target="https://qlog.edm.uhasselt.be/anrw/">
          <front>
            <title>Debugging QUIC and HTTP/3 with qlog and qvis</title>
            <author initials="R." surname="Marx" fullname="Robin Marx">
              <organization/>
            </author>
            <author initials="M." surname="Piraux" fullname="Maxime Piraux">
              <organization/>
            </author>
            <author initials="P." surname="Quax" fullname="Peter Quax">
              <organization/>
            </author>
            <author initials="W." surname="Lamotte" fullname="Wim Lamotte">
              <organization/>
            </author>
            <date year="2020" month="September"/>
          </front>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8546">
          <front>
            <title>The Wire Image of a Network Protocol</title>
            <author fullname="B. Trammell" initials="B." surname="Trammell"/>
            <author fullname="M. Kuehlewind" initials="M." surname="Kuehlewind"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>This document defines the wire image, an abstraction of the information available to an on-path non-participant in a networking protocol. This abstraction is intended to shed light on the implications that increased encryption has for network functions that use the wire image.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8546"/>
          <seriesInfo name="DOI" value="10.17487/RFC8546"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Much of the initial work by Robin Marx was done at the Hasselt and KU Leuven
Universities.</t>
      <t>Thanks to Jana Iyengar, Brian Trammell, Dmitri Tikhonov, Stephen Petrides, Jari
Arkko, Marcus Ihlar, Victor Vasiliev, Mirja Kuehlewind, Jeremy Laine, Kazu
Yamamoto, Christian Huitema, Hugo Landau, Will Hawkins, Mathis Engelbart, Kazuho
Oku, and Jonathan Lennox for their feedback and suggestions.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-12">
        <name>Since draft-ietf-quic-qlog-main-schema-12:</name>
        <ul spacing="normal">
          <li>Changed Path and related fields to Tuple (#491)</li>
          <li>Replaced all lenght fields with raw.length (#495)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-10">
        <name>Since draft-ietf-quic-qlog-main-schema-10:</name>
        <ul spacing="normal">
          <li>Multiple editorial changes</li>
          <li>Remove protocol_types and move event_schemas to Trace and TraceSeq (#449)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-09">
        <name>Since draft-ietf-quic-qlog-main-schema-09:</name>
        <ul spacing="normal">
          <li>Renamed <tt>protocol_type</tt> to <tt>protocol_types</tt> (#427)</li>
          <li>Moved Trigger section. Purely editorial (#430)</li>
          <li>Removed the concept of categories and updated extension and event schema logic
to match. Major change (#439)</li>
          <li>Reworked completely how we handle timestamps and clocks. Major change (#433)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-08">
        <name>Since draft-ietf-quic-qlog-main-schema-08:</name>
        <ul spacing="normal">
          <li>TODO (we forgot...)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-07">
        <name>Since draft-ietf-quic-qlog-main-schema-07:</name>
        <ul spacing="normal">
          <li>Added path and PathID (#336)</li>
          <li>Removed custom definition of uint64 type (#360, #388)</li>
          <li>ProtocolEventBody is now called ProtocolEventData (#352)</li>
          <li>Editorial changes (#364, #289, #353, #361, #362)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-06">
        <name>Since draft-ietf-quic-qlog-main-schema-06:</name>
        <ul spacing="normal">
          <li>Editorial reworking of the document (#331, #332)</li>
          <li>Updated IANA considerations section (#333)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-05">
        <name>Since draft-ietf-quic-qlog-main-schema-05:</name>
        <ul spacing="normal">
          <li>Updated qlog_version to 0.4 (due to breaking changes) (#314)</li>
          <li>Renamed 'transport' category to 'quic' (#302)</li>
          <li>Added 'system_info' field (#305)</li>
          <li>Removed 'summary' and 'configuration' fields (#308)</li>
          <li>Editorial and formatting changes (#298, #303, #304, #316, #320, #321, #322, #326, #328)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-04">
        <name>Since draft-ietf-quic-qlog-main-schema-04:</name>
        <ul spacing="normal">
          <li>Updated RawInfo definition and guidance (#243)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-03">
        <name>Since draft-ietf-quic-qlog-main-schema-03:</name>
        <ul spacing="normal">
          <li>Added security and privacy considerations discussion (#252)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-02">
        <name>Since draft-ietf-quic-qlog-main-schema-02:</name>
        <ul spacing="normal">
          <li>No changes - new draft to prevent expiration</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-01">
        <name>Since draft-ietf-quic-qlog-main-schema-01:</name>
        <ul spacing="normal">
          <li>Change the data definition language from TypeScript to CDDL (#143)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-main-schema-00">
        <name>Since draft-ietf-quic-qlog-main-schema-00:</name>
        <ul spacing="normal">
          <li>Changed the streaming serialization format from NDJSON to JSON Text Sequences
(#172)</li>
          <li>Added Media Type definitions for various qlog formats (#158)</li>
          <li>Changed to semantic versioning</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-main-schema-draft-02">
        <name>Since draft-marx-qlog-main-schema-draft-02:</name>
        <ul spacing="normal">
          <li>These changes were done in preparation of the adoption of the drafts by the QUIC
working group (#137)</li>
          <li>Moved RawInfo, Importance, Generic events and Simulation events to this document.</li>
          <li>Added basic event definition guidelines</li>
          <li>Made protocol_type an array instead of a string (#146)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-main-schema-01">
        <name>Since draft-marx-qlog-main-schema-01:</name>
        <ul spacing="normal">
          <li>
            <t>Decoupled qlog from the JSON format and described a mapping instead (#89)
            </t>
            <ul spacing="normal">
              <li>Data types are now specified in this document and proper definitions for
fields were added in this format</li>
              <li>64-bit numbers can now be either strings or numbers, with a preference for
numbers (#10)</li>
              <li>binary blobs are now logged as lowercase hex strings (#39, #36)</li>
              <li>added guidance to add length-specifiers for binary blobs (#102)</li>
            </ul>
          </li>
          <li>Removed "time_units" from Configuration. All times are now in ms instead (#95)</li>
          <li>Removed the "event_fields" setup for a more straightforward JSON format
(#101,#89)</li>
          <li>Added a streaming option using the NDJSON format (#109,#2,#106)</li>
          <li>Described optional optimization options for implementers (#30)</li>
          <li>Added QLOGDIR and QLOGFILE environment variables, clarified the .well-known URL
usage (#26,#33,#51)</li>
          <li>Overall tightened up the text and added more examples</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-main-schema-00">
        <name>Since draft-marx-qlog-main-schema-00:</name>
        <ul spacing="normal">
          <li>All field names are now lowercase (e.g., category instead of CATEGORY)</li>
          <li>Triggers are now properties on the "data" field value, instead of separate field
types (#23)</li>
          <li>group_ids in common_fields is now just also group_id</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
5gPYNZ8MVlvZpcQTONlZz6pOq4UEKTJN4EfSfFLP3tKz5toE4+xL96tfPT95
9vj05cnDx4PHf3j8/PXrP758HBv8ZVRtcjJGshqwl27IuLisphNLA6MzduLj
4CvHvwf7tgewj4iTrBEU3dCqHUaTZFeha8DZ3t7XZ74rzTAL9S6DkhfytyRz
0obCNmNYJfFVaVwVPyZPhd0P9Nk0yOqr0IkrYsplx7Zx4p6tnp+yuPd/e/cu
b/5NLnGQ9536YH/1q9lqrtnR78PsUv++6ziiY9NBuzN+47YMlBEIsx0OxQxo
J57LN6PjbFRVU7eLuayj1U1me/i3zDbWksE8W3nuafhJP/uGCcFDcc9LgSzz
9c7/vJxLS1f3VSSg0s8RiPlmIDyAeNY7VCpprRPQ8U1P4hrwbPnZ9vNxQ9z7
NmTqKp0EYmN4xhN4L9o2Wq4Dyx1raoIcCJOi1Bd/yhUqE8rl8xTFK6/5lSB9
wYizmag51MyJYiF0IX4VFTGmiDixQ2mNNn2rWS1OY+G1vL6W2mPhPmGRIlIz
4X8c/FQ7cbVhrlm967QUVGAM2dl6HeozZWGbiBlKAiN9bL6ccb0YX+M22EMl
ypfAaLUAL2NWESfkzbvwdJ7nh7JgXA8VpIchxjvjsqB81Wfw7k98zERwcGzc
Fq86FEo4A7GMrq8nmye0MEUvl4ocPP0GCrppOpHdPQWFG8HYFO+YxR9pEjIp
SENiYYuAuHHpEgOS+EIdWDrDPSW4PxRe+4YmX1x1BBQzgXbMkeHiH2R76c0/
uIYGH6Q02A9y2B3kUKnDhjEOu3Tcy9sibI2I0m4/6q82lFKXg8J5uw0/0sri
zYY/Dm3y5H51ncs4/zlRCQszUL87vRqNyj6fMG5C8jaigZG69eUG7bZjLfPV
wfkw4x5BLM9DhSnqqa8ovgmxnOigNk4k0kkutvivlqRjczAL3YRy4o0dnYak
ZmDaVEzc7AKch3mG479elHLhXvpszVQ2iqiwp9vsFvVeZNWSO2AQXV55d+yg
gVfYM0vYRoj6cprpdLoURehduM5Kh7X/JCPomjwt4mmUsCtJr3GOWCiGEYlX
jBGIVj9O7nXsV7jUjAweMbnFacRPFCtn05Z/KeQ6H9zlX6QX5HHWjQrS1zio
pTn+8Ut+gMNsfgp3GKa9gYyM/XTv8ckkcc2JpCmWLh97CGcnSbZ/USSyWm2b
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
wgfNRHcZ9u6mmFoxz8zinuQFpohB6vJJMs5rMO9bqYlotr7QgckbX6zYku2i
EwxvLPeFmQAeReTrYUCiJ4+ynRePHj55tNtXJhm8S6ilCGexYL52enIavsHp
EXYtUNcoBL+yi2gRotmkm6BXUtmXA2DR3d3cnw019OlYjz3Cfr3X1O/Y99bs
jaeIluRgqAwyjfwtwabOncqFFkpuhgM+nc6jBMlivBRW7MtTOUXxQBUlPyqe
U8cMKwo0aOgsWy2+85oWjfe4WyV73fioeVRLHXd/XqI6qt2y6KL7IJrifdlK
HGcEH8LkGDy8UbnP18Kk+1gMj8CWnXmoeKOM3GL34w1uoEpD91sJuryquj81
YvvPGN3MENrLR+NJ0ePAgh73AOmxjRCvQBXSBtJX3R2g/BRWc+yivfNYb2RX
fFjxjzx48uP1eBY9eVOYfgquVgHJH3IXz+I5r8UzBbI1iFX6LVFHk43At1CR
EvJR45pLiDR0HT9xKNnGQ3EbD0UDRjQCvUlawPEm2aHjiKYkPbPWuAf/sn0p
w9S80KEk3rSwQXoKIfoR702JPlsZfLHRuH8ubPYqFEPGq7i+7QWoaqUVelU4
8fnNJtdAAYWEtAPnVqQq+b+dZ6lxbQH+2ZRYrVTAUrik8oVoeNGTyjmkVPbK
mt6RpJoMF+N8sauWZeGR3VqcVqLZWOgwksr0MOP4GvMrd6Ood7uWiTaU7XUe
PlYZQuAU1T5VbUtLpJpsjgvidny5B6mt8EacFj7mwJqEYb5pVb0V3lzpHbTk
CdpUOR66ZO9qEyGk2Ak5z7vSqUhlQAFwwOZ8Anna+/N8zdToic6JSoZNzlqm
T0NmOT28Y/FKzkLG1FsfBx8EfY4TC01ZjXbJU3zRyFa5Pofu08uspk9K2SzN
ULeGm8hKoDGHhui+IftCcumzESkqnP3Br9u5rZKYX9r9XuW9noI/LkJ/T758
VW9fTbaDmAFn4vKuUommQieaWgI1QnncsvaClPojrOZK8nYjkUcoKcCBdZAZ
iSMsufmPRrlpArmIRFDodhUsmTRijxWW/EqanyJUYBJ3rYiFpm4hGbj8rOQj
i4ZRevl6wwGO2Wo6wqC1H+W+NyhyYXNJLpEkq0hMpDgPyygNxXMRpISVKD9j
pUAl9jaSRNhWpz9LMqZ0vITKhLBhrtK5ynrz4grNf6xSy0nQRsA82Mepc1jl
/iQ1z6earvmQvPUzTcyyngd2IlgZbFBLBDtOJPXjrV1/sfHU1Qjylo+FcWJb
MC0inxDpB8qp9i8efnNzsTikaYrq1BKqtamIOTEOy90P6bLezpi9fnqaffjw
Lwghu337rrbTZs4k3z7Y39+nbys+SPahSRSAHIkz7SOqsqCj3bnNXeef+uKU
3HseziwzzippDa9KBKvw9aqeQIBBpdGRnxG2CWlJwTVWpO+cJeNJ2WKLJHXN
BtAkETREVplqW+aqlvuB9VNKfkocmQT2DTXZ0xK5o4o+OeJp8on641D9hIbw
YQ2SrP1C+6hK8/SkuL3kRLBb2lL2OJ9TooC5HLgW7BUvI2uzk0mtoQRl7RIx
gVO4Q3gJOxgl4wOncvfBvSPkZFR+PTOgYUI7nEDF7ieLAPDGAvhIUDcrtL8X
onJJjZtykfOsXCLCV2qw9h3dluTaUJMr4vOs/pwMvuzgd0I1S067hoVo6SN2
GfRFKOCPBaKEKjq2SZENvXYWlIWaTGzl1uw49CZTfsP0QaxvUnio5eH05Kv4
CNP+BGb+tIuXbcI9WRqrX44lZR8AKkkNoWaC7r3PlrD8gglsbs0y4AaRbJ/O
NVdCXYReOI2STbgzOBsPRbhYruSVdDkEq9aCaxLyBprTNpktdih1loItm4PD
5tyY+jInNIK1xzpYxo0Z4sK6glYqXDhf0yCVKkJ9SK0sq9Waxt6KHNfm4lJn
3qKYKHxmIPBFddnR16jFW265HK4VsOeiAxbMq7ybBFdBVuxrLu2/JlbQepcb
AD15aXfSmmQQAWhYivU4z39pLNAQL53KSvqRQYSdD99zWKKvUKVJKEKUE9tJ
ExKvXJY9GN6x1Csh2rsyy6ppi5lW0YnBLKM+fPl937wLWpAN6bHx/DIMW2Xp
HxaEwoKMFEX9NbF/RHfgsr0tcA5gMgp3WiiRCUBO8JnDcsYkLJeFTIRnQ+sw
hAw2fe42cyU5FvaS7ujk5RNvRq+VA3t3DU/Po34HqZoWWk2XsnmpFoZiTi1h
aiMVrFsfAw6nz/zC91ngLMzGqr3QHtgF2o9qGolPFFN9yzH8daZdLjj2YkOT
Ja1R48tNe8z6JYOEHGc5Iobutxwjk6ko3E8joZT60FQA/OnzJypE+zg8dnor
lcmn2uTIQj/4pNXyZ00x4qc7NEpF1fNqvBTZV49Ls0DEjxb8IhJBFhVeoatu
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
TVR5sGed+/8AGsDX15RXAQA=

-->

</rfc>
