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


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

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

<rfc ipr="trust200902" docName="draft-ietf-suit-update-management-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="SUIT Update Management Extensions">Update Management Extensions for Software Updates for Internet of Things (SUIT) Manifests</title>

    <author initials="B." surname="Moran" fullname="Brendan Moran">
      <organization>Arm Limited</organization>
      <address>
        <email>Brendan.Moran.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Takayama" fullname="Ken Takayama">
      <organization>SECOM CO., LTD.</organization>
      <address>
        <email>ken.takayama.ietf@gmail.com</email>
      </address>
    </author>

    <date year="2023" month="September" day="11"/>

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

    <abstract>


<t>This specification describes extensions to the SUIT manifest format
defined in <xref target="I-D.ietf-suit-manifest"/>. These extensions allow an update
author, update distributor or device operator to more precisely control
the distribution and installation of updates to IoT devices. These
extensions also provide a mechanism to inform a management system of
Software Identifier and Software Bill Of Materials information about an
updated device.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>Full management of software updates for unattended, connected devices, such as Internet of Things devices requires a cooperation between the update author(s) and management, distribution, policy enforcement, and auditing systems. This specification provides the extensions to the SUIT manifest (<xref target="I-D.ietf-suit-manifest"/>) that enable an author to coordinate with these other systems. These extensions enable authors to instruct devices to examine update priority, local update authorisation, update lifetime, and system properties. They also enable devices to report and distributors to collect Software Bill of Materials information.</t>

<t>Extensions in this specification are OPTIONAL to implment and OPTIONAL to include in manifests unless otherwise designated.</t>

</section>
<section anchor="conventions-and-terminology"><name>Conventions and Terminology</name>

<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>Additionally, the following terminology is used throughout this document:</t>

<t><list style="symbols">
  <t>SUIT: Software Update for the Internet of Things, also the IETF working group for this standard.</t>
</list></t>

</section>
<section anchor="extension-metadata"><name>Extension Metadata</name>

<t>Some additional metadata makes management of SUIT updates easier:</t>

<t><list style="symbols">
  <t>CoSWID, CoMID, CoRIM</t>
  <t>Text descriptions of requirements</t>
</list></t>

<section anchor="manifest-digest-coswid"><name>suit-coswid</name>

<t>a CoSWID can enable Software Bill-of-Materials use-cases. A CoMID can enable monitoring of expected hardware. A CoRIM (which may contain both CoSWID and CoMID) can enable both of these use-cases, but can also act as the transport for expected values to an attestation Verifier. Tightly coupling update and attestation ensures that verification infrastructure always knows what software to expect on each device.</t>

<t>suit-coswid is a member of the suit-manifest. It contains a Concise Software Identifier (CoSWID) as defined in <xref target="I-D.ietf-sacm-coswid"/>. This element SHOULD be made severable so that it can be discarded by the Recipient or an intermediary if it is not required by the Recipient.</t>

<t>suit-coswid typically requires no processing by the Recipient. However all Recipients MUST NOT fail if a suit-coswid is present.</t>

<t>suit-coswid is RECOMMENDED to implement and RECOMMENDED to include in manifests.</t>

<t>NOTE: CoRIM comprises a list of CoSWID and a list of CoMID, so it may be preferable to a CoSWID.</t>

<t>NOTE: CoMID may be a preferable alternative to Vendor ID/Class ID, however it consumes more bandwidth, so a UUID based on CoMID may be appropriate.</t>

</section>
<section anchor="text-version-required"><name>text-version-required</name>

<t>suit-text-version-required is used to represent a version-based dependency on suit-parameter-version as described in <xref target="suit-parameter-version"/> and <xref target="suit-condition-version"/>. To describe a version dependency, a Manifest Author SHOULD populate the suit-text map with a SUIT_Component_Identifier key for the dependency component, and place in the corresponding map a suit-text-version-required key with a free text expression that is representative of the version constraints placed on the dependency. This text SHOULD be expressive enough that a device operator can be expected to understand the dependency. This is a free text field and there are no specific formatting rules.</t>

<t>By way of example only, to express a dependency on a component "['x', 'y']", where the version should be any v1.x later than v1.2.5, but not v2.0 or above, the author would add the following structure to the suit-text element. Note that this text is in cbor-diag notation.</t>

<figure><artwork><![CDATA[
[h'78',h'79'] : {
    7 : ">=1.2.5,<2"
}
]]></artwork></figure>

</section>
</section>
<section anchor="extension-parameters"><name>Extension Parameters</name>

<t>Several parameters are needed to define the behaviour of the commands specified in <xref target="extension-commands"/>. These parameters follow the same considerations as defined in Section 8.4.8 of <xref target="I-D.ietf-suit-manifest"/>.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CDDL Structure</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Use Before</c>
      <c>suit-parameter-use-before</c>
      <c><xref target="suit-parameter-use-before"/></c>
      <c>Minimum Battery</c>
      <c>suit-parameter-minimum-battery</c>
      <c><xref target="suit-parameter-minimum-battery"/></c>
      <c>Update Priority</c>
      <c>suit-parameter-update-priority</c>
      <c><xref target="suit-parameter-update-priority"/></c>
      <c>Version</c>
      <c>suit-parameter-version</c>
      <c><xref target="suit-parameter-version"/></c>
      <c>Wait Info</c>
      <c>suit-parameter-wait-info</c>
      <c><xref target="suit-parameter-wait-info"/></c>
      <c>Component Metadata</c>
      <c>suit-parameter-component-metadata</c>
      <c><xref target="suit-parameter-component-metadata"/></c>
</texttable>

<section anchor="suit-parameter-use-before"><name>suit-parameter-use-before</name>

<t>An expiry date for the use of the manifest encoded as the positive integer number of seconds since 1970-01-01. Implementations that use this parameter MUST use a 64-bit internal representation of the integer. Used with <xref target="suit-condition-use-before"/></t>

</section>
<section anchor="suit-parameter-minimum-battery"><name>suit-parameter-minimum-battery</name>

<t>This parameter sets the minimum battery level in mWh. This parameter is encoded as a positive integer. Used with suit-condition-minimum-battery (<xref target="suit-condition-minimum-battery"/>).</t>

</section>
<section anchor="suit-parameter-update-priority"><name>suit-parameter-update-priority</name>

<t>This parameter sets the priority of the update. This parameter is encoded as an integer. It is used along with suit-condition-update-authorized (<xref target="suit-condition-update-authorized"/>) to ask an application for permission to initiate an update. This does not constitute a privilege inversion because an explicit request for authorization has been provided by the Update Authority in the form of the suit-condition-update-authorized command.</t>

<t>Applications MAY define their own meanings for the update priority. For example, critical reliability &amp; vulnerability fixes MAY be given negative numbers, while bug fixes MAY be given small positive numbers, and feature additions MAY be given larger positive numbers, which allows an application to make an informed decision about whether and when to allow an update to proceed.</t>

</section>
<section anchor="suit-parameter-version"><name>suit-parameter-version</name>

<t>Indicates allowable versions for the specified component. Allowable versions can be specified, either with a list or with range matching. This parameter is compared with version asserted by the current component when suit-condition-version (<xref target="suit-condition-version"/>) is invoked. The current component may assert the current version in many ways, including storage in a parameter storage database, in a metadata object, or in a known location within the component itself.</t>

<t>The component version can be compared as:</t>

<t><list style="symbols">
  <t>Greater.</t>
  <t>Greater or Equal.</t>
  <t>Equal.</t>
  <t>Lesser or Equal.</t>
  <t>Lesser.</t>
</list></t>

