<?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.4 (Ruby 3.2.2) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-07" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.0 -->
  <front>
    <title abbrev="CBOR EDN: Literals and ABNF ">CBOR Extended Diagnostic Notation (EDN): Application-Oriented Literals, ABNF, and Media Type</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-07"/>
    <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="2023" month="December" day="21"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 56?>

<t>The Concise Binary Object Representation, CBOR (STD 94, RFC 8949), defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.</t>
      <t>​This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of IP addresses
and prefixes (RFC 9164).</t>
      <t>A few further additions close some gaps in usability.
 To facilitate tool interoperation, this document
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals.</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 79?>

<section anchor="intro">
      <name>Introduction</name>
      <t>For the Concise Binary Object Representation, CBOR,
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> in conjunction with <xref section="G" sectionFormat="of" target="RFC8610"/>
defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.
Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.
(Standardizing this together with the actual interchange format does
not serve to create another interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.)</t>
      <t>This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of IP addresses
and prefixes <xref target="RFC9164"/>.</t>
      <t>A few further additions close some gaps in usability.
 To facilitate tool interoperation, this document
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals. (See <xref target="grammar"/> for an overall ABNF grammar as well as the
ABNF definitions in <xref target="app-grammars"/> for grammars for both the
byte string presentations predefined in <xref target="STD94"/> and the application-extensions).</t>
      <t>In addition, this document finally registers a media type identifier
and a content-format for CBOR diagnostic notation.  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>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> defines the original CBOR diagnostic notation,
and <xref section="G" sectionFormat="of" target="RFC8610"/> supplies a number of extensions to the
diagnostic notation that result in the Extended Diagnostic Notation
(EDN).
The diagnostic notation extensions include popular features such as
embedded CBOR (encoded CBOR data items in byte strings) and comments.
A simple diagnostic notation extension that enables representing CBOR
sequences was added in <xref section="4.2" sectionFormat="of" target="RFC8742"/>.
As diagnostic notation is not used in the kind of interchange
situations where backward compatibility would pose a significant
obstacle, there is little point in not using these extensions.</t>
        <t>Therefore, when we refer to "<em>diagnostic notation</em>", we mean to
include the original notation from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> as well as the
extensions from <xref section="G" sectionFormat="of" target="RFC8610"/>, <xref section="4.2" sectionFormat="of" target="RFC8742"/>, and the
present document.
However, we stick to the abbreviation "<em>EDN</em>" as it has become quite
popular and is more sharply distinguishable from other meanings than
"DN" would be.</t>
        <t>In a similar vein, the term "ABNF" in this document refers to the
language defined in <xref target="STD68"/> as extended in <xref target="RFC7405"/>, where the
"characters" of Section <xref target="RFC5234" section="2.3" sectionFormat="bare"/> of RFC 5234 <xref target="STD68"/> are Unicode scalar values.
The term "CDDL" refers to the data definition language defined in
<xref target="RFC8610"/> and its registered extensions (such as those in <xref target="RFC9165"/>), as
well as <xref target="I-D.ietf-cbor-update-8610-grammar"/>.</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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="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
human-readable diagnostic notation with CBOR.
In particular, it states:</t>
        <blockquote>
          <t>All actual interchange always happens in the binary format.</t>
        </blockquote>
        <t>One important application of EDN is the notation of CBOR data for
humans: in specifications, on whiteboards, and for entering test data.
A number of features, such as comments in string literals, are mainly
useful for people-to-people communication via EDN.
Programs also often output EDN for diagnostic purposes, such as in
error messages or to enable comparison (including generation of diffs
via tools) with test data.</t>
        <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 EDN 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 <tt>h''</tt>; an EDN 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
EDN, and there is no expectation for "roundtripping" from EDN to
CBOR and back, i.e., for an ability
to convert EDN to binary CBOR and back to EDN while achieving exactly
the same result as the original input EDN — the original EDN possibly
was created by humans or by a different EDN generator.</t>
        <t>However, there is a certain expectation that EDN 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 only where the binary form differs from
preferred encoding;</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>Additional features such as ensuring deterministic map ordering
(Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) on output, or even deviating from the basic
configuration in some systematic way, can further assist in comparing
test data.
Information obtained from a CDDL model can help in choosing
application-oriented literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
      </section>
    </section>
    <section anchor="application-oriented-extension-literals">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation for byte
