<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.40 (Ruby 4.0.2) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-26" category="std" consensus="true" submissionType="IETF" updates="8610, 8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title>Concise Diagnostic Notation (CDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-26"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2026" month="June" day="15"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 121?>

<t>This document formalizes and consolidates the definition of the Concise
Diagnostic Notation (CDN) of the Concise Binary Object Representation
(CBOR), addressing implementer experience.</t>
      <t>Replacing CDN's previous informal descriptions, it updates
RFC 8949, obsoleting its Section 8, and RFC 8610, obsoleting its
Appendix G.</t>
      <t>It also specifies registry-based extension points and uses them
to support text representations such as of epoch-based dates/times and of IP
addresses and prefixes.</t>
      <t><cref anchor="status">(This cref will be removed by the RFC editor:)<br/>
-26 is intended to address the May/June 2026
Working Group Last Call comments on <tt>-25</tt> and the ensuing WG discussions.<br/>
Specifically, this update:<br/>
• is going further with the idea to entirely replace the non-backwards
compatible update considered for the RFC 8610/G.4 concatenation by two new
application extensions (temporarily named <tt>b1</tt>/<tt>t1</tt>), and to add
related application-oriented extensions
that deprecate the original <tt>streamstring</tt> syntax.<br/>
• includes the float'' application-extension so that the entire
CBOR format can be covered.<br/>
• now uses rules closer to those of markdown for handling data
  transparency in raw strings, simplifying their implementation.<br/>
• adds security considerations.<br/>
• proactively reserves the application-extension identifier
  "pragma" for potential future standardization.
• This update does not address certain comments that propose some
editorial restructuring requiring moving text around; this is best
done in a next revision after the technical comments are addressed.</cref></t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        cbor Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 158?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Binary Object Representation (CBOR) (RFC8949) <xref target="STD94"/>
    is a data format whose design goals include the possibility of
    extremely small code size, fairly small message size, and
    extensibility without the need for version negotiation.
In addition to the binary interchange format, the original CBOR specification
    described a text-based "diagnostic notation" (<xref section="6" sectionFormat="of" target="RFC7049"/>, now Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), in
    order to be able to converse about CBOR data items without having
    to resort to binary data.
<xref section="G" sectionFormat="of" target="RFC8610"/> extended this into what also became known as
Extended Diagnostic Notation (EDN), often including <xref section="4.2" sectionFormat="of" target="RFC8742"/> and draft revisions of the present document.
Diagnostic notation is now specified by this document, obsoleting all these
previous descriptions, and is known as Concise Diagnostic Notation (CDN).</t>
      <t>Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.</t>
      <t>The interchange format created by standardizing CDN is not intended to
compete with the actual binary interchange format CBOR, but enables
the use of a shared diagnostic notation in tools for and in documents
about CBOR.
Still, between tools for CBOR development and diagnosis, document
generation systems, continuous integration (CI)
environments, configuration files, and user interfaces for viewing and
editing for all these, CDN is often "interchanged" and therefore
merits a specification that facilitates interoperability within this
domain as well as reliable translation to and from CBOR.
CDN is not designed or intended for general-purpose use in protocol
elements exchanged between systems engaged in processes outside those
listed here.</t>
      <t>​This document consolidates and formalizes the definition of CDN,
providing a formal grammar (see <xref target="grammar"/> and <xref target="app-grammars"/>), and
incorporating small changes based on implementation experience.
It updates <xref target="RFC8949"/> by obsoleting Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
<xref target="RFC8610"/> by obsoleting <xref section="G" sectionFormat="of" target="RFC8610"/>.
It is intended to serve as the single reference target that can be used
in specifications that use CDN.</t>
      <t>It also specifies two registry-based extension points for the
diagnostic notation:
one for additional encoding indicators, and
one for adding application-oriented literal forms.
It uses these registries to add encoding indicators for a more
complete coverage of encoding variation,
and to add application-oriented literal forms that enhance CDN with text
representations of epoch-based date/times, of IP addresses
and prefixes <xref target="RFC9164"/>, and of Concise Resource Identifiers (CRI
<xref target="I-D.ietf-core-href"/>), as well as an application-oriented literal that
represents cryptographic hash values computed from byte strings.</t>
      <t>In addition, this document registers a media type identifier
and a content-format for CDN.  This does not
elevate its status as an interchange format, but recognizes that
interaction between tools is often smoother if media types can be used.</t>
      <aside>
        <t>Examples in RFCs often do not use media type identifiers, but
special sourcecode type names that are allocated
in <eref target="https://www.rfc-editor.org/materials/sourcecode-types.txt">https://www.rfc-editor.org/materials/sourcecode-types.txt</eref>.
At the time of writing, this resource lists four sourcecode type
names that can be used in RFCs for including CBOR data items and
CBOR-related languages:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cbor</tt> (which is actually not useful, as CBOR is a binary format
and cannot be used in textual examples in an RFC),</t>
          </li>
          <li>
            <t><tt>cbor-diag</tt> (which is another name for CDN, as is now defined in the
present document),</t>
          </li>
          <li>
            <t><tt>cbor-pretty</tt> (which is a possibly annotated and pretty-printed
hexdump of an encoded CBOR data item, along the lines of the
grammar of <xref target="h-grammar"/>, as used for instance for some of the examples
in <xref section="A.3" sectionFormat="of" target="RFC9290"/>), and</t>
          </li>
          <li>
            <t><tt>cddl</tt> (which is used for the Concise Data Definition Language,
CDDL, see <xref target="terminology"/> below).</t>
          </li>
        </ul>
      </aside>
      <t>Note that CDN is not meant to be the only text-based representation of
CBOR data items.
For instance, <xref target="YAML"/> <xref target="RFC9512"/> is able to represent most CBOR
data items, possibly requiring use of YAML's extension points.
YAML does not provide certain features that can be useful with tools
and documents needing text-based representations of CBOR data items
(such as embedded CBOR or encoding indicators),
but it does provide a host of other features that CDN does not provide
such as anchor/alias data sharing, at a cost of higher implementation
and learning complexity.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <t><xref target="diagnostic-notation"/> of this document has been built from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>.
The latter provided a number of useful extensions to the initial
diagnostic notation that was originally defined in <xref section="6" sectionFormat="of" target="RFC7049"/>.
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/> have
collectively been called "Extended Diagnostic Notation" (EDN),
now simplified as "Concise Diagnostic Notation" (CDN) giving
the present document its name.</t>
        <t>After introductory material, <xref target="app-ext"/>
illustrates the concept of application-oriented extension literals by
defining a number of application-extensions.
<xref target="cdn-tags"/> defines mechanisms
for dealing with unknown application-oriented literals and
deliberately elided information.
<xref target="grammars"/> gives the formal syntax of CDN in ABNF, with
explanations for some features of and additions to this syntax, as an
overall grammar (<xref target="grammar"/>) and specific grammars for the content of
app-string and byte-string literals (<xref target="app-grammars"/>).
This is followed by the conventional sections
for
<xref format="title" target="sec-iana"/> (<xref format="counter" target="sec-iana"/>),
<xref format="title" target="seccons"/> (<xref format="counter" target="seccons"/>),
and References (<xref format="counter" target="sec-normative-references"/>, <xref format="counter" target="sec-informative-references"/>).
An informational comparison of CDN with CDDL follows in
<xref target="cdn-and-cddl"/>.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology and Conventions</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> defines the original CBOR diagnostic notation,
and <xref section="G" sectionFormat="of" target="RFC8610"/> supplies a number of extensions to the
diagnostic notation that form the basis for what is now the Concise Diagnostic Notation
(CDN).
The diagnostic notation extensions include popular features such as
embedded CBOR (encoded CBOR data items in byte strings) and comments.
A simple diagnostic notation extension that enables representing CBOR
sequences was added in <xref section="4.2" sectionFormat="of" target="RFC8742"/>.
As at
least some elements of the extended form are now near-universally
used, the terms "diagnostic notation" and "extended diagnostic
notation" have become synonyms in the context of CBOR, with "concise
diagnostic notation" (CDN) now the preferred synonym, hinting at
knowledge of this updated specification.</t>
        <t>In a similar vein, the term "ABNF" in this document refers to the
language defined in <xref target="STD68"/> as extended in <xref target="RFC7405"/>, where the
"characters" of Section <xref target="RFC5234" section="2.3" sectionFormat="bare"/> of RFC 5234 <xref target="STD68"/> are Unicode scalar
values.
Where names for ABNF rules are used in the text, they are shown in
<tt>typewriter</tt> font (not distinguishable in the plaintext rendition of
this document).
Brief snippets of grammar may also be given in the text as I-Regexp regular
expressions <xref target="RFC9485"/>.</t>
        <t>The term "CDDL" (Concise Data Definition Language) refers to the data
definition language defined in
<xref target="RFC8610"/> and its registered extensions (such as those documented in
<xref target="RFC9165"/>, <xref target="RFC9741"/>, and <xref target="RFC9682"/>).
Additional information about the relationship between the two
languages CDN and CDDL is captured in <xref target="cdn-and-cddl"/>.</t>
        <t>Examples sometimes need to be quoted in the text, in particular in
cases where the typewriter font used for example text cannot be
distinguished in the plaintext rendition of this document.
ASCII quotes, however, are already taken: <tt>true</tt>, <tt>"true"</tt>, <tt>'true'</tt>,
and <tt>`true`</tt> are all different literals in CDN and should not be
confused.
Therefore, a different quoting convention as in »<tt>true</tt>« or »<tt>"true"</tt>«
is used for examples in the text where this is needed to remain
unambiguous.</t>
        <!-- text adapted from RFC 9581 -->
<t>Superscript notation denotes exponentiation.
For example, 2 to the power of 64+1 is notated: 2<sup>64+1</sup>.
In the plain-text rendition of this specification, superscript
notation is not available and exponentiation is therefore rendered by
the surrogate notation seen here in the plain-text rendition.</t>
        <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 <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="non-objectives-of-this-document">
        <name>(Non-)Objectives of this Document</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> states the objective of defining a
common human-readable diagnostic notation with CBOR.
In particular, it states:</t>
        <blockquote>
          <t>All actual interchange always happens in the binary format.</t>
        </blockquote>
        <section anchor="for-humans">
          <name>For Humans</name>
          <t>One important application of CDN is the notation of CBOR data for
humans: in specifications, on whiteboards, and for entering test data.
A number of features, such as comments inside prefixed string literals, are mainly
useful for people-to-people communication via CDN.
Programs also often output CDN for diagnostic purposes, such as in
error messages or to enable comparison (including generation of diffs
via tools) with test data.</t>
        </section>
        <section anchor="determinism">
          <name>Determinism?</name>
          <t>For comparison with test data, it is often useful if different
implementations generate the same (or similar) output for the same
CBOR data items.
This is comparable to the objectives of deterministic serialization
for CBOR data items themselves (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
However, there are even more representation variants in CDN than in
binary CBOR, and there is little point in specifically endorsing a
single variant as "deterministic" when other variants may be more
useful for human understanding, e.g., the <tt>&lt;&lt; &gt;&gt;</tt> notation as
opposed to, say, hexadecimal <tt>h''</tt> notation;
a CDN generator may have quite a few options
that control what presentation variant is most desirable for the
application that it is being used for.</t>
          <t>Because of this, a deterministic representation is not defined for
CDN.
More generally speaking, there is no expectation for "roundtripping":
Converting CDN to binary CBOR and back to CDN will generally not achieve exactly
the same result as the original input CDN.
This possibly
was created by humans or by a different CDN generator and may contain
presentation information that is not represented in the binary CBOR.</t>
        </section>
        <section anchor="basic">
          <name>Basic Output Format</name>
          <t>However, there is a certain expectation that CDN generators can be
configured to some basic output format, which:</t>
          <ul spacing="normal">
            <li>
              <t>looks like JSON where that is possible;</t>
            </li>
            <li>
              <t>inserts encoding indicators, if any, only where the binary form differs from
Preferred Serialization (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>);</t>
            </li>
            <li>
              <t>uses hexadecimal representation (<tt>h''</tt>) for byte strings, not
<tt>b64''</tt> or embedded CBOR (<tt>&lt;&lt;&gt;&gt;</tt>);</t>
            </li>
            <li>
              <t>does not generate elaborate blank space (newlines, indentation) for
pretty-printing, but does use common blank spaces such as after <tt>,</tt>
and <tt>:</tt>.</t>
            </li>
          </ul>
          <t>See <xref target="repertoire"/> for more considerations about the character
repertoire used for CDN source text.</t>
          <t>Additional features such as ensuring
deterministic map ordering (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) on output,
or even deviating from the basic
configuration in some systematic way, can further assist in comparing
test data.
Information obtained from a CDDL model can help in choosing
application-oriented literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
        </section>
        <section anchor="evolution">
          <name>Evolution</name>
          <t>Diagnostic notation is often used in interchange
situations where backward compatibility is much less of a concern than
in the kinds of interchanges enabled by binary CBOR.
This meant that extensions to diagnostic notation could be introduced
relatively freely in <xref section="G" sectionFormat="of" target="RFC8610"/> and in <xref section="4.2" sectionFormat="of" target="RFC8742"/>.
There was little point in not using these extensions for instance in the examples
contained in specifications.
With the landscape of CBOR related tools becoming more populated,
this kind of evolution is now less desirable.</t>
          <t>For the CBOR representation format, Section <xref target="RFC8949" section="7.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>
introduced a limited number of specific <em>extension points</em>, in
particular the concept of <em>tags</em>, to enable the introduction of new
constructs such as data types without a need to update the base
specification.</t>
          <t>The present specification follows suit by adding extension points to
CDN, one very general one (<xref target="app-lit"/>) and one specific to diagnostic
processing of encoding variants (<xref target="encoding-indicators"/>).</t>
          <t>From the relatively unconstrained way extensions were added in
<xref target="RFC8610"/>, the present specification also derives taking the liberty to
make two changes to these extensions that are not entirely backwards
compatible.
<xref target="comment-discussion"/> and <xref target="concat-removed"/> have more details.
Also, some syntax that has been part of the original diagnostic
notation has been deprecated (<xref target="ei-string"/>) and replaced (<xref target="ilxs"/>).
Changes of this kind would be unacceptable for the binary CBOR format
itself, but can be OK just once now, considering the more permissive
conditions under which the features that will suffer these changes
were originally introduced.
With CDN now featuring the new extension points, a need for this kind
of changes should arise much less.</t>
        </section>
        <section anchor="repertoire">
          <name>Character Repertoire of Source</name>
          <t>Similar to JSON, CDN is designed to enable representing all CBOR data
items using a source character repertoire just containing printable
ASCII characters (<tt>%x20-7e</tt> in ABNF) and newlines.
However, if appropriate, CDN can also make full use of larger Unicode
repertoires.</t>
          <t>CDN generators may provide configuration to consistently select either
the unescaped (directly readable) or an escaped (ASCII equivalent) form of
characters in string literals; the latter allows CDN to be used when the
diagnostic value of fully escaped characters may be desired or in
environments where non-ASCII characters may not enjoy full data
transparency.
Similar to JSON, CDN is designed to allow a simple tool to convert any
CDN (including CDN with application extensions unknown to the tool)
into a fully escaped (printable ASCII and newlines only) form, as well
as to inversely recover unescaped characters for all escapes where
this is possible or for certain subsets of the characters (such as
Unicode categories L, M, N, P, S, plus Zs or just ASCII space).</t>
          <t>Special considerations apply to newlines in the source.
On some platforms, a CARRIAGE RETURN character (U+000D or CR, often seen
escaped as "\r" in many programming languages) is always
added in front of a LINE FEED (U+000A or LF) to represent a newline
(which are then referred to as CRLF).
On other platforms, carriage returns are not used at line breaks at
all, so a newline is just an LF.
(Platforms that use just a CARRIAGE RETURN by itself to signify an end
of line are no longer relevant and the files they produce are out of
scope for this document.)</t>
          <t>Files are often freely converted between these two newline
representations, including by source code revision control systems.
To ensure that platforms will generate the same bytes in the CBOR data
items created from input in either conversion state, CDN <bcp14>MUST</bcp14> create
the same processing result independent of which newline representation
is used by its input.</t>
          <t>To deal with this variability in platform presentation of newlines,
Unicode CARRIAGE RETURN characters that exist in the input unescaped are
ignored as if they were not in the input wherever they appear.
Specifically, any carriage return characters that may be present in a
CDN (text or byte) string literal are not copied into the resulting string.
If a carriage return is needed in a CBOR string data item, it can be
added explicitly, for instance by using the escaped form <tt>\r</tt> in
single-quoted or double-quoted strings.</t>
        </section>
      </section>
    </section>
    <section anchor="diagnostic-notation">
      <name>Concise Diagnostic Notation (CDN)</name>
      <t>CBOR is a binary interchange format.  To facilitate documentation and
debugging, and in particular to facilitate communication between
entities cooperating in debugging, this document defines a simple
human-readable diagnostic notation.  All actual interchange always
happens in the binary format.</t>
      <t>Note that diagnostic notation truly was designed as a diagnostic
format; it originally was not meant to be parsed.
Therefore, no formal definition (as in ABNF) was given in the original
documents.
Recognizing that formal grammars can aid interoperation of tools and
usability of documents that employ CDN, <xref target="grammars"/> now provides ABNF
definitions.</t>
      <t>CDN is a true superset of JSON as it is defined in <xref target="STD90"/> in
conjunction with <xref target="RFC7493"/> (that is, any interoperable <xref target="RFC7493"/> JSON
text also is a CDN text), extending it both to cover the greater
expressiveness of CBOR and to increase its usability.</t>
      <t>CDN borrows the JSON syntax for numbers (integer and
floating-point, <xref target="numbers"/>), certain simple values (<xref target="simple-values"/>),
UTF-8 <xref target="STD63"/> text
strings, arrays, and maps (maps are called objects in JSON; the
diagnostic notation extends JSON here by allowing any data item in the
map key position).</t>
      <t>As CDN is used for truly diagnostic purposes, its implementations <bcp14>MAY</bcp14>
support generation and possibly ingestion of CDN for CBOR data items
that are well-formed but not valid.
It is <bcp14>RECOMMENDED</bcp14> that an implementation enables such usage only
explicitly by configuration (such as an API or CLI flag).
Validity of CBOR data items is discussed in Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with basic validity discussed in Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
tag validity discussed in Section <xref target="RFC8949" section="5.3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
Tag validity is more likely a subject for individual
application-oriented extensions, while the two cases of basic validity
(for text strings and for maps) are addressed in Sections
<xref format="counter" target="text-validity"/> and <xref format="counter" target="map-validity"/> under the heading
of <em>validity</em>.</t>
      <t>The rest of this section provides an overview over specific features
of CDN, starting with certain common syntactical features and then
going through kinds of CBOR data items roughly in the order of CBOR major
types.
Any additional detailed syntax discussion needed has been deferred to
<xref target="grammar"/>.</t>
      <t>Additional information about implementation and use of CDN is
continuously being collected by the community in <xref target="CDN-WIKI"/>.</t>
      <section anchor="app-lit">
        <name>Application-Oriented Extension Literals</name>
        <t>CDN provides <em>literals</em> that represent CBOR data items textually.
Many of the forms of literals provided are predefined by this
document, but it also defines an extension point that enables defining additional
<em>application-oriented extension literals</em>, or <em>extension literals</em> for short.</t>
        <t>Extension literals start with a <em>prefix</em> that identifies the
application-oriented extension, immediately followed by a sequence
literal (<xref target="embedded"/>) or a single-quoted or raw string literal (<xref target="strings"/>).
The string-based forms use their string literal as a shorthand
form for a sequence literal representing a sequence with exactly that
one text string data item, e.g., <tt>b64`Zm9v`</tt> is a shorthand for
<tt>b64&lt;&lt;"Zm9v"&gt;&gt;</tt> or <tt>b64&lt;&lt;`Zm9v`&gt;&gt;</tt>.</t>
        <aside>
          <t>This notation is generalized from
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, which provides for notating byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by a prefix (»h« for
base16, »b32« for base32, »h32« for base32hex, »b64« for base64 or
base64url).</t>
          <t>This syntax can be thought to establish a name space, with the names
"h", "b32", "h32", and "b64" taken, but other names being unallocated.
The present specification allows registering additional names for this namespace,
which it calls <em>application-extension identifiers</em>.</t>
        </aside>
        <t>More precisely, an <em>application-extension identifier</em> is a registered name consisting of a
lowercase ASCII letter (<tt>[a-z]</tt>) and zero or more additional ASCII
characters that are either lowercase letters, digits, or hyphens (<tt>[a-z0-9-]</tt>).
»false«, »true«, »null«, and »undefined« cannot be used as such
identifiers and are reserved.</t>
        <t>Application-extension identifiers are registered in the "Application-Extension Identifiers" registry
(<xref target="appext-iana"/>).</t>
        <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
one additional prefix derived from its application-extension identifier by
replacing each lowercase character by its uppercase counterpart (such
as <tt>DT</tt>).
As a convention, using the all-uppercase variant implies making use of
a CBOR tag appropriate for this application-oriented extension (such
as tag number 1 for <tt>DT</tt>, where in contrast the prefix <tt>dt</tt> stands for
the unwrapped tag content).</t>
        <t>In summary, an application-extension identifier gives rise to one or two
application-extension prefixes, one that is lexically identical to the
identifier (i.e., all lowercase), and potentially another one that is an
all-uppercase variation of it.
In addition to specifying which of these two variations exhibits which
specific semantics, the application extension specifies what input the
extension takes.</t>
        <t>When the prefix is used immediately in front of a single-quoted or a raw
string, the input takes the form of a single text string CBOR data
item.
When used immediately in front of a sequence literal, the input is a
CBOR sequence of elements of the sequence literal as input.
(For a single parameter, this is equivalent to receiving a single CBOR
data item as the argument.)
The application extension can provide behavior that depends on the
number of items supplied as input to it and their data types; it
cannot distinguish between its prefix being used with a single-quoted
string, a raw string, or a CBOR sequence composed of a single text
string data item (as illustrated for instance in Tables <xref format="counter" target="tab-equiv-dt"/>,
<xref format="counter" target="tab-equiv-ip"/>, and <xref format="counter" target="tab-equiv-hash"/>).</t>
        <t>This specification defines a number of generally applicable
application-oriented extensions (<xref target="app-ext"/>), both to motivate
making these extensions generally available, and to illustrate the
concept.</t>
        <t>Of these, the application-oriented extensions <tt>h</tt>, <tt>b64</tt>, <tt>t1</tt>, <tt>b1</tt>, <tt>dt</tt> and <tt>ip</tt> are
mandatory to implement.
(As mentioned, for simplicity we use the term "application-oriented
extensions" for the mechanism discussed in this section even if it is
used to describe a part of base CDN.)</t>
      </section>
      <section anchor="comments">
        <name>Comments</name>
        <t>For presentation to humans, CDN text may benefit from comments.
JSON famously does not provide for comments, and the original
diagnostic notation in <xref section="6" sectionFormat="of" target="RFC7049"/> inherited this property.</t>
        <t>CDN provides two comment syntaxes, which can be used where the
syntax allows blank space (outside of constructs such as numbers,
string literals, etc.):</t>
        <ul spacing="normal">
          <li>
            <t>inline comments, delimited by slashes ("<tt>/</tt>") or by C-style "<tt>/*</tt>"
and "<tt>*/</tt>":  </t>
            <t>
In a position that allows blank space, each of the following is
considered blank space (and thus effectively a comment):  </t>
            <ul spacing="normal">
              <li>
                <t>any text that starts with a slash followed by a character that is not a
star or a slash, up to another slash, or</t>
              </li>
              <li>
                <t>any text that starts with "<tt>/*</tt>" up to and including the next following "<tt>*/</tt>"</t>
              </li>
            </ul>
          </li>
          <li>
            <t>end-of-line comments, delimited by "<tt>#</tt>" or "<tt>//</tt>" and an end of line (LINE
FEED, U+000A):  </t>
            <t>
In a position that allows blank space, any text starting with "<tt>#</tt>"
or "<tt>//</tt>" and ending with and including the end of the line is
considered blank space (and thus effectively a comment).</t>
          </li>
        </ul>
        <t>Comments can be used to annotate a CBOR structure as in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
/grasp-message/ [/M_DISCOVERY/ 1, /session-id/ 10584416,
                 /objective/ [/objective-name/ "opsonize",
                              /D, N, S/ 7, /loop-count/ 105]]
]]></sourcecode>
        <t>This reduces to <tt>[1, 10584416, ["opsonize", 7, 105]]</tt>.</t>
        <t>Another example, combining