<t>Versions are encoded as a CBOR list of integers. Comparisons are done on each integer in sequence. Comparison stops after all integers in the list defined by the manifest have been consumed OR after a non-equal match has occurred. For example, if the manifest defines a comparison, "Equal [1]", then this will match all version sequences starting with 1. If a manifest defines both "Greater or Equal [1,0]" and "Lesser [1,10]", then it will match versions 1.0.x up to, but not including 1.10.</t>

<t>While the exact encoding of versions is application-defined, semantic versions map conveniently. For example,</t>

<t><list style="symbols">
  <t>1.2.3 = [1,2,3].</t>
  <t>1.2-rc3 = [1,2,-1,3].</t>
  <t>1.2-beta = [1,2,-2].</t>
  <t>1.2-alpha = [1,2,-3].</t>
  <t>1.2-alpha4 = [1,2,-3,4].</t>
</list></t>

<t>suit-condition-version is OPTIONAL to implement.</t>

<t>Versions SHOULD be provided as follows:</t>

<t><list style="numbers">
  <t>The first integer represents the major number. This indicates breaking changes to the component.</t>
  <t>The second integer represents the minor number. This is typically reserved for new features or large, non-breaking changes.</t>
  <t>The third integer is the patch version. This is typically reserved for bug fixes.</t>
  <t>The fourth integer is the build number.</t>
</list></t>

<t>Where Alpha (-3), Beta (-2), and Release Candidate (-1) are used, they are inserted as a negative number between Minor and Patch numbers. This allows these releases to compare correctly with final releases. For example, Version 2.0, RC1 should be lower than Version 2.0.0 and higher than any Version 1.x. By encoding RC as -1, this works correctly: [2,0,-1,1] compares as lower than [2,0,0]. Similarly, beta (-2) is lower than RC and alpha (-3) is lower than RC.</t>

</section>
<section anchor="suit-parameter-wait-info"><name>suit-parameter-wait-info</name>

<t>suit-directive-wait (<xref target="suit-directive-wait"/>) directs the manifest processor to pause until a specified event occurs. The suit-parameter-wait-info encodes the parameters needed for the directive.</t>

<t>The exact implementation of the pause is implementation-defined. For example, this could be done by blocking on a semaphore, registering an event handler and suspending the manifest processor, polling for a notification, or aborting the update entirely, then restarting when a notification is received.</t>

<t>suit-parameter-wait-info is encoded as a map of wait events. When ALL wait events are satisfied, the Manifest Processor continues. The wait events currently defined are described in the following table.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>suit-wait-event-authorization</c>
      <c>int</c>
      <c>Same as suit-parameter-update-priority</c>
      <c>suit-wait-event-power</c>
      <c>int</c>
      <c>Wait until power state</c>
      <c>suit-wait-event-network</c>
      <c>int</c>
      <c>Wait until network state</c>
      <c>suit-wait-event-other-device-version</c>
      <c>See below</c>
      <c>Wait for other device to match version</c>
      <c>suit-wait-event-time</c>
      <c>uint</c>
      <c>Wait until time (seconds since 1970-01-01)</c>
      <c>suit-wait-event-time-of-day</c>
      <c>uint</c>
      <c>Wait until seconds since 00:00:00</c>
      <c>suit-wait-event-time-of-day-utc</c>
      <c>uint</c>
      <c>Wait until seconds since 00:00:00 UTC</c>
      <c>suit-wait-event-day-of-week</c>
      <c>uint</c>
      <c>Wait until days since Sunday</c>
      <c>suit-wait-event-day-of-week-utc</c>
      <c>uint</c>
      <c>Wait until days since Sunday UTC</c>
</texttable>

<t>suit-wait-event-other-device-version reuses the encoding of suit-parameter-version-match. It is encoded as a sequence that contains an implementation-defined bstr identifier for the other device, and a list of one or more SUIT_Parameter_Version_Match.</t>

</section>
<section anchor="suit-parameter-component-metadata"><name>suit-parameter-component-metadata</name>

<t>In some instances, a system may need to know the file metadata for a component. This metadata can include:</t>

<t><list style="symbols">
  <t>creator</t>
  <t>creation time</t>
  <t>modification time</t>
  <t>default permissions (rwx)</t>
  <t>a map of user/permission pairs</t>
  <t>a map of role/permission pairs</t>
  <t>a map of group/permission pairs</t>
  <t>file type</t>
</list></t>

<t>Component metadata is applied at time of fetch, copy, or write; see <xref target="I-D.ietf-suit-manifest"/>, sections 8.4.10.4, 8.4.10.5, 8.4.10.6. Therefore, the component metadata parameter must be set in advance of the component being fetched, copied into, or written.</t>

<section anchor="suit-meta-creator"><name>Creator</name>

<t>Sometimes, management of file systems requires that the creator of each file is correctly recorded. Because the default creator of files will be the update agent, this can obscure the actual creator of each file. The Creator metadata element allows overriding the default behaviour and setting the correct creator.</t>

<t>The creator is defined as follows:</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_meta_actor_id = UUID_Tagged / bstr / str / int
UUID_Tagged = #6.37(bstr)
]]></sourcecode></figure>

<t>The actor ID can be whatever is most appropriate for any given system. For example, the actor ID might be a string (e.g., username), integer (e.g., POSIX userid), or UUID (e.g., TEEP TA UUID).</t>

</section>
<section anchor="creation-modification-time"><name>Creation &amp; Modification Time</name>

<t>The creation and modification times are defined by CBOR time types. These are defined in <xref target="RFC8949"/>, Section 3.4.2. The CBOR tag is REQUIRED when either creation or modification time are provided.</t>

<figure><sourcecode type="CDDL"><![CDATA[
suit-meta-modification-time => #6.1(uint)
suit-meta-creation-time => #6.1(uint)
]]></sourcecode></figure>

</section>
<section anchor="component-default-permissions"><name>Component Default Permissions</name>

<t>Typical permissions management systems require read, write, and execute permissions that are applied to all users who do not have their own explicit permissions. These are the default permissions for the current component. Default permissions are described by the following CDDL:</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_meta_permissions = uint .bits SUIT_meta_permission_bits
SUIT_meta_permission_bits = &(
    r: 2, w: 1, x: 0,
    * $$SUIT_meta_permission_bits_extensions
)
]]></sourcecode></figure>

</section>
<section anchor="user-role-group-permissions"><name>User, Role, Group permissions</name>

<t>Many filesystems have users and groups. Additionally some have roles. Actors that have these associations can have specific permissions associated with them for each component. Each of these sets of permissions is defined the same way: with a map of actor identifiers to permissions.</t>

<figure><sourcecode type="CDDL"><![CDATA[
SUIT_meta_permission_map = {
    + SUIT_meta_actor_id => SUIT_meta_permissions
}
]]></sourcecode></figure>

<t>The SUIT_meta_actor_id is the same as defined for Creator, <xref target="suit-meta-creator"/>.</t>

</section>
<section anchor="file-type"><name>File Type</name>

<t>File Type typically identifies whether a file is a directory, regular file, or symbolic link. If not specified, File Type defaults to regular file.</t>

<t>This enables specific management operations for SUIT command sequences:</t>

<t><list style="symbols">
  <t>To create a directory  <list style="symbols">
      <t>Set the Component Index to the Component Identifier of the directory to be created</t>
      <t>Set the Component metadata, including the file type for directory</t>
      <t>Set suit-parameter-content to an empty bstr</t>
      <t>Invoke suit-directive-write</t>
    </list></t>
  <t>To create a symbolic link  <list style="symbols">
      <t>Set the Component Index to the Component Identifier of the link to be created</t>
      <t>Set the Component metadata, including the file type for symbolic link</t>
      <t>Set suit-parameter-content to the link target</t>
      <t>Invoke suit-directive-write</t>
    </list></t>
