<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.12 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc rfcedstyle="yes"?>
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-suit-report-01" category="info">

  <front>
    <title abbrev="Secure Reporting of Update Status">Secure Reporting of Update Status</title>

    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>Brendan.Moran@arm.com</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization>Fraunhofer SIT</organization>
      <address>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>

    <date year="2022" month="January" day="12"/>

    <area>Security</area>
    <workgroup>SUIT</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>The Software Update for the Internet of Things (SUIT) manifest provides
a way for many different update and boot
workflows to be described by a common format. However, this does not
provide a feedback mechanism for developers in the event that an update
or boot fails.</t>

<t>This specification describes a lightweight feedback mechanism that
allows a developer in possession of a manifest to reconstruct the
decisions made and actions performed by a manifest processor.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>A SUIT manifest processor can fail to install or boot an update for many
reasons. Frequently, the error codes generated by such systems fail to
provide developers with enough information to find root causes and
produce corrective actions, resulting in extra effort to reproduce
failures. Logging the results of each SUIT command can simplify this
process.</t>

<t>While it is possible to report the results of SUIT commands through
existing logging or attestation mechanisms, this comes with several
drawbacks:</t>

<t><list style="symbols">
  <t>data inflation, particularly when designed for text-based logging</t>
  <t>missing information elements</t>
  <t>missing support for multiple components</t>
</list></t>

<t>The CBOR objects defined in this document allow devices to:</t>

<t><list style="symbols">
  <t>report a trace of how an update was performed</t>
  <t>report expected vs. actual values for critical checks</t>
  <t>describe the installation of complex multi-component architectures</t>
  <t>describe the measured properties of a system</t>
  <t>report the exact reason for a parsing failure</t>
</list></t>

<t>This document provides a definition of a SUIT-specific logging container
that may be used in a variety of scenarios.</t>

</section>
<section anchor="terminology" title="Conventions and Terminology">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL
NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”,
“MAY”, and “OPTIONAL” in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<t>Terms used in this specification include:</t>

<t><list style="symbols">
  <t>Boot: initialization of an executable image. Although this
specification refers to boot, any boot-specific operations described
are equally applicable to starting an executable in an OS context.</t>
</list></t>

</section>
<section anchor="the-suit-record" title="The SUIT Record">

<t>If the developer can be assumed to have a copy of the
manifest, then they need little information to reconstruct what the
manifest processor has done. They simply need any data that influences
the control flow of the manifest. The manifest only supports the
following control flow primitives:</t>

<t><list style="symbols">
  <t>Set Component/Dependency Index</t>
  <t>Set/Override Parameters</t>
  <t>Try-Each</t>
  <t>Run Sequence</t>
  <t>Conditions.</t>
</list></t>

<t>Of these, only conditions change the behavior of the processor from the
default, and then only when the condition fails.</t>

<t>Then, to reconstruct the flow of a manifest, all a developer needs is
a list of metadata about failed conditions:</t>

<t><list style="symbols">
  <t>the current manifest</t>
  <t>the current section</t>
  <t>the offset into the current section</t>
  <t>the current component index</t>
  <t>the “reason” for failure</t>
</list></t>

<t>Most conditions compare a parameter to an actual value, so the “reason”
is typically simply the actual value.</t>

<t>Since it is possible that a non-condition command (directive) may fail in an
exceptional circumstance, this must be included as well. However, 
a failed directive will terminate processing of the manifest. To accommodate
for a failed command and for explicit “completion,” an additional “result”
element is added as well. In the case of a command failure,
the failure reason is typically a numeric error code. However, these error
codes need to be standardised in order to be useful.</t>

<t>Reconstructing what a device has done in this way is compact,
however it requires some reconstruction effort. This is an issue that
can be solved by tooling.</t>

<figure><artwork><![CDATA[
SUIT_Record = {
    suit-record-manifest-id        => [* uint ],
    suit-record-manifest-section   => int,
    suit-record-section-offset     => uint,
    (
        suit-record-component-index  => uint //
        suit-record-dependency-index => uint
    ),
    suit-record-properties     => SUIT_Parameters,
}
]]></artwork></figure>

<t>suit-record-manifest-id is used to identify which manifest contains the
command that caused the record to be generated. The manifest id is a
list of integers that form a walk of the manifest tree, starting at the
root. An empty list indicates that the command was contained in the
root manifest. If the list is not empty, the command was contained in
one of the root manifest’s dependencies, or nested even further below
that.</t>