string literals to also be available for application-oriented extensions.</t>
      <t>As per Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, the diagnostic notation can notate byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by an identifier (»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 defines additional names for this namespace,
which we call <em>application-extension identifiers</em>.
For the quoted string, the same rules apply as for byte strings.
In particular, the escaping rules that were adapted from JSON strings
are applied
equivalently for application-oriented extensions, e.g., within the
quoted string <tt>\\</tt> stands
for a single backslash and <tt>\'</tt> stands for a single quote.</t>
      <t>An application-extension identifier is a name consisting of a
lower-case ASCII letter (a-z) and zero or more additional ASCII
characters that are either lower-case letters or digits (a-z0-9).</t>
      <t>Application-extension identifiers are registered in a registry
(<xref target="appext-iana"/>).</t>
      <t>Prefixing a single-quoted string, an application-extension identifier
is used to build an application-oriented extension literal, which
stands for a CBOR data item the value of which is derived from the
text given in the single-quoted string using a procedure defined in
the specification for an application-extension identifier.</t>
      <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
a variant of the application-extension identifier where each
lower-case character is replaced by its upper-case counterpart (such
as <tt>DT</tt>), for building an application-oriented extension literal using
that all-uppercase variant as the prefix of a single-quoted string.</t>
      <t>As a convention for such definitions, using the all-uppercase variant
implies making use of a tag appropriate for this application-oriented
extension (such as tag number 1 for <tt>DT</tt>).</t>
      <t>Examples for application-oriented extensions to CBOR diagnostic
notation can be found in the following sections.</t>
      <section anchor="dt">
        <name>The "dt" Extension</name>
        <t>The application-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The text of the literal is a Standard Date/Time String as per
Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</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-upper-case variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>As an example, the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
dt'1969-07-21T02:56:16Z',
dt'1969-07-21T02:56:16.5Z',
DT'1969-07-21T02:56:16Z'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
-14159024,
-14159023.5,
1(-14159024)
]]></sourcecode>
        <t>See <xref target="dt-grammar"/> for an ABNF definition for the content of <tt>dt</tt> literals.</t>
      </section>
      <section anchor="ip">
        <name>The "ip" Extension</name>
        <t>The application-extension identifier "ip" is used to notate an IP
address literal that can be used as an IP address as per <xref section="3" sectionFormat="of" target="RFC9164"/>.</t>
        <t>The text of the literal is an IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>.</t>
        <t>With the lower-case app-string <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the upper-case app-string <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 upper-case app-string <tt>IP''</tt> can be used
with a 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 lower-case 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 there is no direct representation of an address combined
with a prefix length; this can be represented as
<tt>52([ip'192.0.2.42',24])</tt>, if needed.</t>
        <t>Examples: the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
ip'192.0.2.42',
IP'192.0.2.42',
IP'192.0.2.0/24',
ip'2001:db8::42',
IP'2001:db8::42',
IP'2001:db8::/64'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
h'c000022a',
52(h'c000022a'),
52([24,h'c00002']),
h'20010db8000000000000000000000042',
54(h'20010db8000000000000000000000042'),
54([64,h'20010db8'])
]]></sourcecode>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
    </section>
    <section anchor="stand-in">
      <name>Stand-in Representations in Binary CBOR</name>
      <t>In some cases, an EDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines stand-in representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The EDN consumer does not know (or does not implement) an
application-extension identifier used in the EDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some EDN intended for human consumption (such as in
a specification document) may not want to include parts of the final
data item, destructively replacing complete subtrees or possibly
just parts of a lengthy string by <em>elisions</em> (<xref target="elision"/>).</t>
        </li>
      </ul>
      <section anchor="unknown">
        <name>Handling unknown application-extension identifiers</name>
        <t>When ingesting CBOR diagnostic notation, any
application-oriented extension literals are usually decoded and
transformed into the corresponding data item during ingestion.
If an application-extension is not known or not implemented by the
ingesting process, this is usually an error and processing has to
stop.</t>
        <t>However, in certain cases, it can be desirable to exceptionally carry an
