<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-howard-rats-coserv-03" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="CoSERV">Concise Selector for Endorsements and Reference Values</title>
    <seriesInfo name="Internet-Draft" value="draft-howard-rats-coserv-03"/>
    <author initials="P." surname="Howard" fullname="Paul Howard">
      <organization>Arm</organization>
      <address>
        <email>paul.howard@arm.com</email>
      </address>
    </author>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>Linaro</organization>
      <address>
        <email>Thomas.Fossati@linaro.org</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization>Fraunhofer SIT</organization>
      <address>
        <email>henk.birkholz@ietf.contact</email>
      </address>
    </author>
    <author initials="S." surname="Kamal" fullname="Shefali Kamal">
      <organization>Fujitsu</organization>
      <address>
        <email>Shefali.Kamal@fujitsu.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="04"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>RATS</keyword>
    <keyword>attestation</keyword>
    <keyword>endorsement</keyword>
    <keyword>reference value</keyword>
    <abstract>
      <?line 70?>

<t>In the Remote Attestation Procedures (RATS) architecture, Verifiers require Endorsements and Reference Values to assess the trustworthiness of Attesters.
This document specifies the Concise Selector for Endorsements and Reference Values (CoSERV), a structured query/result format designed to facilitate the discovery and retrieval of these artifacts from various providers.
CoSERV defines a query language and corresponding result structure using CDDL, which can be serialized in CBOR format, enabling efficient interoperability across diverse systems.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://rats-endorsements-distribution.github.io/draft-howard-rats-coserv/draft-howard-rats-coserv.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-howard-rats-coserv/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Remote ATtestation ProcedureS Working Group mailing list (<eref target="mailto:rats@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/rats/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/rats/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rats-endorsements-distribution/draft-howard-rats-coserv"/>.</t>
    </note>
  </front>
  <middle>
    <?line 76?>

<section anchor="sec-intro">
      <name>Introduction</name>
      <t>Remote Attestation Procedures (RATS) enable Relying Parties to evaluate the trustworthiness of remote Attesters by appraising Evidence.
This appraisal necessitates access to Endorsements and Reference Values, which are often distributed across multiple providers, including hardware manufacturers, firmware developers, and software vendors.
The lack of standardized methods for querying and retrieving these artifacts poses challenges in achieving seamless interoperability.</t>
      <t>The Concise Selector for Endorsements and Reference Values (CoSERV) addresses this challenge by defining a query language and a corresponding result structure for the transaction of artifacts between a provider and a consumer.
The query language format provides Verifiers with a standard way to specify the environment characteristics of Attesters, such that the relevant artifacts can be obtained from Endorsers and Reference Value Providers.
In turn, the result format allows those Endorsers and Reference Value Providers to package the artifacts within a standard structure.
This facilitates the efficient discovery and retrieval of relevant Endorsements and Reference Values from providers, maximising the re-use of common software tools and libraries within the transactions.</t>
      <t>The CoSERV query language is intended to form the input data type for tools and services that provide access to Endorsements and Reference Values.
The CoSERV result set is intended to form the corresponding output data type from those tools and services.
This document does not define the complete APIs or interaction models for such tools and services.
The scope of this document is limited to the definitions of the query language and the result set only.</t>
      <t>Both the query language and the result set are designed for extensibility.
This addresses the need for a common baseline format to optimise for interoperability and software reuse, while maintaining the flexibility demanded by a dynamic and diverse ecosystem.</t>
      <t>The environment characteristics of Endorsements and Reference Values are derived from the equivalent concepts in CoRIM <xref target="I-D.ietf-rats-corim"/>.
CoSERV therefore borrows heavily from CoRIM, and shares some data types for its fields.
And, like CoRIM, the CoSERV schema is defined using CDDL <xref target="RFC8610"/>. A CoSERV query can be serialized in CBOR <xref target="STD94"/> format.</t>
      <section anchor="terminology-and-requirements-language">
        <name>Terminology and Requirements Language</name>
        <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?>

<t>This document uses terms and concepts defined by the RATS architecture.
For a complete glossary, see <xref section="4" sectionFormat="of" target="RFC9334"/>.</t>
        <t>This document uses terms and concepts defined by the CoRIM specification.
For a complete glossary, see <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.</t>
        <t>This document uses the terms <em>"actual state"</em> and <em>"reference state"</em> as defined in <xref section="2" sectionFormat="of" target="I-D.ietf-rats-endorsements"/>.</t>
        <t>The terminology from CBOR <xref target="STD94"/>, CDDL <xref target="RFC8610"/> and COSE <xref target="STD96"/> applies;
in particular, CBOR diagnostic notation is defined in <xref section="8" sectionFormat="of" target="STD94"/>
and <xref section="G" sectionFormat="of" target="RFC8610"/>. Terms and concepts are always referenced as proper nouns, i.e., with Capital Letters.</t>
      </section>
    </section>
    <section anchor="secaggregation">
      <name>Aggregation and Trust Models</name>
      <t>The roles of Endorser or Reference Value Provider might sometimes be fulfilled by aggregators, which collect from multiple supply chain sources, or even from other aggregators, in order to project a holistic view of the endorsed system.
The notion of such an aggregator is not explicit in the RATS architecture.
In practice, however, supply chains are complex and multi-layered.
Supply chain sources can include silicon manufacturers, device manufacturers, firmware houses, system integrators, service providers and more.
In practical terms, an Attester is likely to be a complex entity, formed of components from across such supply chains.
Evidence would be likewise structured, with contributions from different segments of the Attester's overall anatomy.
A Verifier for such Evidence may find it convenient to contact an aggregator as a single source of truth for Endorsements and Reference Values.
An aggregator would have intelligence about the Attester's complete anatomy and supply chain.
It would have the ability to contact all contributing supply chain actors for their individual Endorsements and Reference Values, before collecting them into a cohesive set, and delivering them to the Verifier as a single, ergonomic package.
In pure RATS terms, an aggregator is still an Endorser or a Reference Value Provider - or, more likely, both.
It is not a distinct role, and so there is no distinctly-modeled conveyance between an aggregator and a Verifier.
However, when consuming from an aggregator, the Verifier may need visibility of the aggregation process, possibly to the extent of needing to audit the results by inspecting the individual inputs that came from the original supply chain actors.
CoSERV addresses this need, catering equally for both aggregating and non-aggregating supply chain sources.</t>
      <t>To support deployments with aggregators, CoSERV allows for flexible trust models as follows.</t>
      <ul spacing="normal">
        <li>
          <t><strong>Shallow Trust</strong>: in this model, the consumer trusts the aggregator, solely and completely, to provide authentic descriptions of the endorsed system.
The consumer does not need to audit the results of the aggregation process.</t>
        </li>
        <li>
          <t><strong>Deep Trust</strong>: in this model, the consumer has a trust relationship with the aggregator, but does not deem this to be sufficient.
The consumer can still use the collected results from the aggregation process, where it is convenient to do so, but also needs to audit those results.</t>
        </li>
      </ul>
      <t>Any given CoSERV transaction can operate according to either model.
The consumer decides which model to use when it forms a query.
The CoSERV result payload can convey both the aggregated result and the audit trail as needed.
The payload size may be smaller when the shallow model is used, but the choice between the two models is a question for implementations and deployments.</t>
      <t>Although CoSERV is designed to support aggregation, it is not a requirement.
When aggregation is not used, CoSERV still fulfills the need for a standard conveyance mechanism between Verifiers and Endorsers or Reference Value Providers.</t>
    </section>
    <section anchor="secinfomodel">
      <name>CoSERV Information Model</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>CoSERV is designed to facilitate query-response transactions between a producer and a consumer.
In the RATS model, the producer is either an Endorser or a Reference Value Provider, and the consumer is a Verifier.
CoSERV defines a single top-level data type that can be used for both queries and result sets.
Queries are authored by the consumer (Verifier), while result sets are authored by the producer (Endorser or Reference Value Provider) in response to the query.
A CoSERV data object always contains a query.
When CoSERV is used to express a result set, the query is retained alongside the result set that was yielded by that query.
This allows consumers to verify a match between the query that was sent to the producer, and the query that was subsequently returned with the result set.
Such verification is useful because it mitigates security threats arising from any untrusted infrastructure or intermediaries that might reside between the producer and the consumer.
An example of this is caching in HTTP <xref target="STD98"/> and CoAP <xref target="RFC7252"/>.
It might be expensive to compute the result set for a query, which would make caching desirable.
However, if caching is managed by an untrusted intermediary, then there is a risk that such an untrusted intermediary might return incorrect results, either accidentally or maliciously.
Pairing the original query with each result set provides an end-to-end contract between the consumer and producer, mitigating such risks.
The transactional pattern between the producer and the consumer would be that the consumer begins the transaction by authoring a query and sending it to the producer as a CoSERV object.
The producer receives the query, computes results, and returns a new CoSERV object formed from the results along with the original query.
Notionally, the producer is "adding" the results to the query before sending it back to the consumer.</t>
      </section>
      <section anchor="secartifacts">
        <name>Artifacts</name>
        <t>Artifacts are what the consumer (Verifier) needs in order to verify and appraise Evidence from the Attester, and therefore they form the bulk of the response payload in a CoSERV transaction.
The common CoSERV query language recognises three artifact types.
These correspond to the three categories of endorsement artifact that can be identified natively in the RATS architecture:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Trust Anchor</strong>: A trust anchor is as defined in <xref target="RFC6024"/>.
An example of a trust anchor would be the public part of the asymmetric signing key that is used by the Attester to sign Evidence, such that the Verifier can verify the cryptographic signature.</t>
          </li>
          <li>
            <t><strong>Endorsed Value</strong>: An endorsed value is as defined in <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.
This represents a characteristic of the Attester that is not directly presented in the Evidence, such as certification data related to a hardware or firmware module.</t>
          </li>
          <li>
            <t><strong>Reference Value</strong>: A reference value is as defined in <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.
A reference value specifies an individual aspect of the Attester's desired state.
Reference values are sometimes informally called "golden values".
An example of a reference value would be the expected hash or checksum of a binary firmware or software image running in the Attester's environment.
Evidence from the Attester would then include claims about the Attester's actual state, which the Verifier can then compare with the reference values at Evidence appraisal time.</t>
          </li>
        </ul>
        <t>When artifacts are produced by an aggregator (see <xref target="secaggregation"/>), the following additional classifications apply:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Collected Artifacts</strong>: these refer to artifacts that were derived by the aggregator by collecting and presenting data from original supply chain sources, or from other aggregators.
Collected artifacts form a single holistic package, and provide the most ergonomic consumption experience for the Verifier.</t>
          </li>
          <li>
            <t><strong>Source Arfifacts</strong>: these refer to artifacts that were obtained directly from the original supply chain sources, and used as inputs into the aggregation process, allowing the aggregator to derive the collected artifacts.</t>
          </li>
        </ul>
        <t>In the shallow trust model of aggregation, only the collected artifacts are used by the consumer.
In the deep trust model, both the collected artifacts and the source artifacts are used.
The source artifacts allow the consumer to audit the collected artifacts and operate the trust-but-verify principle.</t>
      </section>
      <section anchor="secenvironments">
        <name>Environments</name>
        <t>The environment defines the scope (or scopes) in which the endorsement artifacts are applicable.
Given that the consumer of these artifacts is likely to be a Verifier in the RATS model, the typical interpretation of the environment would be that of an Attester that either has produced evidence, or is expected to produce evidence, that the Verifier needs to appraise.
The Verifier consequently needs to query the Endorser or Reference Value Provider for artifacts that are applicable in that environment.
There are three mutually-exclusive methods for defining the environment within a CoSERV query.
Exactly one of these three methods <bcp14>MUST</bcp14> be used for the query to be valid.
All three methods correspond to environments that are also defined within CoRIM <xref target="I-D.ietf-rats-corim"/>.</t>
        <ul spacing="normal">
          <li>
            <t><strong>Class</strong>: A class is an environment that is expected to be common to a group of similarly-constructed Attesters, who might therefore share the same set of endorsed characteristics.
An example of this might be a fleet of computing devices of the same model and manufacturer.</t>
          </li>
          <li>
            <t><strong>Instance</strong>: An instance is an environment that is unique to an individual and identifiable Attester, such as a single computing device or component.</t>
          </li>
          <li>
            <t><strong>Group</strong>: A group is a collection of common Attester instances that are collected together based on some defined semantics.
For example, Attesters may be put into groups for the purpose of anonymity.</t>
          </li>
        </ul>
        <section anchor="secstateful">
          <name>Stateful Environments</name>
          <t>In addition to specifying the Attester environment by class, instance, or group, it is sometimes necessary to constrain the target environment further by specifying aspects of its state.
This is because the applicability of Endorsements and Reference Values might vary, depending on these stateful properties.
Consider, for example, an Attester instance who signs Evidence using a derived attestation key, where the derivation algorithm is dependent on one or more aspects of the Attester's current state, such as the version number of an upgradable firmware component.
This example Attester would, at different points in its lifecycle, sign Evidence with different attestation keys, since the keys would change upon any firmware update.
To provide the correct public key to use as the trust anchor for verification, the Endorser would need to know the configured state of the Attester at the time the Evidence was produced.
Specifying such an Attester solely by its instance identifier is therefore insufficient for the Endorser to supply the correct artifact.
The environment specification would need to include these critical stateful aspects as well.
In CoRIM <xref target="I-D.ietf-rats-corim"/>, stateful environments are modeled as an environment identifier plus a collection of measurements, and CoSERV takes the same approach.
Therefore, any environment selector in a CoSERV query can optionally be enhanced with a collection of one or more measurements, which specify aspects of the target environment state that might materially impact the selection of artifacts.</t>
        </section>
      </section>
      <section anchor="queries">
        <name>Queries</name>
        <t>The purpose of a query is to allow the consumer (Verifier) to specify the artifacts that it needs.
The information that is conveyed in a CoSERV query includes the following:</t>
        <ul spacing="normal">
          <li>
            <t>A specification of the required artifact type: Reference Value, Endorsed Value or Trust Anchor.
