<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 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-29" 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-29"/>
    <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="October" day="31"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 120?>

<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/>
This revision
<tt>-29</tt> attempts to implement various change requests not covered in
<tt>-28</tt> that have been discussed in the 2026-08-19 and 2026-09-30 WG
interim meetings, but does not attempt to reflect the outcome of
those discussions.
The text also does not have WG input yet on any renaming decisions (CDN name, b1/t1 name).</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 145?>

<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 facilitate conversation 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.
However, 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".
Therefore, CDN deserves a specification that facilitates
interoperability within this domain and 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 a registry-based extension point for the
diagnostic notation, for adding application-oriented "prefixed" literal forms.
It uses this registry to add prefixed literal forms that enhance CDN with text
representations of various kinds of data items.
Among others, these include epoch-based date/times, IP addresses
and prefixes <xref target="RFC9164"/>, as well 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
defines CDN.
After introductory material, <xref target="app-lit"/> further
illustrates the concept of prefixed literals by
defining a number of them in app-extensions.
<xref target="encoding-indicators"/> describes syntax that can be interpreted by a
diagnostic implementation to take note/take control of which of
possibly several encoding variants is in use for a data item; this
syntax always includes an underscore ("<tt>_</tt>") and therefore is visually
easy to ignore.
<xref target="grammars"/> gives the formal syntax of CDN in ABNF.
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 <xref format="title" target="sec-combined-references"/> (<xref format="counter" target="sec-combined-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>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
prefixed 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 was initially designed for interchange situations where backward compatibility was considered less critical than in binary CBOR interchanges. This allowed for quite freely making extensions in <xref section="G" sectionFormat="of" target="RFC8610"/> and <xref section="4.2" sectionFormat="of" target="RFC8742"/>. However, with increased interchange between CBOR-related tools, this unrestricted evolution is less desirable.</t>
          <t>The present specification supports a more controlled path of evolving CDN through two well-defined extension points: one general (<xref target="app-lit"/>) and one specific to diagnostic processing of encoding variants (<xref target="encoding-indicators"/>).</t>
          <t>The present specification makes two changes to the <xref target="RFC8610"/> extensions that are not entirely backward compatible. These changes are detailed in <xref target="comment-discussion"/> and in <!--concat-removed--> the aside at the end of <xref target="strings"/>. Some syntax from the original diagnostic notation is being deprecated (<xref target="ei-string"/>) and replaced (<xref target="ilxs"/>). These changes are deemed acceptable now because the updated features were originally introduced under more permissive conditions. With CDN now more rigidly defined and focusing evolution on the new extension points, such changes are no longer foreseen.</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
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>
      <!-- ## Prefixed Literals {#app-lit} -->

<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>.
These are also known as <em>prefixed literals</em>, as they start
with a <em>prefix</em> that identifies the application-oriented extension and
possibly a specific variant of that.
<xref target="app-lit"/> discusses these in more details and defines a number of
app-extensions that are included with this specification.</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
app-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="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 "`//`" -->
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 "`//`" -->
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-10-31
 */
{
  # Top-level config for the app
  "appName": "MyApp", # short name shown in UI
  "version": "1.2.0",
}
]]></sourcecode>
        <aside>
          <t>Note that app-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 app-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 app-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 "<tt>#</tt>" end-of-line comments,