uninterpreted application-oriented extension literal in an ingested
data item, allowing to postpone its decoding to a specific later
stage of ingestion.</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Unresolved Application-Extension Tag, tag
number CPA999 (<xref target="iana-standin"/>).
The content of this tag is an array of two text strings: The
application-extension identifier, and the (escape-processed) content
of the single-quoted string.
For example, <tt>dt'1969-07-21T02:56:16Z'</tt> can be provisionally represented as
<tt>/CPA/ 999(["dt", "1969-07-21T02:56:16Z"])</tt>.</t>
        <t><cref anchor="cpa">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
      </section>
      <section anchor="elision">
        <name>Handling information deliberately elided from an EDN document</name>
        <t>When using EDN for exposition in a document or on a whiteboard, it is
often useful to be able to leave out parts of an EDN document that are
not of interest at that point of the exposition.</t>
        <t>To facilitate this, this specification
supports the use of an <em>ellipsis</em> (notated as three or more dots
in a row, as in <tt>...</tt>) to indicate parts of an EDN document that have
been elided (and therefore cannot be reconstructed).</t>
        <t>Upon ingesting EDN as a representation of a CBOR data item for further
processing, the occurrence of an ellipsis usually is an error and
processing has to stop.</t>
        <t>However, it is useful to be able to process EDN documents with
ellipses in the automation scripts for the documents using them.
This specification defines a CBOR Tag that can be used in the ingestion
for this purpose:
The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-standin"/>).
The content of this tag either is</t>
        <ol spacing="normal" type="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis), or it is</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between fragments
of a string and the actual elisions, represented as ellipses
carrying a null as content.</t>
          </li>
        </ol>
        <t>Elisions can stand in for entire subtrees, e.g. in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, ..., 3]
,
{ "a": 1,
  "b": ...,
  ...: ...
}
]]></sourcecode>
        <t>A single ellipsis (or key/value pair of ellipses) can imply eliding
multiple elements in an array (members in a map); if more detailed
control is required, a data definition language such as CDDL can be
employed.
(Note that the stand-in form defined here does not allow multiple
key/value pairs with an ellipsis as a key: the CBOR data item would
not be valid.)</t>
        <t>Subtree elisions can be represented in a CBOR data item by using
<tt>/CPA/888(null)</tt> as the stand-in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 888(null), 3]
,
{ "a": 1,
  "b": 888(null),
  888(null): 888(null)
}
]]></sourcecode>
        <t>Elisions also can be used as part of a (text or byte) string:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" ... "gned: Alice & Bob",
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The example "contract" uses string concatenation as per <xref section="G.4" sectionFormat="of" target="RFC8610"/>, extending that by allowing ellipses; while the example
"signature" uses special syntax that allows the use of ellipses
between the bytes notated <em>inside</em> <tt>h''</tt> literals.</t>
        <t>String elisions can be represented in a CBOR data item by a stand-in
that wraps an array of string fragments alternating with ellipsis
indicators:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": /CPA/888(["Herewith I buy", 888(null),
                        "gned: Alice & Bob"]),
  "signature": 888([h'4711', 888(null), h'0815']),
}
]]></sourcecode>
        <t>Note that the use of elisions is different from "commenting out" EDN
text, e.g.</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" /.../ "gned: Alice & Bob",
  "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this EDN will ignore the comments and therefore will
have no idea after ingestion that some information has been elided;
validation steps may then simply fail instead of being informed about
the elisions.</t>
      </section>
    </section>
    <section anchor="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.cbor-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-Extension Identifiers"