See <xref target="secartifacts"/> for definitions of artifact types.
A single CoSERV query can only specify a single artifact type.</t>
          </li>
          <li>
            <t>A specification of the Attester's environment.
Environments can be selected according to Attester instance, group or class.
Additional properties of the environment state can be specified by adding one or more measurements to the selector.
See <xref target="secenvironments"/> for full definitions.
To facilitate efficient transactions, a single query can specify either multiple instances, multiple groups or multiple classes.
However, it is not possible to mix instance-based selectors, group-based selectors and class-based selectors in a single query.</t>
          </li>
          <li>
            <t>A timestamp, denoting the time at which the CoSERV query was sent.</t>
          </li>
          <li>
            <t>A switch to select the desired supply chain depth.
A CoSERV query can request collected artifacts, source artifacts, or both.
This switch is especially relevant when the CoSERV query is fulfilled by an aggregator.
The collected artifacts are intended for convenient consumption (according to the shallow trust model), while the source artifacts are principally useful for auditing (according to the deep trust model).
It is possible for a query to select for source artifacts only, without the collected artifacts.
This might happen when the consumer needs to inspect or audit artifacts from across the deep supply chain, while not requiring the convenience of the aggregated view.
It could also happen when the consumer is acting as an intermediate broker, gathering artifacts for delivery to another aggregator.
See <xref target="secaggregation"/> for details on aggregation, auditing and trust models.</t>
          </li>
        </ul>
      </section>
      <section anchor="result-sets">
        <name>Result Sets</name>
        <t>The result set contains the artifacts that the producer collected in response to the query.
The top-level structure of the result set consists of the following three items:</t>
        <ul spacing="normal">
          <li>
            <t>A collection of one or more result entries.
This will be a collection of either reference values, endorsed values or trust anchors.
See <xref target="secartifacts"/> for definitions of artifact types.
In the future, it may be possible to support additional artifact types via an extension mechanism.
Artifact types are never mixed in any single CoSERV result set.
The artifacts in the result collection therefore <bcp14>MUST</bcp14> match the single artifact type specified in the original CoSERV query.</t>
          </li>
          <li>
            <t>A timestamp indicating the expiry time of the entire result set.
Consumers <bcp14>MUST NOT</bcp14> consider any part of the result set to be valid after this expiry time.</t>
          </li>
          <li>
            <t>A collection of the original source materials from which the producer derived the correct artifacts to include in the result set.
These source materials are optional, and their intended purpose is auditing.
They are included only when requested by the original CoSERV query.
Source materials would typically be requested in cases where the consumer is not willing to place sole trust in the producer, and therefore needs an audit trail to enable additional verifications.</t>
          </li>
        </ul>
        <t>Each individual result entry combines a CoMID triple with an authority delegation chain.
CoMID triples are exactly as defined in <xref section="5.1.4" sectionFormat="of" target="I-D.ietf-rats-corim"/>.
Each CoMID triple will demonstrate the association between an environment matching that of the CoSERV query, and a single artifact such as a reference value, trust anchor or endorsed value.
The authority delegation chain is composed of one or more authority delegates.
Each authority delegate is represented by a public key or key identifier, which the consumer can check against its own set of trusted authorities.
The authority delegation chain serves to establish the provenance of the result entry, and enables the Verifier to evaluate the trustworthiness of the associated artifact.
The purpose of the authority delegation chain is to allow CoSERV responses to support decentralized trust models, where Verifiers may apply their own policy to determine which authorities are acceptable for different classes of artifact.</t>
        <t>Because each result entry combines a CoMID triple with an authority delegation chain, the entries are consequently known as quadruples (or "quads" for short).</t>
      </section>
    </section>
    <section anchor="secdatamodel">
      <name>CoSERV Data Model</name>
      <t>This section specifies the CBOR data model for CoSERV queries and result sets.</t>
      <t>CDDL is used to express rules and constraints of the data model for CBOR.
These rules must be strictly followed when creating or validating CoSERV data objects.</t>
      <t>The top-level CoSERV data structure is given by the following CDDL:</t>
      <sourcecode type="cddl"><![CDATA[
;# import comid-autogen

coserv = {
  &(profile: 0) => profile
  &(query: 1) => query
  ? &(results: 2) => results
}

profile = comid.oid-type / ~uri
]]></sourcecode>
      <section anchor="common-data-types">
        <name>Common Data Types</name>
        <t>CoSERV inherits the following types from the CoRIM data model <tt>class-map</tt>, <tt>$class-id-type-choice</tt>, <tt>$instance-id-type-choice</tt> and <tt>$group-id-type-choice</tt>.</t>
        <t>The collated CDDL is in <xref target="collated-cddl"/>.</t>
      </section>
      <section anchor="profile">
        <name>Profile</name>
        <t>In common with EAT and CoRIM, CoSERV supports the notion of profiles.
As with EAT and CoRIM, profiles are a way to extend or specialize the structure of a generic CoSERV query in order to cater for a specific use case or environment.</t>
        <t>In a CoSERV query, the profile can be identified by either a Uniform Resource Identifier (URI) or an Object Identifier (OID).
This convention is identical to how EAT profiles are identified using the <tt>eat_profile</tt> claim as described in <xref section="4.3.2" sectionFormat="of" target="I-D.ietf-rats-eat"/>.</t>
      </section>
      <section anchor="query-structure">
        <name>Query Structure</name>
        <t>The CoSERV query language enables Verifiers to specify the desired characteristics of Endorsements and Reference Values based on the environment in which they are applicable.</t>
        <t>The top-level structure of a CoSERV query is given by the following CDDL:</t>
        <sourcecode type="cddl"><![CDATA[
query = {
  &(artifact-type: 0) => artifact-type
  &(environment-selector: 1) => environment-selector-map
  &(timestamp: 2) => tdate ; RFC3339 date
  &(result-type: 3) => result-type
}

artifact-type = &(endorsed-values: 0)
                / &(trust-anchors: 1)
                / &(reference-values: 2)

result-type = &(collected-artifacts: 0)
              / &(source-artifacts: 1)
              / &(both: 2)
]]></sourcecode>
        <t>The meanings of these fields are detailed in the following subsections.</t>
        <section anchor="artifact-type">
          <name>Artifact Type</name>
          <t>The <tt>artifact-type</tt> field is the foremost discriminator of the query.
It is a top-level category selector. Its three permissible values are <tt>trust-anchors</tt> (codepoint 1), <tt>endorsed-values</tt> (codepoint 0) and <tt>reference-values</tt> (codepoint 2).</t>
          <t>See <xref target="secartifacts"/> for full definitions of artifact types.</t>
          <t>It is expected that implementations might choose to store these different categories of artifacts in different top-level stores or database tables.
Where this is the case, the <tt>artifact-type</tt> field serves to narrow the query down to the correct store or table.
Even where this is not the case, the discriminator is useful as a filter for the consumer, resulting in an efficiency gain by avoiding the transfer of unwanted data items.</t>
        </section>
        <section anchor="environment-selector">
          <name>Environment Selector</name>
          <t>The environment selector forms the main body of the query, and its CDDL is given below:</t>
          <sourcecode type="cddl"><![CDATA[
;# import comid-autogen

environment-selector-map = { selector }

selector //= ( &(class: 0) => [
  + ( comid.class-map, ? [ + comid.measurement-map ] )
] )

selector //= ( &(instance: 1) => [
  + ( comid.$instance-id-type-choice, ? [ + comid.measurement-map ] )
] )

selector //= ( &(group: 2) => [
  + ( comid.$group-id-type-choice, ? [ + comid.measurement-map ] )
] )
]]></sourcecode>
          <t>Environments can be specified according to instance, group or class. See <xref target="secenvironments"/> for details.</t>
          <t>Although these three environment definitions are mutually-exclusive in a CoSERV query, all three support multiple entries.
This is to gain efficiency by allowing the consumer (Verifier) to query for multiple artifacts in a single transaction.
For example, where artifacts are being indexed by instance, it would be possible to specify an arbitrary number of instances in a single query, and therefore obtain the artifacts for all of them in a single transaction.
Likewise for classes and groups.
However, it would not be possible for a single query to specify more than one kind of environment.
For example, it would not be possible to query for both class-level and instance-level artifacts in a single CoSERV transaction.</t>
          <t>All three environment selector types can optionally be enhanced with one or more <tt>measurement-map</tt> entries, which are used to express aspects of the environment state.