as well as C-style inline comments (between "<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"/>:</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 too easy to mistake
for a common JSON extension that introduces an end-of-line comment,
which is not provided by CDN.
It therefore raises an error in CDN.
(Note that the character sequence "<tt>//</tt>" may occur visually "within" a
slash-delimited comment like in <xref target="old-comment"/> 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 <xref target="cstyle-comment"/>,</t>
          <figure anchor="cstyle-comment">
            <name>C-Style Inline Comment with a Slash</name>
            <sourcecode type="cbor-diag"><![CDATA[
4 /* HMAC 256/64 */
]]></sourcecode>
          </figure>
          <t>instead of the previously conventional, but often less familiar <xref target="old-comment"/>:</t>
          <figure anchor="old-comment">
            <name>Traditional Inline Comment Working Around a Slash</name>
            <sourcecode type="cbor-diag"><![CDATA[
4 / HMAC 256//64 /
]]></sourcecode>
          </figure>
        </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>CBOR distinguishes two basic kinds of numbers: integers and floating
point values.
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).
Any input representing a number with a leading "<tt>+</tt>" sign raises an error.
A leading "<tt>-</tt>" sign inverts the sign of the number.
So <tt>0</tt> and <tt>-0</tt> represent the same integer zero,
<tt>1</tt> stands for a positive integer one, and
<tt>-1</tt> designates the negative integer minus one.</t>
        <aside>
          <!-- `(\+|-)?([0-9]+(\.[0-9]*)?|\.[0-9]+)([Ee](\+|-)?[0-9]+)?` -->

  <t>In addition to being a superset of JSON decimal numbers, the grammar
for decimal (base-10) numbers is inspired by similar grammars, such as
those for <tt>decimal</tt> and <tt>double</tt> in Sections <xref target="XSD2" section="3.3.3" relative="#decimal" sectionFormat="bare"/> and <xref target="XSD2" section="3.3.5" relative="#double" sectionFormat="bare"/> of <xref target="XSD2"/>.
Such grammars typically allow removing as well as adding insignificant zero
digits from/to a number representation that would be well-formed in
JSON.
However, there is one pitfall: the original C language convention for
indicating octal numbers simply precedes the octal number with a leading
zero digit.
When copying data from and to data sources that use this convention,
there would be ambiguity (e.g., in C, <tt>030</tt> is the number 24 decimal,
but in other languages the number 30 decimal); in effect, the semantics of numbers
with leading zeros often silently differ.
Therefore, the CDN grammar restricts the grammar to not allow any
leading zeros in the integer part, except for a single digit zero.</t>
        </aside>
        <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 (part
of 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></td>
              <td align="left">
                <tt>00     </tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <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.</t>
        <aside>
          <t><xref target="tab-float-encoding"/> shows how the floating point numbers 1.1 and 1.5
as well as these three non-finite values are encoded, both in preferred serialization (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) and when
encoding indicators (please see <xref target="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>
        </aside>
        <!--decnumber-->
<t>See item <xref format="counter" target="anynumber"/> <!-- {{<decnumber} to {{<intnumber}} --> in the bullet list at the end of <xref target="grammar"/> 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 app-extensions.
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 prefixed literals, which may
provide detailed access to the bits within those bytes (see
<xref target="encoded-byte-strings"/>).
Using an app-extension
prefix, prefixed literals can be constructed out of single-quoted strings and
raw strings, as well as sequence literals (cf. <xref target="app-lit"/>).</t>
        <aside>
          <t anchor="concat-removed">Before prefixed literals were turned into a general extension point for 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 and replaced by app-extensions such as <xref target="t1b1"/>.</t>
        </aside>
        <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 app-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 often
is not, 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 for
prefixed literals (see <xref target="app-lit"/>, such as base-encoded byte string literals (see <xref target="encoded-byte-strings"/>).
<!-- XXX -->
(Additional kinds of base-encoded string literals can be defined as
prefixed literals by registering their prefixes;
there is no fundamental difference between the original two predefined
base-encoded string literal prefixes (<xref target="encoded-byte-strings"/>: <tt>h</tt>, <tt>b64</tt>) and any such potential
future extension literal prefixes; for simplicity of expression, both
cases are referred to as "prefixed 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 double 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="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
app-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 app-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 app-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
(please see <xref target="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 arguments that use
specific encoding variants can be defined by the app-extension being
used.
See <xref target="ilxs"/> for an example of where this is done.
Encoding indicators on the arguments are ignored if the app-extension
does not define special handling of encoding variants.</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 app-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="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 tag 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:</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-lit">
      <name>Prefixed Literals</name>
      <t>After a short overview of prefixed literals in general, this
section defines a number of app-extensions included with this
specification.</t>
      <t>Prefixed literals start with a <em>prefix</em> that identifies the
app-extension and possibly a specific variant of
that, immediately followed by a sequence literal (<xref target="embedded"/>) or a
single-quoted or raw string literal (<xref target="strings"/>).</t>
      <t>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> (this specific example obviously
depends on <tt>Zm9v</tt> being allowed and meaning the same within the
different forms of string literals used in the example).</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>app-extension identifiers</em>.</t>
      </aside>
      <t>More precisely, an <em>app-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>app-extension identifiers are registered in the "App-Extension Identifiers" registry
(<xref target="appext-iana"/>).</t>
      <t>An app-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
one additional prefix derived from its app-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 app-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 app-extension identifier gives rise to one or two
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 app-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 (this is useful only if the app-extension is designed to
receive a text string as input).
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 app-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
app-extensions (<xref target="app-lit"/>), both to motivate
making these extensions generally available, and to illustrate the
concept.</t>
      <t>Of these, the app-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 "app-extensions" for the
mechanism discussed in this section even if it is
used to describe a part of base CDN.)</t>
      <section anchor="encoded-byte-strings">
        <name>Base-Encoded Byte String Literals: h and b64</name>
        <t>Besides the unprefixed byte string literals that are analogous to JSON text
string literals, CDN provides prefixed literals that can represent
byte strings by base-encoding them, typically notated as prefixed
string literals.
The app-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
prefixed literals.)</t>
        </aside>
        <t>Examples often benefit from some blank space (spaces, line breaks) in
byte string literals.
In the base-encoded byte string literals, blank space is ignored in
the input; 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> 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="dt">
        <name>Date and Time: dt</name>
        <t>The app-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 a prefixed literal.</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: ip</name>
        <t>The app-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 app-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 a prefixed literal.</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: hash</name>
        <t>The app-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 app-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: b1 and t1</name>
        <t><cref anchor="t1b1name">This section uses the placeholders t1 and b1 as provisional
app-extension identifiers, allowing the text to stabilize while
the actual names are still being decided by the WG.</cref></t>
        <t>The "b1" and "t1" app-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 app-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>
      </section>
      <section anchor="ilxs">
        <name>Creating Indefinite-length Encoded Strings: ilbs and ilts</name>
        <t>The <tt>ilbs</tt> and <tt>ilts</tt> app-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 app-extension is already implying indefinite length encoding,
there is no point in applying an encoding indicator to the entire
prefixed 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="floating-point-values-float">
        <name>Floating-Point Values: float</name>
        <!-- IEEE754-oriented literals for more floating point values -->

<t>The "<tt>float</tt>" app-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> prefix); the result is used as the
byte string.</t>
        <t>The prefixed 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 app-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="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 (<xref target="tab-ei-defined"/>) start with an underscore, often
followed by alphanumeric characters.
For example, <tt>_</tt> or <tt>_3</tt>.</t>
        <t>Encoding indicators indicate the specific CBOR encoding that was used,
or is to be used, to represent a specific CBOR data item.</t>
        <t>This specification defines six encoding indicators.
Additional encoding indicators could be defined in future standards
track updates to this specification.</t>
        <table anchor="tab-ei-defined">
          <name>Encoding Indicators Defined by This Specification</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>
          </tbody>
        </table>
        <t>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-container"/> and <xref target="ei-string"/>.</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 app-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>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>Specific forms of encoding indicators are discussed in further detail
in <xref target="ei-container"/> for arrays and maps and in <xref target="ei-string"/> for the
deprecated syntax for indefinite-length strings.</t>
      </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="ei-string">
        <name>Deprecated: Indefinite-length Encoding Indicators for Strings</name>
        <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> app-extensions
(<xref target="ilxs"/>) to build indefinite-length encoded strings.</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
prefixed 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
app-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 ; spec inside
                / (number / string / prefixed) spec
                / simple ; no spec
                / streamstring ; deprecated (spec inside)

number          = hexfloat / hexint / octint / binint
                / decnumber / nonfin
sign            = "+" / "-"
decnumber       = [sign] (("0" / DIGIT1 *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"

string          = dqstr / rawstring / sqstr / embedded

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 ")"

prefix          = lcalpha *lcldh
                / ucalpha *ucldh

prefixed        = prefix (sqstr / rawstring / embedded)

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)

dqstr           = DQUOTE *double-quoted DQUOTE
sqstr           = SQUOTE *single-quoted SQUOTE
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]

streamstring    = "(_" MS string *(MSC string) SOC ")"
spec            = ["_" [specchar]]
specms          = ["_" [specchar] MS]
specchar        = %s"i" / %x30-33 / reserved-ei
reserved-ei     = 1*wordchar ; reserved for standards track use

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>Any input that matches <tt>"//"</tt> in <tt>eol-comment</tt> raises an error.</t>
        <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>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="anynumber">
            <t>Numbers:  </t>
            <t>
Any <tt>number</tt> that starts with a "+" sign (rule <tt>sign</tt>) raises an error.  </t>
            <ol spacing="normal" type="i" start="1"><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 anchor="intnumber">
                <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>
              </li>
              <li>
                <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>
            </ol>
          </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.  </t>
            <t>
Any input that matches a <tt>startrawdelim</tt> of more than 8 characters raises an error.  </t>
            <t><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 App-Extension Content</name>
        <t>This subsection provides ABNF definitions for the content of
prefixed 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 prefixes to form
prefixed 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">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 app-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>
          <t>Any input that matches <tt>"//"</tt> in <tt>eol-comment</tt> and/or <tt>ends-in-star</tt>
in <tt>comment</tt> raises an error.</t>
          <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>
      <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 app-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>prefixed</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[
prefixed        = sq-app-string-dt /
                  prefix (sqstr / rawstring / 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 prefixed 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 app-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
app-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>
          <t>Any input that matches <tt>"//"</tt> in <tt>eol-comment</tt> and/or <tt>h-ends-in-star</tt>
in <tt>h-comment</tt> raises an error.</t>
        </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>
          <t>Any input that matches <tt>"//"</tt> in <tt>eol-comment</tt> and/or <tt>rh-ends-in-star</tt>
in <tt>rh-comment</tt> raises an error.</t>
        </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 App-extension Identifiers Registry</name>
        <t>IANA is requested to create an "App-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
app-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for app-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 app-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>App-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
app-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
app-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 app-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">app-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">float</td>
              <td align="left">Floating-Point Value</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </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>
    <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 an explicit extension point:
app-extension identifiers (<xref target="appext-iana"/>).
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 app-extensions need to be configured out of
band to enable processing each specific app-extension only if
that is desired.
An allowlist built out of the mandatory-to-implement application
extensions may be an exception.</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="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.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/RFC20"/>
          </reference>
        </referencegroup>
        <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>
        <reference anchor="XSD2" target="https://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/">
          <front>
            <title>W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes</title>
            <author fullname="Ashok Malhotra" role="editor"/>
            <author fullname="David Peterson" role="editor"/>
            <author fullname="Henry Thompson" role="editor"/>
            <author fullname="Michael Sperberg-McQueen" role="editor"/>
            <author fullname="Paul V. Biron" role="editor"/>
            <author fullname="Sandy Gao" role="editor"/>
            <date day="5" month="April" year="2012"/>
          </front>
          <seriesInfo name="W3C REC" value="REC-xmlschema11-2-20120405"/>
          <seriesInfo name="W3C" value="REC-xmlschema11-2-20120405"/>
        </reference>
      </references>
    </references>
    <?line 2648?>

<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 end-of-line comments
that start with <tt>#</tt>.
<!-- line breaks are not of interest); it also adds traditional C-style -->
<!-- inline comments (`/*` ... `*/`) and end-of-line comments -->
<!-- that start with `#` or `//`. -->  </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
   ])
]]></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'
   ])
]]></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="cstyle-comment"/>:</dt>
        <dd>
          <t><xref format="title" target="cstyle-comment"/></t>
        </dd>
        <dt><xref target="old-comment"/>:</dt>
        <dd>
          <t><xref format="title" target="old-comment"/></t>
        </dd>
        <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-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-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-ei-defined"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-ei-defined"/></t>
        </dd>
        <dt><xref target="tab-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-ei"/></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="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>
      </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:
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
lZWtQWpbVTVsaQWKx84W3qqJ60cOj3jAQmpC8VCGl26usapjiXXTlXEFwcAY
Zn4Wm1XLS38sjvuYMxOYxfvwmJWXp9PLKI1bvreHuU8IHhv4C6t+YhkWyg9v
svnnxgeBFya+SOhOb3O2uDRV+I3Y61mfU8EXcqWlQKTjHB5hsVryszKf07Yg
OJgNNinJg/iCisiMTC9FhQAOwxVTIMRu7Os4EkVpJs5tmglE5ZKKotiu8mWM
4nI5ZoBPKM22+QJxHHVIeluYEzm2oqXFEx3JEkMvZjxfis3hLQ7qn7gMt6aA
JrqQ1aQcDpQeoaMXnnyMMZ5xNaFGYe2GZjmYOB7NikbAZUhHnzTSHX0HC8Tb
d8Eu5hSUyOvWze8uvmohMoRlqIprsWTQPV1jiYPknT5FfCNhjCbXR4LmLskT
yeGT2CGmwxfUWDklDknKUqwBpD1nlGeGzNlD/MvDhMxZb6Zmf6wVElMp+ROr
yVJiz47ie3CaNdQYFviYzo30IvPsLv2y0W88kZGrXeN9Kimo9eN5vy0ypxtd
StQcl4z1UuEjPKGGsEzKTRhIEGYQDz5gVxybYXbDiTngvCreaonk9d2OcLU0
rGYJIirdZBSsUXJ8o9ruWjCUJDKTVOjiZ14H5oorONh7/eER+4z61XtwTtKg
LtUMlpVxGeQI75p8oUV0D7gU8/AF0+K6mJXZKBuJhKWIOU3IxHXcWU9sPrtk
+x632Ye06nKFKve7iCuVUBoT3Af2i5IrS4VzPB+phZ8Oz6wSVz2Lc+ThqiUw
7KwN2MtOWVO2w4AkQ6DG085kLojB+DILx7KjTiGzie5j79S66vE+XZcnHJ3p
KleY2jCSGtws25wjxXh3JGmJDfNwI7s0LVz+DqNSt8CIVHCYQnx/Mpno5QTz
jQbpxPE5JtaXFxTXJWulNS29HEdseYfW7hlnqNZIF5CrDSygX+pr/ZLkuofN
b6/PSMRr6evnZ6+wMlaH3nhN6e9r5T/mVyi47YtYtK8lN+MjYvWFJVNV4+u+
boqhY9/c430bcNOiT2u+kTqhj5D52dXE4w+goadMaHrzaSljZ/GWsYzfcaTI
Pv5EC8++zgBH048phtuWNQPO45ldSYoemCA9JDeBm9iXuvFFA143OpiObxaM
/KV+ic1f6Waz0cNG51dfXb3o64f035Z+2eg25I9XW6N708Bmfflod7uXjbhh
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
ooYDOQprGEutR4KytMPLwP/qAdj8BitwWx45zCu2YJu+0MvfoymwlLZYpJZm
SnmsMFTEVXpF53X/6sxTPawxW9MtNG9uzCOwRp2eUgG1FDUHJiOf8zyBIija
IgvkG5UyD+BbRRLnF6DKu0y+zCxjrcfXxGR5V5kQGV11qQAoJsO0INVNE0hI
ZsX3xhNcyrI5mT90MU9yyuLHv+M7qBFNFcbqWnIt7/JSm++G5m6I2vEdFTI4
/S24tJALHkspaqKYC02VYW4a/DtPB2YAemVaOkxjJiDq8tBiNit1WtzSf3un
683/2v34t/Wz9dP1P7T49976mX2w3uNU+mHvTP6mZE9ue73Wx7+dTs9QwOn0
9vS3li6bd9jznae1e+xrMercv736pBe/Z4PVVqS0iB6671HNTLMRbH2CLOJN
jyvX1iifRFWr4E93nj4HX5MJ0v7z+x87RTwK6NK2y2kBGz1P5l4EJg4f5++4
4utpsQkG9qO/bwZcIq6ivaMHNthCd69psE4OUmKJ9XhlEBSGOjayS1OOBNDL
WCSHaDjqJeztqjHoDRqYgYLQlPI7urolWzeb+fbUaxLTT5v0B23z6nWrdp82
b5X95WNjr0H/4L+98OnZmXpdx6nxEZuW3eR1Fm8nCmG5DPPFfxmyq4k+aL94
/Tu3O9eGFZsKembptkIvazaWYd36esiegmU6nNeuUnuSrCvnEObJE5gnb54M
594iXblG6Tw6cJcqWuKWl2RkWNEoOTw2YAQd1CzR4dzqpqzQ5ik7OcIOcXND
jUfbhU7N3jeUiCUZhdXRt9NFSKvjzVQ20O4p25go4l8R1/I6iYU946kQL/AL
Oo/Mx2bIDeEFnQ77nf6mTjG0fuelFJvP2/zPC/5na0P+6dtluEzXUcjPFffQ
pgjt7Iyx4dRUwywVnOIqnS7mSV2K7ReSoqBJOB3WpkBTkZD/2dlwomKSxDMw
xa1srFyNmjpGJFX0GnGcN/J2urjKRiMgJNnb15DutJT7RnjKe98j+UwmKfWv
yBaWF0WMBI4nHWNn31tepvtbeqROxPgfcxZhfnSG8dzYg/UMstMGEsabL+5P
mhyS2TP/76mgrd4H6tkYpHVVN04aypZVL26G8+XSZji/V4vVK221lHCn7nRW
K2xOqLZFvR48heFqXxuubp6kswdLm3T2KGkDS742kGkwBQz99kkoOrqb3U0W
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
K/ofoyCa1NTEAQA=

-->

</rfc>