the use of inline and end-of-line comments:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{
 /kty/ 1 : 4, # Symmetric
 /alg/ 3 : 5, # HMAC 256-256
  /k/ -1 : h'6684523ab17337f173500e5728c628547cb37df
             e68449c65f885d1b73b49eae1'
}
]]></sourcecode>
        <t>This reduces to <tt>{1: 4, 3: 5, -1:
h'6684523AB17337F173500E5728C628547CB37DFE68449C65F885D1B73B49EAE1'}</tt>.</t>
        <t>A CDN file used for configuration might look like this (employing
'//' end of line comments throughout and an ornamental C-Style comment at the start):</t>
        <sourcecode type="cbor-diag"><![CDATA[
/* ### MyApp Configuration
 * John Example, 2026-06-09
 */
{
  // Top-level config for the app
  "appName": "MyApp", // short name shown in UI
  "version": "1.2.0",
  ...: ...
}
]]></sourcecode>
        <aside>
          <t>Note that application-oriented extensions can define their own
internal comment syntaxes for text inside strings, which may or may
not mimic the overall comment syntax of CDN.
The h'' syntax (<xref target="h-grammar"/>), which the framework for application-oriented
extensions was designed to include as an instance, provides an
equivalent to the overall comment syntax inside its text strings.
Similarly, b64'' (<xref target="b64-grammar"/>) provides a subset of that limited to
"<tt>#</tt>" end-of-line comments (the slash character "<tt>/</tt>" is used in the
alphabet in classic base64 encoding).
None of the other application-oriented extensions supplied in this
specification provides for such a kind of internal comment syntax.</t>
        </aside>
        <section anchor="comment-discussion">
          <name>Discussion</name>
          <t><xref section="G.6" sectionFormat="of" target="RFC8610"/> introduced comments into the diagnostic
notation syntax, limited to inline comments using a bare "<tt>/</tt>" as the
comment delimiter.
It however also hinted at the potential desire to add
end-of-line comments, mentioning both "<tt>//</tt>" and "<tt>#</tt>" as start delimiters.</t>
          <t>The present specification adds both, as well as C-style inline
comments ("<tt>/*</tt>" and "<tt>*/</tt>" delimiters).</t>
          <t>This introduces a backwards-incompatible change, restricting
slash-delimited comments that were allowed by <xref section="G.6" sectionFormat="of" target="RFC8610"/>
in two ways:</t>
          <ul spacing="normal">
            <li>
              <t>Inline comments no longer can be empty: The construct "<tt>//</tt>" that was
an empty comment in <xref section="G.6" sectionFormat="of" target="RFC8610"/> is now used instead to introduce an
end-of-line comment.
(Note that "<tt>//</tt>" still can be used in what is visually "within" a
slash-delimited comment like in the second example below; its first
slash actually ends the current comment and the second slash starts
a new one.)</t>
            </li>
            <li>
              <t>Enabling the use of C-style inline comments can extend the scope of
what previously were parsed as slash-delimited comments: for instance, "<tt>/*foo/</tt>"
was a complete comment in <xref section="G.6" sectionFormat="of" target="RFC8610"/> and now is the beginning of a
C-style comment that goes on up to a "<tt>*/</tt>".</t>
            </li>
          </ul>
          <t>As an example for what is enabled by this change, the introduction of C-style inline comments enables a
comment explaining a COSE algorithm identifier, as in</t>
          <sourcecode type="cbor-diag"><![CDATA[
4 /* HMAC 256/64 */
]]></sourcecode>
          <t>instead of the previously conventional, but often less familiar</t>
          <sourcecode type="cbor-diag"><![CDATA[
4 / HMAC 256//64 /
]]></sourcecode>
        </section>
      </section>
      <section anchor="encoding-indicators">
        <name>Encoding Indicators</name>
        <t>Sometimes it is useful to indicate in the diagnostic notation which of
several alternative CBOR representations are actually used; for example, a
data item written »1.5« by a diagnostic decoder might have been
encoded in CBOR as a half-, single-, or double-precision float.</t>
        <t>Encoding indicators are always optional:
CDN is usually used to describe CBOR data items at the data model
level.
For some diagnostic purposes, it is useful to represent the choice of
a serialization variation by including encoding indicators.
Implementations of CDN generally do not need to provide this
functionality in full; if they do, they can be called "diagnostic
implementations".
To be able to process CDN that contains encoding indicators,
a CDN-consuming implementation <bcp14>MUST</bcp14> accept them (i.e., process or
ignore the presence or absence of each encoding indicator).
It is <bcp14>RECOMMENDED</bcp14> to provide a warning for each encoding
indicator value that is encountered but not further processed.</t>
        <t>When creating CDN as input for a diagnostic CBOR encoder in order to
obtain specific encoding choices, encoding indicators may be placed
manually or by the software generating the CDN.
Where no encoding indicator is placed, a diagnostic CBOR encoder is expected to
generate Preferred Serialization (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) with
definite-length encoding only.
Similarly, when using CDN as output for a diagnostic CBOR decoder, a
basic diagnostic configuration of the tool is expected to provide
encoding indicators only in places where the CBOR input did not use
Preferred Serialization with definite-length encoding (see also
<xref target="basic"/>).
Diagnostic implementations of CDN that process encoding indicators as
discussed here are expected to document their diagnostic behavior and
the processing options that can be selected.</t>
        <section anchor="syntax-semantics-examples">
          <name>Syntax, Semantics, Examples</name>
          <t>Encoding indicators start with
an underscore and comprise all immediately following characters that are alphanumeric or
underscore.
For example, <tt>_</tt> or <tt>_3</tt>.
Encoding indicators can be ignored by anyone not
interested in this information.</t>
          <t>Encoding indicators are placed immediately to the right of the data
item or of a syntactic feature that can stand for the data item the
encoding of which the encoding indicator is controlling.
<xref target="tab-ei"/> provides examples for data items with definite length
encoding indicators used with various kinds of data items ("mt" = major
type, "ignoring e.i." = example encoding when ignoring the encoding indicators).
Examples for encoding indicators controlling indefinite length
encoding can be found in the context of explanations in <xref target="ei-string"/>
and <xref target="ei-container"/>.</t>
          <table anchor="tab-ei">
            <name>Examples of Definite Length Encoding Indicators for Different Data Items</name>
            <thead>
              <tr>
                <th align="left">mt</th>
                <th align="left">examples</th>
                <th align="left">encoding (in hex)</th>
                <th align="left">ignoring e.i.</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">
                  <tt>1_1</tt><br/><tt>0x4711_3</tt></td>
                <td align="left">190001<br/>1b0000000000004711</td>
                <td align="left">01<br/>194711</td>
              </tr>
              <tr>
                <td align="left">1</td>
                <td align="left">
                  <tt>-1_1</tt></td>
                <td align="left">390000</td>
                <td align="left">20</td>
              </tr>
              <tr>
                <td align="left">2</td>
                <td align="left">
                  <tt>'A'_1</tt></td>
                <td align="left">59000141</td>
                <td align="left">4141</td>
              </tr>
              <tr>
                <td align="left">3</td>
                <td align="left">
                  <tt>"A"_1</tt></td>
                <td align="left">79000161</td>
                <td align="left">6161</td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="left">
                  <tt>[_1 "bar"]</tt></td>
                <td align="left">99000163626172</td>
                <td align="left">8163626172</td>
              </tr>
              <tr>
                <td align="left">5</td>
                <td align="left">
                  <tt>{_1 "bar": 1}</tt></td>
                <td align="left">b900016362617201</td>
                <td align="left">a16362617201</td>
              </tr>
              <tr>
                <td align="left">6</td>
                <td align="left">
                  <tt>1_1(4711)</tt></td>
                <td align="left">d90001191267</td>
                <td align="left">c1191267</td>
              </tr>
              <tr>
                <td align="left">7</td>
                <td align="left">
                  <tt>1.5_2</tt><br/><tt>0x4711p+03_3</tt></td>
                <td align="left">fa3fc00000<br/>fb4101c44000000000</td>
                <td align="left">f93e00<br/>fa480e2200</td>
              </tr>
            </tbody>
          </table>
          <t>(In the following, an abbreviation of the form <tt>ai=</tt>nn gives nn as
the numeric value of the field <em>additional information</em>, the low-order 5
bits of the initial byte: see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
This field is used in encoding the "argument", i.e., the value, tag, or
length; <tt>ai=0</tt> to <tt>ai=23</tt> mean that the value of the <tt>ai</tt> field
immediately <em>is</em> the argument, <tt>ai=24</tt> to <tt>ai=27</tt> mean that the
argument is carried in 2<sup>ai-24</sup> (1, 2, 4, or 8)
additional bytes, and <tt>ai=31</tt> means that indefinite-length
encoding is used.)</t>
          <t>An underscore followed by a decimal digit <tt>n</tt> indicates that the