</list></t>

<t>For example, the following Payload Fetch &amp; Install sequences will create a new /usr/local/bin directory, download https://cdn.example/example3.bin into a new file: /usr/local/bin/example3, then create a symlink at /usr/bin/example that points to /usr/local/bin/example3.</t>

<t><list style="symbols">
  <t>Common has components for:  <list style="symbols">
      <t>/usr/bin/example</t>
      <t>/usr/local/bin</t>
      <t>/usr/local/bin/example3</t>
    </list></t>
  <t>Payload fetch:  <list style="symbols">
      <t>set component index = 1</t>
      <t>set parameters:      <list style="symbols">
          <t>content = h''</t>
          <t>metadata = {file-type: directory}</t>
        </list></t>
      <t>write</t>
      <t>set component index = 2</t>
      <t>set URI = "https://cdn.example/example3.bin"</t>
      <t>fetch</t>
      <t>condition image digest</t>
    </list></t>
  <t>Install:  <list style="symbols">
      <t>set component index = 0</t>
      <t>set parameters:      <list style="symbols">
          <t>content = "/usr/local/bin/example3"</t>
          <t>metadata = {file-type: symlink}</t>
        </list></t>
      <t>write</t>
    </list></t>
</list></t>

</section>
</section>
</section>
<section anchor="extension-commands"><name>Extension Commands</name>

<t>The following table defines the semantics of the commands defined in this specification in the same way as in the Abstract Machine Description, Section 6.4, of <xref target="I-D.ietf-suit-manifest"/>.</t>

<texttable>
      <ttcol align='left'>Command Name</ttcol>
      <ttcol align='left'>CDDL Identifier</ttcol>
      <ttcol align='left'>Semantic of the Operation</ttcol>
      <c>Use Before</c>
      <c>suit-condition-use-before</c>
      <c>assert(now() &lt; current.params[use-before])</c>
      <c>Check Image Not Match</c>
      <c>suit-condition-image-not-match</c>
      <c>assert(not binary-match(digest(current), current.params[digest]))</c>
      <c>Check Minimum Battery</c>
      <c>suit-condition-minimum-battery</c>
      <c>assert(battery &gt;= current.params[minimum-battery])</c>
      <c>Check Update Authorized</c>
      <c>suit-condition-update-authorized</c>
      <c>assert( isAuthorized( current.params[priority]))</c>
      <c>Check Version</c>
      <c>suit-condition-version</c>
      <c>assert(version_check(current, current.params[version]))</c>
      <c>Wait For Event</c>
      <c>suit-directive-wait</c>
      <c>until event(arg), wait</c>
      <c>Override Multiple</c>
      <c>suit-directive-override-multiple</c>
      <c>components[i].params[k] := v for-each k,v in d for-each i,d in arg</c>
      <c>Copy Params</c>
      <c>suit-directive-copy-params</c>
      <c>current.params[k] = components[i].params[k] for k in l for i,l in arg</c>
</texttable>

<section anchor="suit-condition-use-before"><name>suit-condition-use-before</name>

<t>Verify that the current time is BEFORE the specified time. suit-condition-use-before is used to specify the last time at which an update should be installed. The recipient evaluates the current time against the suit-parameter-use-before parameter (<xref target="suit-parameter-use-before"/>), which must have already been set as a parameter, encoded as seconds after 1970-01-01 00:00:00 UTC. Timestamp conditions MUST be evaluated in 64 bits, regardless of encoded CBOR size. suit-condition-use-before is OPTIONAL to implement.</t>

</section>
<section anchor="suit-condition-image-not-match"><name>suit-condition-image-not-match</name>

<t>Verify that the current component does not match the suit-parameter-image-digest (Section 8.4.8.6 of <xref target="I-D.ietf-suit-manifest"/>). If no digest is specified, the condition fails. suit-condition-image-not-match is OPTIONAL to implement.</t>

</section>
<section anchor="suit-condition-minimum-battery"><name>suit-condition-minimum-battery</name>

<t>suit-condition-minimum-battery provides a mechanism to test a Recipient's battery level before installing an update. This condition is primarily for use in primary-cell applications, where the battery is only ever discharged. For batteries that are charged, suit-directive-wait is more appropriate, since it defines a "wait" until the battery level is sufficient to install the update. suit-condition-minimum-battery is specified in mWh. suit-condition-minimum-battery is OPTIONAL to implement. suit-condition-minimum-battery consumes suit-parameter-minimum-battery (<xref target="suit-parameter-minimum-battery"/>).</t>

</section>
<section anchor="suit-condition-update-authorized"><name>suit-condition-update-authorized</name>

<t>Request Authorization from the application and fail if not authorized. This can allow a user to decline an update. suit-parameter-update-priority (<xref target="suit-parameter-update-priority"/>) provides an integer priority level that the application can use to determine whether or not to authorize the update. Priorities are application defined. suit-condition-update-authorized is OPTIONAL to implement.</t>

</section>
<section anchor="suit-condition-version"><name>suit-condition-version</name>

<t>suit-condition-version allows comparing versions of firmware. Verifying image digests is preferred to version checks because digests are more precise. suit-condition-version examines a component's version against the version info specified in suit-parameter-version (<xref target="suit-parameter-version"/>)</t>

</section>
<section anchor="suit-directive-wait"><name>suit-directive-wait</name>

<t>suit-directive-wait directs the manifest processor to pause until a specified event occurs. Some possible events include:</t>

<t><list style="numbers">
  <t>Authorization</t>
  <t>External Power</t>
  <t>Network availability</t>
  <t>Other Device Firmware Version</t>
  <t>Time</t>
  <t>Time of Day</t>
  <t>Day of Week</t>
</list></t>

</section>
<section anchor="suit-directive-override-multiple"><name>suit-directive-override-multiple</name>

<t>This directive enables setting parameters for multiple components at the same time. This allows a small reduction in encoding overhead:</t>

<t><list style="symbols">
  <t>without override-multiple, the encoding for each component consists of:  <list style="symbols">
      <t>set-component-index (2 bytes)</t>
      <t>override-parameters (1 byte + parameter map)</t>
    </list></t>
  <t>with override-multiple, the encoding for each component consists of:  <list style="symbols">
      <t>the component index key (1 byte)</t>
      <t>the parameter map</t>
    </list></t>
</list></t>

<t>Override-multiple requires the command (1-2 bytes) and one additional map to hold the parameter sets (1 byte). For one component, there is no savings. For multiple components, there is an encoding savings of 2 bytes per component.</t>

<t>Proper structuring of code should ensure that override-multiple follows a code-path nearly identical to set-component-index + override-parameters.</t>

<t>This command is purely an encoding alias for set-component-index and override-parameters. The component index is set to the last component listed in the override-multiple argument when override-multiple completes.</t>

<t>The following CDDL defines the argument for suit-directive-override-multiple:</t>

<t><spanx style="verb">CDDL
SUIT_Override_Mult_Arg = {
    uint =&gt; {+ $$SUIT_Parameters}
}
</spanx></t>

</section>
<section anchor="suit-directive-copy-params"><name>suit-directive-copy-params</name>

<t>suit-directive-copy-params enables a manifest author to specify one or more components to copy parameters from, and a list of parameters to copy from each specified source component.</t>

<t>The behaviour is exactly the same as override parameters, but with parameter values defined in existing components. Parameters are only copied between identical keys (no copying from URI to digest, for example).</t>

<t>For each entry in the map, the manifest processor sets the source component to be the component identified by the index contained in the map key. For each parameter identified in the copy list, the manifest processor copies the parameter from the source component to the current component.</t>