<t>For example, suppose that the root manifest has 3 dependencies
and each of those dependencies has 2 dependencies of its own:</t>

<t><list style="symbols">
  <t>Root  <list style="symbols">
      <t>Dependency A      <list style="symbols">
          <t>Dependency A0</t>
          <t>Dependency A1</t>
        </list></t>
      <t>Dependency B      <list style="symbols">
          <t>Dependency B0</t>
          <t>Dependency B1</t>
        </list></t>
      <t>Dependency C      <list style="symbols">
          <t>Dependency C0</t>
          <t>Dependency C1</t>
        </list></t>
    </list></t>
</list></t>

<t>A manifest-id of [1,0] would indicate that the current command was
contained within Dependency B0. Similarly, a manifest-id of [2,1]
would indicate Dependency C1</t>

<t>suit-record-manifest-section indicates which section of the manifest was
active. This is used in addition to an offset so that the developer can
index into severable sections in a predictable way. The value of this
element is the value of the key that identified the section in the
manifest.</t>

<t>suit-record-section-offset is the number of bytes into the current
section at which the current command is located.</t>

<t>suit-record-component-index is the index of the component that was
specified at the time that the report was generated. This field is
necessary due to the availability of set-current-component values of
True and a list of components. Both of these values cause the manifest
processor to loop over commands using a series of component-ids, so the
developer needs to know which was selected when the command executed.</t>

<t>suit-record-dependency-index is similar to suit-record-component-index
but is used to identify the dependency that was active.</t>

<t>suit-record-properties contains any measured properties that led to the
command failure.
For example, this could be the actual value of a SUIT_Digest or
class identifier. This is encoded in a SUIT_Parameters block as defined
in <xref target="I-D.ietf-suit-manifest"/>.</t>

</section>
<section anchor="the-suit-report" title="The SUIT Report">

<t>Some metadata is common to all records, such as the root manifest:
the manifest that is the entry-point for the manifest processor. This
metadata is aggregated with a list of SUIT_Records. The SUIT_Report
may also contain a list of any system properties that were measured
and reported, and a reason for a failure if one occured.</t>

<figure><artwork><![CDATA[
SUIT_Report = {
  suit-report-manifest-digest => SUIT_Digest,
  ? suit-report-manifest-uri  => tstr,
  ? suit-report-nonce         => bstr,
  suit-report-records         => [ * SUIT_Record ],
  ? suit-system-properties      => [ + system-property-claims ],
  suit-report-result          => true / {
    suit-report-result-code   => int, ; could condense to enum later
    suit-report-result-record => SUIT_Record,
  }
}
system-property-claims = {
  system-component-id => SUIT_Component_Identifier,
  + SUIT_Parameters,
}

]]></artwork></figure>

<t>suit-report-manifest-digest provides a SUIT_Digest (as defined in
<xref target="I-D.ietf-suit-manifest"/>) that is the characteristic digest of the
Root manifest.</t>

<t>suit-report-manifest-uri provides the reference URI that was provided in
the root manifest.</t>

<t>suit-report-nonce provides a container for freshness or replay
protection information. This field MAY be omitted where the suit-report
is authenticated within a container that provides freshness already.
For example, attestation evidence typically contains a proof of
freshness.</t>

<t>suit-system-properties provides a list of measured or asserted properties
of the system that creates the suit report. These properties are scoped by
component identifier. Because this list is expected to be constructed on
the fly by a constrained node, component identifiers may appear more than
once. A recipient may convert the result to a more conventional structure:</t>

<figure><artwork type="CDDL"><![CDATA[
SUIT_Record_System_Properties = {
  * component-id => {
    + SUIT_Parameters,
  }
}
]]></artwork></figure>

<t>suit-report-records is a list of 0 or more SUIT Records. Because SUIT
Records are only generated on failure, in simple cases this can be an
empty list.</t>

<t>suit-report-result provides a mechanism to show that the SUIT procedure
completed successfully (value is true) or why it failed (value is a map
of an error code and a SUIT_Record).</t>

<t>The suit-report-result-code indicates the reason for the failure. Values
are expected to be CBOR parsing failures, Schema validation failures,
COSE validation failures or SUIT processing failures.</t>

<t>The suit-report-result-record indicates the exact point in the manifest
or manifest dependency tree where the error occured.</t>

</section>
<section anchor="attestation" title="Attestation">

<t>This document contains three sections that are expected to be useful in
attestation evidence:</t>

<t><list style="symbols">
  <t>suit-report-records</t>
  <t>suit-system-properties</t>
  <t>suit-report-result</t>