registry in a new "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "expert review"
(Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions">The experts are instructed to be frugal in the allocation of
application-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for application-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The expert is 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 expert becomes aware of application-extension identifiers that are deployed and
in use, they may also initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Application-Extension Identifier:</dt>
          <dd>
            <t>a lower case ASCII <xref target="STD80"/> string that starts with a letter and can
contain letters and digits after that (<tt>[a-z][a-z0-9]*</tt>). No other
entry in the registry can have the same application-extension identifier.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana">
          <name>Initial Content of Application-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">Application-extension Identifier</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">h32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">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>
          </tbody>
        </table>
      </section>
      <section anchor="reg-ei">
        <name>Encoding Indicators</name>
        <t>IANA is requested to create an "Encoding Indicators"
registry in the newly created "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "specification required"
(Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions-ei">The experts are instructed to be frugal in the allocation of
encoding indicators that are suggestive of generally applicable semantics,
keeping them in reserve for encoding indicator registrations that are likely to enjoy wide
use and can make good use of their conciseness.
If the expert becomes aware of encoding indicators that are deployed and
in use, they may also solicit a specification and initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Encoding Indicator:</dt>
          <dd>
            <t>an ASCII <xref target="STD80"/> string that starts with an underscore letter and
can contain zero or more underscores, letters and digits after that
(<tt>_[_A-Za-z0-9]*</tt>). No other entry in the registry can have the same
Encoding Indicator.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </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 align="left" anchor="new-media-type">
          <name>New Media Type application/cbor-diagnostic</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">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</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>cbor-diagnostic</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>.diag</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>CBOR diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cbor-diagnostic 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 align="left">
          <name>New Content-Format</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/cbor-diagnostic</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..999.</t>
      </section>
      <section anchor="iana-standin">
        <name>Stand-in Tags</name>
        <t><cref anchor="cpa_1">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
        <t>In the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>, IANA is requested to assign the
tags in <xref target="tab-tag-values"/> from the "specification required" space
(suggested assignments: 888 and 999), with the present document as the
specification reference.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tags</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">CPA888</td>
              <td align="left">null or array</td>
              <td align="left">Diagnostic Notation Ellipsis</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="right">CPA999</td>
              <td align="left">array</td>
              <td align="left">Diagnostic Notation<br/>Unresolved Application-Extension</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> and <xref target="RFC8610"/> apply.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="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="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="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">
          <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>
        <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="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP26">
          <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">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <front>
              <title>ASCII format for network interchange</title>
              <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
              <date month="October" year="1969"/>
            </front>
            <seriesInfo name="STD" value="80"/>
            <seriesInfo name="RFC" value="20"/>
            <seriesInfo name="DOI" value="10.17487/RFC0020"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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>
        <referencegroup anchor="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="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:,, and for the construction of constants; / for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and 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="I-D.ietf-cbor-update-8610-grammar">
          <front>
            <title>Updates to the CDDL grammar of RFC 8610</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="15" month="December" year="2023"/>
            <abstract>
              <t>   The Concise Data Definition Language (CDDL), as defined in RFC 8610
   and RFC 9165, provides an easy and unambiguous way to express
   structures for protocol messages and data formats that are
   represented in CBOR or JSON.

   The present document updates RFC 8610 by addressing errata and making
   other small fixes for the ABNF grammar defined for CDDL there.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-update-8610-grammar-02"/>
        </reference>
      </references>
    </references>
    <?line 734?>

<section anchor="grammars">
      <name>ABNF Definitions</name>
      <t>This appendix collects grammars in ABNF form (<xref target="STD68"/> as extended in
<xref target="RFC7405"/>) that serve to define the syntax of EDN and some
application-oriented literals.</t>
      <t>Implementation note: The ABNF definitions in this appendix are
intended to be useful in a PEG parser interpretation (see <xref section="A" sectionFormat="of" target="RFC8610"/> for an introduction into PEG).</t>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Extended Diagnostic Notation</name>
        <t>This appendix provides an overall ABNF definition for the syntax of
CBOR extended diagnostic notation.</t>
        <t>To complete the parsing of an <tt>app-string</tt> with prefix, say, <tt>p</tt>, the
processed <tt>sqstr</tt> inside it is further parsed using the ABNF definition specified
for the production <tt>app-string-p</tt> in <xref target="app-grammars"/>.</t>
        <t>For simplicity, the internal parsing for the built-in EDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt> and <tt>b64''</tt> are provided in <xref target="h-grammar"/> and
<xref target="b64-grammar"/>.
However, the prefixes <tt>b32''</tt> and <tt>h32''</tt> are not in wide use and an
ABNF definition in this document could therefore not be based on
implementation experience.</t>
        <figure anchor="abnf-grammar">
          <sourcecode type="abnf" name="cbor-edn.abnf"><![CDATA[
seq             = S [item S *("," S item S) OC] S
one-item        = S item S
item            = map / array / tagged
                / number / simple
                / string / streamstring

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

number          = (basenumber / decnumber / infin) spec
sign            = "+" / "-"
decnumber       = [sign] 1*DIGIT ["." 1*DIGIT] ["e" [sign] 1*DIGIT]
basenumber      = [sign] "0" ("x" 1*HEXDIG
                              [["." 1*HEXDIG] "p" [sign] *DIGIT]
                            / "o" 1*ODIGIT
                            / "b" 1*BDIGIT)
infin           = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"
simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S item S ")"
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint spec "(" S item S ")"

app-prefix      = lcalpha *lcalnum ; including h and b64
                / ucalpha *ucalnum ; tagged variant, if defined
app-string      = app-prefix sqstr
sqstr           = "'" *single-quoted "'"
bstr            = app-string / sqstr / embedded
                  ; app-string could be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" spec S [item S *("," S item S) OC] "]"
map             = "{" spec S [kp S *("," S kp S) OC] "}"
kp              = item S ":" S item

; We allow %x09 HT in prose, but not in strings
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-D7FF / %xE000-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank)
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A

; optional trailing comma (ignored)
OC              = ["," S]

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

double-quoted   = unescaped
                / "'"
                / "\" DQUOTE
                / "\" escapable

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

escapable       = %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
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / "\"   ; \ backslash (reverse solidus) U+005C
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

hexchar         = non-surrogate
                / (high-surrogate "\" %s"u" low-surrogate)
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG

; 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-D7FF ; skip surrogate code points
                / %xE000-10FFFF

DQUOTE          = %x22    ; " double quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lcalpha         = %x61-7A ; a-z
lcalnum         = lcalpha / DIGIT
ucalpha         = %x41-5A ; A-Z
ucalnum         = ucalpha / DIGIT
wordchar        = "_" / lcalnum / ucalpha ; [_a-z0-9A-Z]
]]></sourcecode>
        </figure>
        <t>While an ABNF grammar defines the set of character strings that are
considered to be valid EDN 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>
        <ul spacing="normal">
          <li>
            <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.</t>
          </li>
          <li>
            <t><tt>basenumber</tt> stands for an integer in the usual base 16/hexadecimal
("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation, unless the
optional part containing a "p" is present, in which case it stands
for a floating point number in the usual hexadecimal notation (which
uses a mantissa in hexadecimal and an exponent in decimal notation).</t>
          </li>
          <li>
            <t><tt>spec</tt> stands for an encoding indicator.
As per Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>:  </t>
            <ul spacing="normal">
              <li>
                <t>an underscore <tt>_</tt> on its own stands
for indefinite length encoding (<tt>ai=31</tt>, only available behind the
opening brace/bracket for <tt>map</tt> and <tt>array</tt>: strings have a special
syntax <tt>streamstring</tt> for indefinite length encoding except for the
special cases ''_ and ""_), and</t>
              </li>
              <li>
                <t><tt>_0</tt> to <tt>_3</tt> stand for <tt>ai=24</tt> to <tt>ai=27</tt>, respectively.</t>
              </li>
            </ul>
            <t>
Surprisingly, Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> does not address <tt>ai=0</tt> to
<tt>ai=23</tt> — the assumption seems to be 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 to make this explicit:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>_i</tt> ("immediate") stands for encoding with <tt>ai=0</tt> to <tt>ai=23</tt>.</t>
              </li>
            </ul>
            <t>
While no pressing use for further values for encoding indicators
comes to mind, this is an extension point for EDN; <xref target="reg-ei"/> defines
a registry for additional values.</t>
          </li>
          <li>
            <t><tt>string</tt> and the rules preceding it in the same block realize both
the representation of strings that are split up into multiple chunks
(Section <xref target="RFC8949" section="G.4" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) and the use of ellipses to represent elisions
(<xref target="elision"/>).  The semantic processing of these rules is relatively
complex:
            </t>
            <ul spacing="normal">
              <li>
                <t>A single <tt>...</tt> is a general ellipsis, which can stand for any data
item.</t>
              </li>
              <li>
                <t>An ellipsis can be surrounded (on one or both sides) by string
chunks, the result is a CBOR tag number CPA888 that contains an
array with joined together spans of such chunks plus the ellipses
represented by <tt>888(null)</tt>.</t>
              </li>
              <li>
                <t>A simple sequence of string chunks is simply joined together.
In both cases of joining strings, the rules of Section <xref target="RFC8949" section="G.4" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> need to be followed; in particular, if a text string
results from the joining operation, that result needs to be valid
UTF-8.</t>
              </li>
              <li>
                <t>Some of the strings may be app-strings.
If the type of the app-string is an actual string, joining of
chunked strings occurs as with directly notated strings; otherwise
the occurrence of more than one app-string or an app-string
together with a directly notated string cannot be processed.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for app-string Content</name>
        <t>This appendix provides ABNF definitions for application-oriented extension
literals defined in <xref target="STD94"/> and in this specification.
These grammars describe the <em>decoded</em> content of the <tt>sqstr</tt> components that
combine with the application-extension identifiers to form
application-oriented extension literals.
Each of these may make use of rules defined in <xref target="abnf-grammar"/>.</t>
        <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 lower case and upper case 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="cbor-edn-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  ["#" *non-lf]
ellipsis        = 3*"."
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT           = %x30-39 ; 0-9
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank )
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </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-h"/>.</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
in-line comments in b64, as "/" 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="cbor-edn-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *inon-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *iblank *(icomment *iblank)
iblank          = %x0A / %x20  ; Not HT or CR (gone)
icomment        = "#" *inon-lf %x0A
inon-lf         = %x20-D7FF / %xE000-10FFFF
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39
]]></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> 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="cbor-edn-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
DIGIT           =  %x30-39 ; 0-9
]]></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="cbor-edn-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