item was or is to be encoded with an additional information
value of <tt>ai=</tt>24+<tt>n</tt>.
(The item associated to the encoding indicator may be the preceding
item, or, for arrays and maps, the item starting with the
preceding bracket or brace.)
For an example involving floating point values (Section <xref target="RFC8949" section="3.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>),
<tt>1.5_1</tt> is a half-precision floating-point
number (2<sup>1</sup> = 2 additional bytes or 16 bits), while <tt>1.5_3</tt> is encoded as
double precision (2<sup>3</sup> = 8 additional bytes or 64 bits).
For a tool consuming CDN in a diagnostic mode, encountering an
encoding indicator that does not provide enough space to correctly
encode the unchanged data item given is an error; there is no
truncation or rounding that would change the data item encoded.</t>
          <aside>
            <t>Truncation or rounding semantics imply performing changes at the data
model level, which is outside the scope of encoding indicators.
Such operations can be provided by application extensions.</t>
          </aside>
          <t>The encoding indicator <tt>_</tt> (an underscore on its own) is used to
indicate indefinite-length encoding.
Indefinite-length encoding uses <tt>ai=31</tt>, which could have been
indicated by <tt>_7</tt>, which is therefore not used and marked as reserved
(as are <tt>_4</tt>, <tt>_5</tt>, and <tt>_6</tt>, which would stand for <tt>ai=28</tt> to
<tt>ai=30</tt>, values currently not in use in CBOR; these encoding
indicators will be available if and when CBOR is extended to make use
of them).</t>
          <t>Note that the encoding indicator <tt>_</tt> is only available behind the opening
brace/bracket for <tt>map</tt> and <tt>array</tt> (<xref target="ei-container"/>): strings
originally had a now deprecated special syntax
<tt>streamstring</tt> for indefinite-length encoding except for the special
cases <tt>''_</tt> and <tt>""_</tt> (<xref target="ei-string"/>).</t>
          <t>The encoding indicators <tt>_0</tt> to <tt>_3</tt> indicate <tt>ai=24</tt>
to <tt>ai=27</tt>, respectively; they therefore stand for 1, 2, 4, and 8
bytes of additional information (ai) following the initial byte in the
head of the data item.</t>
          <t>Surprisingly, Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> does not address <tt>ai=0</tt> to
<tt>ai=23</tt> — the assumption seems to have been that Preferred Serialization
(Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) will be used when converting CBOR
diagnostic notation to an encoded CBOR data item, so leaving out the
encoding indicator for a data item with a Preferred Serialization
will implicitly use <tt>ai=0</tt> to <tt>ai=23</tt> if that is possible.
The present specification allows making this explicit:</t>
          <t><tt>_i</tt> ("immediate") stands for encoding with <tt>ai=0</tt> to <tt>ai=23</tt>, i.e.,
it indicates that the argument is encoded directly in the initial byte
of the CBOR item.</t>
          <t>Encoding indicators are an extension point for CDN; <xref target="reg-ei"/> defines
a registry for additional values.</t>
          <t>Specific forms of encoding indicators are discussed in further detail
in <xref target="ei-string"/> for the deprecated syntax for indefinite-length strings
and in <xref target="ei-container"/> for arrays and maps.</t>
        </section>
      </section>
      <section anchor="numbers">
        <name>Numbers</name>
        <!--
## Hexadecimal, Octal, and Binary Numbers {#hexadecimal-octal-and-binary-numbers}
 -->

<t>In addition to JSON's decimal number literals, CDN provides hexadecimal, octal,
and binary number literals in the usual C-language notation (<tt>0x</tt>, <tt>0o</tt> prefix only, and <tt>0b</tt>,
respectively).</t>
        <t>Numbers composed only of digits (of the respective base) are
interpreted as CBOR integers (major type 0/1, or where the number
cannot be represented in this way, major type 6 with tag 2/3).
A leading "<tt>+</tt>" sign is a no-op, and a leading "<tt>-</tt>" sign inverts the
sign of the number.
So <tt>0</tt>, <tt>000</tt>, <tt>+0</tt> all represent the same integer zero, as does <tt>-0</tt>.
Similarly,
<tt>1</tt>, <tt>001</tt>, <tt>+1</tt> and <tt>+0001</tt> all stand for the same positive integer one, and
<tt>-1</tt> and <tt>-0001</tt> both designate the same negative integer minus one.</t>
        <t>Using a decimal point (<tt>.</tt>) and/or an exponent (<tt>e</tt> for decimal, <tt>p</tt>
for hexadecimal) turns the number into a floating point number (major
type 7) instead, irrespective of whether it is an integral number
mathematically.
Note that, in floating point numbers, <tt>0.0</tt> is not the same number as
<tt>-0.0</tt>, even if they are mathematically equal.</t>
        <t>In <xref target="tab-numbers"/>, all the items on a row are the same number (also
shown in CBOR, hexadecimally), but they are distinct from items in a
different row.</t>
        <table anchor="tab-numbers">
          <name>Example Sets of Equivalent Notations for Some Numbers</name>
          <thead>
            <tr>
              <th align="left">CDN</th>
              <th align="left">CBOR hex</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>4711</tt>, <tt>0x1267</tt>, <tt>0o11147</tt>, <tt>0b1001001100111</tt></td>
              <td align="left">
                <tt>19 1267</tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.5</tt>, <tt>0.15e1</tt>, <tt>15e-1</tt>, <tt>0x1.8p0</tt>, <tt>0x18p-4</tt></td>
              <td align="left">
                <tt>F9 3E00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0</tt>, <tt>+0</tt>, <tt>-0</tt></td>
              <td align="left">
                <tt>00     </tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0.0</tt>, <tt>+0.0</tt></td>
              <td align="left">
                <tt>F9 0000</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>-0.0</tt></td>
              <td align="left">
                <tt>F9 8000</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Infinity</tt></td>
              <td align="left">
                <tt>F9 7C00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>-Infinity</tt></td>
              <td align="left">
                <tt>F9 FC00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>NaN</tt></td>
              <td align="left">
                <tt>F9 7E00</tt> # float16</td>
            </tr>
          </tbody>
        </table>
        <t>The non-finite floating-point values <tt>Infinity</tt>, <tt>-Infinity</tt>, and <tt>NaN</tt> are
written exactly as in this sentence (this is also a way they can be
written in JavaScript, although JSON does not allow them).
<tt>NaN</tt> in CDN stands for the NaN value with a zero sign bit and an all-zero
significand except for a set quiet bit; this is represented as
<tt>F9 7E 00</tt> in CBOR Preferred Serialization.
<xref target="tab-float-encoding"/> shows how the floating point numbers 1.1, 1.5 and
these three values are encoded in preferred serialization and when
encoding indicators are given.</t>
        <!-- $ edn-abnf -e '1.5, 1.5_1, 1.5_2, 1.5_3' -tcbor | cborseq2pretty.rb
 -->

<table anchor="tab-float-encoding">
          <name>Encoding indicators on floating point values</name>
          <thead>
            <tr>
              <th align="left">CDN</th>
              <th align="left">CBOR hex</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>1.1</tt></td>
              <td align="left">
                <tt>fb 3ff199999999999a</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.1_1</tt>, <tt>1.1_2</tt></td>
              <td align="left">(error)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.1_3</tt></td>
              <td align="left">
                <tt>fb 3ff199999999999a</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.5</tt>, <tt>1.5_1</tt></td>
              <td align="left">
                <tt>f9 3e00</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.5_2</tt></td>
              <td align="left">
                <tt>fa 3fc00000</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.5_3</tt></td>
              <td align="left">
                <tt>fb 3ff8000000000000</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Infinity</tt>, <tt>Infinity_1</tt></td>
              <td align="left">
                <tt>f9 7c00</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Infinity_2</tt></td>
              <td align="left">
                <tt>fa 7f800000</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Infinity_3</tt></td>
              <td align="left">
                <tt>fb 7ff0000000000000</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-Infinity</tt>, <tt>-Infinity_1</tt></td>
              <td align="left">
                <tt>f9 fc00</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-Infinity_2</tt></td>
              <td align="left">
                <tt>fa ff800000</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-Infinity_3</tt></td>
              <td align="left">
                <tt>fb fff0000000000000</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>NaN</tt>, <tt>NaN_1</tt></td>
              <td align="left">
                <tt>f9 7e00</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>NaN_2</tt></td>
              <td align="left">
                <tt>fa 7fc00000</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>NaN_3</tt></td>
              <td align="left">
                <tt>fb 7ff8000000000000</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="decnumber"/> for additional details of the CDN number syntax.</t>
        <t>(Note that literals for further number formats, e.g., for representing
rational numbers as fractions, or for other NaN values than the one called <tt>NaN</tt>, can
be added as application-oriented literals.
Background information beyond that in <xref target="STD94"/> about the representation
of numbers in CBOR can be found in the informational document
<xref target="I-D.bormann-cbor-numbers"/>.)</t>
      </section>
      <section anchor="strings">
        <name>Strings</name>
        <t>CBOR distinguishes two kinds of strings: text strings (the bytes in
the string constitute UTF-8 <xref target="STD63"/> text, major type 3), and byte strings
(CBOR does not further characterize the bytes that constitute the
string, major type 2).</t>
        <t>(UTF-8) text strings can be directly represented (unprefixed) in CDN either as double-quoted (<xref target="dq-lit"/>)
or as raw strings (<xref target="raw-lit"/>), while byte strings can be represented as
single-quoted strings (<xref target="sq-lit"/>).
The latter is useful for byte strings carrying
bytes that can be meaningfully notated as UTF-8 text.</t>
        <t>Many strings are best notated as extension literals, which may
provide detailed access to the bits within those bytes (see
<xref target="encoded-byte-strings"/>).
Using an application-extension
prefix, extension literals can be constructed out of single-quoted strings and
raw strings, as well as sequence literals (cf. <xref target="app-lit"/>).</t>
        <section anchor="concat-removed">
          <name>No Special String Concatenation Syntax</name>
          <t>Before extension literals were added to diagnostic notation, <xref section="G.4" sectionFormat="of" target="RFC8610"/> added a syntax for concatenating strings by just
juxtaposing them.
This syntax was not widely implemented and is problematic in the
presence of optional commas; it is now entirely removed from CDN.
(Previous revisions of the present document proposed yet another
alternative syntax; this is now entirely withdrawn and replaced by
application-extensions such as <xref target="t1b1"/>.)</t>
        </section>
        <section anchor="dq-lit">
          <name>Double-Quoted String Literals</name>
          <t>CDN enables notating text strings in a form compatible to that of notating text
strings in JSON (i.e., as a double-quoted string literal), with a
number of usability enhancements.
JSON allows no control characters in text-string literals;
if needed, they can be specified using escapes such as <tt>\t</tt> or <tt>\r</tt>.
This also applies to CDN, and all escaping rules apply as in JSON,
with a single exception:
In CDN, string literals additionally can contain newlines (LINEFEED
U+000A), which are copied into the resulting string like other
characters in the string literal.
To deal with variability in platform presentation of newlines, any
carriage return characters (U+000D) that may be present in the CDN
string literal are not copied into the resulting string (see <xref target="repertoire"/>).</t>
          <t>JSON's escape scheme for characters that are not on Unicode's basic
multilingual plane (BMP) is cumbersome (see Section <xref target="RFC8259" section="7" sectionFormat="bare"/> of RFC 8259 <xref target="STD90"/>).
CDN keeps it, but also adds the syntax <tt>\u{NNN}</tt> where NNN is the
Unicode scalar value as a hexadecimal number.
This means the following are equivalent (the first <tt>o</tt> is escaped as
<tt>\u{6f}</tt> for no particular reason):</t>
          <sourcecode type="cbor-diag"><![CDATA[
"D\u{6f}mino's \u{1F073} + \u{2318}"   # \u{}-escape 3 chars
"D\u006Fmino's \uD83C\uDC73 + \u2318"  # escape JSON-like
"Domino's 🁳 + ⌘"                       # unescaped
]]></sourcecode>
        </section>
        <section anchor="sq-lit">
          <name>Single-Quoted String Literals</name>
          <t>Analogously to text-string literals delimited by double quotes, CDN
allows the use of single quotes (without a prefix) to express
byte-string literals with UTF-8 text; for instance, the following are
equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
'hello world'
h'68656c6c6f20776f726c64'
]]></sourcecode>
          <t>The escaping rules of JSON strings are applied equivalently for
text-based byte-string literals, e.g., <tt>\\</tt> stands for a single
backslash and <tt>\'</tt> stands for a single quote.
However, to facilitate parsing, in single-quoted strings CDN excludes
certain escaping mechanisms available for double-quoted strings:</t>
          <ul spacing="normal">
            <li>
              <t><tt>\/</tt> is an escape in JSON that is available for double-quoted CDN
text strings as
well to ensure all JSON texts are CDN literals.
Since CDN's single-quoted strings do not occur in JSON, this legacy
compatibility feature is not available for them.</t>
            </li>
            <li>
              <t><tt>\u</tt>-based escapes are not available for characters in the range
from U+0020 through U+007E (essentially, printable ASCII).</t>
            </li>
          </ul>
          <t>All other escaping mechanisms that are available in double-quoted
string literals are available in single-quoted string literals.</t>
          <t>Single-quoted string literals can occur unprefixed and stand for the
byte string that encodes its text string value (the "content"), or be
prefixed by what looks like an application-extension prefix (see
<xref target="app-lit"/>).</t>
          <t>In a prefixed string literal, the text content of the single-quoted
string literal is not used directly as a byte string, but is further
processed in a way that is defined by the meaning given to the prefix.
Depending on the prefix, the result of that processing can, but need
not be, a byte string value.</t>
          <t>Prefixed string literals (whether single-quoted after the
prefix or a raw string (<xref target="raw-lit"/>)) are used both for base-encoded byte string literals (see <xref target="encoded-byte-strings"/>) and for
application-oriented extension literals (see <xref target="app-lit"/>, called app-string).
(Additional kinds of base-encoded string literals can be defined as
application-oriented extension literals by registering their prefixes;
there is no fundamental difference between the two predefined
base-encoded string literal prefixes (<tt>h</tt>, <tt>b64</tt>) and any such potential
future extension literal prefixes; for simplicity of expression, both
cases are referred to as "extension literals".)</t>
        </section>
        <section anchor="raw-lit">
          <name>Raw String Literals</name>
          <t>Both double-quoted and single-quoted string literals handle
backslashes in a special way.
For string data items that employ backslashes themselves, possibly with additional layers
of processing giving this "escaping" mechanism specific application semantics, this can
lead to an exponential duplication of backslashes that has informally
been described as "quoting hell".</t>
          <t>CDN therefore also allows text strings to be notated as raw string
literals, which do not perform any special processing on backslashes,
i.e., treat
them as raw string content like any other characters.
Instead, data transparency is provided by enclosing the entire string content in starting
and ending delimiters built as a sequence of one or more backquote
(»<tt>`</tt>«, U+0060 GRAVE ACCENT) characters.</t>
          <t>For example, the string content »<tt>[^ \t\n\r"'`]</tt>«, an I-Regexp character class
that excludes blank space and quoting characters, can be notated as:</t>
          <artwork><![CDATA[
 ``[^ \t\n\r"'`]``
]]></artwork>
          <t>instead of</t>
          <artwork><![CDATA[
 "[^ \\t\\n\\r\"'`]"
]]></artwork>
          <t>By using more backquotes for each of the outer delimiters than the longest
sequence of backquotes that can be found in the string, internal
backquotes do not prematurely end the string literal.
An example for a raw string that contains a double backquote and
therefore is notated starting and ending with a triple backquote:</t>
          <sourcecode type="cbor-diag"><![CDATA[
```To emulate typographic quotes, sometimes duplicate backward and
forward single quotes are used, as in ``text.''
```
]]></sourcecode>
          <t>This mechanism is easy to use for the large majority of cases.
However, without additional rules:</t>
          <ul spacing="normal">
            <li>
              <t>raw strings could not be used for empty string data items, which
therefore need to be notated using double- or single-quoted strings.
(Obviously, there is no need to escape the content of empty strings,
so this should not be a problem.)</t>
            </li>
            <li>
              <t>raw strings could not be used for string
data items that start or end with backquotes, as these would
amalgamate with the start and end delimiters.</t>
            </li>
          </ul>
          <t>To address these cases (predominantly the latter), two additional
rules are added to perform after processing the backquotes used as
delimiters:</t>
          <ul spacing="normal">
            <li>
              <t>any single newline (LF or CRLF, see <xref target="repertoire"/>) at the start of
the inner string is removed to
yield the string content.
As a result:  </t>
              <artwork><![CDATA[
 ```a```
]]></artwork>
              <t>
can also be expressed as  </t>
              <artwork><![CDATA[
 ```
 a```
]]></artwork>
              <t>
In addition to enabling leading backquotes in raw strings, this can
 be very useful for documentation strings etc.  </t>
              <t>
This rule also allows notating »<tt>``text''</tt>« as:  </t>
              <artwork><![CDATA[
```
``text''```
]]></artwork>
            </li>
            <li>
              <t>if the first rule does not apply, but the inner string starts
with a space character as well as ends with one, exactly one single space
character starting the inner string together with exactly one single space
character ending the inner string are removed to yield the string
content.  </t>
              <t>
This allows notating »<tt>a = ``foo``</tt>« as:  </t>
              <artwork><![CDATA[
``` a = ``foo`` ```
]]></artwork>
            </li>
          </ul>
          <t>If neither of these rules apply, the inner string between the raw
delimiters is used as the raw string unchanged.</t>
          <t>(The examples given here are minimal in that they show how the
additional rules work; more complex examples would be necessary to
provide additional motivation why this is a good way to handle the
various cases.)</t>
        </section>
        <section anchor="ei-string">
          <name>Deprecated: Indefinite-length Encoding Indicators for Strings</name>
          <t><cref anchor="move1">This section will move to 2.3.2; it is left here at the
moment for easier comparison.</cref></t>
          <t>In CBOR, indefinite-length encoded (byte or text) strings are composed of
"chunks" (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          <t>The original diagnostic notation (<xref section="6.1" sectionFormat="of" target="RFC7049"/>) provided
a special syntax <tt>streamstring</tt> for them, which was retained and
further clarified in Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
This syntax represents the individual chunks in
sequence within parentheses, each optionally followed by a comma, with
an encoding indicator <tt>_</tt> immediately after the opening parenthesis:
e.g., <tt>(_ h'0123', h'4567')</tt> or <tt>(_ "foo", "bar")</tt>.
The overall type (byte string or text string) of the string is
provided by the types of the individual chunks, which all need to be
of the same type (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          <t>In this syntax, an indefinite-length string with no chunks inside, <tt>(_ )</tt>
would be ambiguous as to whether a byte string (encoded <tt>5f ff</tt>) or a text string
(encoded <tt>7f ff</tt>) is meant and is therefore not used.
The basic forms <tt>''_</tt> and <tt>""_</tt> can be used instead and are reserved for
the case of no chunks only — not as short forms for the (permitted,
but not really useful) encodings with only empty chunks, which
need to be notated as <tt>(_ '')</tt>, <tt>(_ "")</tt>, etc.,
when it is desired to preserve the chunk structure.</t>
          <t>With this document, the <tt>streamstring</tt> syntax is now deprecated; new
CDN documents should instead use the <tt>ilbs</tt>/<tt>ilts</tt> application
extensions (<xref target="ilxs"/>) to build indefinite-length encoded strings.</t>
        </section>
        <section anchor="encoded-byte-strings">
          <name>Base-Encoded Byte String Literals</name>
          <t><cref anchor="move2">This section will move to new subsections of Section 3.</cref></t>
          <t>Besides the unprefixed byte string literals that are analogous to JSON text
string literals, CDN provides extension literals that can represent
byte strings by base-encoding them, typically notated as prefixed
string literals.
The application-extension identifier selects one of the base encodings
<xref target="RFC4648"/>, without padding.
Most often, the base encoding is
enclosed in a single-quoted or raw string literal, prefixed by »h« for base16 or
»b64« for base64 or base64url (the actual encodings of the latter two
have the same meaning where they overlap, so the string remains unambiguous).
For example, the byte string consisting of the four bytes <tt>12 34 56 78</tt>
(given in hexadecimal here) could be written <tt>h'12345678'</tt> or
<tt>b64'EjRWeA'</tt> when using single-quoted string literals, or
<tt>h`12345678`</tt> or <tt>b64`EjRWeA`</tt> when using raw string literals.</t>
          <aside>
            <t>(Note that Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> also mentions »b32« for
base32 and »h32« for base32hex.
This has not been implemented widely
and therefore is not directly included in this specification.
These and further byte string formats now can easily be added back as
application-oriented extension literals.)</t>
          </aside>
          <t>Examples often benefit from some blank space (spaces, line breaks) in
byte strings literals.
In certain CDN prefixed byte string literals, blank space is ignored; for
instance, the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   h'48656c6c6f20776f726c64'
   h'48 65 6c 6c 6f 20 77 6f 72 6c 64'
   h'4 86 56c 6c6f
     20776 f726c64'
]]></sourcecode>
          <t>The internal syntax of prefixed single-quote literals such
as <tt>h''</tt> and <tt>b64''</tt> might also allow comments as blank space (see <xref target="comments"/>).</t>
          <sourcecode type="cbor-diag"><![CDATA[
   h'68656c6c6f20776f726c64'
   h'68 65 6c /doubled l!/ 6c 6f # hello
     20 /space/
     77 6f 72 6c 64' /world/
]]></sourcecode>
          <t>Slash characters are part of the base64 classic alphabet (see
Table 1 in <xref section="4" sectionFormat="of" target="RFC4648"/>), and they therefore need to be in the
<tt>b64''</tt> set of characters that contribute to the byte string.
Therefore, only end-of-line comments starting with <tt>#</tt> are available inside
b64 byte string literals.</t>
          <sourcecode type="cbor-diag"><![CDATA[
   b64'/base64 not a comment/ but one follows # comment'
   h'FDB6AC 7BAE27A2D69CA2699E9EDFDBBADA2779FA25 968C2C'
]]></sourcecode>
          <t>These two byte string literals stand for the same byte string; the
deliberately confusing base64 content starts with
<tt>b64'/bas'</tt> which is the same as h'FDB6AC' and ends with b64'lows'
which is the same as <tt>h'968C2C'</tt>.</t>
        </section>
        <section anchor="embedded">
          <name>CBOR Sequence Literals</name>
          <t>In diagnostic notation, a sequence of zero or more CBOR data item literals can
be enclosed in <tt>&lt;&lt;</tt> and <tt>&gt;&gt;</tt> and separated by comma or blank space, optionally prefixed by an
application-extension prefix; this specification speaks of <em>sequence literals</em>.
CDN mainly deals with individual data items, not with CBOR sequences
<xref target="RFC8742"/>, so the CBOR sequence represented by the sequence literal needs
to be further processed to obtain the value of the literal.</t>
          <t>Prefixed sequence literals refer to the application extension (see
<xref target="app-lit"/>) identified by the prefix and apply the extension to its
sequence content, resulting in a single data item.
This data item may be a string or not (always), depending on
the definition of the application extension.</t>
          <t>An unprefixed sequence literal applies CBOR encoding to the
data items in its content, taken as a CBOR sequence.
The value of the
literal thus is a byte string with the encoded content; this is
commonly referred to as
<em>embedded CBOR</em>.
For instance, each pair of columns in the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   <<1>>              h'01'
   <<1, 2>>           h'0102'
   <<"hello", null>>  h'65 68656c6c6f f6'
   <<>>               h''
]]></sourcecode>
          <t>A diagnostic implementation is expected to honor encoding indicators