<t>The following CDDL defines the argument for suit-directive-copy-params:</t>

<t><spanx style="verb">CDDL
SUIT_Directive_Copy_Params = {
    uint =&gt; [+ int]
}
</spanx></t>

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

<t>IANA is requested to:</t>

<t><list style="symbols">
  <t>allocate key 14 in the SUIT Envelope registry for suit-coswid</t>
  <t>allocate key 14 in the SUIT Manifest registry for suit-coswid</t>
  <t>allocate key 7 in the SUIT Component Text registry for suit-text-version-required</t>
  <t>allocate the commands and parameters as shown in the following tables</t>
</list></t>

<section anchor="suit-commands"><name>SUIT Commands</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>4</c>
      <c>Use Before</c>
      <c><xref target="suit-condition-use-before"/></c>
      <c>25</c>
      <c>Image Not Match</c>
      <c><xref target="suit-condition-image-not-match"/></c>
      <c>26</c>
      <c>Minimum Battery</c>
      <c><xref target="suit-condition-minimum-battery"/></c>
      <c>27</c>
      <c>Update Authorized</c>
      <c><xref target="suit-condition-update-authorized"/></c>
      <c>28</c>
      <c>Version</c>
      <c><xref target="suit-condition-version"/></c>
      <c>29</c>
      <c>Wait For Event</c>
      <c><xref target="suit-directive-wait"/></c>
      <c>34</c>
      <c>Override Multiple</c>
      <c><xref target="suit-directive-override-multiple"/></c>
      <c>35</c>
      <c>Copy Params</c>
      <c><xref target="suit-directive-copy-params"/></c>
</texttable>

</section>
<section anchor="suit-parameters"><name>SUIT Parameters</name>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>4</c>
      <c>Use Before</c>
      <c><xref target="suit-parameter-use-before"/></c>
      <c>26</c>
      <c>Minimum Battery</c>
      <c><xref target="suit-parameter-minimum-battery"/></c>
      <c>27</c>
      <c>Update Priority</c>
      <c><xref target="suit-parameter-update-priority"/></c>
      <c>28</c>
      <c>Version</c>
      <c><xref target="suit-parameter-version"/></c>
      <c>29</c>
      <c>Wait Info</c>
      <c><xref target="suit-parameter-wait-info"/></c>
</texttable>

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

<t>This document extends the SUIT manifest specification. A detailed security treatment can be found in the architecture <xref target="RFC9019"/> and in the information model <xref target="I-D.ietf-suit-information-model"/> documents.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>




<reference anchor='I-D.ietf-sacm-coswid'>
   <front>
      <title>Concise Software Identification Tags</title>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Jessica Fitzgerald-McKay' initials='J.' surname='Fitzgerald-McKay'>
         <organization>National Security Agency</organization>
      </author>
      <author fullname='Charles Schmidt' initials='C.' surname='Schmidt'>
         <organization>The MITRE Corporation</organization>
      </author>
      <author fullname='David Waltermire' initials='D.' surname='Waltermire'>
         <organization>National Institute of Standards and Technology</organization>
      </author>
      <date day='24' month='February' year='2023'/>
      <abstract>
	 <t>ISO/IEC 19770-2:2015 Software Identification (SWID) tags provide an extensible XML-based structure to identify and describe individual software components, patches, and installation bundles.  SWID tag representations can be too large for devices with network and storage constraints.  This document defines a concise representation of SWID tags: Concise SWID (CoSWID) tags.  CoSWID supports a set of semantics and features that are similar to those for SWID tags, as well as new semantics that allow CoSWIDs to describe additional types of information, all in a more memory-efficient format.
	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-sacm-coswid-24'/>
   
</reference>


<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' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg' initials='K.' surname='Zandberg'>
         <organization>Inria</organization>
      </author>
      <author fullname='Øyvind Rønningstad' initials='O.' surname='Rønningstad'>
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day='10' month='September' year='2023'/>
      <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 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-23'/>
   
</reference>

<reference anchor='RFC9019'>
  <front>
    <title>A Firmware Update Architecture for Internet of Things</title>
    <author fullname='B. Moran' initials='B.' surname='Moran'/>
    <author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'/>
    <author fullname='D. Brown' initials='D.' surname='Brown'/>
    <author fullname='M. Meriac' initials='M.' surname='Meriac'/>
    <date month='April' year='2021'/>
    <abstract>
      <t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t>
      <t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9019'/>
  <seriesInfo name='DOI' value='10.17487/RFC9019'/>
</reference>

<reference anchor='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>

<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 title='Informative References'>




<reference anchor='I-D.ietf-suit-information-model'>
   <front>
      <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <date day='8' month='July' year='2021'/>
      <abstract>
	 <t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism that is also suitable for constrained devices. Ensuring that devices function and remain secure over their service lifetime requires such an update mechanism to fix vulnerabilities, update configuration settings, and add new functionality.

 One component of such a firmware update is a concise and machine-processable metadata document, or manifest, that describes the firmware image(s) and offers appropriate protection. This document describes the information that must be present in the manifest.
	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-information-model-13'/>
   
</reference>




    </references>


<section anchor="full-cddl"><name>A. Full CDDL</name>

<t>To be valid, the following CDDL MUST be appended to the SUIT Manifest CDDL. The SUIT CDDL is defined in Appendix A of <xref target="I-D.ietf-suit-manifest"/></t>

<figure><sourcecode type="CDDL"><![CDATA[
$$SUIT_severable-members-extensions //= (
    suit-coswid => bstr)
;    suit-coswid => bstr .cbor concise-swid-tag)

$$severable-manifest-members-choice-extensions //= (
    suit-coswid => bstr .cbor SUIT_Command_Sequence / SUIT_Digest
)

SUIT_Condition //= (
    suit-condition-image-not-match,   SUIT_Rep_Policy)
SUIT_Condition //= (
    suit-condition-use-before,        SUIT_Rep_Policy)
SUIT_Condition //= (
    suit-condition-minimum-battery,   SUIT_Rep_Policy)
SUIT_Condition //= (
    suit-condition-update-authorized, SUIT_Rep_Policy)
SUIT_Condition //= (
    suit-condition-version,           SUIT_Rep_Policy)

SUIT_Directive //= (
    suit-directive-wait,              SUIT_Rep_Policy)

SUIT_Directive //= (
    suit-directive-override-multiple, SUIT_Override_Mult_Arg)
SUIT_Directive //=(
    suit-directive-copy-params,       SUIT_Directive_Copy_Params)


SUIT_Override_Mult_Arg = {
    + uint => {+ $$SUIT_Parameters}
}
SUIT_Directive_Copy_Params = {
    + uint => [+ int]
}

SUIT_Wait_Event = { + SUIT_Wait_Events }

SUIT_Wait_Events //= (suit-wait-event-authorization => int)
SUIT_Wait_Events //= (suit-wait-event-power => int)
SUIT_Wait_Events //= (suit-wait-event-network => int)
SUIT_Wait_Events //= (suit-wait-event-other-device-version
    => SUIT_Wait_Event_Argument_Other_Device_Version)
SUIT_Wait_Events //= (suit-wait-event-time => uint); Timestamp
SUIT_Wait_Events //= (suit-wait-event-time-of-day
    => uint); Time of Day (seconds since 00:00:00)
SUIT_Wait_Events //= (suit-wait-event-day-of-week
    => uint); Days since Sunday

SUIT_Wait_Event_Argument_Other_Device_Version = [
    other-device: bstr,
    other-device-version: [ + SUIT_Parameter_Version_Match ]
]