HEXDIG        = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT         = %x30-39 ; 0-9
DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="edn-and-cddl">
      <name>EDN and CDDL</name>
      <t>EDN 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>EDN syntax is an extension to JSON syntax <xref target="STD90"/>.
(Any (interoperable) JSON text is also valid EDN.)</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 EDN and CDDL, it is easy to write
"CDDLisms" or "EDNisms" 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 EDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, EDN simplifies JavaScript's copy of the
original C comment syntax to be delimited by single slashes (where
line ends are not of interest); it also adds end-of-line comments
starting with <tt>#</tt>.  </t>
          <dl spacing="compact">
            <dt>EDN:</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="I-D.ietf-cbor-update-8610-grammar"/>) allows specifying the actual tag number
separately, while EDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <t><tt>98(['', {}, /rest elided here: …/])</tt></t>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Separator character.  Like JSON, EDN requires commas as separators
between array elements and map members (EDN also allows, but does
not require, a trailing comma before the closing bracket/brace,
enabling an easier to maintain "terminator" style of their use).
CDDL's comma separators in these 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).</t>
        </li>
        <li>
          <t>Embedded CBOR.  EDN 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>EDN:</dt>
            <dd>
              <t><tt>98([/h'a10126'/ &lt;&lt; {/alg/ 1: -7 /ECDSA 256/ } &gt;&gt;, /…/])</tt></t>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>serialized_map = bytes .cbor header_map</tt></t>
            </dd>
          </dl>
        </li>
      </ul>
    </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>
      <!--  LocalWords:  dedenting dedented
 -->