on the individual items in the supplied sequence before assembling
them into an encoded CBOR sequence.
For instance, each pair of columns in the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   <<1_1>>              h'190001'
   <<1_0, 2_2>>         h'1801 1a00000002'
   <<"hello"_0, null>>  h'7805 68656c6c6f f6'
]]></sourcecode>
          <t>For prefixed sequence literals, the processing of encoding indicators
on the arguments can be defined by the application extension being
used.
See <xref target="ilxs"/> for an example of where this is done.
Encoding indicators on the arguments are ignored if the application
extension does not define their handling.</t>
        </section>
        <section anchor="text-validity">
          <name>Validity of Text Strings</name>
          <t>To be valid CBOR, Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> requires that text
strings are byte sequences in UTF-8 <xref target="STD63"/> form.
CDN provides several ways to construct such byte strings (in
particular, see also <xref target="t1b1"/>).
These mechanisms might operate on subsequences that do not themselves
constitute UTF-8, e.g., by building larger sequences out of
concatenating the subsequences; for validity of a text string
resulting from these mechanisms it is only of importance that the
result is UTF-8.
Double-quoted, single-quoted, and raw string literals have been defined
such that they lead to byte sequences that are UTF-8: the source
language of CDN is UTF-8, and all escaping mechanisms lead only to
adding further UTF-8 characters.
Only application-extensions (invoked in prefixed literals) can
generate non-UTF-8 byte sequences.</t>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, CDN
implementations <bcp14>MAY</bcp14> support generation and possibly ingestion of CDN
for CBOR data items that are well-formed but not valid; when this is
enabled, such implementations <bcp14>MAY</bcp14> relax the requirement on text
strings to be valid UTF-8.</t>
          <t>CBOR has no requirements for its text strings except for conformance to
<xref target="STD63"/>.
The same applies to CDN and its source language.
No additional Unicode processing or validation such as normalization
or checking whether a scalar value is actually assigned is foreseen by
CDN, particularly not any processing that is dependent on a specific
Unicode version.
Such processing, if offered, <bcp14>MUST NOT</bcp14> get in the way of processing the
data item represented in CDN (i.e., it may be appropriate to issue
warnings but not to error out or to generate output that does not match
the input at the UTF-8 level).</t>
        </section>
      </section>
      <section anchor="arrays-and-maps">
        <name>Arrays and Maps</name>
        <t>CDN borrows the JSON syntax for arrays and maps.
(Maps are called objects in JSON.)</t>
        <t>For maps, CDN extends the JSON syntax by allowing any data item in the
map key position (before the colon).</t>
        <section anchor="mandatory-separators-optional-terminators">
          <name>Mandatory Separators, Optional Terminators</name>
          <t>JSON requires the use of a comma as a separator character between
the elements of an array as well as between the members (key/value
pairs) of a map.
(These commas also were required in the original diagnostic
notation defined in <xref target="STD94"/> and <xref target="RFC8610"/>.)
The separator commas are now optional in the places where CDN syntax
allows commas; however, where no comma is used in a separator
position, there must be blank space (composed of at least one space, newline, and/or
comment) instead.
(Stylistically, leaving out the commas is more idiomatic when they
occur at line breaks, which provide the blank space.)</t>
          <t>In addition, CDN also allows, but does not require, a trailing comma before the closing bracket/brace,
enabling an easier to maintain "terminator" style of their use.</t>
          <t>In summary, the following eight examples are all equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 3]
[1, 2, 3,]
[1  2  3]
[1  2  3,]
[1  2, 3]
[1  2, 3,]
[1, 2  3]
[1, 2  3,]
]]></sourcecode>
          <t>as are</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "n", "x": "a"}
{1: "n", "x": "a",}
{1: "n"  "x": "a"}
# etc.
]]></sourcecode>
          <t>As a comma and/or blank/comment is mandatory in a separator position,
»<tt>[11]</tt>« is unambiguously an array with a single element (the
integer 11), different from »<tt>[1 1]</tt>« or »<tt>[1,1]</tt>«.
As this is a general rule, »<tt>[[] []]</tt>« or »<tt>[[],[]]</tt>« are well-formed
CDN, while »<tt>[[][]]</tt>« is not.</t>
          <aside>
            <t>CDDL's comma separators in the equivalent contexts (CDDL groups) are
  entirely optional
  (and actually are terminators, which together with their optionality
  allows them to be used like separators as well, or even not at all).
  In summary, comma use is now aligned between CDN and CDDL, in a
  fully backward compatible way.
  (CDDL does allow the stylistically questionable »<tt>a = [[][]]</tt>«, though.)</t>
          </aside>
        </section>
        <section anchor="ei-container">
          <name>Encoding Indicators of Arrays and Maps</name>
          <t>A single underscore can be written after the opening brace of a map or
the opening bracket of an array to indicate that the data item was
represented in indefinite-length format.  For example, <tt>[_ 1, 2]</tt>
contains an indicator that an indefinite-length representation was
used to represent the data item <tt>[1, 2]</tt>.</t>
          <t>At the same position, encoding indicators for specifying the size of
the array or map head for definite-length format can be used instead,
specifically <tt>_i</tt> or <tt>_0</tt> to <tt>_3</tt>.  For example, <tt>[_0 false, true]</tt> can be
used to specify the encoding of the array <tt>[false, true]</tt> as <tt>98 02 f4 f5</tt>.</t>
        </section>
        <section anchor="map-validity">
          <name>Validity of Maps</name>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, CDN implementations <bcp14>MAY</bcp14> support
generation and possibly ingestion of CDN for CBOR data items that are
well-formed but not valid (Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          <t>For maps, this is relevant for map keys that occur more than once, as
in this CDN that is not representing a valid CBOR data item:</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "to", 1: "from"}
]]></sourcecode>
        </section>
      </section>
      <section anchor="tags">
        <name>Tags</name>
        <t>A tag is
written as a decimal unsigned integer (no leading zeros except for the
actual number zero, i.e., <tt>0|[1-9][0-9]*</tt>) for the tag number, followed by the tag content
in parentheses; for instance, a date in the format specified by RFC 3339
(ISO 8601) could be
notated as:</t>
        <t indent="5">0("2013-03-21T20:04:00Z")</t>
        <t>or the equivalent epoch-based time as the following:</t>
        <t indent="5">1(1363896240)</t>
        <t>The tag number can be followed by an encoding indicator giving the
encoding of the tag head.  For example, a diagnostic implementation encodes:</t>
        <t indent="5">1_1(1363896240)</t>
        <t>...(assuming Preferred Serialization for the tag content) as:</t>
        <sourcecode type="cbor-pretty"><![CDATA[
d9 0001        # tag(1)
   1a 514b67b0 # unsigned(1363896240)
]]></sourcecode>
      </section>
      <section anchor="simple-values">
        <name>Simple values</name>
        <t>CDN uses JSON syntax for the simple values True (»<tt>true</tt>«), False
(»<tt>false</tt>«), and Null (»<tt>null</tt>«).
Undefined is written »<tt>undefined</tt>« as in JavaScript.</t>
        <t>These and all other simple values can be given as "simple()" with the
appropriate decimal unsigned integer (<tt>0|[1-9][0-9]*</tt>) in the parentheses.
For example, »<tt>simple(42)</tt>«
indicates major type 7, value 42, and »<tt>simple(20)</tt>« indicates
»<tt>false</tt>«.</t>
      </section>
    </section>
    <section anchor="app-ext">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation to also
enable application-oriented extensions (<xref target="app-lit"/>).
This section defines a number of application-oriented extensions.</t>
      <section anchor="dt">
        <name>Date and Time: The "dt" Extension</name>
        <t>The application-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The content of the literal is a single Standard Date/Time String as per
Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, as a text or byte string.</t>
        <t>The value of the literal is a number representing the result of a
conversion of the given Standard Date/Time String to an Epoch-Based
Date/Time.
If fractional seconds are given in the text (production
<tt>time-secfrac</tt> in <xref target="abnf-grammar-dt"/>), the value is a
floating-point number; the value is an integer number otherwise.
In the all-uppercase variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>Each row of <xref target="tab-equiv-dt"/> shows an example of "dt" notation and
equivalent notation not using an application-extension identifier.</t>
        <table anchor="tab-equiv-dt">
          <name>dt and DT literals vs. plain CDN</name>
          <thead>
            <tr>
              <th align="left">dt literal</th>
              <th align="left">plain CDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>-14159024</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.0Z'</tt></td>
              <td align="left">
                <tt>-14159024.0</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.5Z'</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt`1969-07-21T02:56:16.5Z`</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;'1969-07-21T02:56:16.5Z'&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;"1969-07-21T02:56:16.5Z"&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;`1969-07-21T02:56:16.5Z`&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>DT'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>1(-14159024)</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="dt-grammar"/> for an ABNF definition for the text string input of <tt>dt</tt> literals.</t>
      </section>
      <section anchor="ip">
        <name>IP Addresses and Related Structures: The "ip" Extension</name>
        <t>The application-extension identifier "ip" is used to notate an IP
address literal that can be used as an IP address as per <xref section="3" sectionFormat="of" target="RFC9164"/>.</t>
        <t>The input of the literal is a single text string representing an IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>.</t>
        <t>With the lowercase app-string prefix <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the uppercase app-string prefix <tt>IP</tt>, the literal is such a byte string
tagged with tag number 54, if an IPv6address is used, or tag number
52, if an IPv4address is used.</t>
        <t>As an additional case, the uppercase app-string prefix <tt>IP</tt> can be used
with an IP address prefix such as <tt>2001:db8::/56</tt> or <tt>192.0.2.0/24</tt>, with the equivalent tag as its value.
(Note that <xref target="RFC9164"/> representations of address prefixes need to
implement the truncation of the address byte string as described in
<xref section="4.2" sectionFormat="of" target="RFC9164"/>; see example below.)
For completeness, the lowercase variant <tt>ip'2001:db8::/56'</tt> or  <tt>ip'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[56,h'20010db8']</tt> or <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that this application-extension provides no direct representation
of the "Interface format"
defined in <xref section="3.1.3" sectionFormat="of" target="RFC9164"/>, an address combined with an
optional prefix length and an optional zone identifier, and therefore
no way to reference a zone identifier at all.
(If needed, this format can be put together by building their
structures explicitly, e.g., an interface format without a zone
identifier can be represented as in <tt>52([ip'192.0.2.42',24])</tt>, or an
interface format with zone identifier 42 as in
<tt>54([ip'fe80::0202:02ff:ffff:fe03:0303',64,42])</tt>.)</t>
        <t>Each row of <xref target="tab-equiv-ip"/> shows an example of "ip" notation and
equivalent notation not using an application-extension identifier.</t>
        <table anchor="tab-equiv-ip">
          <name>ip and IP literals vs. plain CDN</name>
          <thead>
            <tr>
              <th align="left">ip literal</th>
              <th align="left">plain CDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>ip'192.0.2.42'</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip&lt;&lt;'192.0.2.42'&gt;&gt;</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.42'</tt></td>
              <td align="left">
                <tt>52(h'c000022a')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.0/24'</tt></td>
              <td align="left">
                <tt>52([24,h'c00002'])</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip'2001:db8::42'</tt></td>
              <td align="left">
                <tt>h'20010db8000000000000000000000042'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::42'</tt></td>
              <td align="left">
                <tt>54(h'20010db8000000000000000000000042')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::/64'</tt></td>
              <td align="left">
                <tt>54([64,h'20010db8'])</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
      <section anchor="hash">
        <name>Cryptographic Hash Values: The "hash" Extension</name>
        <t>The application-extension identifier "hash" is used to notate the
input to a cryptographic hash function as well as to identify such a hash
function.
Its value is a byte string that represents the output of that
hash function.</t>
        <t>The input of the literal is a (text or byte) string, optionally followed by either
an integer or a text string that identifies the hash function in the
COSE Algorithms registry of the CBOR Object Signing and Encryption
(COSE) registry group <xref target="IANA.cose"/>, either by the identifier (value:
integer or string), or, if no algorithm is registered with this value,
by its name used in the registry.
If the second item is not given, the default algorithm used is -16
("SHA-256").</t>
        <t>No uppercase variant prefix is defined for the application-extension
identifier "hash".</t>
        <table anchor="tab-equiv-hash">
          <name>hash literals vs. plain CDN</name>
          <thead>
            <tr>
              <th align="left">hash literal</th>
              <th align="left">plain CDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo'&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash'foo'</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -16&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-256"&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -44&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-512"&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="t1b1">
        <name>String Concatenation: The "b1" and "t1" Extensions</name>
        <t><cref anchor="t1b1name">This section uses the placeholders t1 and b1 as provisional
application extension names, allowing the text to stabilize while
the actual names are still being decided by the WG.</cref></t>
        <t>The "b1" and "t1" Extensions allow a (byte or text) string to be built
up from multiple (byte or text) string literals; these are then
concatenated into a single string.</t>
        <t>The following four text string values (adapted from <xref section="G.4" sectionFormat="of" target="RFC8610"/>) are equivalent:</t>
        <artwork><![CDATA[
"Hello world"
t1<<"Hello ", "world">>
t1<<"Hello", h'20', "world">>
t1<<h'48656c6c6f20776f726c64'>>
]]></artwork>
        <t>Similarly, the following byte string values are equivalent:</t>
        <artwork><![CDATA[
'Hello world'
b1<"Hello world">
b1<<'Hello ', 'world'>>
b1<<'Hello ', h'776f726c64'>>
b1<<'Hello', h'20', 'world'>>
b1<<h'48656c6c6f20776f726c64', '', b64''>>
b1<<h'4 86 56c 6c6f', h' 20776 f726c64'>>
]]></artwork>
        <t>As the examples show, text strings and byte strings can mix within such a
concatenation, so that, for instance, byte string literal notation can be used
inside a sequence of concatenated text string notation literals, to
encode characters that may be better represented in an encoded way.</t>
        <t>This is realized by simply joining together the bytes in the
sequence of string arguments to the b1/t1 application extension,
proceeding from left to right.</t>
        <t>For "b1", the joining operation results in a byte string.
For "t1", the joining operation results in a text string, and the
result therefore needs to be valid UTF-8 except for "diagnostic"
implementations that support and are enabled for generation/ingestion
of CDN for CBOR data items that are well-formed but not valid; see
also <xref target="text-validity"/>.</t>
        <t>Besides strings, arguments to t1/b1 may include ellipses, in which
case the result will be an ellipsis data item in turn (see
<xref target="elision"/>).
The semantic processing of these is governed by the
following rules:</t>
        <ul spacing="normal">
          <li>
            <t>A single <tt>...</tt> is a general ellipsis, which by itself can stand for
any data item, but when used as argument to t1/b1 must stand in for
a string value.</t>
          </li>
          <li>
            <t>Multiple adjacent ellipses are equivalent to a single ellipsis.</t>
          </li>
          <li>
            <t>When an ellipsis is concatenated (on one or both sides) with
strings, the result is a CBOR tag number CPA888 that contains an
array with joined together spans of such strings plus the ellipses
represented by <tt>/CPA/888(null)</tt>.</t>
          </li>
          <li>
            <t>Arguments with nested ellipses are flattened and the above
equivalences applied, so that, for instance, these values are
equivalent:  </t>
            <artwork><![CDATA[
h'48656c6c6f...776f726c64'
b1<<h'48656c6c6f...', ..., h'...776f726c64'>>
b1<<'Hello', ..., 'world'>>
]]></artwork>
          </li>
          <li>
            <t>If there is no ellipsis in the concatenated list, the result of
processing the list will always be a single string data item.</t>
          </li>
        </ul>
      </section>
      <section anchor="ilxs">
        <name>Creating Indefinite-length Encoded Strings: The "ilbs" and "ilts" Extensions</name>
        <t>The <tt>ilbs</tt> and <tt>ilts</tt> application extensions are semantically