SUIT_Parameters //= (suit-parameter-use-before => uint)
SUIT_Parameters //= (suit-parameter-minimum-battery => uint)
SUIT_Parameters //= (suit-parameter-update-priority => int)
SUIT_Parameters //= (suit-parameter-version =>
    SUIT_Parameter_Version_Match)
SUIT_Parameters //= (suit-parameter-wait-info =>
    bstr .cbor SUIT_Wait_Event)
SUIT_Parameters //= (suit-parameter-component-metadata =>
    bstr .cbor SUIT_Component_Metadata)

SUIT_Parameter_Version_Match = [
    suit-condition-version-comparison-type:
        SUIT_Condition_Version_Comparison_Types,
    suit-condition-version-comparison-value:
        SUIT_Condition_Version_Comparison_Value
]
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-greater
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-greater-equal
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-equal
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-lesser-equal
SUIT_Condition_Version_Comparison_Types /=
    suit-condition-version-comparison-lesser

suit-condition-version-comparison-greater = 1
suit-condition-version-comparison-greater-equal = 2
suit-condition-version-comparison-equal = 3
suit-condition-version-comparison-lesser-equal = 4
suit-condition-version-comparison-lesser = 5

SUIT_Condition_Version_Comparison_Value = [+int]


SUIT_Component_Metadata = {
    ? suit-meta-default-permissions => SUIT_meta_permissions,
    ? suit-meta-user-permissions => SUIT_meta_permission_map,
    ? suit-meta-group-permissions => SUIT_meta_permission_map,
    ? suit-meta-role-permissions => SUIT_meta_permission_map,
    ? suit-meta-file-type => SUIT_Filetype,
    ? suit-meta-modification-time => CBOR_Datetime,
    ? suit-meta-creation-time => CBOR_Datetime,
    ? suit-meta-creator => SUIT_meta_actor_id,
    * $$SUIT_Component_Metadata_Extensions
}

SUIT_meta_permissions = uint .bits SUIT_meta_permission_bits
SUIT_meta_permission_bits = &(
    write_attr_ex: 13,
    read_attr_ex: 12, 
    sync: 11,
    delete: 10,
    recurse_delete: 9,
    write_attr: 8,
    change_owner: 7,
    change_perm: 6,
    read_perm: 5,
    read_attr: 4,
    creatdir_append: 3,
    list_read: 2,
    create_write: 1,
    traverse_exec: 0,
    * $$SUIT_meta_permission_bits_extensions
)

SUIT_meta_permission_map = {
    + SUIT_meta_actor_id => SUIT_meta_permissions
}

SUIT_meta_actor_id = UUID_Tagged / bstr / str / int
UUID_Tagged = #6.37(bstr)



$$suit-text-component-key-extensions //= (
    suit-text-version-required => tstr)

suit-coswid = 14
suit-condition-use-before        = 4
suit-condition-image-not-match          = 25
suit-condition-minimum-battery          = 26
suit-condition-update-authorized        = 27
suit-condition-version                  = 28

suit-directive-wait                     = 29
suit-directive-override-multiple        = 34
suit-directive-copy-params              = 35

suit-wait-event-authorization        = 1
suit-wait-event-power                = 2
suit-wait-event-network              = 3
suit-wait-event-other-device-version = 4
suit-wait-event-time                 = 5
suit-wait-event-time-of-day          = 6
suit-wait-event-day-of-week          = 7

suit-parameter-use-before        = 4
suit-parameter-minimum-battery   = 26
suit-parameter-update-priority   = 27
suit-parameter-version           = 28
suit-parameter-wait-info         = 29