See <xref target="secstateful"/> for a description of stateful environments.</t>
          <section anchor="selector-semantics">
            <name>Selector Semantics</name>
            <t>When multiple environment selectors are present in a single query, such as multiple instances or multiple groups, the implementation of the artifact producer <bcp14>MUST</bcp14> consider these to be alternatives, and hence use a logical <tt>OR</tt> operation when applying the query to its internal data stores.</t>
            <t>Below is an illustrative example of how a CoSERV query for endorsed values, selecting for multiple Attester instances, might be transformed into a semantically-equivalent SQL database query:</t>
            <sourcecode type="sql"><![CDATA[
SELECT *
  FROM endorsed_values
 WHERE ( instance-id = "At6tvu/erQ==" ) OR
       ( instance-id = "iZl4ZVY=" )`
]]></sourcecode>
            <t>The same applies for class-based selectors; however, since class selectors are themselves composed of multiple inner fields, the implementation of the artifact producer <bcp14>MUST</bcp14> use a logical <tt>AND</tt> operation in consideration of the inner fields for each class.</t>
            <t>Also, for class-based selectors, any unset fields in the class are assumed to be wildcard (<tt>*</tt>), and therefore match any value.</t>
            <t>Below is an illustrative example of how a CoSERV query for reference values, selecting for multiple Attester classes, might be transformed into a semantically-equivalent SQL database query:</t>
            <sourcecode type="sql"><![CDATA[
SELECT *
  FROM reference_values
 WHERE ( class-id = "iZl4ZVY=" AND class-vendor = "ACME Inc." ) OR
       ( class-id = "31fb5abf-023e-4992-aa4e-95f9c1503bfa" )
]]></sourcecode>
          </section>
        </section>
        <section anchor="timestamp">
          <name>Timestamp</name>
          <t>The <tt>timestamp</tt> field records the date and time at which the query was made, formatted according to <xref section="3.4.1" sectionFormat="of" target="STD94"/>.
Implementations <bcp14>SHOULD</bcp14> populate this field with the current date and time when forming a CoSERV query.</t>
        </section>
        <section anchor="result-type">
          <name>Result Type</name>
          <t>The <tt>result-type</tt> field selects for either <tt>collected-artifacts</tt> (codepoint 0), <tt>source-artifacts</tt> (codepoint 1) or <tt>both</tt> (codepoint 2).
See <xref target="secaggregation"/> for definitions of source and collected artifacts.</t>
        </section>
      </section>
      <section anchor="result-set-structure">
        <name>Result Set Structure</name>
        <t>The result set structure is given by the following CDDL:</t>
        <sourcecode type="cddl"><![CDATA[
;# import cmw-autogen
;# import comid-autogen

results = {
  result-set
  &(expiry: 10) => tdate ; RFC3339 date
  ? &(source-artifacts: 11) => [ + cmw.cbor-record ]
}

result-set //= reference-values
result-set //= endorsed-values
result-set //= trust-anchors
result-set //= $$result-set-extensions

refval-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(rv-triple: 2) => comid.reference-triple-record
}

reference-values = (
  &(rvq: 0) => [ * refval-quad ]
)

endval-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(ev-triple: 2) => comid.endorsed-triple-record
}

cond-endval-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(ce-triple: 2) => comid.conditional-endorsement-triple-record
}

endorsed-values = (
  &(evq: 1) => [ * endval-quad ]
  &(ceq: 2) => [ * cond-endval-quad ]
)

ak-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(ak-triple: 2) => comid.attest-key-triple-record
}

cots-stmt = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(cots: 2) => cots
}

trust-anchors = (
  &(akq: 3) => [ * ak-quad ]
  &(tas: 4) => [ * cots-stmt ]
)

;
; import CoTS
;
cots = "TODO COTS"
]]></sourcecode>
      </section>
      <section anchor="encoding-requirements">
        <name>Encoding Requirements</name>
        <t>Implementations may wish to use serialized CoSERV queries as canonical identifiers for artifact collections.
For example, a Reference Value Provider service may wish the cache the results of a CoSERV query to gain efficiency when responding to a future identical query.
For these use cases to be effective, it is essential that any given CoSERV query is always serialized to the same fixed sequence of CBOR bytes.
Therefore, CoSERV queries <bcp14>MUST</bcp14> always use CBOR deterministic encoding as specified in <xref section="4.2" sectionFormat="of" target="STD94"/>.
Further, CoSERV queries <bcp14>MUST</bcp14> use CBOR definite-length encoding.</t>
      </section>
      <section anchor="signed-coserv">
        <name>Cryptographic Binding Between Query and Result Set</name>
        <t>CoSERV is designed to ensure that any result set passed from a producer to a consumer is precisely the result set that corresponds to the consumer's original query.
This is the reason why the original query is always included along with the result set in the data model.
However, this measure is only sufficient in cases where the conveyance protocol guarantees that CoSERV result sets are always transacted over a secure channel without any untrusted intermediaries.
Wherever this is not the case, producers <bcp14>MUST</bcp14> create an additional cryptographic binding between the query and the result.
This is achieved by transacting the result set within a cryptographic envelope, with a signature added by the producer, which is verified by the consumer.
A CoSERV data object can be signed using COSE <xref target="STD96"/>.
A <tt>signed-coserv</tt> is a <tt>COSE_Sign1</tt> with the following layout:</t>
        <sourcecode type="cddl"><![CDATA[
signed-coserv = [
  protected: bytes .cbor signed-coserv-protected-hdr
  unprotected: signed-coserv-unprotected-hdr
  payload: bytes .cbor coserv
  signature: bytes
]
]]></sourcecode>
        <t>The payload <bcp14>MUST</bcp14> be the CBOR-encoded CoSERV.</t>
        <sourcecode type="cddl"><![CDATA[
signed-coserv-protected-hdr = {
  1 => int                            ; alg
  2 => "application/coserv+cbor" / 10000 ; cty
  * cose.label => cose.values
}

signed-coserv-unprotected-hdr = {
  * cose.label => cose.values
}

cose.label = int / text
cose.values = any
]]></sourcecode>
        <t>The protected header <bcp14>MUST</bcp14> include the signature algorithm identifier.
The protected header <bcp14>MUST</bcp14> include either the content type <tt>application/coserv+cbor</tt> or the CoAP Content-Format TBD1.
Other header parameters <bcp14>MAY</bcp14> be added to the header buckets, for example a <tt>kid</tt> that identifies the signing key.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="query-data-examples">
        <name>Query Data Examples</name>
        <t>This section provides some illustrative examples of valid CoSERV query objects.</t>
        <t>The following example shows a query for Reference Values scoped by a single class.
The <tt>artifact-type</tt> is set to 2 (<tt>reference-values</tt>), indicating a query for Reference Values.
The <tt>profile</tt> is given the example value of <tt>tag:example.com,2025:cc-platform#1.0.0</tt>.
Finally, the <tt>environment-selector</tt> uses the key 0 to select for class, and the value contains a single entry with illustrative settings for the identifier, vendor and model.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [
        {
          / class-id /  0: 560(h'00112233'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        }
      ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 1 / source-material /
  }
}
]]></sourcecode>
        <t>The next example is similar, but adds a second entry to the set of classes in the <tt>environment-map</tt>, showing how multiple classes can be queried at the same time.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [
        {
          / class-id /  0: 560(h'8999786556'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        },
        {
          / class-id /  0:
            37(h'31FB5ABF023E4992AA4E95F9C1503BFA')  / UUID /
        }
      ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 2 / both collected and source material /
  }
}
]]></sourcecode>
        <t>The following example shows a query for Reference Values scoped by instance.
Again, the <tt>artifact-type</tt> is set to 2, and <tt>profile</tt> is given a demonstration value. The <tt>environment-selector</tt> now uses the key 1 to select for instances, and the value contains two entries with example instance identifiers.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type / 0: 2, / reference-values /
    / environment-selector /  1: {
      / instance / 1: [
        550(h'02DEADBEEFDEAD'), / UEID /
        560(h'8999786556')      / tagged-bytes /
      ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 0 / collected material /
  }
}
]]></sourcecode>
      </section>
      <section anchor="result-data-examples">
        <name>Result Data Examples</name>
        <t>This section provides some illustrative examples of valid CoSERV queries with their corresponding result sets.</t>
        <t>In this next example, the query is a reference value query based on class.</t>
        <t>The top-level structure is a map with three entries: <tt>profile</tt> (codepoint 0), <tt>query</tt> (codepoint 1) and <tt>results</tt> (codepoint 2).</t>
        <t>The profile and query structures are the same as in the previous examples.
The result structure is a map with two entries: <tt>expiry</tt> (codepoint 10) and <tt>rvq</tt> (codepoint 0).
The <tt>rvq</tt> (reference value quad) entry comprises the asserting authority and the asserted triples.
A single reference-value triple is shown in this example.
Its <tt>environment-map</tt>, as expected, is the same as the <tt>environment-map</tt> that was supplied in the query.
The rest of the structure is the <tt>measurement-map</tt> as defined in CoRIM <xref target="I-D.ietf-rats-corim"/>.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query / 1: {
    0: 2,
    1: {
      0: [
        {
          0: 560(h'8999786556')
        }
      ]
    },
    2: 0("2030-12-01T18:30:01Z"),
    3: 0
  },
  / results / 2: {
    0: [
      {
        1: [ 560(h'abcdef') ],
        2: [
          {
            0: {
              0: 560(h'8999786556')
            }
          },
          [
            {
              0: 37(h'31FB5ABF023E4992AA4E95F9C1503BFA'),
              1: {
                / version / 0: {
                  0: "1.2.3",
                  1: 16384
                },
                / svn / 1: 553(2)
              }
            }
          ]
        ]
      }
    ],
    10: 0("2030-12-13T18:30:02Z")
  }
}
]]></sourcecode>
        <t>The following example is for a query that requested the results be provided in the "source artifacts" format.
This means one or more original signed manifests containing information that satisfies the query criteria.</t>
        <t>Compared with the previous example, the <tt>rvq</tt> entry is empty, while the <tt>source-artifacts</tt> (codepoint 11) contain two CMW records <xref target="I-D.ietf-rats-msg-wrap"/>, each of which contains a (made up) manifest with the type "application/vnd.example.refvals".</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [
        {
          / class-id /  0: 560(h'00112233'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        }
      ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 1 / source-artifacts /
  },
  / results / 2: {
    / rvq / 0: [ ],
    / expiry / 10: 0("2030-12-13T18:30:02Z"),
    / source artifacts / 11: [
      [ "application/vnd.example.refvals", h'afaeadac' ],
      [ "application/vnd.example.refvals", h'adacabaa' ]
    ]
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t><cref anchor="rfced">RFC Editor:</cref> please remove this section prior to publication.</t>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>.
The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.
Please note that the listing of any individual implementation here does not imply endorsement by the IETF.
Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a catalog of available implementations or their features.
Readers are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.
It is up to the individual working groups to use this information as they see fit".</t>
      <section anchor="veraison">
        <name>Veraison</name>
        <t>Responsible Organisation: Veraison (open source project within the Confidential Computing Consortium).</t>
        <t>Location: https://github.com/veraison</t>
        <t>Description: Veraison provides components that can be used to build a Verifier, and also exemplifies adjacent RATS roles such as the Relying Party.
There is an active effort to extend Veraison so that it can act in the capacity of an Endorser or Reference Value Provider, showing how CoSERV can be used as a query language for such services.
This includes library code to assist with the creation, parsing and manipulation of CoSERV queries.</t>
        <t>Level of Maturity: This is a proof-of-concept prototype implementation.</t>
        <t>License: Apache-2.0.</t>
        <t>Coverage: This implementation covers all aspects of the CoSERV query language.</t>
        <t>Contact: Thomas Fossati, Thomas.Fossati@linaro.org</t>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>The CoSERV data type serves an auxiliary function in the RATS architecture.
It does not directly convey Evidence, Endorsements, Reference Values, Policies or Attestation Results.
CoSERV exists only to facilitate the interactions between the Verifier and the Endorser or Reference Value Provider roles.
Consequently, there are fewer security considerations for CoSERV, particularly when compared with data objects such as EAT or CoRIM.</t>
      <t>Certain security characteristics are desirable for interactions between the Verifier and the Endorser or Reference Value Provider.
However, these characteristics would be the province of the specific implementations of these roles, and of the transport protocols in between them.
They would not be the province of the CoSERV data object itself.
Examples of such desirable characteristics might be:</t>
      <ul spacing="normal">
        <li>
          <t>The Endorser or Reference Value Provider is available to the Verifier when needed.</t>
        </li>
        <li>
          <t>The Verifier is authorised to query data from the Endorser or Reference Value Provider.</t>
        </li>
        <li>
          <t>Queries cannot be intercepted or undetectably modified by an entity that is interposed between the Verifier and the Endorser or Reference Value Provider.</t>
        </li>
      </ul>
      <section anchor="forming-native-database-queries-from-coserv">
        <name>Forming Native Database Queries from CoSERV</name>
        <t>Implementations should take care when transforming CoSERV queries into native query types that are compatible with their underlying storage technology (such as SQL queries).
There is a risk of injection attacks arising from poorly-formed or maliciously-formed CoSERV queries.
Implementations must ensure that suitable sanitization procedures are in place when performing such translations.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>A CoSERV query can potentially contain privacy-sensitive information.
Specifically, the <tt>environment-selector</tt> field of the query may reference identifiable Attester instances in some cases.
This concern naturally also extends to the data objects that might be returned to the consumer in response to the query, although the specifications of such data objects are beyond the scope of this document.
Implementations should ensure that appropriate attention is paid to this.
Suitable mitigations include the following:</t>
      <ul spacing="normal">
        <li>
          <t>The use of authenticated secure channels between the producers and the consumers of CoSERV queries and returned artifacts.</t>
        </li>
        <li>
          <t>Collating Attester instances into anonymity groups, and referencing the groups rather than the individual instances.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t><cref anchor="rfced_1">RFC Editor:</cref> replace "RFCthis" with the RFC number assigned to this document.</t>
      <section anchor="media-types-registrations">
        <name>Media Types Registrations</name>
        <t>IANA is requested to add the following media types to the "Media Types" registry <xref target="IANA.media-types"/>.</t>
        <table anchor="tab-mc-regs">
          <name>CoSERV Media Types</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">
                <tt>coserv+cbor</tt></td>
              <td align="left">
                <tt>application/coserv+cbor</tt></td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv+cose</tt></td>
              <td align="left">
                <tt>application/coserv+cose</tt></td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <section anchor="applicationcoservcbor">
          <name><tt>application/coserv+cbor</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv+cbor</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" (CoSERV profile in string format.  OIDs must use the dotted-decimal notation.)</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (CBOR)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/cbor". (No fragment identification syntax is currently defined for "application/cbor".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</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="applicationcoservcose">
          <name><tt>application/coserv+cose</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t><tt>application</tt></t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t><tt>coserv+cose</tt></t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a (cose-type is explicitly not supported, as it is understood to be "cose-sign1")</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" CoSERV profile in string format.
OIDs must use the dotted-decimal notation.
Note that the <tt>cose-type</tt> parameter is explicitly not supported, as it is understood to be <tt>"cose-sign1"</tt>.</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration?</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="coap-content-formats">
        <name>CoAP Content-Formats</name>
        <t>IANA is requested to register the following Content-Format IDs in the "CoAP Content-Formats" registry, within the "Constrained RESTful Environments (CoRE) Parameters" registry group <xref target="IANA.core-parameters"/>:</t>
        <table align="left">
          <name>New CoAP Content Formats</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/coserv+cbor</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">application/coserv+cose</td>
              <td align="left">-</td>
              <td align="left">TBD2</td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <t>If possible, TBD1 and TBD2 should be assigned in the 256..9999 range.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="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>
        <reference anchor="STD96">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="STD94">
          <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="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="I-D.ietf-rats-corim">
          <front>
            <title>Concise Reference Integrity Manifest</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>arm</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Intel</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   Remote Attestation Procedures (RATS) enable Relying Parties to assess
   the trustworthiness of a remote Attester and therefore to decide
   whether or not to engage in secure interactions with it.  Evidence
   about trustworthiness can be rather complex and it is deemed
   unrealistic that every Relying Party is capable of the appraisal of
   Evidence.  Therefore that burden is typically offloaded to a
   Verifier.  In order to conduct Evidence appraisal, a Verifier
   requires not only fresh Evidence from an Attester, but also trusted
   Endorsements and Reference Values from Endorsers and Reference Value
   Providers, such as manufacturers, distributors, or device owners.
   This document specifies the information elements for representing
   Endorsements and Reference Values in CBOR format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-corim-07"/>
        </reference>
        <reference anchor="I-D.ietf-rats-msg-wrap">
          <front>
            <title>RATS Conceptual Messages Wrapper (CMW)</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Intel</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Dionna Glaze" initials="D." surname="Glaze">
              <organization>Google LLC</organization>
            </author>
            <date day="3" month="July" year="2025"/>
            <abstract>
              <t>   The Remote Attestation Procedures architecture (RFC 9334) defines
   several types of conceptual messages, such as Evidence, Attestation
   Results, Endorsements, and Reference Values.  These messages can
   appear in different formats and be transported via various protocols.

   This document introduces the Conceptual Message Wrapper (CMW) that
   provides a common structure to encapsulate these messages.  It
   defines a dedicated CBOR tag, corresponding JSON Web Token (JWT) and
   CBOR Web Token (CWT) claims, and an X.509 extension.

   This allows CMWs to be used in CBOR-based protocols, web APIs using
   JWTs and CWTs, and PKIX artifacts like X.509 certificates.
   Additionally, the draft defines a media type and a CoAP content
   format to transport CMWs over protocols like HTTP, MIME, and CoAP.

   The goal is to improve the interoperability and flexibility of remote
   attestation protocols.  By introducing a shared message format like
   the CMW, we can consistently support different attestation message
   types, evolve message serialization formats without breaking
   compatibility, and avoid having to redefine how messages are handled
   in each protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-msg-wrap-16"/>
        </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>
        <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <referencegroup anchor="STD98" target="https://www.rfc-editor.org/info/std98">
          <reference anchor="RFC9111" target="https://www.rfc-editor.org/info/rfc9111">
            <front>
              <title>HTTP Caching</title>
              <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
              <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
              <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
              <date month="June" year="2022"/>
              <abstract>
                <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
                <t>This document obsoletes RFC 7234.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="98"/>
            <seriesInfo name="RFC" value="9111"/>
            <seriesInfo name="DOI" value="10.17487/RFC9111"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC6024">
          <front>
            <title>Trust Anchor Management Requirements</title>
            <author fullname="R. Reddy" initials="R." surname="Reddy"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>A trust anchor represents an authoritative entity via a public key and associated data. The public key is used to verify digital signatures, and the associated data is used to constrain the types of information for which the trust anchor is authoritative. A relying party uses trust anchors to determine if a digitally signed object is valid by verifying a digital signature using the trust anchor's public key, and by enforcing the constraints expressed in the associated data for the trust anchor. This document describes some of the problems associated with the lack of a standard trust anchor management mechanism and defines requirements for data formats and push-based protocols designed to address these problems. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6024"/>
          <seriesInfo name="DOI" value="10.17487/RFC6024"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="I-D.ietf-rats-endorsements">
          <front>
            <title>RATS Endorsements</title>
            <author fullname="Dave Thaler" initials="D." surname="Thaler">
              <organization>Armidale Consulting</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   In the IETF Remote Attestation Procedures (RATS) architecture, a
   Verifier accepts Evidence and, using Appraisal Policy typically with
   additional input from Endorsements and Reference Values, generates
   Attestation Results in formats that are useful for Relying Parties.
   This document illustrates the purpose and role of Endorsements and
   discusses some considerations in the choice of message format for
   Endorsements in the scope of the RATS architecture.

   This document does not aim to define a conceptual message format for
   Endorsements and Reference Values.  Instead, it extends RFC9334 to
   provide further details on Reference Values and Endorsements, as
   these topics were outside the scope of the RATS charter when RFC9334
   was developed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-endorsements-06"/>
        </reference>
        <reference anchor="I-D.ietf-rats-eat">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <author fullname="Giridhar Mandyam" initials="G." surname="Mandyam">
              <organization>Mediatek USA</organization>
            </author>
            <author fullname="Jeremy O'Donoghue" initials="J." surname="O'Donoghue">
              <organization>Qualcomm Technologies Inc.</organization>
            </author>
            <author fullname="Carl Wallace" initials="C." surname="Wallace">
              <organization>Red Hound Software, Inc.</organization>
            </author>
            <date day="6" month="September" year="2024"/>
            <abstract>
              <t>   An Entity Attestation Token (EAT) provides an attested claims set
   that describes state and characteristics of an entity, a device like
   a smartphone, IoT device, network equipment or such.  This claims set
   is used by a relying party, server or service to determine the type
   and degree of trust placed in the entity.

   An EAT is either a CBOR Web Token (CWT) or JSON Web Token (JWT) with
   attestation-oriented claims.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-eat-31"/>
        </reference>
      </references>
    </references>
    <?line 899?>

<section anchor="collated-cddl">
      <name>Collated CoSERV CDDL</name>
      <artwork><![CDATA[
;# import comid-autogen

coserv = {
  &(profile: 0) => profile
  &(query: 1) => query
  ? &(results: 2) => results
}

profile = comid.oid-type / ~uri

;# import comid-autogen

environment-selector-map = { selector }

selector //= ( &(class: 0) => [
  + ( comid.class-map, ? [ + comid.measurement-map ] )
] )

selector //= ( &(instance: 1) => [
  + ( comid.$instance-id-type-choice, ? [ + comid.measurement-map ] )
] )

selector //= ( &(group: 2) => [
  + ( comid.$group-id-type-choice, ? [ + comid.measurement-map ] )
] )

concise-mid-tag = {
  ? &(language: 0) => text
  &(tag-identity: 1) => tag-identity-map
  ? &(entities: 2) => [ + comid-entity-map ]
  ? &(linked-tags: 3) => [ + linked-tag-map ]
  &(triples: 4) => triples-map
  * $$concise-mid-tag-extension
}

attest-key-triple-record = [
  environment: environment-map
  key-list: [ + $crypto-key-type-choice ]
  ? conditions: non-empty< {
    ? &(mkey: 0) => $measured-element-type-choice,
    ? &(authorized-by: 1) => [ + $crypto-key-type-choice ]
  }>
]

$class-id-type-choice /= tagged-oid-type
$class-id-type-choice /= tagged-uuid-type
$class-id-type-choice /= tagged-bytes

class-map = non-empty<{
  ? &(class-id: 0) => $class-id-type-choice
  ? &(vendor: 1) => tstr
  ? &(model: 2) => tstr
  ? &(layer: 3) => uint
  ? &(index: 4) => uint
}>

comid-entity-map =
  entity-map<$comid-role-type-choice, $$comid-entity-map-extension>

$comid-role-type-choice /= &(tag-creator: 0)
$comid-role-type-choice /= &(creator: 1)
$comid-role-type-choice /= &(maintainer: 2)

conditional-endorsement-series-triple-record = [
  condition: stateful-environment-record
  series: [ + conditional-series-record ]
]

conditional-series-record = [
  selection: [ + measurement-map]
  addition: [ + measurement-map ]
]

COSE_KeySet = [ + COSE_Key ]

COSE_Key = {
    1 => tstr / int
    ? 2 => bstr 
    ? 3 => tstr / int 
    ? 4 => [+ (tstr / int) ]
    ? 5 => bstr
    * cose-label => cose-value
}

cose-label = int / tstr
cose-value = any

coswid-triple-record = [
  environment-map
  [ + concise-swid-tag-id ]
]

concise-swid-tag-id = text / bstr .size 16

$crypto-key-type-choice /= tagged-pkix-base64-key-type
$crypto-key-type-choice /= tagged-pkix-base64-cert-type
$crypto-key-type-choice /= tagged-pkix-base64-cert-path-type
$crypto-key-type-choice /= tagged-cose-key-type
$crypto-key-type-choice /= tagged-thumbprint-type
$crypto-key-type-choice /= tagged-cert-thumbprint-type
$crypto-key-type-choice /= tagged-cert-path-thumbprint-type
$crypto-key-type-choice /= tagged-pkix-asn1der-cert-type
$crypto-key-type-choice /= tagged-bytes

tagged-pkix-base64-key-type = #6.554(tstr)
tagged-pkix-base64-cert-type = #6.555(tstr)
tagged-pkix-base64-cert-path-type = #6.556(tstr)
tagged-thumbprint-type = #6.557(digest)
tagged-cose-key-type = #6.558(COSE_KeySet / COSE_Key)
tagged-cert-thumbprint-type = #6.559(digest)
tagged-cert-path-thumbprint-type = #6.561(digest)
tagged-pkix-asn1der-cert-type = #6.562(bstr)

domain-dependency-triple-record = [
  $domain-type-choice
  [ + $domain-type-choice ]
]

domain-membership-triple-record = [
  $domain-type-choice
  [ + environment-map ]
]

conditional-endorsement-triple-record = [
  conditions: [ + stateful-environment-record ]
  endorsements: [ + endorsed-triple-record ]
]

$domain-type-choice /= uint
$domain-type-choice /= text
$domain-type-choice /= tagged-uuid-type
$domain-type-choice /= tagged-oid-type

endorsed-triple-record = [
  condition: environment-map
  endorsement: [ + measurement-map ]
]

entity-map<role-type-choice, extension-socket> = {
  &(entity-name: 0) => $entity-name-type-choice
  ? &(reg-id: 1) => uri
  &(role: 2) => [ + role-type-choice ]
  * extension-socket
}

$entity-name-type-choice /= text

environment-map = non-empty<{
  ? &(class: 0) => class-map
  ? &(instance: 1) => $instance-id-type-choice
  ? &(group: 2) => $group-id-type-choice
}>

flags-map = {
  ? &(is-configured: 0) => bool
  ? &(is-secure: 1) => bool
  ? &(is-recovery: 2) => bool
  ? &(is-debug: 3) => bool
  ? &(is-replay-protected: 4) => bool
  ? &(is-integrity-protected: 5) => bool
  ? &(is-runtime-meas: 6) => bool
  ? &(is-immutable: 7) => bool
  ? &(is-tcb: 8) => bool
  ? &(is-confidentiality-protected: 9) => bool
  * $$flags-map-extension
}

$group-id-type-choice /= tagged-uuid-type
$group-id-type-choice /= tagged-bytes

identity-triple-record = [
  environment: environment-map
  key-list: [ + $crypto-key-type-choice ]
  ? conditions: non-empty<{
    ? &(mkey: 0) => $measured-element-type-choice,
    ? &(authorized-by: 1) => [ + $crypto-key-type-choice ] 
  }>
]

$instance-id-type-choice /= tagged-ueid-type
$instance-id-type-choice /= tagged-uuid-type
$instance-id-type-choice /= $crypto-key-type-choice
$instance-id-type-choice /= tagged-bytes

ip-addr-type-choice = ip4-addr-type / ip6-addr-type
ip4-addr-type = bytes .size 4
ip6-addr-type = bytes .size 16

raw-int-type-choice = int / tagged-int-range
int-range = [min: int / negative-inf, max: int / positive-inf]
tagged-int-range = #6.564(int-range)
positive-inf = null
negative-inf = null

linked-tag-map = {
  &(linked-tag-id: 0) => $tag-id-type-choice
  &(tag-rel: 1) => $tag-rel-type-choice
}

mac-addr-type-choice = eui48-addr-type / eui64-addr-type
eui48-addr-type = bytes .size 6
eui64-addr-type = bytes .size 8

$measured-element-type-choice /= tagged-oid-type
$measured-element-type-choice /= tagged-uuid-type
$measured-element-type-choice /= uint
$measured-element-type-choice /= tstr

measurement-map = {
  ? &(mkey: 0) => $measured-element-type-choice
  &(mval: 1) => measurement-values-map
  ? &(authorized-by: 2) => [ + $crypto-key-type-choice ]
}

measurement-values-map = non-empty<{
  ? &(version: 0) => version-map
  ? &(svn: 1) => svn-type-choice
  ? &(digests: 2) => digests-type
  ? &(flags: 3) => flags-map
  ? (
      &(raw-value: 4) => $raw-value-type-choice,
      ? &(raw-value-mask: 5) => raw-value-mask-type
    )
  ? &(mac-addr: 6) => mac-addr-type-choice
  ? &(ip-addr: 7) =>  ip-addr-type-choice
  ? &(serial-number: 8) => text
  ? &(ueid: 9) => ueid-type
  ? &(uuid: 10) => uuid-type
  ? &(name: 11) => text
  ? &(cryptokeys: 13) => [ + $crypto-key-type-choice ]
  ? &(integrity-registers: 14) => integrity-registers
  ? &(raw-int: 15) => raw-int-type-choice
  * $$measurement-values-map-extension
}>

non-empty<M> = (M) .and ({ + any => any })

oid-type = bytes
tagged-oid-type = #6.111(oid-type)

$raw-value-type-choice /= tagged-bytes
$raw-value-type-choice /= tagged-masked-raw-value

raw-value-mask-type = bytes

tagged-masked-raw-value = #6.563([
  value: bytes
  mask : bytes
])

reference-triple-record = [
  ref-env: environment-map
  ref-claims: [ + measurement-map ]
]

stateful-environment-record = [
  environment: environment-map,
  claims-list: [ + measurement-map ]
]

svn-type = uint
svn = svn-type
min-svn = svn-type
tagged-svn = #6.552(svn)
tagged-min-svn = #6.553(min-svn)
svn-type-choice = svn / tagged-svn / tagged-min-svn

$tag-id-type-choice /= tstr
$tag-id-type-choice /= uuid-type

tag-identity-map = {
  &(tag-id: 0) => $tag-id-type-choice
  ? &(tag-version: 1) => tag-version-type
}

$tag-rel-type-choice /= &(supplements: 0)
$tag-rel-type-choice /= &(replaces: 1)

tag-version-type = uint .default 0

tagged-bytes = #6.560(bytes)

triples-map = non-empty<{
  ? &(reference-triples: 0) =>
    [ + reference-triple-record ]
  ? &(endorsed-triples: 1) =>
    [ + endorsed-triple-record ]
  ? &(identity-triples: 2) =>
    [ + identity-triple-record ]
  ? &(attest-key-triples: 3) =>
    [ + attest-key-triple-record ]
  ? &(dependency-triples: 4) =>
    [ + domain-dependency-triple-record ]
  ? &(membership-triples: 5) =>
    [ + domain-membership-triple-record ]
  ? &(coswid-triples: 6) =>
    [ + coswid-triple-record ]
  ? &(conditional-endorsement-series-triples: 8) =>
    [ + conditional-endorsement-series-triple-record ]
  ? &(conditional-endorsement-triples: 10) =>
    [ + conditional-endorsement-triple-record ]
  * $$triples-map-extension
}>

ueid-type = bytes .size (7..33)
tagged-ueid-type = #6.550(ueid-type)

uuid-type = bytes .size 16
tagged-uuid-type = #6.37(uuid-type)

version-map = {
  &(version: 0) => text
  ? &(version-scheme: 1) => $version-scheme
}

digest = [
  alg: (int / text),
  val: bytes
]

digests-type = [ + digest ]

integrity-register-id-type-choice = uint / text

integrity-registers = {
  + integrity-register-id-type-choice => digests-type
}

concise-swid-tag = {
  tag-id => text / bstr .size 16,
  tag-version => integer,
  ? corpus => bool,
  ? patch => bool,
  ? supplemental => bool,
  software-name => text,
  ? software-version => text,
  ? version-scheme => $version-scheme,
  ? media => text,
  ? software-meta => one-or-more<software-meta-entry>,
  entity => one-or-more<entity-entry>,
  ? link => one-or-more<link-entry>,
  ? payload-or-evidence,
  * $$coswid-extension,
  global-attributes,
}

payload-or-evidence //= ( payload => payload-entry )
payload-or-evidence //= ( evidence => evidence-entry )

any-uri = uri
label = text / int

$version-scheme /= multipartnumeric
$version-scheme /= multipartnumeric-suffix
$version-scheme /= alphanumeric
$version-scheme /= decimal
$version-scheme /= semver
$version-scheme /= int / text

any-attribute = (
  label => one-or-more<text> / one-or-more<int>
)

one-or-more<T> = T / [ 2* T ]

global-attributes = (
  ? lang => text,
  * any-attribute,
)

hash-entry = [
  hash-alg-id: int,
  hash-value: bytes,
]

entity-entry = {
  entity-name => text,
  ? reg-id => any-uri,
  role => one-or-more<$role>,
  ? thumbprint => hash-entry,
  * $$entity-extension,
  global-attributes,
}

$role /= tag-creator
$role /= software-creator
$role /= aggregator
$role /= distributor
$role /= licensor
$role /= maintainer
$role /= int / text

link-entry = {
  ? artifact => text,
  href => any-uri,
  ? media => text,
  ? ownership => $ownership,
  rel => $rel,
  ? media-type => text,
  ? use => $use,
  * $$link-extension,
  global-attributes,
}

$ownership /= shared
$ownership /= private
$ownership /= abandon
$ownership /= int / text

$rel /= ancestor
$rel /= component
$rel /= feature
$rel /= installationmedia
$rel /= packageinstaller
$rel /= parent
$rel /= patches
$rel /= requires
$rel /= see-also
$rel /= supersedes
$rel /= supplemental
$rel /= -256..64436 / text

$use /= optional
$use /= required
$use /= recommended
$use /= int / text

software-meta-entry = {
  ? activation-status => text,
  ? channel-type => text,
  ? colloquial-version => text,
  ? description => text,
  ? edition => text,
  ? entitlement-data-required => bool,
  ? entitlement-key => text,
  ? generator =>  text / bstr .size 16,
  ? persistent-id => text,
  ? product => text,
  ? product-family => text,
  ? revision => text,
  ? summary => text,
  ? unspsc-code => text,
  ? unspsc-version => text,
  * $$software-meta-extension,
  global-attributes,
}

path-elements-group = ( ? directory => one-or-more<directory-entry>,
                        ? file => one-or-more<file-entry>,
                      )

resource-collection = (
  path-elements-group,
  ? process => one-or-more<process-entry>,
  ? resource => one-or-more<resource-entry>,
  * $$resource-collection-extension,
)

file-entry = {
  filesystem-item,
  ? size => uint,
  ? file-version => text,
  ? hash => hash-entry,
  * $$file-extension,
  global-attributes,
}

directory-entry = {
  filesystem-item,
  ? path-elements => { path-elements-group },
  * $$directory-extension,
  global-attributes,
}

process-entry = {
  process-name => text,
  ? pid => integer,
  * $$process-extension,
  global-attributes,
}

resource-entry = {
  type => text,
  * $$resource-extension,
  global-attributes,
}

filesystem-item = (
  ? key => bool,
  ? location => text,
  fs-name => text,
  ? root => text,
)

payload-entry = {
  resource-collection,
  * $$payload-extension,
  global-attributes,
}

evidence-entry = {
  resource-collection,
  ? date => integer-time,
  ? device-id => text,
  ? location => text,
  * $$evidence-extension,
  global-attributes,
}

integer-time = #6.1(int)

tag-id = 0
software-name = 1
entity = 2
evidence = 3
link = 4
software-meta = 5
payload = 6
hash = 7
corpus = 8
patch = 9
media = 10
supplemental = 11
tag-version = 12
software-version = 13
version-scheme = 14
lang = 15
directory = 16
file = 17
process = 18
resource = 19
size = 20
file-version = 21
key = 22
location = 23
fs-name = 24
root = 25
path-elements = 26
process-name = 27
pid = 28
type = 29
entity-name = 31
reg-id = 32
role = 33
thumbprint = 34
date = 35
device-id = 36
artifact = 37
href = 38
ownership = 39
rel = 40
media-type = 41
use = 42
activation-status = 43
channel-type = 44
colloquial-version = 45
description = 46
edition = 47
entitlement-data-required = 48
entitlement-key = 49
generator = 50
persistent-id = 51
product = 52
product-family = 53
revision = 54
summary = 55
unspsc-code = 56
unspsc-version = 57

multipartnumeric = 1
multipartnumeric-suffix = 2
alphanumeric = 3
decimal = 4
semver = 16384

tag-creator=1
software-creator=2
aggregator=3
distributor=4
licensor=5
maintainer=6

abandon=1
private=2
shared=3

ancestor=1
component=2
feature=3
installationmedia=4
packageinstaller=5
parent=6
patches=7
requires=8
see-also=9
supersedes=10

optional=1
required=2
recommended=3

]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a3fb1pXod/yKM7LXVEpJSqQkx1LquIosN15jx66ltKuT
5VuBJEihBgEGACWzjvpb7m+5v+zu53kAoKSkmZm77kzmYRE4OI999tnvvU+/
34/qtM6SY7N1WuSTtErMeZIlk7oozQz+7yyfFmWVLJK8rkycT837ZJaUST5J
zJ/ibJVUW1E8HpfJNXVwfvb+T1vRJK6TeVGuj02az4oomhaTPF7AENMyntX9
q+ImLqf9Mq6r/qSokvK6v7cfVavxIq2qtMjr9RLavjq7eGnMIxNnVQF9p/k0
WSbw//J6q2e2kmkKM0zjDH+8OvkG/oHJbr16f/FyK8pXi3FSHkdTmMdxNCny
KsmrVXVs6nKVRDDT/Sgukxh6PU8mqzKt11vRTVF+nJfFaglP3yeLok7MyUWd
VHVcw5TMu7KYJNNVmZxvRR+TNbSeHkemb96fXJzjv3Ft2+LPxEENf5YWZtcI
s+g6yVcwM2MeOKIxDJOtP8Ms03xu/oDf4fNFnGbwHGH5+zSpZ4OinOPzuJxc
wfOrul5Wx7u72AwfpdfJQJvt4oPdcVncVMkudrCLH87T+mo1li773jqq/jSt
6jIdr3B6u5u2EvvIYlyGN/zdfQ14zEFabOx144vBVb3ItqIoXtVXBWx5H1AO
NvrdwHxLbWE2jHrv4lXmnsHy4zz9O0H62JyUC3iWMCyX0HDAA/0+LheDSbHQ
Xi8G5mVRVfCV7fbiqljElfc47Pl1msdl4Trn5gNp/vuMXuNm6BDfDsw3afnx
qsj+bsf4Nsk/+k+h+bF5Wcar/KoAvDLnry7cCFfQeDCWxowScADqeFLrEOcD
82/xIs5s/+dXySzOUvuU+1/9La2rletYWg2o1e9n/JqgE0V5US5gPdeE0+9f
nj59Mtw7NpPpNJPfo8OjY/O3Cg+HOb94cfQEGxrTh0awjfT3s2NsebR3OJI2
B67NuCi9Nk+PDo6436P9/YNjQ+iAyAwPX/VfEIIrjpTpQhrQ360Wi2revynj
pTZa3EQREi1vPTiXp7ALFxfvzGkMZyif8+hP9kYw+sUJHO8fV2nJmM2vvjw6
GAEJWyzL4hrP6wmgU5InVWWKmXm/ynN8eFpME2k+OhwhciTwLIeDEad5MjUn
y2WWTiw1qItJkZnt0+Lk3U5rHf7hkrX4j9rt41qbxXUUQRuggrTas9cvkSC9
PK2vUiDuUb8P1G2MkwIUil7lpoZpKr2qO+hVZbaRKu4QDUprYCXwsGf+lJTp
LE3KSsF1P2sxdWHiqkKw4aBAvasaKC9MTEHJE4BOB9EFTNcAp1lhf6ZaJhMc
jr/8ZZwNYY0MbadnYgMAWNFKpubHVVKud2Ghq6w2jCpmmlTpHDcNpjyLJ2mW
AlgSGhxI3aS4hk9okDIBupcAG8Dpw2uYVVzWKXwDs5iVxQJYRJkWq8oQ7kxp
bTwPGGSGK4fZ0BSAzubzVTxPqGPAb5jSssiniFsyOztrs6oI5V68eN0zN1fp
5MpM4tyMEwNUFNho+neYe5qb02/evpc19YCLxeMMP0tms3SSIlzTHKBdLJMy
HuMaYU2TEogZLBJWCGup1rAdC5gy4c0iBRKQRNEj8yqvy2IKc0FU+fyoSib9
FB/dRtGDcImmgniXrXFC7xBmjCAIy5XCugNFSr97RL8xTHq5hDNGEDlDGMOe
CwLJG9iePJlAD7SN8HgyISws7scaBS8ceBi+TnJjeR2AWMC1gM1Jl7Agu8k9
AO0kW9HmXQHvQYIB3D1fIWYAJLDFLC0X9HyaXCcZ7gI8xDlUMBC9uOZDj4tJ
AD0mHxECANV8Cl3SHi8SYJTTik4AYREO6CEm/myi5RJodGUmV3GWJfkc/gRE
QULIraskXmQInSZuABJc/POHz8TTKSBCRUc59aaBG0knglbQdSTi+w4FzoTR
Js6rmJETAOZWPk7qmwS2MLYbZTsGiXKRlAzpxthCE+STyiN9NyDpEDHhHTE3
8RqRiqnVmuaS5NdpWeRExWCtSHbh86pOJyHF65lqBWhWX8FI+F0J4L2O4SM3
eznhxbhmhkLkRSBfdoIdT54SHST1qzLvSe8+tYMdAKkRXgBiPLRDXOcSMBIB
hD26aSJQEKMcWOwOyal0FJXpuaNHdxBXC5D7cY0A4x3FRfwpXTB94MX3VxWe
Ztj2xQJwxJ63uigy7jNLxyUQ7sQup4FXlT0NRMobGJPy6QH1hjkIgJk6SPPl
ChYZ1zFpAIywdkwUgNMJwcSh28+hVQN/Sno6knrjdMLjVKzqxuwQjIwU7Uk2
OfS0gInnRS1cTfpfAFFEav3uVYUKHZEUOZgLEJcyJlyM+Z1DAAuaAA1i7uqP
B39nsKk1L4kYMxEP2hxhxl1ExMN+BE2RZ0jYvinqqwd+wQRbxAOcffIJQFul
SiSZ73hELgHeI01jxbhxXCUZgklOICyhWNaIpIwUbb7ss4UyAfwlxpQhU4HG
MZNNHGyWJZ9kMjBPYDm468gkzXQNCkI6ob6UwScgsBOPF3y+h1zdf/YYPCV0
P1UEgl5BQoRjTJ0C+0iWNTGd0+L9qzfm82dPur+9teIRfAiKdgH9gb6Aai0o
Q/F1mq25X/pY+CVMFIauikXi0JdRK0UxLE2yKWDTST7tAdJ8TPTb2p2WanIF
sEKsYvydehIWzhCVH5ibOQlP/GahC7+Bed/eyhYDfB89MhdJuUjzIivmawGf
UzXMa8E63omPydqgXaIyW2++P79Awwj+a757S3+/P/vj96/en73Av8+/PXn9
2v4RSYvzb99+//qF+8t9efr2zZuz717wx/DUBI+irTcnf9liyG69fXfx6u13
J6+3DNFA/wQywcTlE7YugVqjRFRFcDomICAxML45ffd//vfwAODxL6CEjIbD
IwAJ/3g6/PIAftyAjsuj4WGUn7A16wiktyQuSTzJMoD1EnhGhjIS7DWo9LlB
DAHAfvEDQubDsfndeLIcHnwtD3DBwUOFWfCQYNZ+0vqYgdjxqGMYC83geQPS
4XxP/hL8Vrh7D3/3nChGf/j0+ddR1CC/K6I1gF2VaA9yyhSbxyyNoPQdKHKD
6KXSJSbV8wyNGeUa5JEkgY06T5hcH+Dx71vdHM/pL5sCH3pR6FgdfvAkhgP4
HzcRSzE6Z4IMm2bz1y2UuUGKQH0k2forTe+vW86KZ5+7yQLOuWFHbkhfC5eR
eRg91UybAgrQa1ARGv/07fkZPQL2io/QOJBUX0Uw8BJlqckqi8se9zRN43le
IBFGDss6Vbphrk9prjxwhAO5V3/gV0LJLto7hSc6zkCIrZyJE080yiLAi2Dw
VY6azSAZ9Fj2PeUzaV4nNavtoBuezOdlMudZYvcXqMSZN8zuSVeMXYtbhmBZ
gMrhMZgSpYVNsifoofOrmsg9sMwExXozW2WzFBQJZnXSf1Fa9W1SZKiu8PZY
da1aAdjXyOhSlAJX5QQVPuTpoHlx2wLZUNgjtAW6nJQkApfF37Df2FwVGfFJ
c50mNyqACLpMjTJZXCzsoWgmJPgAC3Hd476iFJV8QmNRWhsRPTsOLgj0SxKm
JiALADmEOZe9YEm8o3yqPtFe0Mr7WbwGwE4H0XnH+omnsfIKAAI5YoLCWqi5
gsIKo27UZ68KPIE9WTSxh3kpwBPhzonnPK8iXBGgFJ1d5AtWR2KZ72OSrYXv
xHZtbPDqEa8FaLNoD4It8VXaR9HUCeIBjAaR2gyA3a6yKXaMo9ygLObMRILw
aHxVQ7f0PE1nhKcoHs6Zk8vu68R/A09gc5CJxTnAYQFi4olVI50IbCeyAD0S
zjYcbRKYABlJO4JVi/G3gTQxGpFQXkGcpm2kKZQrmPGD1HMUjvwOGRJX8TUz
9yxL59Q6HoOW0FybJduyOJbJPBjDztZ+l6QviojqrwmZvIUvmiJ89IzR2FCp
jp+iWABCbDpFwv4AK86YRUmhAyIsE24WhEdXINJfoyRXsywC1ApFZNtQlAy7
aR7IeyYp50VeoGwtKjHjMtok6OA6XA5POtALwomA7MWbCV8f3vfosMhBgHUB
gSL4CuGIyT4F57cmoqoGJZamuZFtka37pIUlU8aydYxjWiNJiGJkJ9HlD6Jv
leCgvCb2EwQWHzb/014IOMRtUoiuU1Wa9Lx4fAHpA+q9PbRWQTs+80RSUd2q
8RPshfYHdnA1TWtPUyOzIBzupdtrH19IDxc9exIvEqepgEQxT3OUFdq4ZzWT
hgkL59Ez6CUldAGRHjB5TZiKu+OWJaa5vMj7/rMuLoSSRUFvihJ16mVWrBm9
2ebk8yOdFVtxcFjWATMxoKqqHeNLaoT2XPPFF+dX9A1z6C++OLYyPn3QEx2e
LWPcVRXsE+5tBUiWrUWOYDqAaMmskQ0YQIWQPk8MKwbLQEXv5JB2UGtVIIzp
3OjNuDOgRb5IkuXDVnhFZ5pBViYZ9VVdpUsGeXPh41Vg9EASgR0zZ6pWatJq
LAiZK596NEHx8ESRkqldkUXGzvNwwweZDnzIG6aAMAVPDL3sBLPKBxpacmQQ
wICTfG3mKQo6qnB7ZlOcJ9kfarJAgbwjJy1JSSAi+DU3C0R6tI+yxEUt8Atc
KBGJlA2O1uHRZa5axuusiKc0PtMkPkM+OCyorHlGFljGaYZYjgtH8Qa71w4r
0M6J9uDuLNDmXPKs8PtKDgLPGQALc54yJGmLrorUI4ykWdwUeqxSWVBFgCOj
A54DPK2MQsJP7BFG2GewG6v5la6epHnnctJz7yFAT7acabznohxEf8Zl+Lgi
zXgRauAgpBMxuWWWsqZajw8sEqBIeVot7MKd4RtX5AzFd8jqrBLIHF6pJxbm
SPoAqwPooCVY3pKN5O01iojJTRR1A8fzxxEa9dmGWYX22dDWP11NOmz9rzzZ
2iMItj0MLOj+YBbdszhpjwXhh2OcLeefyG11sexn6AjyLLDCoMjGhLvpeAqu
HK3TbCZX4yRA+4/6omTKW5RO9bZT2tbp7KgV0euj81MLk+2HaGg7SGfdthTO
tIqCr0IAl1mMWX1irZMkQdJbtDXhtsMDAgJSoU9L5MB0EnTiPc+Am6IGK26S
OCvyeYWcqGHJJejeAL1Yo4FQ1wrPLHXCrWOuqqAjeopy4QwtqoDLQOl8usDD
254rIc0+CB2KNBuvxhWca/gEGCpMf1Xi9C3zcTNHxQ3GpWloRAEDB843TGcS
I80FerFI63RObpZKIqOgpzKJaZPZISLy2tqscuJ8ZE+YlbHzqqk5GhSrlF0i
NGNWwmFSCFkfBMFx89GOlIzkU4zU0Rr0kYtxFAbiDEVlfP5MMRpqKClO8JGE
VaDN5ZUOPkZpcInG9+uEFYkFyHWtfWYSR8BWcwArI4v4Y2JHRxJTolfak23T
mZtcheouiPZsYcgDeFnorAkJcydtA4Km1UeGmGr73V9agOK+owKOzplJrQy7
Z0nRBLksnBOUMQuUp9FQABo3OjLexamqLE6UZTQjPEpgNT5orE8TpgWSWL8u
0MLFWhiqZP6+WuqBu+KQWXCMBVnsHdYrrhuPHsM0lhhUV+YPwxWni1uPqH01
TuZII5qeXtwWolq+A5n9SezgSltHkbU4IS9MikRq0AawBQlgV+XOa0/RrHJb
I85K2DjsL09uwj7VLGEFO5X0iDS5Ex7u2CD6rmDQZes2Y9oCJQQWtRX051Na
1Xi91Y8xgkDauEOJPPfEem/ZQKc/gSO7V8gXblq74XiJCJy+eUwpJTJeDsVI
nJXDgkNtCZYyit8HnQDOWzleZR9V2re8RcU7cji35ViVUMnp1u2rhR0u5iDm
0B6XifNksxeJeqh8X6lCkFtLcGzK5kvPPOz143FxOroILlADKSQtW2808R2z
lsb205McpNASVZgTUVFiekJEpmELlmA2pJUhxY3DT70zBpBcjTMyYJS11amq
9WKBPviJQfELsQi9UrQeZcYiH1gbHUqv0NbucjOuwdoBECCCHoRP5XpZF/My
Xl7JcDGbOREEZ6okkphBQMid5khBuF1wuM9tQAy+TFCUYMtRw+XZtOPZlZPK
lyJ5hu2Tz3lQbN5YOswKzmztWDUJPqRgik7rIoRQd1crKkikq0wA0BC0GA0a
Yci/BALtTlykHZmBrckkJltKh2WT+Cbq7yiRD6L3YX9MNZypXoIxkXdNYrLX
b80LEL5yab7VRtnmDAOsRf5PyjMo71cIvslVMvkIlIm/HWNE7trBFC2t6kVP
F3T8JXpT9s5bmOcK92zELaIl8yG2r2bzSRanqOd2WUt9X5SKI62DUbNRbbEk
muskwCZsa0dNXagbQhrIOquFAfUWBqIijGfe22ZHW8M5c7vDjIfNRsRXgesI
P4dFVpXFaoq1y9ZCs06tUcOyD8TZmkgpLYMQ306OZeDEix0QuuJNEZ541lsW
QujkkfSGZ4odNp0WPN+50+3XQc1MJ+2FcCL3sTqa9fGImbenstC1qheLAsir
MwczlySLF6Eq8AlCIglUc1ohmePYcn9Szn4WxGw8mKVI91gzLSxw8kTE40pN
omQP32h7ihUNGluDxifat4ZFy053YEON1dTiWSbpqPqWDooD2NAT4bHPeVrq
/BQNfl73PWdB6uxPJE/xm7QHkjCk1mteRmAi9e2Tm8ZSqxqLrzDL/nhV94UT
LkF4naBrksWyM0eCRDLziFJ12w7ZUatCbQOntpHk4V8VKeWO3nSJKqL7c6A6
qUJ/IANhWwbviHZue+csSUu7DS0gYJGrz8aPxOoYrRvrCrUBxJe8wZVFO7pi
bzVTucQyYpaTLLNg6zQ28tq0RRRnQBXZlVHBUWoUQVVht41Vq08e5swm7TQ8
1uEmMPRwiT5DuiANk2JwSA5drGpyO/STT8CDSCP2Y4NtZG0Lshqt6UvHwO8+
xURKijxxey0jSbcUYuMbpjyTBiEAMKkUTs9JljW+DGVpH6W99aMFW2UZmeSG
eDHmOMiNWC4ixkTSUB4sVaU3Hw3GVjsgQYwSuMgzny4wxQrgOaEUjhUzMxet
e3NViMbu9BWKQ+Ozh04lii+cOTm1EU/XaQ6xho0YnTjcAeubbKPgAFE5ITQK
k1ByonvueIHKqxwtuxMVmVP5eQdwVnkKe0jQCOU/9EaL8kJY6ZQ2lXItm2xO
mOQy9cfLzCjljfeLgU7GEmXwTAVkZ5z/X6bvoYmjsqA8JEQCMLYSY8kkHlBQ
qMJQSAb7SwraJLj3vEQCcQ5gDCxxQZqWdTijNxcD55n4FPl6wSHxj4BMn6Ms
h6a3Nr2u5NUtMUCVnrwgcT2TdpH+pqDIg8jcs0snUkYzU4eAk605xSEu1anO
mUdMaeMSoBP0PVuVDK61PxUW8wnDMHRShPoLsdSpaZHYvxAo68G9PzaUkfua
zGSc/klxx7mQF4WVhBthRggKZXnFhvWZv21xB1rQmUTNsXJSMUdxxlas9BI7
UZdVdxrLDdBEwpYyVOnrqwX7HiRRFWdK9LBkF7wHq4aMP1mVHBDCQr4eEGyF
Ybc4BCe1CitbLUHxndKxsqqKd2AI/EopQr2jhzqAi0BZFmnOsbW4e1k6Sybr
CcIr0MlZo3BfNYCCUTopNsP54m9hv+gOAo1ptaTALk+rWi2njCZFIAurBVMs
C2Q6YHdg7GWAqTECt9e3aPdCFspTUDfwx9zJXrN0vrIKaEtlF56OJyRQzsni
rpLCIDp3R0DNtLYLcXFjRAHBVmmomnJItnBcABpY76+lHnYd4t2zAi6DSAWA
QUuiCwIlG1BQdZOPzwQwlsQpe44UQWGlN0mWkYTcyUN77puAG4sZgiJE4hbL
8ACwBJGjRb4XSVytJLi5J7Z8NtDFH1VGRQ6G0lURT65EqEEg9gjBAjhoulFL
WBFftZpKySuQX8UUuygJOuG8/DMczpGlY03faZzvDhpaSVagdYcsKAiEppGC
8j5h5OO5N7ORWMQXfx2L8j6PcZ4s5MVtZcOzuzZSjhrSZMrRE2KTTz0frPJ8
dvom0w7YCopVoRmAtPyTBm5a0yy5pqehHfW4yQ16JjTq4Y74lk44ktYiYa3R
t54sa6NImvbaExVD2kiCeqXdXW0WfD/YvLCNpiH/xNiEANX9/NiJFsfqqcBZ
Mp+HyTv7iuOCXRoRo54OJ0Y7NuxMha12Y7mar/VAeYAOlEuGNZCEzAc4EXnP
A+9St3zne89B10FfAa8RJBqEa6W6nnsmslfhNSMA4f4675y1xUqMGImti/ST
7bLPsqAutRJ4Nx9z9BL233rDiWzeUhhBSOCqgSGjIIPxvCLFEZtBw4xVswMk
VJewYBlQJ0p8kvFEChFzqm+xAREEo/w6kk/wtMFMuqwNvZbNgoRHDhgkkUIm
gMIFbQ7RLZtnZ6NjQoJQNWKtfTOiulu6rTY2B21G+oANXfKNZNvBgdlgMLJR
CxvtNmJHoQWJW5z0bLTOYN/tYZpWox0NqrS45bmRvT2j4N3mFJDQcMCwGoA7
bWIXTuO7wlyX3MHcknlrVpBoRqPLaOaZS4CzXYuPQAovPCtMnxVh7TZMrOjk
hVlhGA7BYUJyB+nkG2eakm2blQhWHtW5DXRiXBYf8cxCv1ccJhnYWDXcds2K
Z9M46zMD3zwtn9ZxmiHQQyui3Wyy8HmBkMx437MX/Dyphfl6bnEbh9LBTgNH
rNvWzQEv2LcL7vHiKqwr0xu2SisncTizO9tPUszFF967WaSRDhMMpLZ5mjcY
/SUh8/6HQoybnoVew7tGpNgX16tfzp/FTDtbcSEJDFMRzduj4jYCzvHDsB/A
zZgEUs6+xBwFjVcbWJ+1NEWKkCPPQOYgYg6Il6GY4IfXXATbLjq0NPDg52R+
soVxNBDRpA7JwmPS0qG1zoemt4C/kAlmElsGk3xapnhKkM9YqaBOyzA86NRG
K2keHOMWJ7yvAyevHxDlzHYmnrFple1lOuagA/dCRwOTQpWDhTY5dmhPjirk
XVpQ5Ss3IfR1e6qkPRQ5+EQPsKEEaen4jorXSKmEOFBna2FPNKCXhqjc1Tkb
NmzZeXMq4hNk+zbrJK6vFMNrKwqUVduDT0SRSONxFea0zGJMUStsNHcahs40
gyaYYSBb9oJiycxK9gXvQPnaNhLFMwwO8kx+HiFB19tiLAGLp8WbVy+gYxLL
WMPKNfSGko4zdRxJ9of/AW9TIublTf7qw8Fw4GUcWlMvTbExPgmoCzZ3iV8F
JLkCxBkOC3LpDL78TIeVT1Vsz4K/qz0JF22eZWftbBDNXmjPQGtVQEOFrGyE
E2tiC8TQaZOmt75CQkrAaL8xflCD5n57NhjoE/9x2rvvhQ4C1cmXDkwVWWFN
xg9MuhWztsaw6QRSTdi/Y4WY/CVlXoC6wYwqSxVACok9IcTHPd4Jxt8q9NA8
oGCMjw+e+DVoKtz1vZtj9XDHMYjfVz7DmqIaBZjI2eC+2KG2RhdFjXwvVlsQ
ECqE7rKAfVqzR5XzShOtQOMAzR6SCWZtxiqaOnOeaEo+78USB2K79UMA/9mj
3VMGZEOOA5cYWulyPCs/ruJpuaLTj/7ILfxdbbHsDF3XO36U+At05Xvh4eja
1/BwVluESDSKQlGmLH7LHhHs3DvPncHSESXmdsQVl6ssscmxbEd3YllzEBhY
eRJ/t8BNH1P2YMoOeRLk0B5FcR0YgUsqesnMln+1w6K1yIiTHv02TpKEBXAi
h3ApJzfi+kBg/Mc//kHV2756hGYpRFPY83Tah50t5kkeRVx9zzwznyNj/nUb
ziNoeMmx2dsxz7428pNeEW08NkN6QT/g8XN4ITGIx2ZEr+RnBJsmn0PvNOqg
gJFJIto1/1iVKc6OJPJTdvfQ/l+g4OYyAHJUGuqGFUrLPGi0A5s2vd25ZJ1+
ES8ve+byMf+Swfuc1EEvrLmg8Y4Q4PIx2wwa72RrUBQiuqKYRGxMn2qyNS3v
nUARBWDxbNEJOzu5EOMoFaXQfA2mJ5KpYTOGBZZoKao6P9cGTCK0IhFJyVMK
f2JFH7NhSFL11ZHYADIkGO7XsAG6gE7KctOkEbGSkUkfJRrmeZ5pjHxeDa4q
9J4woh0UObb2odh8n6cUfgOaGstXr5zBefv79692SBfOzVsOsvXfvn31Ykc0
H9ZwNUaeh6L84gKTpgl8Acy8yaxsyaBLOLF/lWaXHN7FsotX6cKrlTDYH/g1
A+JaceCPBNBzBfpdNYSU3zl20TDzqqXoF5VpsU7Spl3RjxFZt8JB7lJmm5bj
hxIlbq6kRzlWn63GTICCh9TMm3JfrXVKlbreIRGgD61mpYSqRt+V+QrrNu7v
7x8h/eAhmILJPPY9osazAMIWTAtWgNNiia/PWjPOnypd+v/t4iwo8EdUaZx3
ZysrYNruRjtR5E2CxrQ2iL7VnzrGxf74GPnNWgNjM7QQ0lBEmHHHF0mMwSPK
AbFIEdXUkWo/aH9xaq3baEposeWyHnlx5kTfue/LAIqX3LN41JDQJBRSh4XB
QAdIc4o388s7qZ0u9vBSKxY7I7d5VWt89xKlKrE0eDGql8GeXBqA6zQhfypA
CbhEY2uDBoClxCqaGxY0GqGUs9Fo0jS0d1lOZKUufoX8N41kQ7YnwiK4bhec
UQmlrxJfRgzC1gNbh2vkH/SiZCMQslckHoYkz4oytKh/jhAgHSKuEqbz3Xvr
tIA8xsJOXuDQFAVGm6HAVgFeANqfmAadXbP50RsVVeZw5BBfXHIUKW5AxZWL
+TpPT863hAOjwijeDRDIUQkiVeoaxBdr7kefx4zd+Kv8JiZ9iwSQVMpmPgqj
+GzVxHboXuXVU1wwIBc0ZjFdBwjP6hBKQypzCJ1N4Ng9RNjbRB+RBrtpAH2z
f+/uPjPbSGpQglKi/AOQjt/CYxbqrKjVA2nwB3jBjz3PEw3xwexE+H/tvlUI
Uyoedr9JRvulo0ml7lHXUF3y3sPGIYLZ6Q+0tr/A8bDRD2ju8smJwdtPI669
+LxWPKgQFHLmt6MEWz5fCvOVvlSrtV640KrMSjEdDe+o4CnxA4U3uKz5xM98
H19Ah1xmrJ/PEwRv3UgQpO/6GSd8fqfJJ5YnHZBTL5A0MDarSxjj5ccpjAcT
cwE6Luys5Q1sGt84FrvhNiBpOdMKwYvNa3utZWdmigiihLI7NHR9SihIUQer
Ecnc9716C1wwK4g5jukjVpihAEVPZA/gu3GYYPsovJrPP3MLok96XuVR5852
JWx58aKd5JGVvvtiPnzj2WXjuF4qFvu1fVuZxWHwR8v17vk/bIzfrYDfq3Mh
BXvbsTXMGx65MrrnGqAomRvekWtDQb2cZOPrQku1Ura97IFTnRGLWWYoSFiT
mMog1nJPLgXrThDKwxHfyFY5rU0Cfq4kCA9V0ayYk+J1+fb9pUTBU0gTpamg
FUzphUVbDreiPjO1eaAcQtYsNMRxGGuaASlD4y+SMy+gFtW7hlIya1llqSSV
JpUExKgddtpz4bnM+TmtU2oIaYQp01dX8fL8j6+d1MTmE2LS1Y9ZdH72+uz0
wnwBDOjl+7dv7Nz+ynOLzJ+/PXt/BqzJY3/AprdO6if19Wo3Kf/47NmW2TFv
36sc32qa/nt28O9/+gs2u3QSvQZeYdE5R26a4Q9feXXFKCKQQ6tDLESaBk9Q
pPPN1x7m5ShskcLwCzCtgTwn373wsSfNLSoGnfmD8q6j2VOCbIDEYKGUjcvu
SUI8JY9zF0LUef2kFVfI0zSG/CbNphOsn7F9+cXlTpMrsGMQ+xRHwD+Dvm1X
7X34K5zkPx577dRa6KumtxAhYS/lDRc6J8w+fXNmXuWTQROt/S72h7PxYTye
9fdG+0n/4Oho1I/jg6R/dDg7mgwP9/bHs3hL5TGksheq9YvOaa0AqpNgFjDW
WhX7rlT+bUXzuDCeRTxNelLbtRXo5UxB+4MDSbzkkoygrTb0NSkiuiyWq4zd
GKmUrHWJfxpPHM6MKCfOgEOcQ5ckLVtiHDxl2zMeOHUsS1RMEdvbZYdNoaHw
gkbcNCc0dGZkNJcoG7S04DuDOQINWCNryBDflVUWBHI0DWuea/ufM5Yvbqz2
tFGr0hx8NmQJnGFoNleRCx1Um727bE7Pu200og+h9rG4GSAe9RldzQe0Qrmh
SLtp2iCa7xt2jObrwArSfPn4sXvQt5EXFc5hBt310a/jLHnOX2V1OqtBPeZ8
7/7HZO2rWbAiMr1d99kHpRoaf+SWxm8FDAyEcNUwi23p6kersJovjD/RD9EO
KsPTX3PmSffMLdBbEwfuNe3/ypOwAAongUOJ79+vY9ueUwNFLCwThOXQwtKf
tQ78o9WpoUFrbQTx+OOvtlDoqmuhnM/A37ThXVf9ql7UvwqgC+fwwr9xgOAA
WdDFH39UIzJCRmHA3dQx9HLggU2nSPD6KvpKSc5pcXEOv7EBssGLty/emtO3
F+db1od2lgOpRWLmVxaPWkwHPc835H3nhAyvgHnTZ0q6VpFzoqZ1sVRB3qIX
EdTMr7qjmqWWgnWTueJyPH4Fn6rDtdBhc5BwHXuZAck0HGLm+XyEN74sVG9R
z5XW7YMecRnXiUYXY5lH+Bj9RZRy1qyZZ30dUsHKA6TGr1J9SYo7Y884BzmQ
u3q8riVqQtMeGtAnCVi6xrmyk1sCAzgVPdEdx9hiP8TM90eNAhHkJad+dY/m
DUOsGDX4fI61g2Qg5rqnQb2Ob1IG+zcSbPNHW3zH486fH3ERN7nr7XZTgTe8
3a9MHMD9ekUoyUohHa+wm9RwdTFUoBnjJTWSZdOs+eXyTytnbOaPsVRvowrP
hWfaLpO4Ip21EQ7WRAMbS9ao8ONfypE3ggk88w6ngrLVAnvlxIWVd21TVwSZ
Fu5b6uVi81Vcok1aEyZbkY5ByW+1wqD6dk0OWCoallDeV55kNp65WS3Mrw0m
/oBrjR1sGed1zwTbKBYiIcubV1kiwK2x4Fa7zFp4O4fbKb7MSKL21LZkL3+x
O2BTn8PxkpxvY+rZ6320GA3OsV0ST61IMDBH1HXVJuiseqfGYcZ8uXAiqAuP
H14Gp+aSfV2X2O6v5/BmeOnQy8myWbyGrWJplm/uC3oB7oFGb8QUkqmPmRQZ
ki5N0LRvG/Wvpnhv3yr3Pgubeq+ksdRnCvvn1vDWQlbeRx+chUIrO2maucb4
9IkOWUY12LTEcN7C7YfIY1ENueO/rzD9E9qOsO1W7G7t2+WOf4tr2DK7IMzD
f9B8UmMMzBe0rEEWj+GokDwAv0TGRl/KXYCS2d3Thf+SFrFrahDCI68ZvIDT
6QFRR8G7U6ZqUvHyBn3kdkmvls0PHtCL6IyC71ScmXzTlxtAd2nE70aV/U75
k/5Lvgjn4psXw0H0lnqUwZZAxBYJpWi/OfkL2RmnU8dfpdV4NfmYYIqLlyaM
5+RjOr0UR6muqrILl4pWFH12xt9UXpwGRSK550Hwma2cR1nmXTYcklw4mDoQ
FsLYLndkddJ4tYm7FHDWrh1RcUEPiezUnHs2bXV51GnWFN09MtttH/VOzw8y
v2tc6d7GwVhVmiPTefpcpAmWflnH82N5iheL9kZ7o8PjyaS/zOIazRaPhoO9
wd4lyCOpV+Tusss9eenu9MDY1b1GAo4kySs/4Cl4xUQFRhzuSNQy2DCATk3h
DeoR9mNjxTTFtxQQm8bjlUzzCI/sro1l2jV7x2brYWve6tGnDOldoDnDYyIA
+DAMKtm1ZAl6H/Xgd0vT3ZUPu+CG39u+sREbMGmuP9jQj8+Ro367ztC2S4Me
PtnbvvrN3t5wOBrt7/8GsAXpTjyfA+lior4bfC7woonD0Ftyfsyf6Dmt3DXm
OD1e5MhrTOGfW7bprfz1gf697cmKXZbELn+/t7012tvf6w9H/b3hxfDp8f7e
8d7w37d29As/dmbX7IO+B/+IyUWj92k9t0BwLRXNgcpa/MbTxMVBpNT2dFqx
rFRQlHJd2lL1EimtnjyR+AIE59hEPPJ0UyTWoG4kPKqUwEL6VBPaSa2QSl//
DfHx6dHR0ZdPnxwePvkvwsjeg2YbRFftfwkT3x++/Obw5JuXe6P9MzRcn5wc
nB0dvjw6RbP1Ny9PfrODvXz//asX3ir+4/B/BP+w/9aZV+nCiCChpX0k/km2
pT4qkG/nNo78Dr7FtL2D88Re7geyZXaw0N3LGxgJVo4ImMmwwUw8d98GhoLF
3zXoncvqKm1o14ao/rPP569zLu1KdvG5O5qHh8QNRi/OTl58c3b2Ev/FEwgo
exagbPuYatedJ/XXx+w9PIwWqbsx2XkP/iNEPYsenN3RfXlt4orj0VUijtM0
6pm3C2FKmV+N5FXn5qYQXeoDo5VkThxhQVh87B2tppeHRmm6diTakQx07SDH
Cy/EG1vyRO1MrNtYvNCWMy7L5JruylawDgI3zqaVuNMI62BPSzhfG555/WNj
fSLR8os2fOPpjsuRWZapkg1kzCWLyzY3xt5FQe8o9yflNdiCFI0jqXk2qV5n
qJeTKEGIMGi1Q1yIXQxoTy1TCspOCcN4NebJ52+Ddb0c5RLrCGhlMR/W1GUr
hiZM3dtUmu3XJn2WSBGZi4wJ6NZGKaJTbribvd5PdJDIRNJ+15qrd/FLO0ed
jpsMklOZTDyeAAiBMn5w0sTIX0K4COowfHDfyvzVeWvj/34ImnV0/ECBpdf4
ctieJYthXPlqt2sZMuLWcDAa7G81e5Reh0/2nx60Xt22W4NMf50zthwe7m+P
mlHutxsB9CFq/sVvZYeGewFWDPcVK0aAFffLSGkVVpHAU+nygn2nx9jekGeP
6lazzMSWvVr2QuzF6DT3At9cVjZbGBdxns4SLDAgogxHSjYKAlXwd2XNJFJq
BEgc8k9MmeOqxF50QpNsizRHRJWpJ9K0xbJe+3U77gkfACYjkyQCf/rmzzZG
w1KZxQ2WrqLIHqBbetGj1fq3MUbDrJY7duFuziQnBMa963w6UHLEXmIsRv3f
Ubf6b6Dru3DU3TspODy8/lFAqDRgVwsi7N5NDrR1qzoMfOfJ1D/cj4Y9A7xi
FifxNJ78xjGLh34JX8XjOP6NgPRDIAGb0DVMtSxXVfTD/ypnk2T6wcDLmCpQ
L4prCU5ycnHKtZ85uVyu8g1lZz+uqqKu8ahyYnAzc0VkD+u+Ci4OTqtGVS6/
sB8mRuL9uJhTK4VUX1HcaFL3X5TxTO50TL28N/IewkcYWRpm8eFNM0cHI74g
IGkG8zYnrTKbLjitXL0JdEtWWNGFZvrq7OKlVmbEq9Iqr7Q2W4fgxxyDj6ly
Kk6b3JMwHxAi3/E+5IUWnMMuqRo5Lxqdcv4Nh+GukpvQ3laHL9dBAWjxV+EU
rXt4QQ7pvECnOAYfYGnlMTrgYB/4ViPv+gafi7jSA+KdbMqeMBoBw172SfVk
Ljx/oQVhLFo4pVRLFLpU5NXgS4wxAJyIs4IBcR2nGddNbuKX3hw6S8jjUeFt
BTHfQUvOvetUgsAdlLkSUSvHKgbwfQLgYyxpGPhnsacHDMJW3uG6Acgnkxu9
P+2mKD/iZ1LrTJBlnpsp2xq8oFa63I8vtxZXrr1HdZzkcExIcNerDJCLqlMS
Z0r5VqQ0aO1L1lZXBCUuS+9QBac2S5IpXxZjxyJeGgTvJlN7VCspMydXdnCa
2mqpdlAPL9uL5nqyaRWgECsya7r+G1a3xTEHf0qwCneRw7ZR5QVKRXhbzrHq
D313bJuY7QKrVAnt1VuaxePLzqd8xlYaquaiBYuxcg4ge7paoCL7uphIv1d1
vayOd3fn0MNqjOx+91pnE71wJMKbgTUbeFcRty50QwxepZl/t6oUHsFaW8kn
EJsyuY5j+rcYS0twFXW+MNsvLPs+4Qj6d8Bo1lofnCOM4wkbK/gcu3RwO1W6
H5ZLRU64vQ14jpfxRAr8Ni7B23wFnm/OFnuIv+bYmQlttrO9A1mCgiw90PqT
WTqmtBxEbo+wuhBZKqqAdb9AOq207BcKfhRXK9Q7tM7gDpORBN68QdyFhR4b
G0WAO1jM+vC/ckM64zsJFCFFwI5g0nmVHJuTJUYw9Ucg+6GwjFgyT7TXkCpP
8C3dJNBMN+lMCaf+6Kpk7K5YABxfFhVifk9+D+T37zO896QYFOUcWfy5Xv52
6lMVqVCNlObWz0N31w9KoiaVAPmUZnRL2WyVTzTyntCu42Jy/2JUvZNCLvN0
d+P4Oeq9jgub32EhlJTzVU68AsXv9QJTmS7RYQmRCW+HZNIDYkDzSkh84S5y
FrvNg4r107Hj+lpa5aTHgf7EQmZI3d1de5MQ3K4iCSFpnU5WVGJer1D29Sq/
Cog95lirgPp4/+oNIkNS1lxVR8drVALg7Gy51k5s278mOIKIJSpB3JhAeMEU
fuWV+LHlI7rlQBQ6EdpMDrUGL0bzUCikYz1pcKXcQip6BXlrXcN3xOOAZJZk
M7r8wFp1CfYOiM0VakoFVeW7eCgaIXWxYkrzZnHCBr3Cljt1F2lUanEU5iFp
0/b2m4dvXV9LDyNtFjgReiClS6hWyCrHUMMJ5l1j7uDUlZjNqepc7e4C4ys8
KPfnV0ArZPYvJbHhO7a0v9AcFJ01LZc3sRXeCgyI6q/x/Y6lpErYrBev2o7a
6SkLhlPX1DhDeYbeRQNwPGuSODybPkKoZL6LqWnIyQBgV3kBwujabOvBxSQa
GWnHZ818OSSlmP5N9Ie4BgL/sXE/57Io8CoKydgpgksf9WmTtbVCflGC9kMr
q1XK1aOqGDMu/u7d9TO1VnrUSqgAHUEQJEWFH9/qhhDNbAE5rHGTXseTJqPp
Kly7LGoWvpg3ECFb8tf9CvMKak5OtjKh1mjnFKU7Y0U4r8XPmSc52Nn3Oy+y
CPN8yddDQZaujswEr6+kaCmatohoKErZONKAbnuFwakAoNzo2gg53Vg6FBOx
XX53qP56tMkfkROg14XeaURXAKlKrCpEGzfkvASBt1iUHTaEojPr2lXQWcap
LCHFIqCKRHoNKOvELr4srBmOxGwlBc71WngqnxSGmoa8yYWMNm8JrdoynXcX
Z5gq1DenVJUJkbdzy7nyLF/sYRNjuTfGGw0hFd2ljCXuje9rC7Rv7ZYOxauT
706aJ8IZWMqED9jW58//en72+uXt7ZaTakGb1ER0Vg4TC3tvO5FcvsEIXC6b
BYR1nqpHHIP/cXwqCmgtzQWGrTRCRimGV8keo+GW1+sWfE/drkHL/Rfsc0Bf
kIGtImfPT0Cs4dT8ZC5QbUHM+ckj8j9FP/Wb/7WfdL2BLzElzYsg/OmO6MKf
OLfMlY27RSyx0DVBb/DPxt7kHfQWhK23uvt8bB7BIegvJn0AEQAvrbPk2Zbg
pQ/CW07L2zj3CPoiRjOpQSRHETwHgB5Hx8b7IoJDN679l14XUfRe6++7uEls
k+/GUfR2qbXlg3dbYtfeMtsyaTV0IyGsS0ktRVeDMW9fvRBmojfBTAvMgOyj
TQv4EspcTLB3sBaGJCeEojAOKlczbmNM7w4WxukUmrElbSepKSHo0W0OS6Bk
YLmGpv0xrfvdimpNIp3xiSh3bns7cTAW2m1tE+5s4De2JJfVYsq2CmPFGTiB
L0EyaF6Z0Z4qEsdqDUT5k1xbLAUBcNGzdg+ah+xlfaCIH0YsY6jywGx/V7R7
EDuqjJjaW2uytbW8bugPtusdjA8f/6uBSaYZUhOqmsAXD6GKKkWN+I4hj43j
Qkln/PMfsL4NVblFM6bZRp/O79OknqHausObSzbAVYUaNHx3+vbNm7ffIYpz
ZUXmg7lrAOQ7gX0kCXn3lK+rISMjxoGU2ALtjjB73JqKj0LpEUvu445DiiRh
8yH1P7lsH9PLsJfNBxUdYVXCnguu94TSHl0yV9RakwV9/xg6Ibd2IaLVRaEJ
6VvUAxKu4dbOAw7+fec+evixx2urPRv1pV3LpRv9ly7r0l8X1mC8l8D8D2Wx
U+UjS7V0/386tM/toe3KKNgk/3APkrfg5YCH6QiI9Op+7+rcCUU937i8dapV
Y2Gw92fnF63L4YDRvj/bQWOtHEdPvOJaUCpkTYoy6btje3t7jIKWzoPoj/0J
/9Jh+Akm3pS9zAahA9r1UWT75sXwQaLTBrLouhk9UGYCFXaeP9vKklm9pTLT
d8lNsIlG4YxHcmbrD/V4uojKNKDoL+PEScmyE6PDJ4PBEfwH4npOJlSQJw36
NrjisFZvZfJHBdU+PwrLt1IMwP+jpXP/p8jbf36RN0zZx+TSPsK7juey9biR
aqlX6FF6Fmd4z/tMoWuLAf4zKU/6nEqI1pKLPgpz0fuuKfnwacA0/5jQLCqX
Xv5b4x7b1lhzlOIRNdNcfsrIX5jHjxvrcgUeqNbphpx6yST00O3YNMIP4TV+
hgzjmKZ3V1L9c2PLFFTEG/oUOfQ7CcjARS/gO4XwY9klgE4m1Qy8/bSfiNH0
7xTH4mf53zWV26+jD1HUWTbaYKUMjovRI3lvw9XqoS05FzKypw1g7AChuKZ9
WEh0dSptOU7HIh5wGXlBVN5WwnXPs3gNrFcwapXmtTynsnqKQfQcgBS10PMZ
YYT+/N1jboDm/PC4PX7c/NQh3dcI+s7vEFJ8pMjphwvb27m7sW04vKchltyk
69RLLra7qWZGRcamzqNgPzm2ld/6/omQWhTGcB/HcsLdONK3rfHyIZxG+JrH
tDcMcm8N0oXIrOnVnQ14EEop/rdkjbn6z6iZPjHeWyF3kkuLOEPpArWcNcqa
HeNTebAfNtPHB3QCgSC7VzsSoPTcHGon9JvTYvtBWiwHxGlWbL+RFYtfulaS
FItPbtLpfeRLKJZsChFE/ozItd2O1otnRO0xnQYXNKiwwvrwCSJxN4Vxx335
Mf1EJcieHNhWP/OzSVLWv/i7ZVxfPfRjgurPmGR9tVqM8Ta2B0+Pl/LLPuOV
/OxvCSJxlQ9BafpZoBRCfcc+Alo8ejI4PDwgPN/pamoH1LaH97S1+6UfPAk/
aABAW325PU3nwMNtu2AvtdXTbZ8M7FoS4L7q2B/9+Kg1xKZdkS+eDJtfdO+F
Nh9tj2ml0bRASt3Xu5kn3VLJY2kWckTi++03fLTl+SJBo3t1lS5/ZscNStIm
3xsrLzXZh3CGO3gI0UuvP/miu9gUz6Rr3YDPxMo3vCMhdtO7lmhzZzsrK0Ub
5tjioG3C7K33Dl7mSR9tscPKGP2qwKoBX1vtTT4ji53KVd6zDtEKtHYSwli0
Qp2Mqo4VriYVzrElbHwgmbs5EeRnm8azWxE1UWyjdKhLsIKkleJCLWyT3iXN
AzWqU3EiKXCWgRaiKqaOhLlAekO3TmdcFJl7z54/nUr4DrHimpTmUcfbaTJe
zVVIbX64BBHWlQBRkTVshUELczQN+g0Pu7pb5Rhn3EdUOzZPurpaLFbkCD02
X3a8rifjY/O048XEC0NsTOTIb476mQVwqJl17kj34bynpbAzq5T+lyh6/8l6
nnGK3oZT4IMysaB8QOPVQxpvmNhDBtDtWvbRkhs0Akl4eeAeo3y9fOJ+R+Hb
Z1qdh4TWgyho23iLIm0Z3/TTcAuc7M1zw9dkcYvsX4hAixRoOjfMqfDnNawv
n/XMIv6kL5YFB3/giw9Rsz+VBA627aOdyP8EyeEqyyK/f30WNQwjSva9x55C
zT8bBJEVzxK15qFrBr9DehhFi3jStS/JKj14GuwMPHni7UbUbBHC/0nUaN94
/xQQ+a6z0mm5eOAHHkbf9wULFPf2i4pa1GTgjn08mALQxixA29Nd8fvk3CmP
/zWoxOgB1qDbcJquy07uK6mOOnX56c2gus51pvBnB89lqdgaAeWn3n+ELYgb
KPezrIFebkuCEMghcFJprsoAH9snbQIqAo1tsIirj8oPw6c6D2N2dKcE25U7
dmG/cr2ltGRGaTrol0KJUvb7HACj/FNsqvgeybHySUea5d2KpDLeAIe4/JLl
Oyms63XI2w+7j5VA9x+AFipPqRyhXiX8ngHe8S5ygE6Riw4diNMWWiPj78Y8
XwoA8cth4RuUZ7ff7JgBOki2P8MKMDsI79GCf25Be7JuBKEdUYMiMJEdDofb
+gQ+6kadFj+6txkiEPxjmzE/aSCXnVm04SvlA/vbKJUIjvMnxmBjY2vK7fjl
gbtkGniL2lWXPIOv6Lq36g5l4y4V7X6pCQ8fD+FJTt3jCKkwQl8xyfmZJSAR
MNd+45EAj5+Sij5C2mO1bfcJvdzflgc7UYMscaeOvwc/5CNAkTbLtGR+wzt3
NKOmQ8Sy54fw5efSzpJe52RR8kuj3MosGxybrb+UoaaqNNqUN7aUqD2+Qi1q
jiIbZAbTZBZj7Yo9i8fMqwV597bpJ/bgvDGdHKWJwKrbRZwI+luzCcOVRjUU
bi11bL/faDQQEhfqBMqY7OcbdAb9vOU9Us5lO9joX9IuWqYe9WTZLu6zCWlP
LdtOJVyu2dNGI5D2FFiUVTO0vXTam92nD3AsVML0vC5/hjvivqEcJuw9aJB2
78icPMxtcCTLkhsi6vaXg8H+vqVBfjOiQnvb9hGcDEsg2opIUyzlDva/3LZP
4HtP+LIEpSGfeRKAtq4mV8nCGUjCx0hEWCIT8h5n82Oz7UpyUu43SaNa1jTy
JTjxrkgX8LItJDQppRAUqfjZ8YFePPDbDomj1VlDoLxtezSkN/VtfN3p3OhJ
C63soeJOUvZEwS+Xq0qtGPxsSXehBI8c1Y0z/01VzOqbuEzIFKZzkE/0lTe0
exvuVscGcjMOverud5HU9KrIkz4GThRl8rvgZZ8qW3zds57OZmuhh67Zc3LL
N5vhs6CR1L3FBpqv27MOetoee8rw+TwrxnBOgXxSJnVS9ShupN2JREVoWV2M
TZFGXKNj546P7E+8XVX+tp9FIFX2V2WKOFqmkbriBGFQToka4EcWymUO47LO
MZA/nTykTZ9KYH/qahpny6v4jq4kSrHrFVA3eNj1xj9xuEgLZCnrbz2S/oZi
86/hM/8ZdPQ1lvL3n12glH4BDX8woy/gDyADrb2UcZ5TCqiPqV+YYD497Pwq
rq5kU5gq0QMgTSQ7wRR6+syXlnuetVw//uzc9+2jxwZv0SZw3/Ex2rebgHiM
DwWpnfcHW7mZKmbrBO7HbOpVtAn1/7uH9oi23uhVM/6zKcbbcf0B9zCjRF7/
iYsJcM981HBH2Jou7MUIHuiuQERrgK2TBhU3OQsdRLjsLwIzo9tj+Nf7XHiK
3weGl2JD+FdBzLN8AIDd+AjQK8xJbTykPK06aTyNx6BuAusPn/qAwnlTS0yN
YaDzA5shb59IiQb7m6yhGaea0aLtm2U8+RjPE2mQlN6L0u+RGA/pp/y75PBr
96BKkj6mdLkHq2WCIrHfxmNV9mGfggyfHBzsP3FLxR2Ad3pHoX0gw069B3gZ
PAXN2mc+0Dq4jkMzTOwnmPSluEqABZJN1YEfGOFYwERg+zs5qF/0JHiRsGTY
eJhT+CYJiRg72tdFhnzeb4aFN4M+6OZ5uqwXbUKbpI3nmIKIif/YhxNM5BXl
idWdD/uzeJFm6yYp44DihgywWiwwMyU8UHm1rCZ9qj7Q9aIDinjoGpv3EMZd
X6mBs+pzJDBy4OeSSV+ULUHDvvDEiO7/nhsOJg2/x2f3fMq3jnPpJHfVi3Cn
jilb0GNtm+Z48jgQerT3Zls7qmv8Bd9C1ZyMD1yYrluUHBZ8UK0BcRZ9vJtZ
thoxSyLZ+Al913kkkGl1My8e6/69bWzUXRMLYIqjfu4CMxeuwil4XT8Ax/wN
kFnosza/X/Ix8wR7HND2cf9w4R6qYtEgScGuPqDTBtSsoCR0xRGdTEq4+IPN
utZZFoVHOnacDO1PuwPxLES0+f2Tb4jQd3b9nC/9czvQR0+0UmksldKig11L
JiHLDnv/FP3BxBqM+u2OWung2V7UUNDMMFJVyIwipzOY/Yg1H3MQNRQscxhZ
hcQ8ifiMmS8j1RzN00gURnMUiaxkhjByoDKa4TAK9FAzHEVtFdEM96OmamiG
BxEL12Z4GHk0Fu0LEno//DKypMwMn0aOWJnhUcQ0xIz2opB2mNEwImw0o1Hk
tsSM9iOLf2Z0EDHemdFh1Dj0ZvQkCo+lGcFMCPajp5EYEkZHUSCqm/1hpCK6
2R9FLJmb/f3Il8HN/kHEeGX2YdkOj8z+k8gJr2b/y4jFVrP/NPIEU7N/FJEw
ag72Il8INQfDiIRPczCKOsQTc7AfhWKJOTiIusQRc4AT88QQc/AksuKHOfgy
ukPsMAdPo5a4YQ6OIk/MMId7UUOaMIfDyEoR5nAUNaUHc7gfOanBHAJCq7Rg
Dg+jQEowh0+ipnRgDr+MoqZaSydng65LR8lXbuk4ac4dnShSXwlhsTpq5OlF
z4ZRUyF6Br1ZTegZ9ORUoGdwEkT3eXYYOaXn2RPQflm2f4bgIdkf+mHVAPqI
VJ6H11aShwYiw0OLlvQOYzXl9md4AFBih/FEVn/2ZaRS+rOnkcrnz44iJ5k/
A2IQqZD9bKjtpzC8J1jjJKXc4ckEiw9myZTS5qro8zG7F6HR1gy6TzDViC7W
i21LTBvSfP1jysk/AzwsyuPo/wKXP7HKcN0AAA==

-->

</rfc>