</section>
  </back>
  <!-- ##markdown-source:
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
Rdgdv4Wddzoaoc8E/b8ugq+pizli2I03H65nK3Grf8Rq5faUot1pNKFV5XIr
2yx+M0TquJs/mc8K8SMcFgdQBYMc2iBv8/Cl+AnIwZXzIhXJvi6N1ZugYGOp
bNF1cBZo11YNh6koarWMZpjfw2eG+YMKitDi/fyhUE3iWS2bOYM90qJexUm8
LCt0c9ej+Yx/Ucoj+Ix3BZRY5r0bpHoV5lK+SKulyKFKGST4LuBJfDkm6+xs
SFt0ik9ZVnfiGek7dYwpnsEKnnywpvFzlP8YoohHf9xTXmdv5BXMXfdvwcJo
BZ4uslHi7LvPd9CMH6J1K7mUo4F4yIAOIecxH9Pdwy6Ly7QItVZ/dhp63Nkh
kmrqSbbZXRpT/SfYgxrbD1Y+pwLlz2euvPXIyk87DSqE35u28uZjK3drKncf
W3mzpjJ8bGV9b+Wt+srF577K2w9Vhjer6u4s11WqvAz7wNe3bBRN5ieNAr7u
5sctrJcw1r96jRipGYTpIAfujtLiUb9U8Zx7DLrbgXC/IqnDC93dBum4vb00
zaBrS29px0ahOArTrWrYFhTvBE5aeq13UCPcXS5ug0JKNbB4WFO42qwURv5d
2cX/+j38/XEs1SiWcjx1fTR1rWjBGJ2VoiWePShaHikU6CibPZ+FebxV+cQY
5aflC+v49CWl3HYZwP3UkpUMAKr2DjabK7Kl47Zpt4rLtCtJkHHLgd5Da8pv
K0oyfv9QnOUSOmrwMeNJNL/E5NcUV8I2NjuETDzv6MI2sFmhuw7wDg7jt9ts
WSeVzWgQqYtKRvQLHO6FrNwF5W7Ho26oWGR05zqmic4GYzONLmyKLbwtxvaB
oSLkxUIDfRZPYxg1NIx7Z9wyY+cc2NE3g4iTMphbTgU8XeRyQ0KSzShpBVnN
UvZpvGbn6S27xa/N/NbLmTxP05zv98JFFk2g6g0EqPKF7Pz67i78IUOPF3oJ
GgfJLRrwXFqKCUCaSpMrw6YodQE67Sb0RctYdOaGDRoFYvFa5nXFpw/lsJbB
RBOmlMiTz4eRccNHYXv5A4CMMn/dADCNCvBVnE0zOmwTQAX+YQOA4rmmC2W8
9vH2bGvbkOgWNrHahWurxpn4UNEXQZ4J0aWm6JGbpnl8bTNqpBJApCX/MmNU
NFEOhQvMZOs55tnAfBInU7wyBMdiV29gnMpEK3goe3KGXVszmOMEBosBGhay
Zgq79wnszfF6lykdzDfJkD02bDtxkZctSaJOV7HE6KdG8zJ7lGWR2dMn5xik
L0npj+hx4i3tv0bX0SklbGoxtpEPfoRJoIpXa3j4dnZb5KVK5/El3mKjD61R
x6VrT1kftbNAlyXzEbI5Mm0bCmmieRl70XHlXhe8BSFnNAUpincGD2HzULYj
QRvlsKneE3bIe9lmNM6K02mUc4wj17/DM2oTPCXS2dPhM/h7fHh0eoAn1+H7
VyrTkpJQAnOHQ3En3KDGk6IGPeY6lFWcl5q77v1Wd/T+K5wdbulAF27RsZPJ
JUAyH089r0sPseaUgTnie10zQZs1vgukoFF7pQAfGs3kNhclSbJtZD+y6zU8
wpkMIzoWCPuGBlPCD9gBehJ3yheEojUNibZBYJVzzqD0s2mRLJfsqrq150DF
5ejdQguLYzDxAV5U5OHs0iQi6xx2MVPstqaoKox8kys2oC0YPDqWMlpkt669
3eeN87W1lr772tLrdCmQ3J+DiLan//rn/7n+udmrrMjh+9Pji1OQVxdnfE5p
Xz/ZaUNT7kWTl4IngVe7WhKE5XgbXxkiNqYasZ1mfMiDc9/Yeoim9pICdre7
e0Bwinigx14B0iBmSThPQC4stNCGZ6NF6Vw5V9Lns6BsSk4zG551ZXIK0DIt
itMBScBXtCALxlQ/FBgTc7q+AG/iAqqGMQdAWLcTL+siyLZmWzk05D6LKQoT
ztw1sJgbAxkdZcskx5FxF9N4wX0oq2idByIsKbuLG4YLqSj7iiW/orQBOznE
VndDxNSzeVOWSX+c6OQ2kwm57vBeTo7TogsmmhQbc2xPbyHVtAnLKE9/tHQv
RVr2xxZbdFxv33vgpFZ9UJWlbo4bYari+JrMWN+4vf+FAwzSuYXLJE2vsor6
UEMc6+O1qLPR6e6sreuXL/XdOjAex/McAwOOp1+9AhKqJxgbsWWGF4iz+3Lb
BuVA1egCNXN80cOMagcDvIIRtKtLxvTljAegVjOdm+F+kKTBV3cNA4X3VfKG
LzudMz6ztHxFpZIltre/1Jyvx/vzipYAloazqTqhiELuMP14AGptOr/CJ/9p
Auqd/hb47RUeo375T2EITCAFFfL36XyYgWyAhZUbLvgbHi4Kw1fq/wBV6fqu
JKgAAA==

-->

</rfc>