identical to <tt>t1</tt> and <tt>b1</tt> at the data model level, but instead of
concatenating the arguments to a single (byte/text) string data item,
they build an indefinite length string out of the arguments, with one
chunk of the correct major type (byte string/text string for
<tt>ilbs</tt>/<tt>ilts</tt>, respectively) created per argument.</t>
        <t>A diagnostic implementation would honor encoding indicators on each of
the arguments, creating a chunk with the same encoding.
As the application-extension is implying indefinite length encoding,
there is no point in applying an encoding indicator to the entire
application-extension literal.</t>
        <artwork><![CDATA[
'Hello world'                4b 48656c6c6f20776f726c64
ilbs<<>>                     5f ff
ilbs<<"Hello world">>        5f 4b 48656c6c6f20776f726c64 ff
ilbs<<'Hello ', "world">>    5f 46 48656c6c6f20 45 776f726c64 ff
ilbs<<'Hello '_0, 'world'>>  5f 5806 48656c6c6f20 45 776f726c64 ff
]]></artwork>
        <t>There is no way to include ellipses in an indefinite length string.</t>
      </section>
      <section anchor="cri">
        <name>Concise Resource Identifiers: The "cri" Extension</name>
        <t>The
application-extension identifier "<tt>cri</tt>" is used to notate
a CDN literal for a CRI reference as defined in <xref target="I-D.ietf-core-href"/>.</t>
        <t>The input of the literal is a URI Reference as per <xref target="RFC3986"/> or an IRI
Reference as per <xref target="RFC3987"/>.</t>
        <t>The value of the literal is a CRI reference that can be converted to
the text of the literal using the procedure of <xref section="6.1" sectionFormat="of" target="I-D.ietf-core-href"/>.  <!-- {{cri-to-uri}}. -->
Note that there may be more than one CRI reference that can be
converted to the URI/IRI reference given; implementations are expected
to favor the simplest variant available and make non-surprising
choices otherwise.
In the all-uppercase variant of the app-prefix, the value is enclosed
in a tag number 99.</t>
        <t>As an example, the CDN</t>
        <sourcecode type="cbor-diag"><![CDATA[
cri'https://example.com/bottarga/shaved'
CRI'https://example.com/bottarga/shaved'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
[-4, ["example", "com"], ["bottarga", "shaved"]]
99([-4, ["example", "com"], ["bottarga", "shaved"]])
]]></sourcecode>
        <t>See <xref target="cri-grammar"/> for an ABNF definition for the content of <tt>cri</tt> literals.</t>
      </section>
      <section anchor="the-float-extension">
        <name>The "float" Extension</name>
        <!-- IEEE754-oriented literals for more floating point values -->

<t>The "<tt>float</tt>" application extension enables the notation of 2-byte,
4-byte, and 8-byte byte strings to express floating point values
(mt=7, ai=25/26/27 respectively) by giving their IEEE 754
representation.
A text string used as an argument is interpreted exactly as a hex
literal (like the <tt>h</tt> application prefix); the result is used as the
byte string.</t>
        <t>The application-oriented literal is interpreted as an encoded data
item would be that prefixes the byte string by a single byte 0xF9
(2 bytes, i.e., binary16), 0xFA (4 bytes, i.e., binary32), and 0xFB (8
bytes, i.e., binary64), respectively.
Byte strings of a different length than 2, 4, or 8 raise an error.
Note that the interpretation as an encoded data item does not create
or imply an encoding indicator; that can be added separately.</t>
        <t>Example (tool used: <tt>edn-abnf -afloat -e</tt>):</t>
        <artwork><![CDATA[🔧 "[float'fe00', float'fe00'_2, float'47110815']" -tpretty ➔
83             # array(3)
   F9 FE00     # primitive(65024)
   FA FFC00000 # primitive(4290772992)
   FA 47110815 # primitive(1192298517)

🔧 "[float'fe00', float'fe00'_2, float'47110815', 0x1.22102ap+15]" ➔
[float'fe00', float'fe00'_2, 37128.08203125, 37128.08203125]
]]></artwork>
        <t>The purpose of this application extension is to close a gap in CDN's
<xref target="IEEE754"/> binary64 support:
Without this (or a similar) extension there is no way to represent NaN
values different from the one called out at the end of Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>: "(for many applications, the single NaN encoding
0xf97e00 will suffice)".
For finite floating point numbers, the decimal or hex floating point
representations are preferred.</t>
      </section>
    </section>
    <section anchor="cdn-tags">
      <name>Tag-based Representations of CDN Input in Binary CBOR</name>
      <t>In some cases, a CDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines a CBOR tags-based representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The CDN consumer does not know (or does not implement) an
application-extension identifier used in the CDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some CDN intended for human consumption (such as in
a specification document) may not want to include parts of the final
data item, destructively replacing complete subtrees or possibly
just parts of a lengthy string by <em>elisions</em> (<xref target="elision"/>).</t>
        </li>
      </ul>
      <aside>
        <t>Implementation note:
Typically, the ultimate applications will fail if they encounter tags
unknown to them, which the ones defined in this section likely are.
Where chains of tools are involved in processing CDN, it may be useful
to fail earlier than at the ultimate receiver in the chain unless
specific processing options (e.g., command line flags) are given that
indicate which of these CDN-related tags are expected at this stage in the
chain.</t>
      </aside>
      <section anchor="unknown">
        <name>Handling unknown application-extension identifiers</name>
        <t>When ingesting CDN,
application-oriented extension literals are usually decoded and
transformed into the corresponding data item during ingestion.
If an application-extension is not known or not implemented by the
ingesting process, this is usually an error and processing has to
stop.</t>
        <t>However, in certain cases, it can be desirable to exceptionally carry an
uninterpreted application-oriented extension literal in an ingested
data item, allowing to postpone its decoding to a specific later
stage of ingestion.</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Unresolved Application-Extension Tag, tag
number CPA999 (<xref target="iana-tags"/>).
The content of this tag is an array of a text string for the
application-extension prefix, and another array:</t>
        <ul spacing="normal">
          <li>
            <t>For app-strings, the second array contains a single item, a text
string containing the text notated by the single-quoted string in the
app-string.</t>
          </li>
          <li>
            <t>For app-sequences, the second array contains zero or more items,
which represent each item in the sequence contained in the
app-sequence.</t>
          </li>
        </ul>
        <t>For example, <tt>cri'https://example.com'</tt> can be represented as
<tt>/CPA/ 999(["cri", ["https://example.com"]])</tt>, and
<tt>hash&lt;&lt;"data", -44&gt;&gt;</tt> as <tt>/CPA/ 999(["hash", ["data", -44]])</tt>.</t>
        <!-- edn-abnf -fe "cri'https://example.com'" -->
<!-- edn-abnf -fe 'hash<<"data", -44>>' -->

<t>If a stage of ingestion is not prepared to handle the Unresolved
Application-Extension Tag, this is an error and processing has to
stop, as if this stage had been ingesting an unknown or unimplemented
application-extension literal itself.</t>
        <t><cref anchor="cpa">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
      </section>
      <section anchor="elision">
        <name>Handling information deliberately elided from a CDN document</name>
        <t>When using CDN for exposition in a document or on a whiteboard, it is
often useful to be able to leave out parts of a CDN document that are
not of interest at that point of the exposition.</t>
        <t>To facilitate this, this specification
supports the use of an <em>ellipsis</em> (notated as three or more dots
in a row, as in <tt>...</tt>) to indicate parts of a CDN document that have
been elided (and therefore cannot be reconstructed).</t>
        <t>Upon ingesting CDN as a representation of a CBOR data item for further
processing, the occurrence of an ellipsis usually is an error and
processing has to stop.</t>
        <t>However, it is useful to be able to process CDN documents with
ellipses in the automation scripts for the documents using them.
This specification defines a CBOR Tag that can be used in the ingestion
for this purpose:</t>
        <t>The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-tags"/>).
The content of this tag is one of:</t>
        <ol spacing="normal" type="1" start="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis);</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between parts
of a string and the actual elisions, represented as ellipses
carrying a null as content.</t>
          </li>
        </ol>
        <t>Elisions can stand in for entire subtrees, e.g. in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, ..., 3]
{ "a": 1,
  "b": ...,
  ...: ...
}
]]></sourcecode>
        <t>A single ellipsis (or key/value pair of ellipses) can imply eliding
multiple elements in an array (members in a map). If more detailed
control is required, a data definition language such as CDDL can be
employed.
(Note that the tag-based representation form defined here does not allow multiple
key/value pairs with an ellipsis as a key: the CBOR data item would
not be valid.)</t>
        <t>Subtree elisions can be represented in a CBOR data item by using
<tt>/CPA/888(null)</tt> as the placeholder CBOR data item:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 888(null), 3]
{ "a": 1,
  "b": 888(null),
  888(null): 888(null)
}
]]></sourcecode>
        <t>Elisions also can be used as part of a (text or byte) string:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": t1<<"Herewith I buy", ..., "gned: Alice & Bob">>
  "bytes_in_IRI": b1<<'https://a.example/', ..., '&q=Übergrößenträger'>
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The examples "contract" and "bytes_in_IRI" combine (text and byte)
string concatenation via the t1/b1 application extension (<xref target="t1b1"/>) with an
ellipsis.
The example
"signature" uses special syntax that allows the use of ellipses
between the bytes notated <em>inside</em> <tt>h''</tt> literals.</t>
        <t>String elisions can be represented in a CBOR data item by a tag CPA888
that wraps an array containing string parts alternating with ellipsis
indicators:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": /CPA/888(["Herewith I buy", 888(null),
                        "gned: Alice & Bob"]),
  "bytes_in_IRI": 888(['https://a.example/', 888(null),
                       '&q=Übergrößenträger']),
  "signature": 888([h'4711', 888(null), h'0815']),
}
]]></sourcecode>
        <t>Note that the use of elisions is different from "commenting out" CDN
text, e.g.:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this CDN will ignore the comments and therefore will
have no idea after ingestion that some information has been elided;
validation steps may then simply fail instead of being informed about
the elisions.</t>
      </section>
    </section>
    <section anchor="grammars">
      <name>ABNF Definitions</name>
      <t>This section collects grammars in ABNF form (<xref target="STD68"/> as extended in
<xref target="RFC7405"/>) that serve to define the syntax of CDN and some
application-oriented literals.</t>
      <aside>
        <t>Implementation note: The ABNF definitions in this section are
intended to be useful in a Parsing Expression Grammar (PEG) parser
interpretation (see <xref section="A" sectionFormat="of" target="RFC8610"/> for an introduction into PEG).</t>
      </aside>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Concise Diagnostic Notation</name>
        <t>This subsection provides an overall ABNF definition for the syntax of
concise diagnostic notation.</t>
        <aside>
          <t>This ABNF definition treats all single-quoted string literals the same,
whether they are unprefixed and constitute byte string literals, or
prefixed and their content subject to further processing.
The text string value of the single-quoted strings that goes into that
further processing is described using separate ABNF definitions in
<xref target="app-grammars"/>; as a convention, the grammar for the content of an
app-string with prefix, say, <tt>p</tt>, is described by an ABNF definition
with the rule name <tt>app-string-p</tt>.</t>
          <t>As an implementation note, some implementations may want to integrate
the parsing and processing of app-string content for certain
application extensions with the overall grammar.
Example grammars for such integrated parsers are provided with this
specification in <xref target="integrated-grammars"/>.</t>
        </aside>
        <t>For simplicity, the internal parsing for the built-in CDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt>/<tt>h``</tt> and <tt>b64''</tt>/<tt>b64``</tt> are