</list></t>

</section>
<section anchor="iana" title="IANA Considerations">

<t>IANA is requested to allocate a CBOR tag for the SUIT Report.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>The SUIT Report should either be carried over a secure transport, or
signed, or both. Ideally, attestation should be used to prove that the
report was generated by legitimate hardware.</t>

</section>
<section anchor="acknowledgements" title="Acknowledgements">

</section>


  </middle>

  <back>

    <references title='Normative References'>




<reference anchor='I-D.ietf-suit-manifest'>
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg'>
	 <organization>Inria</organization>
      </author>
      <date day='25' month='October' year='2021'/>
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an IoT device), where to find the that code/data,
   the devices to which it applies, and cryptographic information
   protecting the manifest.  Software updates and Trusted Invocation
   both tend to use sequences of common operations, so the manifest
   encodes those sequences of operations, rather than declaring the
   metadata.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-manifest-16'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-manifest-16.txt' type='TXT'/>
</reference>



<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'><organization/></author>
<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'><organization/></author>
<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>




  </back>

<!-- ##markdown-source:
H4sIAJJe32EAA41abW8buRH+zl/BOh+a5CQlTg9oz8W155ccYiCJU9tpcbgL
AmqXkljvi47kWtEFyW/pb+kv6zNDLpcryYcWaBvtksPhvDzzzKyn06nwxlf6
RN7oorNaXut1a71plrJdyPfrUnktb7zynRNqPrf6/v9ZWbZFo2oILa1a+KnR
fjF1nfFTy3umz49FgeXL1m5PpGkWrRBmbU+kt53zL54//+75C6GsVvEs47di
09q7pW27NZ69v7wVd3qLR+WJvGy8to320ws6SwjnVVN+VFXb4PytdmJtToSU
dlHo0vltFZ9K6dsi+6dpSt34/oGDllYvXPq9rUc/vTVFWly0dY296a1pKtMM
x+hPfloZ56cQMm8rLJu2T7/BG1ipVus1LBjWqs6vWgtlp3jJ/zENVp/N5JvW
qqZ/GCx7ZnVTqmb8qrVL1ZjflDdtcyJPbS1fm9p4XfYLdK1MlTbPePMPytYz
3AHnytHBr2byzNi7VVv9Nj77lW7u9l6Nz/7Rqq5ZtQtt5Q28NT5+hf2zedz/
gzN+tkjLZ6UWomltDUH3mjx3Ob2YDRFU45CFdjC+lEJMp1Op5nCHKuD62xUi
sF34DWKnj8hFa6XH8z5MKFhvV7C5k48pkJ7IXqJc2/belOQIuVFb3ol3W1ma
BRSDh2UXZCLA5LxtPQflomo3DhEk51pic2HNXOP1VioOjLYhQbjNTL5qN/pe
2wn0MQ7e1042EBKPxfqF1uVcFXey1sUKWrmalSixq2rX2jr4hS+DB9DGr5SH
LlErgZWklFzAxm5G1sApbq0LszAFuyXp53BYZZYrv9H0v4cOJuFCVXw5NahA
Gqxb57RzJBDGVIMBYQSri7aBP7qC9NOixPG00mFVGSwHV/EDSCPL9MbK3VBA
fGtnwb+1KcsKQfGIfGjbsuP9QpwyEBzYJwsYhaxACiGSPa4he+skeyX/CgCN
g0IzBK3+tYNlq+0kmNlaktbCbHKpG22xjbV1XbECJjiva9eflPyYuWtj/Erq
pu2WK4Y5jmqYDXotADjSkkaF6hx5pClJBK6ncaSFISkBemtNYFnXVQy3cAEw
xSqpFxAZzR63CtIG6IzbvG6XS1pONwmbHflLK+jOlqPwJIeQuZyp15VZbDk2
RTQlHPCvlam0NF4ilsjvZo6f4UA+eiw7F4ucWFm6udCfgH6kSRU1glGV9/BZ
sEYKOhdTAxJ0NJ6jjFGVQCHZUIS6EyGeSvhPkUErFjCRa4VCVHSVstVWbgAv
FOlm2cBbnP8EwXPl8DOqABm1wW3YmoNfdKUZybPXrlvzTTlayAHrivxTr1Ff
aCWDzvnZ1bVs5/+Gz5DYGr7FUZyrnOhFR1IlZxOFh4FxYUS+SjSkkoRhmoy4
wqIhSjcqy5Rhvf6ExKZovIenESOdquS9qjoIJk2R5TAInhUrDaORyWLqs8ti
UoRL40i6T6U/hQtO0+2kssUK5QPi4eRdITXSBs9LSjxo6I12AQ9CYgy6cip9
gpIyZBprqMhpbOEYsRGwkrV6NGb0gUWNT4BDYTbtkS1FFYDHK1jeCgbGGhAO
TTsXXKFgHosysiURrtANfrUU4Y+kPG8bAlRGJUqIW21r07QQvJWfH/nh15fg
bnAPSeTDyaM3729ujybh/+XbK/739ct/vL+8fnlB/755dfr6dfqHiCtuXl29
f30x/GvYeX715s3LtxdhM57K0SNx9Ob0J7whJY+u3t1eXr09fX10INKsjhXJ
UNlbW02hokDMUoHCnrPzd//9z/G38vPnP1z/eP7i+Pi7L1/ij78c//lb/KBU
Cqe1TcwsRsatAG/RiqsBgWuh1gYBhfxFtDoEcIMabzWsK8iWLnnB79ck0xRV
V2pOhjPgIRFC+FpVkUuwywnxwAS9IvgxtVrqmTytQJcIWRmy5I5Y0DVCYLIC
hNIltvyvIW4oaFVwejILxJDtUAZwLVSlNUCxUBHzkDOB7+6o09CDqxsOQCAN
xxRTEULDaxREWwpxueA8GAopoS4cpJzrqAZC/koR3kPMmoOUymdf3NjqXPu3
stGEY8Z7PntUVPLqu6EkyGVkBXKlKFgaGPGWJDL4R8FMeAheOYkIY1ERsU2Q
9nRD21aSOE9UMdVfljVUYw6YCJ6O9Vi0hH99piYxa0sUFaWOoH0Kwu+RjxGA
nl3otSZiXmxR/Ev9KSx4doWiYKnWvlMWjBQh7vDm1m6nL1Hd8M/rrsHCX1l1
/ESCl4wflPBXrLfTk6Bjkd5JKkPLAG5zDW8YmCrecrDdwrZ1pDYLBbwM+cHu
SUkio7GC4IyRcf7ssaRkz4EFTTivcuJF3gEBJHZK3QQtx80V+0rN2y4QP3hw
uBAblFXpLPPXXvrOY6cDpQpP28XCaXI9FH14Vf90KBYmOojeHgWkP2KoTwD/
pnV+ZG/spXTjWhD8SNZBYuQVbYJubCRUAEP8dk31rUrBSwvyXTD3DaBln7sw
aQbxbqaDg3om9Lg0kXc94frB1I7zGySm0GtaTEXVWAAtNZqFjpSlRuMa8JbR
jMBWbnRVZawfjoseSqeA48DLocBQsY9RFnvqneyCYQruKJjthxqaXB70p//S
C7AD4BZufhQqO7OkIzZsGa6MWxwF4nYkIushM+F1rvtljGRQpxCe/UHRpRNG
hfijr+4j78DSgDd0yxmZHnVCSMTwSgSezSAUahd38sqWJhYP4GgIkFDWF10F
J18PqURm2wT3BpKVcC6VHurrTAy8wk/EKihCQULcH35BeQL7zDOUiSEzbYI4
49hOdE3XhXASEcpdW92H/sC3bQVtoN7Xr18F1YGPoQ7I7+VnbobjNISepZZ2
asrYJ8vv/yZ/fio75KD8MHl4Q0zJsAGL95fGFdOY1FF2l9Y+7lvz0a6U1FNO
6rRHPnt2cH2ZYDpuiOt58ZN9rTLGGDViGw1oPhFf2HTiITuZyCmow6PBDbUu
m5VBa5MqUOSDofj0gcvpzx1XGZsXdksIqtTj7dSycJ4SPe4SqVoyuyBpVIEl
jQyqu92sBanXhF+JOISKTG0f+AvCql6DkLJY2I2oi45CQwEJOlML0JPbyKKC
jAwdIr0IoniuEIRPfleSoNyIOo8E/pE4UfQpvDShlq3Bc+yi2YNcdBZ70FKj
OG2YbyPWf2TkUQQ4k1D6nR5uM5LPmfmn0RmCFOTmlBWivflr3vFi/IhcQY3n
pmH2eE0jGY61pzIjDqcixez4+fMHnh8fEHL2gJCzB4ScHRJy/oCQ8weEnB/T
lCMPe9z4l5+PJ89/+YAGpKvKFDZZ1AyFufe5GHxOTTUiaHSDmbwBBePmeZJR
kHTei8nxLx/Eznk7av4uPA2xHVK0f76bLaSq4sI4IG3q32LhigQh4hkzg3jx
EbUWAYeYxIQZAhX/eLALDSHaIugVSDwKQ0h6Jg9BM3CtrDT68cvQBQaSHADI
REgZbj2i37OxkXaAOR6AYjnXTDrnW7LXLgkTvXDloy0PuRzCqrZgIBsfuovr
8dTwI15rIHR8OfJJbJmIGQRTe1PnmR3afAKXEYJCOjZR0DjRaCI2yqK56LiZ
Yr52D+ag5gbNTGjLtZ/Gu2RDiDjWaBfi1nZxhJgo8DCJmaF79BE8iFTEbYz1
ozATA5eHHlXbrmVLHCDNrTomYArq2Igymd1K1/NRscvNIe2uAZEPjiFzOMQP
T2mypiC4KPSPew7aK6TULofk5A70YV+KeecPVsWQGilZe6fKmGjj87PCnMon
dYSHZj0sqQqn5SU20sHZuB7EwR5hSJwf5Wx9mOt8vDBL7h9BCCs0x0N22QEU
cJO27Oc6O9RBzhH7d8Rh4yAOUCA/fz78FeHLl91unUIZrQNxwNReBcZYR/AB
Yw/WokigQbBy+wXuRIx5AONEWIfroFFdt8Sn+q8TB4bffFmR66CWS6uXPIPm
2eiQBRnDdLN0m4/xNtTJqApBG12abSTfhnHdnmc32g4zPi7OIc91OYk5OJrm
9U2AWUgmFQV9IyzHDJhhIjDg/GtgqhdlcH1PB0MkEHv8++H1nTVMHj2I+v4y
tHhoATJGPY/L8kXRk/myn1GEc8r+IRMdbLXLX8Oub+T47XaKADa1CwLGh1Lj
JfNDPUHbs3FzkK2dUrwPNF/+NaYStbC6cYyoGsVDVggP+5CQSHZ7+4b7kXJf
QLcfUD66K7zMcTCJSdOaj5cpVUnoN4dI/YjVH/R+NvfN8eCxyifr4uGEfjJK
tmKl6NsgkNx5NKHxjDhdux5x6AfUoiBLOoVyx18DEVvvry8HPI1rWLs9ONgR
HkIzu2maXYeBCfy1At12RLuxpVJbKlo+EYs09BuV2TenPxG2trXxsebYgLTZ
0TQ7oe/M5KgiQQljwqAD3ylpN2ijKqR8ud1B9vxTjqYtdLdhAjDUERIJy6OQ
J5G9XfbzKjPOMO6KRYgAx6E6+1FBEpHARDwLnR4U9tFvdFDEMMZIp3PMozmU
K/CTGniRTbWy8nOmezZBDCu2WulLTOgh09iA9AyRsIAV4vdgeheIeIOEnshD
5zgePcUBe92yDxW1agUNvan2mLUJ0zy2LrhL/iGOa1TYV6TvGqizQSvY74ST
8Ov5xcXrfDTx8Ybt9vHdYJOQ+0/lbtoHlDqQ3wFJvu7leI+yJnfnc/Ij65kN
yt1gZf4zj/iU3cPj1eE7bBys0hiKiADPAcOsykW2ESfsjRj67NmuYmyyLNiy
L+Atf8oYeC6ryQW6pHFmHK1BE7AAKtqLjuL9cSA0hD/A9Cd0yc1qSxOmOKwb
FlCvtRbx+0Yaj8XqmrnmSZgdP1gX8tmBzstyNp2byX8yIRb8fWMcs/z5cudz
HMjNTbHSNX03q0yp0iCb34nzq5uXh97QdQc7uZHEh28RC9P4HuGTYeBJ8e8e
EoUPn+4DZcrJrdU6w71g04GKPJLydACr3Q+O2byIxKReMUyM960WRpAE94cQ
kGfvB3Kgf7qHeHvLyTKs8+Xp21P6hOEguf9i9fmRUY1CPeWXuAb/6YKL2tGX
Zu7SVfCtV8sUDxnPDSbp/8Rq54j45zTDasoG4hzaxNEPEsxa6gq5faJ+if8u
DAjXONpAUyMRPsNPwt9f+NVMgiRQXRjXjSi6/16LK1BKDj2mONRjEqhWemnQ
jdJdUelL+suf6OiCejHk2zJ+0v8fTu/GYesmAAA=

-->

</rfc>