suit-text-version-required      = 7
]]></sourcecode></figure>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA7U9a1cbyZXf+1fU4jkxxJIMGL9IPLsYcMKJGXsNntkc20cp
qUtSh1a30t0CFNvzW/a37C/b+6pHPwR4HnMmA3RV3bpV933rVqXf70dVUqVm
X71fxLoy6lRnemrmJqvU8XVlsjLJs1JN8kKd5ZPqShdGevLHk6wyRWYqlU/U
+SzJpqXaPHt/cr6FgJKJKasy0qNRYS73FX6/cZoozseZngMycaEnVT8x1aRf
LpOqv6RR/bkb1d9+FI3h0zQvVvuqrOIoShbFvqqKZVntbm8/396NAFcNs5rx
skiqVXSVFxfTIl8uGJPowqzgU7zv1tA/wlmjqKx0Fg91mmeAycqU0SLZj5Qq
JmMTl9Uqla9KVfk4+DXJYkDMfijzoirMpHR/r+a1P6siGbvO43yOi3KtSZYm
mZ/GXFf9NCmrPgAZ5Sl06+d/fAAtsF9zvVjAtgd4DFNzabDTXhTpZTXLC8C+
D234T5JBw8uBOs0Lnck33vKXhclindVa8mIKVPy3roA6++qgmKvXyTypTCzt
Zq6T1A0d0NABUu2/ptgygHU1pv7bQJ3rC73Sc12b/W8mazbUJz87Pnxzqg7f
DHrq9fnRoI7AhckGlYxuzh9leTEHIJcGiXjSPxowW+nxvD/Oy6skrn9HdpsL
72LLu1eHz7d3nsuvz57vwa9Rkk26oeJo15hn/XkemxQG9Pt9pUdAdT2uIhCU
UpULM04myZj6qdiU4yIZgVQZL3VVrqqZYbmxKCmGHcVmAiwSw66qz5+7sf/6
FTZ7ZkoTwtRpml8poDOLlHBIT/5UcYKcOVpWINvwb2wuk7FR+cIUGj8BRvMc
VMCiAORLk66AdbOqyNMIEXWDcUUgQ0jyCibkJYKGWIrmADAn+blALwXLqIZl
mcMk+WUSG6XV3IxnsKhyjiN5e/Gr1yHlqqzMHKaInJY6QWmEDTYFoeK+v0zS
VL2ZgAYCqU9gIhXQC2iULysYEDGqseA4YArOkzhOTRTdU6g0ijxejnFUFL1a
AtAAH1hraSdcBupymekKFhmbuIc7l5mxn6PsqXI5nilddmlV6aMK869lUsAv
GgAwXRDvkamuDMgQkkFIyZTdLLdo/R65Xo1OPbXI02S8UgZ3YSw9cIRexkkF
c8vmEplafCs0Kmni21h3cz2nbkF3XQESepQaZE/GHuHAMos4yXBJV0k1Q7jA
0jn8KELUGnxuIRGYkvkGVg0Ec1sJ38y1noMY2S1bFEmOtqKn0nys0/pOJqXm
DZOvKaBeJXPDuyUcCPsBNKkS4eoVc7IgE0xcmAUYCBoZiFzJ601T4IsGx+Zr
OBY4M7DTCXJAi0gI5M3b85M3Pxy8pp2YL1JiU5y+1pCN0yVIHICxpCmBZ1NT
lrzhVyD0qKuSKdIjHpAoHObZJcoaCS5APDcFbGqe5tNVBLrOgHpeKTS1pdo4
fX92vtHjn+qHN/T7u+P/fn/y7vgIfz/768Hr1+6XSHqc/fXN+9dH/jc/EozC
6fEPRzwYvqrap2jj9ODvG0ygDbvQDbdLYD6XvA+wQbD8Ea4c9hi0G4qlBodE
1DLp2ZeHb//vf3f2QN/+B1iC3Z2d51+/yh/Pdp7uwR9XM5PxbHkGupH/hH1b
RWCljS4QCuhDNdaLBBQjSDwIeznLrzIFm4taJjqIUeryDLqtaCzoDVTZKIiV
31gF6C9LwKuagUsznaHWqq0JbM4fSfz2m44bKSIE3NYyPWZXajw+f4VEu8CJ
yW2Scchd6CDpgsnvuE+dmkrDBDoCJTwHqXErAf3NLcBVF8D/dUVJOsIqSaNL
0NiE/GF+9tPJUQ9+nvKPdyen8PkchFzM5YJ5DmCIViQnCpC6p0i9sHlXn+9Z
Zu7HyRR/cMNX8I9kFqBIZqW0Jnf9fNL3cgc73h/rEoX7gPEKB87zLAEhxg0D
lMz1grX7DHYK4fEYWITavJoloOjnms2nBq4YgXhZXJB/CPhWCJ16AFxWfw6T
ngLNQf2IdOBeIE8hBcHXyErSMkg4h86lTpesg3AMWCOgJmmJH2GRaC5BcSXT
WUW2fblIcTlWD6JVCEYA3ZcF6X5Q3Zc0XDQOKKhCs7qFHoDalV6V6iLLr0qQ
CujtrCMpYURNIUAN2+IsbkjDpCQ3YD4Cpc+boGoWZKBOKruZ2BV0Ejooqssd
2OR93sKNWuNGeeeQnSiY3qTMsaKBQFfMNajKEpztgghEggNLS5gcI/KHxkB8
AD9aEcrvQCsvEuJ79EpY28xNnOgCJHqCQ2GmLK8sQ7dHNvalWi1gz0FXeMcg
I88J7EyJpGuNV3/NrxBnUkTuc6msRlYT8JwRGa0aBAC1WLYxgIZA51rzYpx9
aTZ2mBiACBMf74t4gNcOhrgkHwfDHiR4IBrhR9IMsPGwcShNI/JMJ0IQZHEZ
GMyAQit9ddhbp6gNyaXHkT+Cl4bx7dHDw1SD+cOJZrJzCbFaCXq2ZHd4BHjB
XlQzQkar9+9hkpFG/QxcXZ9zgS4CqJMKWRw0FUV3ABVVaN+R/fO9zu9fZe+7
BzmbQP4FUwuwsf0Yodgs0AHNwOUD3AjaQhcQhMHyLUiWjMD0ff7c3RFsHpJE
mmFTWOX7ZhCe3IHyuARYgM1xuQJ1wF6fyNgiXyxTVDxO3HHdsJML9gQ12Y7h
IfALxOpZNQyEHH0Oa+iCJY9tXzbTi1SPDfsDBtoK2LMFLgIEB2fR6obdJq+G
0ZgUxhAhUZcVKHl5Jsqg9KRg3hLtZTcCGQk0dYIiSNgQy9SxFg1EE3j1Y6cC
mCZDH4Bn1K2gTbSRswDAHksAXJAZ756K1K1fFexoGivpjfoc/gdqxnqZEpNS
sFAswVsEzn4JmwMcT4ZQo0Igl6gn+h4RJ0xDXtSeOmrj44f71/d76v7q/sdP
4MFd0bzhxoHbtASkkKuylbrcGVwr5BWkOKwX/t4dPGbjiPr0cnewTUp3lF8a
9qskwrgiMOCsNJwtb70klvEMKKZgoH7IiTm1+F7UmJAXPh7lBXgbeoqzW0f9
559/jj7M7j99dr8H/31+/5PaV58pk/EUftv4/gUj/efdjegrda65V2+t8JWg
HVyk42WyBOVwRtYoVf4j08qYmAnP9o7WMzIzfZnkS2dQMQsFNHbRgxV9P5ft
4TMLwUS8dbxV8I04G0JDDlDLhrE9MxQ5q2eDvcEzROCGJAboboT3RR0eHb1W
Z44uX8B8gfYG9jEYnX+R/0XvAa+XZpJTl4beQr9pZNtaWs23fv0anSZZMl/O
1Ut0ecA+t2DNuQPoVduhBbDRBaCKD/5WIs0ODDnVufAd2mjWuwDUH0UoWtAu
XcN6FR79pMGinUBM2R5/pSWh1QXBNQIMp4RdGNAG5sS7P/d9WlDbvQC88+k7
Sfn53npCQkiVocpJgEK18GdZOmXsMhTAS3lMoR99X+RlQkobHbUp6JZsaT3Q
0qC1A1kBh8aonedPt/vbO/AvOKLW/RHGJ/2Ak5GOcDiyw4XftXqy1x+h70cB
GYhvaDI4c4bYCBID9R7tOJmeluGtcXDHpjUYMuJcpEeqNBUvXToqy9yUVCav
7aeZGAk/Ct1jv3O6tW8hyg2Em0K02VpSS4a2Bp3sUBeK9StzkiXbygNvW1Pm
13JSOU8LDwmmnesSdCR19G/o215Zqw/lwcCBLC8oOFtA9CUBFTLtAsN/8S3Q
kQYgHJXVlxDnhmMIci2Salmxp5tcJiksAAZapTAyY00MSAICcyUceEia2ea9
OAUPcWwJI4zL+bnYRFQa+264seJPUZo2DNZu2h0xLUDaA79siEoO/h7YrARE
7wpY0IC8YlLUiXI9fTdQryjiJb+jp8D3rDBIgrWliR4lKeL4B3W5TDP0/fnv
SXJteDrwKKbAuxlYzSm7bCz1JXohCUbiy2lX93KOEZVjfTcI3aaJ0RwIS06k
MTTVBWqX9lhOFFDOvmyyBObi9YVh1sS9Juceol6fxwavidKkiAImo4i56gcA
+InCRc7mtcTK8kpLxVrzEUUnQNUxZW8INkVT0upJ5H0Kp98H6qDdX5xV172n
TEJrEFebYz/5s9DZFLV3Ncb0VZcI42S6sLrHhzelKSrPweMleP5ZFfiftFvd
QU2HIDtTusXu32V+AduJLlIHaAwEGYHa3BY6B8bkPQMDcLjM/mheaBJflGav
1uQz2kkM8HrcwRnYfPRPcLV6uGXUgDmYjNLbxES4LS78sRgmVWnSyYCTt/6z
C1mYRG5rdUn5ur8UBv3vgf8VJz3+11Kn+M398trg4mtt/Akm/NGyAXqtNZNy
+PLNOxf4iyouB+qQkEhKOyYGVF0myVptWGCJag0sdTgC924BwyaVZEMsWKvA
aDrrtAqrOFcBnGfD+lByAbECDAUY6N+sb3B5zJ2kPPMx0TpuqKek4YPwhKWE
Q4xqT23QZqmPH3YoHqpImpHdr5LUToJrcOGRLJiytQWFZiQC6KBM+PCsPh3l
FzealMMJe9swJefQhXb4cWfbIwJ2I0DDyfLOYBuisuUCdIyPxDxH7wx2toHm
P5FS5fMjTF8S2SWJ6kBhQOp1X1+I0oNlwkJAu/ueGLeP6UQC81ppwxggo2KU
9Ui9oFXs9h59/DTgj/1i7D/3d8KWEYiTb9r1DTpdzIKWR42WvaCpt4eN0Rql
AgtsHtFwkBkIhY/9nQnWNu5CGdxhlTNJILR3zO98SfHr9D9z68faYN/p7xFQ
nxL+eNw6Ne4Yz6vsaJfnYPd37SRJ1pqkrOUqgYsuAX20Dpm5svaxRL4jY9gj
CWriM4ge8fTA+YWfPRHHLuS+W6d1VnwQ7cm+QSxczZpQR8skje1akFsxEXFA
ZN/sP9rqQahZ4a+7W2zq35nUgB5Wh/BHQhZ2s7+zRcoJXUY+D6I/k0ysECm4
hrfhTnRPaS8R8ltan/gGsj5xDfhQoOCp5RSRtDMntcaYzSfxB7FhR8jwMUZN
E9kocnew3VPvDneCHAvMYlMrQa/BNiE2S6Yz24qmy/bYGVwP1MuVl+h3h7hW
EC1RXXlxUXoM90FUdnvbKHqg5OwKKHMQTM99QPkM1FkyT4BbMK00skRAsgW9
cUbMGTt6tdo7vR4X2Yq8xgmiCNShFucB1D+j+ecvZV2jSzqej7MX5HIvQWml
mF90bpG5pHMBtBGlyNi6UJwNo2V6l4CRLI/LelrkxJCzdk1q0al1zxkplJda
s9WzDT4h4o0ta5DJBes4AqeChJVSeaiYF+DcQ/fCTMGQGjoYw1CDFgqbH6fi
mpbLEvOAdMTZuW9UpEAnURSWoB1xZ009SeuxjQuiAUwFA6OvxEYVxhtC/LsO
hRO1YwPbFVsl3bX1zUgXrQ3sIXEFLQxo9xOCP3j9OvxKAo8FBCU7tYiny3q/
dfyBJ1hJtpTqgRoA8RNBkK1HQv5OmKVvnBajY+2TZ8dWCL+oI396Wkuc0app
rTRnvx7/fUHNCP89Q3h4bn1z/N0EtiChs0Ao5cRCwA14pmhagzJQgqAkuobZ
pu6BVK3Q50x4kAQ7M+izYQAksJCfuJREsuYUVQV2pAUZSz5g9LKFEDVsrssL
bXUCwuPlWK864dUhbW/v0783gekvq/E3gFLvzw9b4BAMQAPTc9EJKsaDXIZz
tszgr5sgrEWoBYVwuRsVC7MsbcFR4Cp2h6d9IqbN2dRE13rInKDzZ8fZGiWo
sHxPJf6IySrakH96jSNKCkcKPiWkwyqXxR+KlRyeEoZdVqgjX9oKwzuypRiR
qxJLMKj+LqPSMm0rlDD8REuBnI7BIGsNdMHdJKxkgzidXA3XPKaMAx3jUuA3
xpghL+xvlJsApoS/50Adp2HlG+ymXqZVkM0q1WZxdb0FbU6fAoWLh0G+a6HB
pw07FHlqbuxAJStdPWip4BOaKMhZu7XZOAOZpGKRBmATAyTCir3FiszNFWg4
8yfgIHPDuQUGJ2NO9uApB8Q6ez3722P32xPS9AWlbHuNONxh5cP9+RL4CvMj
pqJ4Pr5E+gYnODJ0ZMhaIt5ca7jg4xyMxGQBlcEzKQV8d08dMgkte+HEfSHr
Vy7nwa0ANqqX7tBeSg2eL0CQAzFjGYMOATEep+5J4PGhyc2xQALcRMlF8nEk
s0gwHodKrDsytSrHKR3msksCjJmPyvFSjgrB38EQtgsNtq922W6jbZGHuNU5
aJEicY6JxcufnJH3YirnesjK7JQ2hSLTJP4IrBa3/fzzz3S2FZGGQGSGgHpe
DJMY4kcsJhie6+kUhj1kJfRQ8X+BnlHY/ELdezJ49HQTO23xCeI57wOVMtjM
DVbgcCED1i8AQwVFCSz84MRLUpOI2/L/AphzLBbiagqsY4SN2DSD6aBHMozF
3Vs9F1JJy9s3Zyf/Q+1JvEX8SAUT0np+fPxWnR/QN0z1ewZFMf6DOg2Vyjkq
Fb/JtvC4pXgkO+RzOZRPIvlGXeAqSMNedPgpNd8ozvbM8hFIroTBDEVPuQqG
yxjZvZSspcOKjEADKZrNhvKDgA+8EIZj2PV48T0SeWcTjepW1BDXNb34LBm3
0SmII+Hlt14Nwz5yqFzTza0qayfp8FODbiFlyHbPXJsxHjeE47kooTBOr3IO
msiPxWA5BBCUGKKEmk/yuxOJAFhIpVAgw/msVW4lXgduzWH3uhMtST7vRCM5
uiU0BPKCXZzBKAFHvavLEFs6B1MLAPjDJhUCFPtqF7Z0X0GMfL2vtnv09Y/q
u+/WDh76qucoIPV72F+I4nMU2L9Q/eYiJPUpyjhpVSEqbT8TBUlJ9hPrHIN6
VHYqqCPaX2wdc9Uy0tjSD+kDwcw4kSMcVDrU5spFavsvXW2KHgDMuWARVXVA
vGP829U/0mke/BWCCtSrK0K40qt9e3QgngFrLu/HUbokZDIi91pqDxHMC6nb
eKC6VPb3nTxQ2qKOcymMbwyTfFMp4ZVdCu6F2KmePe+t2eevVke+QvN6Tp6N
+zXIfrkVl/5cyJlkLemCvFhRwL5MdUGNpJ753hFQDmLwC0ogo8AGZzR+PhFJ
KXL3cAZyIMvVrL5CveZRLFy1CF04w8JgORf0+WxyOc9z1qwmRDwSWTkz7H54
ZXeSxebaJjODz96XFwfKwZJycJ4kXgvYOg7hQY3zp9Gw0EI8hh5Oy40HEwkA
uSzXzBfViky9jDihIyXVTDqh5m1uR41Wv8GWIJjfdDfqCN5lRzwamBqu1F02
peWweJ3+Vq/SXMfqFXrH4FCc8C2l4MiE/Ey3o5igfrgsi4d0KeThCPyCQFhi
MFYEblZVi3L/4cNxnA1k5ofy89EAB6H3LeBwR/YbQF1nSViFFKXVg46lEUFf
1ryLnMoHAfoaiAOup5/P5RjfqVUStH3LJU3o4WcHtPOjmwknsvtL0YcDjhFL
cMRI7PdC7QStPpUpg7jJMsILNbt/P/junHZQxriffeSwfU+ar3Zm5oibsNgN
Wt+/O4EvG7dRc0OG0CIjhykbS5XM6UyWbhvglgiL3bIZ29+yGRtrKLBx+xYJ
QzU2qFZseCiVfmytGklFd2ZI9kpO4MpWGWHgR3dcSpJ8pbXSaPLk04Hck1Sn
Gs/1TZiv9F74Ewynbysc/GIXosISwkDJYUpQThAF/TfWCEWYEw3So32AFpQW
2vK2rtoraOMT/s0sv9rcUn+23uiAyFp+/OD7fvy0hWjOzPhCnRDb/JDj0lE3
taYgvuqD8eW8VjgPxGBJposVt2wy723KvBBlNTHgDjC7n35NxeP6Yi03vf3w
/YvWPI0x4XLrhUNYBdTe01ahkJsT3BY/crM1r01E11bYqJNsH8M66PJhOMZx
dhvbuyjdZBLKcKLlOaYzji8t24TtXyQHSinOTbBoQBxsgPFvON9g1Cm4UAnq
9xYISUmY/tx38er844fk4yeH3MXHT2r/hbpEJd8nf/qid4lSFvsvSY8EFNAg
YVmsuM64bM+M2S+2z9jY3Aic68WNmKDtv8C5Uvo16aV24vDGVluY6AA8mayC
vJKEdhTpgmJ5efzqzbvjRpkRNg5uENHgsgQP4tAv1aUA1pUtv3K1Uv48VG42
2yqfwl3sMXi/ii85NzHVU0wwV74errOW1ef6Nm+sT96y1WGUEqQAS6cYka+4
KgWNCBdj2uG9MP9tjwS4YMWfU9ROBwaUX4GVzhfeuMlVIbxRIGslDnqypzAa
pehBFzHfGZ24KSlTUoKo3kKTdUUQbQ5p6ML1bOINrSuNZO3ZQQgGyrpRbdaq
1AdPbjY3WxIYidlXSRlGSGwZrX+Ad6zK1k40tfs3bUersvcW3e1ubjeu1+P1
PvjmbobdLxs1wJZWLAFyqFurQA38ILw1BssqkpSv49AxcyYfV/2xAUc7KOwp
w5sedloAQtdpKWWJd+pmGAbIoTR3SkyQaJL2Xqf2TeTKVpDy7MlJVBLWXm1g
7w17tBdgI4XQeP45AWcmkRhFtqNWUXwLBZLGTQuqrL59TDdL3DbQXVi75RJD
W+ncWH99g6WOondSS3xQO0eeFPmcU8hBMSsVycrFQxRQD8byFN1wpdJVylLx
ZZYxvpMS8t8tlyk6VGrzLsVWIBmu6NsXjTP5nY4J14Ao0hEGYsZ3tY1LtWCh
U87xvV1ajVfkQkgimeoQrivCuNU3+iaFYQ+411WkyRmIFCGCmLsSOzqPKeZ8
qZm1LraHQU8pF0YnBiseERlXPYoOVelqz213XHT4tEhrtXa8PNlQhieUoKMc
1oGR9SW1k7wuamuKnNvs4St7/RY2NIqcmTVqgboLh36r8iC6YL/IyzLBcEwq
RPyZ7M6gLnNYtYexHV0ueYv1FlhI94NUUOhLEDypg8dauDfEsEdcD/FKCG1d
5+gxOwXRE/6JzHCkV9HTAf7Av34y5qJrs1qeq2QEXQ+fG5QTtdrlMjz7FI83
SF+IGFIUyR5fWBanpSgfWJBfakHa+6IBQGgGDhNlFDFHjCXzLSx79UqDdmqa
L7qVlI+mWJ0C+OBgnsP7zV01WoFx3aIebppgjZs71EM9CM979WLLovfb4NYo
9Sbc8CqrzL7lOtWQiKI3rcAjOPB1UT+A6duFykMY9ZcgNFYDq1mexo1JKKNv
kWDbjmODC7sVeQZ0QR4Ifok3QLhfB2MEvXVAchmGbCpYYuY/rG+N3tILLu76
p1SXoBNr3X9+9oBtQDsck2NdUk9EXyBcZrBKUTLweMCGQUcHjzzo4gubObc7
jIp1iYVttZXpNNEsJl2AiRIdoNV5BzckJIEu8YoBke+ChS2+2qy9fHC9+E0V
OgVttyOkFCYvB83UEqVmwsySA0WrukWZAHf/4x//8Kc2ll2HGEoPD4qpO7Oh
o7oX36vPD+ypmr9Z+zX6imC61FcQ/rZ0exgaWyUWlNj7t4xspBmWBQXajOp2
IQQPFR94S82ioqDZjiCnimTfm4wyXxbjWvE27bivXsDjGCwKTVe1kye7t8E8
XL5PSshLrLwkEqT5zDVgSPXabk2D8N4y2hFy5aUexdY4e8EATQRaIONVkU7D
hWFOtrKBVU/eM6F0J/qir6zaAyCFu30Gmqa3zs66u4DNLZKDjoaOtOlCdz7M
ciIlY14aULnBAqRaAjEK7iJ5IO6+DdANSboWTdqlRpmvd5+7cO8++P5Vkhbw
dlPGjmynISaOhpI4asrZhwfoRX9ykqXUycEP+BRO7Xr453uJzqh2DRuT0l5E
JOeRLDTadLymQNZqZ89uI50SHmfglYPellrjYuVXws+U3DLeleLedfzT2nB/
BEavE7WBdL4gEcKsJc7pZYpAauwbUd0lvvzgkcVDsvav9QjClC827d19UX5P
1TLaX265Trz7GLq0U9StQY00Bo58Av3a2eXbr/pGu08Rx4488V0u00a7z6Cn
z/muv7cX7T5XHenbNWX+0SPcua5kbWtAy07haNzHeqq1NS6QOrnITQT2uvRX
knjNmwc3E+qmdw1CQr39prcLuonU9U6BJ9LJHV4kQE1jH39taBsbedj336iC
Ji69QDtlXDuzwhe8ILKHaAmtqwVd4TktgZHyukm+zJyW18V4llSGX6ygcjJ8
TVTezZE+4QOU9GBoK8vYelIUAFjs0ZOi1ylHeoyBlzoAA4TvUZKa/3xvAr/3
x3Gcwpack3kDw53EzVNx6m0zu/hcXSZPhrSVJHZl15G1Do5Mao7AAY1PrmHD
bsyZBpVV4ou597T6/NpX2Q8edXz48IXiOqnwBSqwMVzw+Kc1LWqAz7GgvcbM
Qh+b+pWeQmD13XfBfPaRODvxeJZj3fld55dZ7JNEqIiHZ7bG/KESi0knwjCz
dLOJ0hbkNcq0Bz1o6DuzGL6llzu37gzLi3rPnhH/YlgNDfDr8Gqq7t4vhyXa
wi2wC6+G99IEVlf3IaRfBawjeu+OVLY6QHZCDIxEL0Sv0y8DTG+LjB7cGhvd
we170OH48TjU3EM2rdDZ1s75r6Vq9xSZu/lmEsxFZa53G8v3jb5tjL1s9G2j
uq6v0B7ZCkEPAelA2nxI2bchZ9/sHZG7TmhLf6nq90/+8O4bhstVIotmAEky
fc0rTva88K44BteDGpMcta4WNUHevEvAVR8IZLjv+6Sbe63vlh776oPlxDVX
c9Sn6JNgEoSyfm2dp7h2VXca1zyD+abBzSOOGoveMtbmvV98HznlsWYX7gbQ
X5QUkE3D6Gl5N4AdV6DWQPavANoHqLaaVGvQ1bJLtwXp+9cXuGzK1VXVTZED
6h+WGGIlbNm7I3BKo3wL9B9xAPDkHfFQD1/cEZMpP/7wuwHmFzF+e/C/E9iU
Hrv4faGvO33r2D2qlvzGvabaxjtuIPR9dIe+4a7AkL07D4HOj5t+71r2RuF8
QN6DG9IUb+dx/KfyRfFSft6v3c5YU4/fa43Gg+W7DMU7AO3RdGXilw/HKxW/
fLQr73TDsCYfP7T7dl4qwgKd4RGwDr1p3xrTul50l/55UV+EvevQuNXSpu0w
+D+FsU7h73jrhgpgh2B9i6G53lc7jxhBrKYKvu72uPK8XGVj+HOHO0EwDrYF
/t62g/CI1gzt9+e9xhT76hl/4kdNhvlVZuDj09pHRHVfPQnw4C+PG5jtqz0Z
h/sNocGQQ/d9JWvABPMQu+PFIt/TDAkhvGdEH6tCo+CaIV7h+iX3jn77uzK/
8W3IiKJ9l4z1jsWFWd0Q43e//QtoVwy1lghQOy11GPiE8k+HzmwWfinfd/fx
bYVcYecnrelbNSK+89N1lR+tf6Dzs+6Chq5/oPfzZuf2QaDr/GjvpuO0BuRH
j9uvBNSDQdd1Z80TFG1s1z470Zz8bg8UOAI3I7P21I9vfBUi6Pjkxocago5P
W4+X3MCB60OQkJvWxxohG7Wjigb/rA0Vanxz0/vmbol4je7/AYAUFqi7bAAA

-->

</rfc>