provided in <xref target="h-grammar"/> and <xref target="b64-grammar"/>.</t>
        <figure anchor="abnf-grammar">
          <name>Overall ABNF Definition of CDN</name>
          <sourcecode type="abnf" name="cdn.abnf"><![CDATA[
seq             = S [item *(MSC item) SOC]
one-item        = S item S
item            = map / array / tagged
                / number / simple
                / string / streamstring

string1         = (tstr / bstr) spec
string          = string1 / ellipsis
ellipsis        = 3*"." ; "..." or more dots

number          = (hexfloat / hexint / octint / binint
                   / decnumber / nonfin) spec
sign            = "+" / "-"
decnumber       = [sign] (1*DIGIT ["." *DIGIT] / "." 1*DIGIT)
                         ["e" [sign] 1*DIGIT]
hexfloat        = [sign] "0x" (1*HEXDIG ["." *HEXDIG] / "." 1*HEXDIG)
                         "p" [sign] 1*DIGIT
hexint          = [sign] "0x" 1*HEXDIG
octint          = [sign] "0o" 1*ODIGIT
binint          = [sign] "0b" 1*BDIGIT
nonfin          = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"
simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S simple-number S ")"
simple-number   = "25" %x30-35         ; 250-255
                / "2" %x30-34 DIGIT    ; 200-249
                / "1" 2DIGIT           ; 100-199
                / %x34-39 DIGIT        ; 40-99
                / "3" %x32-39          ; 32-39
                ;; there are no simple values between 24-31
                / "2" %x30-33          ; 20-23
                / "1" DIGIT            ; 10-19
                / DIGIT                ; 0-9
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint spec "(" S item S ")"

app-prefix      = lcalpha *lcldh ; including h and b64
                / ucalpha *ucldh ; tagged variant, if defined
app-string      = app-prefix sqstr
app-sequence    = app-prefix "<<" seq ">>"
app-rstring     = app-prefix rawstring
rawstring       = startrawdelim
                  raw-inner
                  alikerawdelim
rawdelim        = 1*"`"
startrawdelim   = rawdelim
                  ; width (number of backquotes) distinguishes
                  ; between following alikerawdelim and shortrawdelim
alikerawdelim   = rawdelim ; width == previous startrawdelim
shortrawdelim   = rawdelim ; width < previous startrawdelim
rawchars        = 1*(%x0a/%x0d / %x20-5f / %x61-7e / NONASCII)
raw-inner       = 1*(rawchars / shortrawdelim)

sqstr           = SQUOTE *single-quoted SQUOTE
bstr            = app-string / sqstr / app-rstring / rawstring
                / app-sequence / embedded
                  ; note: rawstring is text; app-... can be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" (specms S item *(MSC item) SOC / spec S) "]"
map             = "{" (specms S keyp *(MSC keyp) SOC / spec S) "}"
keyp            = item S ":" S item

; We allow %x09 HT in prose, but not in string literals
blank           = %x09 / %x0A / %x0D / %x20
lblank          = %x0A / %x20  ; Not HT or CR (gone)
non-slash       = blank / %x21-2e / %x30-7F / NONASCII
non-slash-star  = blank / %x21-29 / %x2b-2e / %x30-7F / NONASCII
non-star        = blank / %x21-29 / %x2b-7F / NONASCII
ends-in-star    = *non-star 1*"*"
non-lf          = %x09 / %x0D / %x20-7F / NONASCII
eol-comment     = "#" / "//"
comment         = "/" non-slash-star *non-slash "/"
                / "/*" ends-in-star
                       *(non-slash-star ends-in-star) "/"
                / eol-comment *non-lf %x0A
; optional space
S               = *blank *(comment *blank)
; mandatory space
MS              = (blank/comment) S
; mandatory comma and/or space
MSC             = ("," S) / (MS ["," S])
; optional comma and/or space
SOC             = S ["," S]

; check semantically that strings are either all text or all bytes
; note that there must be at least one string to distinguish
streamstring    = "(_" MS string *(MSC string) SOC ")"
spec            = ["_" *wordchar]
specms          = ["_" *wordchar MS]

double-quoted   = unescaped
                / SQUOTE
                / "\" escapable-d

single-quoted   = unescaped
                / DQUOTE
                / "\" escapable-s

escapable1      = %s"b" ; BS backspace U+0008
                / %s"f" ; FF form feed U+000C
                / %s"n" ; LF line feed U+000A
                / %s"r" ; CR carriage return U+000D
                / %s"t" ; HT horizontal tab U+0009
                / "\"   ; \ backslash (reverse solidus) U+005C

escapable-d     = escapable1
                / DQUOTE
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

escapable-s     = escapable1
                / SQUOTE
                / (%s"u" hexchar-s) ;  uXXXX      U+XXXX

hexchar         = "{" (1*"0" [ hexscalar ] / hexscalar) "}"
                / non-surrogate
                / two-surrogate
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
two-surrogate   = high-surrogate "\" %s"u" low-surrogate
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG
hexscalar       = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate / 1*3HEXDIG

; single-quote hexchar-s: don't allow 0020..007e
hexchar-s       = "{" (1*"0" [ hexscalar-s ] / hexscalar-s) "}"
                / non-surrogate-s
                / two-surrogate
non-surrogate-s = "007F"                 ; rubout
                / "00" ("0"/"1"/"8"/"9"/HEXDIGA) HEXDIG
                / "0" HEXDIG1 2HEXDIG
                / non-surrogate-1
non-surrogate-1 = ((DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
hexscalar-s     = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate-1 / HEXDIG1 2HEXDIG
                / ("1"/"8"/"9"/HEXDIGA) HEXDIG
                / "7F"
                / HEXDIG1

; Note that no other C0 characters are allowed, including %x09 HT
unescaped       = %x0A ; new line
                / %x0D ; carriage return -- ignored on input
                / %x20-21
                     ; omit 0x22 "
                / %x23-26
                     ; omit 0x27 '
                / %x28-5B
                     ; omit 0x5C \
                / %x5D-7F
                / NONASCII

newline         = [%x0D] %x0A
DQUOTE          = %x22    ; " double quote
SQUOTE          = "'"     ; ' single quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIGA         = "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
HEXDIG          = DIGIT / HEXDIGA
HEXDIG1         = DIGIT1 / HEXDIGA
lcalpha         = %x61-7A ; a-z
lcldh           = lcalpha / DIGIT / "-"
ucalpha         = %x41-5A ; A-Z
ucldh           = ucalpha / DIGIT / "-"
ALPHA           = lcalpha / ucalpha
wordchar        = "_" / ALPHA / DIGIT ; [_a-z0-9A-Z]
NONASCII        = %x80-D7FF / %xE000-10FFFF
]]></sourcecode>
        </figure>
        <t>While an ABNF grammar defines the set of character strings that are
considered to be valid CDN by this ABNF, the mapping of these
character strings into the generic data model of CBOR is not always
obvious.</t>
        <t><cref anchor="move3">Further information can be moved up to Section 2 by
splitting it up into information specific to the ABNF grammar and
general information.</cref></t>
        <t>The following additional items should help in the interpretation:</t>
        <ol spacing="normal" type="1" start="1"><li>
            <t>As mentioned in the terminology (<xref target="terminology"/>), the ABNF terminal
  values in this document define Unicode scalar values (characters)
  rather than their UTF-8 encoding.  For example, the Unicode PLACE OF
  INTEREST SIGN (U+2318) would be defined in ABNF as %x2318.</t>
          </li>
          <li anchor="cr">
            <t>See <xref target="repertoire"/> for more considerations about the
  character repertoire used for CDN source text and, in particular,
  the special handling of newline characters in the source.</t>
          </li>
          <li anchor="decnumber">
            <t><tt>decnumber</tt> stands for an integer in the usual decimal notation, unless at
  least one of the optional parts starting with "." and "e" are
  present, in which case it stands for a floating point value in the
  usual decimal notation.  Note that the grammar allows <tt>3.</tt> for
  <tt>3.0</tt> and <tt>.3</tt> for <tt>0.3</tt> (also for hexadecimal floating point
  below); implementers are advised that some platform numeric parsers
  accept only a subset of the floating point syntax in this document
  and may require some preprocessing to use here.</t>
          </li>
          <li>
            <t><tt>hexint</tt>, <tt>octint</tt>, and <tt>binint</tt> stand for an integer in the usual base 16/hexadecimal
  ("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation.
  <tt>hexfloat</tt> stands
  for a floating point number in the usual hexadecimal notation (which
  uses a mantissa in hexadecimal and an exponent in decimal notation,
  see Section 5.12.3 of <xref target="IEEE754"/>, Section 6.4.4.3 of <xref target="C"/>, or Section
  5.13.4 of <xref target="Cplusplus"/>; floating-suffix/floating-point-suffix from
  the latter two is not used here).</t>
          </li>
          <li>
            <t>For <tt>hexint</tt>, <tt>octint</tt>, <tt>binint</tt>, and when <tt>decnumber</tt> stands for an integer, the
  corresponding CBOR data item is represented using major type 0 or 1
  if possible, or using tag 2 or 3 if not.
  In the latter case, this specification does not define any encoding
  indicators that apply.
  If fine control over encoding is desired, this can be expressed by
  being explicit about the representation as a tag:
  E.g., <tt>987654321098765432310</tt>, which is equivalent to <tt>2(h'35 8a 75
  04 38 f3 80 f5 f6')</tt> in its Preferred Serialization, might be
  written as <tt>2_3(h'00 00 00 35 8a 75 04 38 f3 80 f5 f6'_1)</tt> if
  leading zeros need to be added during serialization to obtain
  specific sizes for tag head, byte string head, and the overall byte
  string.  </t>
            <t>
When <tt>decnumber</tt> stands for a floating point value, and for
<tt>hexfloat</tt> and <tt>nonfin</tt>, a floating point data item with major
type 7 is used; diagnostic implementations employ Preferred
Serialization unless the item was modified by an
encoding indicator, which then needs to be <tt>_1</tt>, <tt>_2</tt>, or <tt>_3</tt>.
For this, the number range needs to fit into an <xref target="IEEE754"/> binary64 (or the size
corresponding to the encoding indicator), and the precision will be
adjusted to binary64 before further applying Preferred Serialization
(or to the size corresponding to the encoding indicator).
Tag 4/5 representations are not generated in these cases.
Future app-prefixes could be defined to allow more control for
obtaining a tag 4/5 representation directly from a hex or decimal
floating point literal.</t>
          </li>
          <li anchor="spec">
            <t><tt>spec</tt> stands for an encoding indicator.
  See <xref target="encoding-indicators"/> for details.</t>
          </li>
          <li anchor="rawstring-grammar">
            <t>The ABNF grammar for raw strings is lenient; a parser needs to
  implement the ABNF comments on <tt>alikerawdelim</tt> and <tt>shortrawdelim</tt> as
  well.
  <tt>shortrawdelim</tt> only matches sequences of backquotes that are
  shorter than <tt>startrawdelim</tt>.
  <tt>alikerawdelim</tt> only matches sequences of backquotes that are
  exactly as long as <tt>startrawdelim</tt>.</t>
          </li>
        </ol>
        <aside>
          <t>In a PEG parser that implements predicates, these matching rules
can for instance be implemented as follows:</t>
          <artwork><![CDATA[
 startrawdelim = rawdelim&{|(rd)|@rdlen = rd.text_value.length}
 shortrawdelim = rawdelim&{|(rd)|rd.text_value.length < @rdlen}
 alikerawdelim = rawdelim&{|(rd)|rd.text_value.length == @rdlen}
]]></artwork>
        </aside>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for Application Extension Content</name>
        <t>This subsection provides ABNF definitions for the content of
application-oriented extension literals defined in <xref target="STD94"/> and in this
specification, where applicable.
These grammars describe the <em>decoded</em> content of the single-quoted or
raw string components that
combine with the application-extension identifiers used as prefixes to form
application-oriented extension literals.
Each of these may integrate ABNF rules defined in <xref target="abnf-grammar"/>,
which are not always repeated here.</t>
        <t><xref target="tab-prefixes"/> summarizes the app-prefix values defined in this document.</t>
        <table anchor="tab-prefixes">
          <name>App-prefix Values Defined in this Document</name>
          <thead>
            <tr>
              <th align="left">app-prefix</th>
              <th align="left">content of single-quoted or raw string</th>
              <th align="left">result type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">hexadecimal form of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">H</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">base64 forms (classic or base64url) of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">B64</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">RFC 3339 date/time</td>
              <td align="left">number (int or float)</td>
            </tr>
            <tr>
              <td align="left">DT</td>
              <td align="left">"</td>
              <td align="left">Tag 1 on the above</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP address or prefix</td>
              <td align="left">byte string, <br/>array of length and byte string</td>
            </tr>
            <tr>
              <td align="left">IP</td>
              <td align="left">"</td>
              <td align="left">Tag 54 (IPv6) or 52 (IPv4) on the above</td>
            </tr>
            <tr>
              <td align="left">hash</td>
              <td align="left">string (usually used with sequences)</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">HASH</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">t1</td>
              <td align="left">strings (usually used with sequences)</td>
              <td align="left">text string</td>
            </tr>
            <tr>
              <td align="left">T1</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">b1</td>
              <td align="left">strings (usually used with sequences)</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">B1</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">cri</td>
              <td align="left">RFC 3986 URI or URI reference</td>
              <td align="left">CBOR structure representing equivalent CRI</td>
            </tr>
            <tr>
              <td align="left">CRI</td>
              <td align="left">"</td>
              <td align="left">Tag 99 on the above</td>
            </tr>
            <tr>
              <td align="left">float</td>
              <td align="left">floating point value from input bytes</td>
              <td align="left">floating point value (mt=7)</td>
            </tr>
            <tr>
              <td align="left">FLOAT</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t>Note that implementation platforms may already provide implementations
of grammars used in application-extensions, such as of RFC 3339 for
<tt>dt''</tt> and of IP address syntax for <tt>ip''</tt>.
CDN-based tools may want to use these implementation libraries instead
of using the grammars that are provided here as a reference.</t>
        <t>For convenience, the common definitions in <xref target="abnf-grammar-ext-common"/>
are not repeated in the below ABNF grammars.</t>
        <figure anchor="abnf-grammar-ext-common">
          <name>Common Rules Used in app-extension ABNF grammars</name>
          <sourcecode type="abnf" name="cdn-extcommon.abnf"><![CDATA[
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39 ; 0-9
HEXDIG          = DIGIT / HEXDIGA
HEXDIGA         = "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lblank          = %x0A / %x20  ; Not HT or CR (gone)
non-lf          = %x20-7f / NONASCII
NONASCII        = %x80-D7FF / %xE000-10FFFF
]]></sourcecode>
        </figure>
        <section anchor="h-grammar">
          <name>h: ABNF Definition of Hexadecimal representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in hex,
such as <tt>h''</tt>, <tt>h'0815'</tt>, or <tt>h'/head/ 63 /contents/ 66 6f 6f'</tt>
(another representation of <tt>&lt;&lt; "foo" &gt;&gt;</tt>), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lowercase and uppercase hex digits, as
well as blank space (including comments) around each hex digit.</t>
          <figure anchor="abnf-grammar-h">
            <name>ABNF Definition of Hexadecimal Representation of a Byte String</name>
            <sourcecode type="abnf" name="cdn-ext-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  [eol-comment *non-lf]
ellipsis        = 3*"."
non-slash       = lblank / %x21-2e / %x30-7f / NONASCII
non-slash-star  = lblank / %x21-29 / %x2b-2e / %x30-7f / NONASCII
non-star        = lblank / %x21-29 / %x2b-7f / NONASCII
ends-in-star    = *non-star 1*"*"
non-lf          = %x20-7f / NONASCII
eol-comment     = "#" / "//"
S               = *lblank *(comment *lblank)
comment         = "/" non-slash-star *non-slash "/"
                / "/*" ends-in-star
                       *(non-slash-star ends-in-star) "/"
                / eol-comment *non-lf %x0A
]]></sourcecode>
          </figure>
          <aside>
            <t>The comment syntax provided inside the hex string is intended to
mimic the overall syntax for comments in CDN (<xref target="comments"/>).<br/>
Implementation note: Comments and blank space are also described by
the following search regexp, which can be used to remove them.
For display, the regexp is split along the outer
alternative into four lines, which need to be combined before use;
<tt>\z</tt> stands for the end of the string and is notated <tt>$</tt> in some
regexp dialects.</t>
            <artwork><![CDATA[
  \s|
  /\*(?:[^*]*\*+)(?:[^/*][^*]*\*+)*/|
  /[^/*][^/]*/|
  (?:#|//)[^\n]*(?:\n|\z)
]]></artwork>
          </aside>
        </section>
        <section anchor="b64-grammar">
          <name>b64: ABNF Definition of Base64 representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in base64 is
described by the ABNF in <xref target="abnf-grammar-b64"/>.</t>
          <t>This syntax allows both the classic (<xref section="4" sectionFormat="of" target="RFC4648"/>) and the
URL-safe (<xref section="5" sectionFormat="of" target="RFC4648"/>) alphabet to be used.
It accommodates, but does not require base64 padding.
Note that inclusion of classic base64 makes it impossible to have
comments based on slash characters in b64, as "<tt>/</tt>" is valid base64-classic.</t>
          <figure anchor="abnf-grammar-b64">
            <name>ABNF definition of Base64 Representation of a Byte String</name>
            <sourcecode type="abnf" name="cdn-ext-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *non-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *lblank *(comment *lblank)
comment         = "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="dt-grammar">
          <name>dt: ABNF Definition of RFC 3339 Representation of a Date/Time</name>
          <t>The syntax of the content of <tt>dt</tt> literals can be described by the
ABNF for <tt>date-time</tt> in <xref target="abnf-grammar-dt"/>.
This is derived from <xref target="RFC3339"/> as summarized in <xref section="3" sectionFormat="of" target="RFC9165"/>.</t>
          <figure anchor="abnf-grammar-dt">
            <name>ABNF Definition of RFC3339 Representation of a Date/Time</name>
            <sourcecode type="abnf" name="cdn-ext-dt.abnf"><![CDATA[
app-string-dt   = date-time

date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                          ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap sec
                          ; rules
time-secfrac    = "." 1*DIGIT
time-numoffset  = ("+" / "-") time-hour ":" time-minute
time-offset     = "Z" / time-numoffset

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]
full-date       = date-fullyear "-" date-month "-" date-mday
full-time       = partial-time time-offset

date-time       = full-date "T" full-time
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ip-grammar">
          <name>ip: ABNF Definition of Textual Representation of an IP Address</name>
          <t>The syntax of the content of <tt>ip</tt> literals can be described by the
ABNF for <tt>IPv4address</tt> and <tt>IPv6address</tt> in <xref section="3.2.2" sectionFormat="of" target="RFC3986"/>,
as included in slightly updated form in <xref target="abnf-grammar-ip"/>.</t>
          <figure anchor="abnf-grammar-ip">
            <name>ABNF Definition of Textual Representation of an IP Address</name>
            <sourcecode type="abnf" name="cdn-ext-ip.abnf"><![CDATA[
app-string-ip = IPaddress ["/" uint]

IPaddress     = IPv4address
              / IPv6address

; ABNF from RFC 3986, re-arranged for PEG compatibility:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
        <section anchor="cri-grammar">
          <name>cri: ABNF Definition of URI Representation of a CRI</name>
          <t>It can be expected that implementations of the application-extension
identifier "<tt>cri</tt>" will make use of platform-provided URI
implementations, which will include a URI parser.</t>
          <t>In case such a URI parser is not available or inconvenient to
integrate,
a grammar of the content of <tt>cri</tt> literals is provided by the
ABNF for <tt>URI-reference</tt> in Section <xref target="RFC3986" section="4.1" sectionFormat="bare"/> of RFC 3986 <xref target="RFC3986"/> with certain
re-arrangements taken from <xref target="ip-grammar"/>;
these are reproduced in <xref target="abnf-grammar-cri"/>.
If the content is not ASCII only (i.e., for IRIs), first apply
<xref section="3.1" sectionFormat="of" target="RFC3987"/> and apply this grammar to the result.</t>
          <figure anchor="abnf-grammar-cri">
            <name>ABNF Definition of URI Representation of a CRI</name>
            <sourcecode type="abnf" name="cdn-ext-cri.abnf"><![CDATA[
app-string-cri = URI-reference
; ABNF from RFC 3986:

URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part     = "//" authority path-abempty
                 / path-absolute
                 / path-rootless
                 / path-empty

URI-reference = URI / relative-ref

absolute-URI  = scheme ":" hier-part [ "?" query ]

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

relative-part = "//" authority path-abempty
                 / path-absolute
                 / path-noscheme
                 / path-empty

scheme        = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

authority     = [ userinfo "@" ] host [ ":" port ]
userinfo      = *( unreserved / pct-encoded / sub-delims / ":" )
host          = IP-literal / IPv4address / reg-name
port          = *DIGIT

IP-literal    = "[" ( IPv6address / IPvFuture  ) "]"

IPvFuture     = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

; Use IPv6address, h16, ls32, IPv4adress, dec-octet as re-arranged
; for PEG Compatibility in Figure 6 of [RFC XXXX]:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

reg-name      = *( unreserved / pct-encoded / sub-delims )

path          = path-abempty    ; begins with "/" or is empty
                 / path-absolute   ; begins with "/" but not "//"
                 / path-noscheme   ; begins with a non-colon segment
                 / path-rootless   ; begins with a segment
                 / path-empty      ; zero characters

path-abempty  = *( "/" segment )
path-absolute = "/" [ segment-nz *( "/" segment ) ]
path-noscheme = segment-nz-nc *( "/" segment )
path-rootless = segment-nz *( "/" segment )
path-empty    = 0<pchar>

segment       = *pchar
segment-nz    = 1*pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                 ; non-zero-length segment without any colon ":"

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

query         = *( pchar / "/" / "?" )

fragment      = *( pchar / "/" / "?" )

pct-encoded   = "%" HEXDIG HEXDIG

unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
reserved      = gen-delims / sub-delims
gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="integrated-grammars">
        <name>ABNF Definitions for Integrated Extension Parsers</name>
        <t>For some applications of CDN, it is an optimization to integrate
parsers for the content of some prefixed string literals into
the main parser, handling both the string literal syntax (e.g., escapes such
as <tt>\'</tt> and <tt>\\</tt>) and the syntax of the extension content in one go.</t>
        <t>For application-extensions that only use printable ASCII characters
(from U+0020 to U+007E) minus single-quote <tt>'</tt> and backslash <tt>\</tt>, the ABNF
such as that given in <xref target="app-grammars"/> can be directly used as an
integrated parser, after adding some glue ABNF.
For instance, for app-string-dt, add an alternative to <tt>bstr</tt> that
points to a rule for prefixed single-quoted string literals (<xref target="abnf-grammar-sq-glue"/>).</t>
        <figure anchor="abnf-grammar-sq-glue">
          <name>Glue ABNF for Integrated DT Parser</name>
          <sourcecode type="abnf" name="cdn-glue.abnf"><![CDATA[
bstr            = sq-app-string-dt /
                  app-string / sqstr / app-sequence / embedded
sq-app-string-dt = (%s"dt'"/%s"DT'") app-string-dt "'"
]]></sourcecode>
        </figure>
        <t>To facilitate writing integrated ABNF for more complex prefixed
string literals, the ABNF definitions in <xref target="abnf-grammar-sq"/> may
be useful and are used in the rest of this section.</t>
        <figure anchor="abnf-grammar-sq">
          <name>ABNF Definitions Useful for Integrated Extension Parsers</name>
          <sourcecode type="abnf" name="cdn-intcommon.abnf"><![CDATA[
i-HT =        %s"\t" / %s"\u" ("0009" / "{" *("0") "9}")
i-LF = %x0a / %s"\n" / %s"\u" ("000A" / "{" *("0") "A}")
i-CR = %x0d / %s"\r" / %s"\u" ("000D" / "{" *("0") "D}")

i-blank = i-LF / i-CR / " "
i-non-lf = i-HT / i-CR / %x20-26 / "\'" / %x28-5b
         / "\\" / %x5d-7f / i-NONASCII

i-NONASCII = NONASCII / %s"\u" ESCGE7F

; hex escaping for U+007F or greater
ESCGE7F = "D" ("8"/"9"/"A"/"B") 2HEXDIG
          %s"\u" "D" ("C"/"D"/"E"/"F") 2HEXDIG
        / FOURHEX1 / "0" HEXDIG1 2HEXDIG / "00" TWOHEX1
        / "{" *("0")
          ("10" 4HEXDIG / HEXDIG1 4HEXDIG
           / FOURHEX1 / HEXDIG1 2HEXDIG / TWOHEX1)
          "}"

; xxxx - 0xxx - Dhigh\uDloow
FOURHEX1 = (DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG
         / "D" ODIGIT 2HEXDIG
; 00xx - ASCII + 007F
TWOHEX1  = ("8"/"9" / HEXDIGA) HEXDIG / "7F"
]]></sourcecode>
        </figure>
        <t>Similarly, for integrated parsers for extension literals built from raw strings, the ABNF
definitions in <xref target="abnf-grammar-rs"/> can be useful.
<tt>alikerawdelim</tt> only matches sequences of backquotes that are exactly as
long as a previous <tt>startrawdelim</tt>.</t>
        <figure anchor="abnf-grammar-rs">
          <name>ABNF Definitions Useful for Raw String Integrated Extension Parsers</name>
          <sourcecode type="abnf" name="cdn-raw-intcommon.abnf"><![CDATA[
r-non-lf = %x0D / %x20-5f / %x61-7f / NONASCII / shortrawdelim
]]></sourcecode>
        </figure>
        <t>Four subsections with ABNF for integrated parsers follow, a pair for
<tt>h''</tt> and <tt>b64''</tt>, and a pair for <tt>h``</tt> and <tt>b64``</tt>.
There is no expectation for a new application-extension to supply ABNF
for an integrated parser (or any ABNF at all!), in particular if the
parsing function is likely to be fulfilled by a platform library.
If ABNF for the content of a single-quoted string is available in an
application-extension specification, ABNF for an integrated parser can
be written as a separate activity or also automatically derived (see
also <xref target="CDN-WIKI"/>, where more information about implementing integrated
parsers is being collected).</t>
        <section anchor="sq-h-grammar">
          <name>h'': ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/> and <xref format="counter" target="abnf-grammar-sq"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-h"/> can be used as an integrated parser
for <tt>h</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-h">
            <name>ABNF Definition for Integrated Hex Parser</name>
            <sourcecode type="abnf" name="cdn-int-hsq.abnf"><![CDATA[
sq-app-string-h = %s"h'" s-app-string-h "'"
s-app-string-h = h-S *(HEXDIG h-S HEXDIG h-S / ellipsis h-S)
    [eol-comment *i-non-lf]

h-S = *(i-blank) *(h-comment *(i-blank))
h-non-slash = i-blank / %x21-26 / "\'" / %x28-2e
            / %x30-5b / "\\" / %x5d-7f / i-NONASCII
h-non-slash-star = i-blank / %x21-26 / "\'" / %x28-29 / %x2b-2e
                 / %x30-5b / "\\" / %x5d-7f / i-NONASCII
h-non-star = i-blank / %x21-26 / "\'" / %x28-29 / %x2b-5b
           / "\\" / %x5d-7f / i-NONASCII
h-ends-in-star = *h-non-star 1*"*"
h-comment = "/" h-non-slash-star *h-non-slash "/"
          / "/*" h-ends-in-star
                 *(h-non-slash-star h-ends-in-star) "/"
          / eol-comment *i-non-lf i-LF
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-grammar">
          <name>b64'': ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/> and <xref format="counter" target="abnf-grammar-sq"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-b64"/> can be used as an integrated parser
for <tt>b64</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-b64">
            <name>ABNF Definition for Integrated Base64 Parser</name>
            <sourcecode type="abnf" name="cdn-int-b64sq.abnf"><![CDATA[
sq-app-string-b64 = %s"b64'" s-app-string-b64 "'"
s-app-string-b64  = b64-S *(4(b64dig b64-S))
                  [b64dig b64-S b64dig b64-S
                   ["=" b64-S "=" / b64dig b64-S ["="]] b64-S]
                  ["#" *i-non-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
b64-S           = *i-blank *(b64-comment *i-blank)
b64-comment     = "#" *i-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-h-raw-grammar">
          <name>h``: ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/>, <xref format="counter" target="abnf-grammar-sq"/>
and
<xref format="counter" target="abnf-grammar-rs"/>, ABNF such as that shown in <xref target="abnf-grammar-rs-h"/> can
be used as an integrated parser for <tt>h</tt> prefixed raw strings.</t>
          <figure anchor="abnf-grammar-rs-h">
            <name>ABNF Definition for Integrated Raw String Hex Parser</name>
            <sourcecode type="abnf" name="cdn-int-hraw.abnf"><![CDATA[
raw-app-string-h = %s"h" startrawdelim r-app-string-h
r-app-string-h = rh-S *(HEXDIG rh-S HEXDIG rh-S / ellipsis rh-S)
    (eol-comment *r-non-lf alikerawdelim / alikerawdelim)
rh-S = *(lblank) *(rh-comment *(lblank))
rh-2 = %x61-7f / NONASCII / shortrawdelim
rh-non-slash = lblank / %x21-2e / %x30-5f / rh-2
rh-non-slash-star = lblank / %x21-29 / %x2b-2e / %x30-5f / rh-2
rh-non-star = lblank / %x21-29 / %x2b-5f / rh-2
rh-ends-in-star = *rh-non-star 1*"*"
rh-comment = "/" rh-non-slash-star *rh-non-slash "/"
           / "/*" rh-ends-in-star
                  *(rh-non-slash-star rh-ends-in-star) "/"
           / eol-comment *r-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-raw-grammar">
          <name>b64``: ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/>, common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/>, <xref format="counter" target="abnf-grammar-sq"/>
and <xref format="counter" target="abnf-grammar-rs"/> as well as the rule
<tt>b64dig</tt> from <xref target="abnf-grammar-sq-b64"/>, ABNF such as
that shown in <xref target="abnf-grammar-rs-b64"/> can be used as an integrated parser
for <tt>b64</tt> prefixed raw strings.</t>
          <figure anchor="abnf-grammar-rs-b64">
            <name>ABNF Definition for Integrated Raw String Base64 Parser</name>
            <sourcecode type="abnf" name="cdn-int-b64raw.abnf"><![CDATA[
raw-app-string-b64 = %s"b64" startrawdelim r-app-string-b64
r-app-string-b64  = rb64-S *(4(b64dig rb64-S))
                  [b64dig rb64-S b64dig rb64-S
                   ["=" rb64-S "=" / b64dig rb64-S ["="]] rb64-S]
                  ("#" *r-non-lf alikerawdelim / alikerawdelim)
rb64-S           = *lblank *(rb64-comment *lblank)
rb64-comment     = "#" *r-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFC-XXXX with the RFC
number of this RFC, [IANA.concise-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>Concise Diagnostic Notation Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-Extension Identifiers"
registry in a new "Concise Diagnostic Notation" registry group
[IANA.concise-diagnostic-notation], with the policy "expert review"
(Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions">The experts are instructed to be frugal in the allocation of
application-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for application-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The experts are also instructed to direct the registrant to provide a
specification (Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>), but can make exceptions,
for instance when a specification is not available at the time of
registration but is likely forthcoming.
If the experts become aware of application-extension identifiers that are deployed and
in use, they may also initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Application-Extension Identifier:</dt>
          <dd>
            <t>a lowercase ASCII <xref target="STD80"/> string that starts with a letter and can
contain letters, digits, and hyphens after that (<tt>[a-z][a-z0-9-]*</tt>).
No other entry in the registry can have the same
application-extension identifier.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana">
          <name>Initial Content of Application-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">Application-extension Identifier</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">h32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">false</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">true</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">null</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">undefined</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">pragma</td>
              <td align="left">Reserved for future use</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Address/Prefix</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">hash</td>
              <td align="left">Cryptographic Hash</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">b1</td>
              <td align="left">Byte String Concatenation</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">t1</td>
              <td align="left">Text String Concatenation</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">cri</td>
              <td align="left">Constrained Resource Identifier</td>
              <td align="left">RFC-XXXX, <xref target="I-D.ietf-core-href"/></td>
            </tr>
            <tr>
              <td align="left">float</td>
              <td align="left">Floating-Point Value</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="reg-ei">
        <name>Encoding Indicators</name>
        <t>IANA is requested to create an "Encoding Indicators"
registry in the newly created "Concise Diagnostic Notation" registry group
[IANA.concise-diagnostic-notation], with the policy "specification required"
(Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions-ei">The experts are instructed to be frugal in the allocation of
encoding indicators that are suggestive of generally applicable semantics,
keeping them in reserve for encoding indicator registrations that are likely to enjoy wide
use and can make good use of their conciseness.
If the experts become aware of encoding indicators that are deployed and
in use, they may also solicit a specification and initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Encoding Indicator:</dt>
          <dd>
            <t>an ASCII <xref target="STD80"/> string that starts with an underscore letter and
can contain zero or more underscores, letters and digits after that
(<tt>_[_A-Za-z0-9]*</tt>). No other entry in the registry can have the same
Encoding Indicator.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description.
This description may employ an abbreviation of the form <tt>ai=</tt>nn,
where nn is the numeric value of the field <em>additional information</em>, the
low-order 5 bits of the initial byte (see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite-Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_4</td>
              <td align="left">Reserved (for ai=28)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_5</td>
              <td align="left">Reserved (for ai=29)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_6</td>
              <td align="left">Reserved (for ai=30)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_7</td>
              <td align="left">Reserved (see _)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <aside>
          <t>As the "Reference" column reflects, all the encoding indicators
initially registered are already defined in Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with the exception of <tt>_i</tt>, which is defined in <xref target="grammar"/> of the
present document.</t>
        </aside>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table anchor="new-media-type">
          <name>New Media Type application/cdn</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cdn</td>
              <td align="left">application/cdn</td>
              <td align="left">RFC-XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cdn</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.cdn</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>LIMITED USE</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>Concise diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cdn is intended to be used
within documents about CBOR data items, in diagnostics for human
consumption, and in other representations of CBOR data items that
are necessarily text-based such as in configuration files or other
data edited by humans, often under source-code control.</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table anchor="tab-content-format">
          <name>New Content-Format for application/cdn</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/cdn</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..9999, according to the
procedure "IETF Review or IESG Approval", preferably a number less
than 1000.</t>
      </section>
      <section anchor="iana-tags">
        <name>Tags</name>
        <t><cref anchor="cpa_1">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
        <t>In the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>, IANA is requested to assign the
tags in <xref target="tab-tag-values"/> from the "specification required" space
(suggested assignments: 888 and 999), with the present document as the
specification reference.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tags</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">CPA888</td>
              <td align="left">null or array</td>
              <td align="left">Diagnostic Notation Ellipsis</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="right">CPA999</td>
              <td align="left">array</td>
              <td align="left">Diagnostic Notation<br/>Unresolved Application-Extension</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> apply, including by applying
the considerations about the CBOR format to the CDN format in an
analogous sense.
Security considerations documented in <xref target="RFC8610"/> for the CDDL language
often are also applicable to the CDN language in an analogous sense.</t>
      <t>The CDN specification defines two explicit extension points:
application-extension identifiers (<xref target="appext-iana"/>) and encoding
indicators (<xref target="reg-ei"/>).
Extensions introduced through these can have their own security
considerations, which need to be considered in the specification for
the extension (see, e.g., <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-edn-e-ref"/>).</t>
      <t>Implementers of tools that support the use of CDN extensions need to
avoid inadvertently introducing a vector that allows attackers to
invoke extensions not planned for by the tool operator, who might not
have considered security considerations of specific extensions such as
those posed by their use of dereferenceable identifiers (<xref section="6" sectionFormat="of" target="I-D.bormann-t2trg-deref-id"/>).</t>
      <t>Tools might require explicitly enabling the use of each extension that
is not on an allowlist.
(This task can possibly be made less onerous by combining it with a
mechanism for supplying any parameters that control such an extension.)</t>
      <t>Tools that process application extensions — directly from their use in
CDN or later via Tag CPA999 (<xref target="unknown"/>) — need to be configured out of
band to enable processing each specific application extension only if
that is desired.
An allowlist built out of the mandatory-to-implement application
extensions may be an exception.</t>
      <t>Similarly, inputs to validators may be prepared with partially
specified subtrees by representing ellipses via Tag CPA888
(<xref target="elision"/>).
Validators that want to accept such partially specified CBOR data
items need to require explicit configuration to do so.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
            <front>
              <title>Concise Binary Object Representation (CBOR)</title>
              <author fullname="C. Bormann" initials="C." surname="Bormann"/>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <date month="December" year="2020"/>
              <abstract>
                <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
                <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="94"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <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 "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <referencegroup anchor="STD68" target="https://www.rfc-editor.org/info/std68">
          <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
            <front>
              <title>Augmented BNF for Syntax Specifications: ABNF</title>
              <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
              <author fullname="P. Overell" initials="P." surname="Overell"/>
              <date month="January" year="2008"/>
              <abstract>
                <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="68"/>
            <seriesInfo name="RFC" value="5234"/>
            <seriesInfo name="DOI" value="10.17487/RFC5234"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD63" target="https://www.rfc-editor.org/info/std63">
          <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
            <front>
              <title>UTF-8, a transformation format of ISO 10646</title>
              <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
              <date month="November" year="2003"/>
              <abstract>
                <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="63"/>
            <seriesInfo name="RFC" value="3629"/>
            <seriesInfo name="DOI" value="10.17487/RFC3629"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </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="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="RFC3987">
          <front>
            <title>Internationalized Resource Identifiers (IRIs)</title>
            <author fullname="M. Duerst" initials="M." surname="Duerst"/>
            <author fullname="M. Suignard" initials="M." surname="Suignard"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>This document defines a new protocol element, the Internationalized Resource Identifier (IRI), as a complement of the Uniform Resource Identifier (URI). An IRI is a sequence of characters from the Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to URIs is defined, which means that IRIs can be used instead of URIs, where appropriate, to identify resources.</t>
              <t>The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs. This was done in order to allow a clear distinction and to avoid incompatibilities with existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3987"/>
          <seriesInfo name="DOI" value="10.17487/RFC3987"/>
        </reference>
        <reference anchor="RFC9164">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9164"/>
          <seriesInfo name="DOI" value="10.17487/RFC9164"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="IANA.cose" target="https://www.iana.org/assignments/cose">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <referencegroup anchor="STD80" target="https://www.rfc-editor.org/info/std80">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <front>
              <title>ASCII format for network interchange</title>
              <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
              <date month="October" year="1969"/>
            </front>
            <seriesInfo name="STD" value="80"/>
            <seriesInfo name="RFC" value="20"/>
            <seriesInfo name="DOI" value="10.17487/RFC0020"/>
          </reference>
        </referencegroup>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="21" month="November" year="2025"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) rather than as a
   sequence of characters.  This approach simplifies parsing,
   comparison, and reference resolution in environments with severe
   limitations on processing power, code size, and memory size.

   This RFC updates RFC 7595 by adding a column on the "URI Schemes"
   registry.


   // (This "cref" paragraph will be removed by the RFC editor:) After
   // approval of -28 and nit fixes in -29, the present revision -30
   // contains two more small fixes for nits that were uncovered in the
   // RPC intake process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-30"/>
        </reference>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="IEEE Std" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </reference>
        <reference anchor="C" target="https://www.iso.org/standard/82075.html">
          <front>
            <title>Information technology — Programming languages — C</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9899:2024"/>
          <annotation> 
The standard is widely known as C23. Its technical content is also available via <eref target="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf">https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf</eref>.</annotation>
          <refcontent>Edition 5</refcontent>
        </reference>
        <reference anchor="Cplusplus" target="https://www.iso.org/standard/83626.html">
          <front>
            <title>Programming languages — C++</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14882:2024"/>
          <annotation> 
The standard is widely known as C++23. Its technical content is also available via <eref target="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf">https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf</eref>.</annotation>
          <refcontent>Edition 7</refcontent>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
            <front>
              <title>Key words for use in RFCs to Indicate Requirement Levels</title>
              <author 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" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8610">
          <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="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC9290">
          <front>
            <title>Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document defines a concise "problem detail" as a way to carry machine-readable details of errors in a Representational State Transfer (REST) response to avoid the need to define new error response formats for REST APIs for constrained environments. The format is inspired by, but intended to be more concise than, the problem details for HTTP APIs defined in RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9290"/>
          <seriesInfo name="DOI" value="10.17487/RFC9290"/>
        </reference>
        <referencegroup anchor="STD90" target="https://www.rfc-editor.org/info/std90">
          <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <reference anchor="RFC7493">
          <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="I-D.bormann-cbor-numbers">
          <front>
            <title>On Numbers in CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="1" month="March" year="2026"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR), as defined in STD 94
   (RFC 8949), is a data representation format whose design goals
   include the possibility of extremely small code size, fairly small
   message size, and extensibility without the need for version
   negotiation.

   Among the kinds of data that a data representation format needs to be
   able to carry, numbers have a prominent role, but also have inherent
   complexity that needs attention from protocol designers, from
   implementers of CBOR libraries, and from implementers of the
   applications that use them.

   This document gives an overview over number formats available in CBOR
   and some notable CBOR tags registered, and it attempts to provide
   information about opportunities and potential pitfalls of these
   number formats.


   // This is still rather drafty, pieced together from various
   // components, so it has a higher level of redundancy than ultimately
   // desired.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-numbers-03"/>
        </reference>
        <reference anchor="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point.</t>
              <t>The present document defines a number of control operators that were not yet ready at the time RFC 8610 was completed:.plus,.cat, and.det for the construction of constants;.abnf/.abnfb for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and.feature for indicating the use of a non-basic feature in an instance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9165"/>
          <seriesInfo name="DOI" value="10.17487/RFC9165"/>
        </reference>
        <reference anchor="RFC9741">
          <front>
            <title>Concise Data Definition Language (CDDL): Additional Control Operators for the Conversion and Processing of Text</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point. RFCs have added to this extension point in both an application-specific and a more general way.</t>
              <t>The present document defines a number of additional generally applicable control operators for text conversion (bytes, integers, printf-style formatting, and JSON) and for an operation on text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9741"/>
          <seriesInfo name="DOI" value="10.17487/RFC9741"/>
        </reference>
        <reference anchor="RFC9682">
          <front>
            <title>Updates to the Concise Data Definition Language (CDDL) Grammar</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="November" year="2024"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), as defined in RFCs 8610 and 9165, provides an easy and unambiguous way to express structures for protocol messages and data formats that are represented in Concise Binary Object Representation (CBOR) or JSON.</t>
              <t>This document updates RFC 8610 by addressing related errata reports and making other small fixes for the ABNF grammar defined for CDDL.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9682"/>
          <seriesInfo name="DOI" value="10.17487/RFC9682"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-e-ref">
          <front>
            <title>External References to Values in CBOR Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="1" month="March" year="2026"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949) is a data
   format whose design goals include the possibility of extremely small
   code size, fairly small message size, and extensibility without the
   need for version negotiation.

   CBOR diagnostic notation (EDN) is widely used to represent CBOR data
   items in a way that is accessible to humans, for instance for
   examples in a specification.  At the time of writing, EDN did not
   provide mechanisms for composition of such examples from multiple
   components or sources.  This document uses EDN application extensions
   to provide two such mechanisms, both of which insert an imported data
   item into the data item being described in EDN:

   The e'' application extension provides a way to import data items,
   particularly constant values, from a CDDL model (which itself has
   ways to provide composition).

   The ref'' application extension provides a way to import data items
   that are described in EDN.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-e-ref-03"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-deref-id">
          <front>
            <title>The "dereferenceable identifier" pattern</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="24" month="February" year="2026"/>
            <abstract>
              <t>   In a protocol or an application environment, it is often important to
   be able to create unambiguous identifiers for some meaning (concept
   or some entity).

   Due to the simplicity of creating URIs, these have become popular for
   this purpose.  Beyond the purpose of identifiers to be uniquely
   associated with a meaning, some of these URIs are in principle
   _dereferenceable_, so something can be placed that can be retrieved
   when encountering such a URI.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-07"/>
        </reference>
        <reference anchor="RFC9512">
          <front>
            <title>YAML Media Type</title>
            <author fullname="R. Polli" initials="R." surname="Polli"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="E. Aro" initials="E." surname="Aro"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document registers the application/yaml media type and the +yaml structured syntax suffix with IANA. Both identify document components that are serialized according to the YAML specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9512"/>
          <seriesInfo name="DOI" value="10.17487/RFC9512"/>
        </reference>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language (YAML™) Version 1.2</title>
            <author initials="O." surname="Ben-Kiki" fullname="Oren Ben-Kiki">
              <organization/>
            </author>
            <author initials="C." surname="Evans" fullname="Clark Evans">
              <organization/>
            </author>
            <author initials="I." surname="döt Net" fullname="Ingy döt Net">
              <organization/>
            </author>
            <date year="2021" month="October" day="01"/>
          </front>
          <refcontent>Revision 1.2.2</refcontent>
        </reference>
        <reference anchor="CDN-WIKI" target="https://github.com/cbor-wg/edn/wiki">
          <front>
            <title>CDN Wiki</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 3092?>

<section anchor="cdn-and-cddl">
      <name>CDN and CDDL</name>
      <t>This appendix is for information.</t>
      <t>CDN was designed as a language to provide a human-readable
representation of an instance, i.e., a single CBOR data item or CBOR
sequence.
CDDL was designed as a language to describe an (often large) set of
such instances (which itself constitutes a language), in the form of a
<em>data definition</em> or <em>grammar</em> (or sometimes called <em>schema</em>).</t>
      <t>The two languages share some similarities, not the least because they
have mutually inspired each other.
But they have very different roots:</t>
      <ul spacing="normal">
        <li>
          <t>CDN syntax is an extension to JSON syntax <xref target="STD90"/>.<br/>
(Any (interoperable) JSON text is also valid CDN.)</t>
        </li>
        <li>
          <t>CDDL syntax is inspired by ABNF's syntax <xref target="STD68"/>.</t>
        </li>
      </ul>
      <t>For engineers that are using both CDN and CDDL, it is easy to write
"CDDLisms" or "CDNisms" into their drafts that are meant to be in the
other language.
(This is one more of the many motivations to always validate formal
language instances with tools.)</t>
      <t>Important differences include:</t>
      <ul spacing="normal">
        <li>
          <t>Comment syntax.  CDDL inherits ABNF's semicolon-delimited end of
line characters, while CDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, CDN simplifies JavaScript's copy of the
original C comment syntax to be delimited by single slashes (where
line breaks are not of interest); it also adds traditional C-style
inline comments (<tt>/*</tt> ... <tt>*/</tt>) and end-of-line comments
that start with <tt>#</tt> or <tt>//</tt>.  </t>
          <dl spacing="compact">
            <dt>CDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
{ / alg / 1: -7 / ECDSA 256 / }
{ 1:   # alg
    -7 # ECDSA 256
}
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>? 1 =&gt; int / tstr,  ; algorithm identifier</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Syntax for tags.  CDDL's tag syntax is part of the system for
referring to CBOR's fundamentals (the major type 6, in this case)
and (with <xref target="RFC9682"/>) allows specifying the actual tag number
separately, while CDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>CDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
98([h'', # empty encoded protected header
    {},  # empty unprotected header
    ...  # rest elided here
   ])
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Embedded CBOR.  CDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>CDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
98([<< {/alg/ 1: -7 /ECDSA 256/} >>, # == h'a10126'
    ...                              # rest elided here
   ])
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>serialized_map = bytes .cbor header_map</tt></t>
            </dd>
          </dl>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="list-of-figures">
      <name>List of Figures</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="abnf-grammar"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar"/></t>
        </dd>
        <dt><xref target="abnf-grammar-ext-common"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-ext-common"/></t>
        </dd>
        <dt><xref target="abnf-grammar-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-b64"/></t>
        </dd>
        <dt><xref target="abnf-grammar-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-dt"/></t>
        </dd>
        <dt><xref target="abnf-grammar-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-ip"/></t>
        </dd>
        <dt><xref target="abnf-grammar-cri"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-cri"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-glue"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-glue"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-b64"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs-b64"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="list-of-tables">
      <name>List of Tables</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="tab-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-ei"/></t>
        </dd>
        <dt><xref target="tab-numbers"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-numbers"/></t>
        </dd>
        <dt><xref target="tab-float-encoding"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-float-encoding"/></t>
        </dd>
        <dt><xref target="tab-equiv-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-dt"/></t>
        </dd>
        <dt><xref target="tab-equiv-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-ip"/></t>
        </dd>
        <dt><xref target="tab-equiv-hash"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-hash"/></t>
        </dd>
        <dt><xref target="tab-prefixes"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-prefixes"/></t>
        </dd>
        <dt><xref target="tab-iana"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-iana"/></t>
        </dd>
        <dt><xref target="tab-iana-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-iana-ei"/></t>
        </dd>
        <dt><xref target="new-media-type"/>:</dt>
        <dd>
          <t><xref format="title" target="new-media-type"/></t>
        </dd>
        <dt><xref target="tab-content-format"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-content-format"/></t>
        </dd>
        <dt><xref target="tab-tag-values"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-tag-values"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The concept of application-oriented extensions to diagnostic notation,
as well as the definition for the "dt" extension, were inspired by the
CoRAL work by Klaus Hartke.</t>
      <t>(TBD)</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8y923IbWZoudr+eYg1km2AVAAIgeJS6ZiiS6uZMlVRbUk3H
jEojJIAEmSUwE41MSGKr5RhH+M6+nAtfeU/scIQdMZeO8E3f1X6TfoL9CP6P
65BIUKqeGXvUXRIJZK7z+s//93e7XfPu1O4bU2XVIj213xhrz4t8mpWpvciS
67woq2xqnxZVUmVFbtvnF093zayY5sktPD5bJfOqm6XVvDudFKtuOsu7i6xK
V8mi7C6SKi0r88DO4IdTO+wPD7v9w+5gaMzb9O59sZqd2qscHs7TqnuBLZlp
Up3aspqZslqlyS18f/nyiZkWeZnm5bo8tdVqnZr1EluE344PB/2OPT4ZnRiz
zE7tq6qYdmxZrODteQk/3d3yD9PidplMK/rhNs2r8rV5u0puZ8X7/E2xxJmV
pzDzYvGmrJJV9Sap3syzVVm9uU1Wb9OV9GuSdXVTrPDJLvxnbQav2fOefVys
bpM8p894Yc4TeDvNo2+K1fWp/SHP3qWrMqv+6/9R2cerFEZjX/79FT2Ak05h
Ab6HRZ8n0xu7v98fjfr03TSr7k7lBf6gmEE/F93h8f7BiXyyzqsVPPXrFDu9
ow+XN0UOz309OumOhoPucHDcPdw/GQ7oy/Q2yRandppMir+qfp/1YITGvEvz
dYpzlC9hX/8Kd5i+tfY6q27WE/68+/56L9hy+Jb3/NS2bqpqWZ7u7cljPX6t
lxXhC3stY3JcoQoWBbt88fLiZMRtw2/Pn5wfH42GcCLS3/GXh8enNpnkc/lt
/9Suq/kxP3o06h/wt9OSP9nf3z85pdNXZbepfHZyfAhvrTL369GpzfTXk8Eh
dJ8tq+RaPhgdH+D36XX6YQkfXZ09PetNixKWFP/uwhfuU5wpvIinFP7Wj2/T
WZZ0q7tlSkdMGlil3WUCJzCFdaDPH59/P4SBZUme4HHnCR73YULlNMPRXXUv
enzR8OUbONcwBBr31eXl5dHB6JS2FI7vNZ4hXf8sTWHkC3inhz/iJu7B9V3j
Ldg7Pjo8HA759AgBwMbsiyrJZ8lqZufFyj5ZFLA/+XX3+yLLK3u2gp2EcWdT
es1fCbgUfMSxCfqd7/0caEHK5ztdZWmZ5fOCn7faGxACmEB32B+cyBcXz65O
7aDfGwz6J3v4FKxGD7/v+TGfN8/4/fv3vawsaKalTGTveNg/OujdVLeLaLIw
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
q5SW/spO1nctOe4tlGlO7RlIian9H+z/297XrrWRJGv+r6vIUz4zlmgkITD4
E09jwN2c02N7Dd4+z2AOKlCBNC0ktUqyTWPvsxexP/d59s9ew97A3MleycYb
kZ9VKSHcPTPnPDt0G6SqzMjvyIjMiDdejM7EADzlK53T/vD04O0BkWBDMSNd
Z00tX7es1djvf97+y/+kqXo5+cv/+cv/ogGY/OV/X+aT+0wLklMGV3Ei1OOL
AcokdwOm9Ue+nbSru1hyBXUxvvO6J4wBdd1T0ZyptPrQz2Qes5XknNBKNgKG
dcd3Jo9exRKvISIIlyJai9hh4WeNXGBZmY8LLpbMRkY4FYvsUx1/z7vo1b4g
XzHR5S5eto+EqwawBk/D9pRZA7TBEofPy7lDTG8kznjqlhlnV9dxdd4FKyL+
E5mVJ/XVyLTkIuLz8vZi5k5aXZY/bbkgmbsBbYRP4hu7up3KIQO1c0CPX79y
7ZNqvGltXpeyfQTmtmxY1NPVrq6uqBYtqZZeU7gHLG9WWlyQ2wEjL0B24vNh
CaOjT/NMeMdAnkQyiSI7ZMfmTEMCO+VYDMxxXu/rHz3Gw7di6tPEDxwxzccF
HwFPoTNow385q7b2jdoDSGiCG55RJ2kY/r5FwmMbij272+HwVNtZRO6IkhB8
73w0kLDAJgdWFBPkTY7YAx8aAE5fBzjuGjgWfnEuwaG5+XLjMfIiDXkxOA1K
NDopfhQbDy4bO/znq5KS5UhROaOHDmRvTiwYNoRpZhpvqLHo3H0xxGBnI+kD
VXuz/10dDIGalJQu2nWkz50xR3n7pHYSNp9i9yRj1NKHUKIh5+SoGASpXa91
bPrSiImLgTaZiwnIdkC/XkE1424DZTvYFxhv+RWLmOPYcWSLW1QzAgqJoyke
N5rWk5+6o4/D7bSdPtcll0kjoDkz3MHimMXW9JRDqk+1N4xgpHvR8jC3vOBL
8SC3CMHgZxDbGRsJcyae+LiJCcMc9nX80arnmtGjY03QbiKXI9bGpmIAn1RJ
6xDx+pRIh3HWVhexaa5DIdo1/uWpiJHu0Em0FZ0gZlMl0SoNxhRvUeYQuYCy
0wFSV1AtUY5KtUnscRG8QAQXoOMIN8YdawXXr67jVc0xSwZ/4InuinKaX6If
mOmN9ZItnRoKXmjDO6bONb60vttI5lik29qb6a97rGntXCxXZAhzjnhkatTV
DMLc7PNi8jATklCHZrNSl9kbvWbyrMXL5rmcRfNWAEghrXTagMam+WY82Yez
EYZ35hhNDuLZnIVjYNjrrDKdQIwFr1an01G9DhALgyDIeI7g4PoFMVXbVm5T
zzPqk5ArlNo9k4i6CnsFnNYCIWRbHapjFtlWan883GXpra4OX++eJKTGN/iN
l5S/Hyb+Y3kFGPGWFuxaSlDcKoJPyxwqtLThaCSFnkL8Ic+uNCyclq4t+jKV
WJvSM0p3Rn/qLAobEdxLZLK1nBBp9T6baGMlbabqqUpJXknDYzJzk+SX28s/
iY1VCzYnOMhrqRHxc/5wBoF2GhP5WrhBs+0fjoY0AUy9Sf4JuzP9JqVEaQPo
XudBHbbVMZKfqFp7Ze/gu4MjdYzay+cTZKJv+lV9roQLC9LUUNKpTxLbsnJZ
6dqnFAV+v/9vlFSXKF9ckfJ9QZnpuFxkojtQxUs0NBPdvbFkIyR7LdSk86PJ
zpDshSSTvveT/a5ID4a8IK/TyJyk141b3r/KXqWJhsUOCTOY9JxcQPKe8wry
/ZxXFrF7znuNbJ3SepWP+m6Dvqd1U8uGnVU029Y3U/W7TxtrjY1NS+qpWt9c
a6xvbkYKSddN+gdKJqFkWKMMDx7HMrRTtW5T2hLalKH9OJaBqD9obDxWQZ6n
6sFaI5o83eAKrSOLR58fVJI/fapN5CTyVAnN3GjJ61R+e2HbPatItL2xvjGn
5eWGc8up4ZHklaSSnJqdzIK5zeO2lposbc0BDICml4rzgc+olOeE8HCeComz
qjepB+cce16tDM4H3R4VLSZKfEgupx3aKyes98xkm+lsuh7aip9hjkwsSk9S
0IV61Sh+plfB/XAlSfrsWYq7ZZU+f55y0olHLkg6yT6a2Jzmk+0Xju9Bj3FF
dRXhWvSKdvahvTrzfzJYH9m85oPr8/ZK2kmToAR+vqC4pyS3dElwqTkIdsTu
YXG2qCM8CVT0Wb/oyal0JbuZuF6kYL+Wovr1Rl6bw/d+/Wxttrch1nzo8+Vi
0GEBqXjmZ/Py0gc47nt7cHul9rtPa1mLfnV5+dN62rzgT1vtxsOcPr16/Wrn
cPfgoJ7YkfGzW5qtsJV1Eh4wp7y+Iknmv7x7fbSvVkKdQZ4mZ2FqPaOcYPKz
CB7+xGt5M608Mq3AygKiiA7EHR1F0a7dbO1LyM2nTIQEFGsZPrxmn8ZkWqnt
nm5c148dq58mNgq4TR4up0RkOJ9eekybPxjIVWHYR0lYRK+AwRzWVXqScvDE
sErpjU/ip/x6rEngY4XElzThJAEJw7aeGB6WJE/Vj7k+7qd581h9f6TN/ADn
a6AAgGIRKqGJRMzziXN2TLa1HfmzpydhMigl3naJ1tcwYK+oDCoYxwdvVe2S
pOZ6wi5PA6DsmExChXO1G+u57HBrjYcvvYntsjWwXKrZpIrrZ4sJcNZ4uZZA
mA1RJ2hB2azbasVSIk62kjLhwUW8x0xXlYmOBg0Tyk5Pgnss1LZaaeK/0C9b
qSq1f8V1I72N7a2tlVT5lZ8ne67USqT9TPU51P0GrOgOwNjTtLOAuBx1MTks
5aX+k35fqVkC/KBOeV1MP8n8x8Ny5loQB5BWR5AriBhoSOyWSaSrKZZSS9Eq
I3kd307qfs0jZLAKQzI2K9Yah9MN3Mf1oaMXRlyjIEKRNxdF+MzH5okwt8CD
UQffDGNsWpAkb89LfHVQz5jaaaqodfqZ8BMNrcgchYVd8JSgTccpZVv5OJp0
sV2cJJorzU1BRVDzQ17KYtWQA15H1Vy9kVRfpO9TiZMNM4JGl7amYAO6je7e
cnRJb7Vf2qZVpBicQct9cchyhUQ6fffN2trao7gacYHUL/Up9AVgxDn17hx9
Bal/eKnNmm3qnXjqCVITv8TVeh+3wpOcoVE4z94cZQl5iNPS5t7/BXdHNMey
M8kS1QmoT8Cg30t7mY/UJjDsKBDVfNDvzkiuQvbNXa/DGl3dYa4L7zQSLSmV
tjMpMShp/aWqIdLTP1XVZFqq0O1SHCpg3tWJiJr9G/3I+3ff4LNf0WKZis6d
imFpjWJeeTqBzak3c9oXSPs4Rn4dVPtEDkTkm+zi1VK1M/BkdIkTxer76ceR
9z5IzWXXaqIhUUfvUFe/oH+7vKvs06eXaV1tzDuGoBane6mSowK1ro8y6klQ
IpfR61/2vEeYR9JXJGh4lSslQ8cQ/Vr6iGrymP5J/eqmqCTIrVz6XUq3R/9M
C0x617O249vU5Q90zVtKPrTNk9t6m763V3T3gJ/7rMdNgyeqOxreN1YUNGPX
ms21tYd5YlPcMg8oQTATMLOWmAuNqlKzcDZQMVCA1x6+TMv5aCJPZnxNV6VI
OdDna9TXbfqnx0o6Zaeu5vYkGmn6e325/m60SzVuu/nb/g0nsN/zv8U8abS9
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

-->

</rfc>
