<?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.6.39 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-miller-api-manifest-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title>API Manifest</title>
    <seriesInfo name="Internet-Draft" value="draft-miller-api-manifest-00"/>
    <author initials="D." surname="Miller" fullname="Darrel Miller">
      <organization>Microsoft</organization>
      <address>
        <email>darrel.miller@microsoft.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="24"/>
    <area>General</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>API</keyword>
    <keyword>Http</keyword>
    <keyword>OpenAPI</keyword>
    <abstract>
      <?line 34?>
<t>This document defines an "api manifest" as a way to declare the dependencies that an application has on HTTP APIs. It contains characteristics of those dependencies including links to API descriptions, specifics of the types of HTTP API requests made by the application and related authorization information.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://darrelmiller.github.io/api-manifest/draft-miller-api-manifest.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-miller-api-manifest/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/darrelmiller/api-manifest"/>.</t>
    </note>
  </front>
  <middle>
    <?line 37?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Applications frequently rely on HTTP APIs to provide functionality to users. Currently, there are limited options for developers to be able to describe those dependencies and options that do exist do not have sufficiently detailed information to enable some of the desired scenarios. By contrast, there does exist declarative, machine readable files, that describe the dependencies that applications have on code libraries and packages. These files have enabled an ecosystem of tooling related to checking, adding, updating and reporting on dependencies. This specification defines a machine processable format to enable a programming language agnostic tooling ecosystem be built around the dependencies applications have on HTTP APIs.</t>
      <t>An API manifest such as described in this document could enable a number of scenarios:</t>
      <ul spacing="normal">
        <li>generate a minimal set of client code that can be used to access the specified resources</li>
        <li>define API subsets for API gateways</li>
        <li>identify the scopes or roles that an application must be granted to be able to access those resources</li>
        <li>use as Signed Statement in Trustworthy and Transparent Digital Supply Chains</li>
        <li>perform dependency checks for updates to APIs in a similar way Dependabot tooling does for package dependencies</li>
        <li>provide security alerts for APIs that have announced discovered vulnerabilities</li>
        <li>describe the capabilities of a skill/plugin for a chat-based system</li>
      </ul>
      <t>It is common for the the person who consents an application to be used, and therefore access data and functionality of HTTP APIs, not be capable of reviewing application source code to understand the details of what an application does. The API manifest can be used to create admin friendly descriptions of application capabilities to simplify the process of application consent.</t>
      <t>There are no guarantees that an API manifest accurately describes that capabilities and dependencies of an application. There remains an element of trust. It is not in itself a security artifact. However, it can play an role in enabling tooling as part of a secure supply chain.</t>
      <t>By creating an API manifest format independent of the application programming language tooling that consumes the API manifest can be created in any programming language. Language specific tooling could be created to generate API manifests by introspecting application code.  Tooling could be created to produce API manifests to support  design first methodologies, or integration centric scenarios.</t>
    </section>
    <section anchor="schema">
      <name>Schema</name>
      <section anchor="api-manifest">
        <name>Api Manifest</name>
        <t>The Api Manifest document contains information about an application that consumes HTTP APIs. The canonical model for an API Manifest document is a JSON object. When serialized as JSON it can be identified by the <tt>application/api-manifest</tt> media type.</t>
        <t>An API manifest document <bcp14>SHOULD</bcp14> contain a <tt>appPublisher</tt> property that has a value described by the publisher <xref target="publisher"/> and <bcp14>MUST</bcp14> contain a JSON object that contains of zero or more mappings from a string key to Api Dependency <xref target="api-dependency"/> objects.  The API Manifest object <bcp14>MUST</bcp14> contain an <tt>applicationName</tt> string property to uniquely identify the application to users of the API Manifest.</t>
      </section>
      <section anchor="publisher">
        <name>Publisher Object</name>
        <t>The publisher object <bcp14>MUST</bcp14> contain a <tt>name</tt> property that is a JSON string. This string contains a value representing the organization or individual responsible for the application that this api manifest belongs to.  The <tt>contactEmail</tt> property <bcp14>MUST</bcp14> provide an email address to communicate information to the publisher of the application being described.</t>
      </section>
      <section anchor="api-dependency">
        <name>API Dependency Object</name>
        <t>Each API dependency object represents a HTTP API that the target application consumes. The API dependency object <bcp14>MAY</bcp14> contain a <tt>apiDescriptionUrl</tt> that references an API description document such as an <eref target="https://spec.openapis.org/oas/latest.html">OpenAPI</eref> description. The <tt>apiDescriptionVersion</tt> member can contain the version of the API Description used by the application. This member enables tooling to detect if the referenced API desription is updated. The <tt>auth</tt> property contains the requirements for the target application to authorize a call to the HTTP API. The <tt>requests</tt> property contains a array of <tt>requestInfo</tt> objects.</t>
      </section>
      <section anchor="authReqirements">
        <name>Authorization Requirements Object</name>
        <t>The Authorization Requirements object contains information that is required to authorize the application to perform the requests listed in the Api Dependency <tt>requests</tt> property. The <tt>clientId</tt> property is a JSON string value used to identify the application to an OAuth2 authorization server for APIs that use OAuth2 for authorization. The <tt>permissions</tt> property is a JSON object that map a set of security schemes to an array of permission strings required to perform the complete set of requests defined in the Api Dependency <xref target="api-dependency"/>. The Api Manifest does not attempt to correlate which permission is required for a specific request. It is assumed that the application must be granted the complete set of permissions in order to perform its function.</t>
      </section>
      <section anchor="requestInfo">
        <name>Request Info Object</name>
        <t>Each Request Info object contains a <tt>uriTemplate</tt> [RFC6570] and a corresponding HTTP <tt>method</tt>. The values are used to identify an operation defined in the API description referenced in the Api Dependency<xref target="api-dependency"/>. If the API Dependency<xref target="api-dependency"/> contains a <tt>apiDeploymentBaseUrl</tt> then uriTemplate values that resolve to a relative reference <bcp14>MUST</bcp14> be relative to the <tt>apiDeploymentBaseUrl</tt>. The <tt>dataClassification</tt> property is a list of URIs used to indicate privacy classifications of the data being transmitted via the HTTP request.</t>
        <sourcecode type="cddl"><![CDATA[
apiManifest = {
    applicationName: tstr
    ? publisher: publisher
    apiDependencies : {* tstr => apiDependency}
    extensibility
}

; Identification of the application developer / organization
publisher = {
    name: tstr
    contactEmail: tstr
}

;  Declaration of application dependencies on HTTP API
apiDependency = {
    ? apiDescriptionUrl: tstr
    ? apiDescriptionVersion: tstr
    ? apiDeploymentBaseUrl: tstr
    authorizationRequirements: authorizationRequirements
    requests: [+ requestInfo]
    extensibility
}

; Permissions required by client application for the described dependency
authorizationRequirements = {
    ? clientIdentifier: tstr
    ? access: [+accessRequest] | [+tstr]
}

extensibility = (
    ? extensions => {* tstr => any }
)
accessRequest = {
    type : tstr ;
    * tstr => any;
}

; Details of a resource request
requestInfo = {
    method: tstr
    uriTemplate: tstr
    ? dataClassification: [* tstr]
}

]]></sourcecode>
        <t>Example:</t>
        <sourcecode type="json"><![CDATA[
{
    "publisher": {
        "name": "Alice",
        "contactEmail": "alice@example.org"
    },
    "apiDependencies": {
        "example": {
            "apiDescriptionUrl": "https://example.org/openapi.json",
            "apiDescriptionVersion": "1.2",
            "apiDeploymentBaseUrl": "https://example.org/",
            "auth": {
                "clientIdentifier": "some-uuid-here",
                "access": [
                    {
                        "type": "delegated",
                        "actions": [
                                    "resourceA.ReadWrite",
                                    "resourceB.ReadWrite"
                                ]
                    },
                    {
                        "type": "application",
                        "actions": [
                                    "resourceB.Read"
                                ]
                    }
                ]
            },
            "requests": [
                {
                    "method": "GET",
                    "uriTemplate": "/api/resourceA"
                },
                {
                    "method": "GET",
                    "uriTemplate": "/api/resourceB"
                }
            ]
        }
    }
}
]]></sourcecode>
      </section>
      <section anchor="extensibility">
        <name>Extensibility</name>
        <t>The API Manifest object and API Dependency object can be extended with additional properties. The <tt>extensions</tt> member is a map of properties whose values can be any valid JSON member.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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?>

</section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document document registers the <tt>application/api-manifest</tt> media type.</t>
      <t>Type name:  application</t>
      <t>Subtype name:  api-manifest</t>
      <t>Required parameters:  n/a</t>
      <t>Optional parameters:  n/a</t>
      <t>Encoding considerations:  Encoding considerations are identical to those specified for the "application/json" media type.  See [RFC7159].</t>
      <t>Security considerations:  TBD.</t>
      <t>Interoperability considerations:  TBD.</t>
      <t>Published specification:  This document is the specification for this media type.</t>
      <t>Applications that use this media type:</t>
      <t>Additional information:</t>
      <artwork><![CDATA[
Magic number(s):  n/a

File extension(s):  TBD

Macintosh file type code(s):  n/a
]]></artwork>
      <t>Person &amp; email address to contact for further information:  See Authors' Addresses section.</t>
      <t>Intended usage:  COMMON</t>
      <t>Restrictions on usage:  n/a</t>
      <t>Author:  See Authors' Addresses section.</t>
      <t>Change controller:  Internet Engineering Task Force (mailto:iesg@ietf.org).</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 250?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
    <section numbered="false" anchor="appendix">
      <name>Appendix</name>
      <section numbered="false" anchor="example-for-microsoft-graph-api">
        <name>Example for Microsoft Graph API</name>
        <sourcecode type="json"><![CDATA[
{
    "publisher": {
        "name": "Alice",
        "contactEmail": "alice@example.org"
    },
    "apiDependencies": {
        "graph": {
            "apiDescripionUrl": "https://raw.githubusercontent.com/microsoftgraph/msgraph-metadata/master/openapi/v1.0/openapi.yaml",
            "apiDeploymentBaseUrl": "https://graph.microsoft.com/v1.0/",
            "auth": {
                "clientIdentifier": "some-uuid-here",
                "access": [
                    {
                        "type": "openid",
                        "claims": {
                            "scp": {
                                "essential": true,
                                "values": [
                                    "User.Read",
                                    "Mail.ReadWrite.All"
                                ]
                            }
                        }
                    },
                    {
                        "type": "openid",
                        "claims": {
                            "roles": {
                                "essential": true,
                                "values": [
                                    "User.Read.All"
                                ]
                            }
                        }
                    }
                ]
            },
            "requests": [
                {
                    "method": "GET",
                    "uriTemplate": "me"
                },
                {
                    "method": "GET",
                    "uriTemplate": "users/{userId}/messages"
                },
                {
                    "method": "GET",
                    "uriTemplate": "users"
                }
            ]
        }
    }
}
]]></sourcecode>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81abXMbtxH+fr8CZWZaOxVJy02ahHlxZEm21bEs16KbyXg8
I/AOIhHfWw53lBlV+S39Lf1lfXYB3OHIk+Nkmok1oyF5eFs8u/vsLnDj8Tiq
dZ2qmRgdPD8RpzLXl8rUoyiWtVoW1WYmTJ1ESRHnMkOvpJKX9TjTaaqqsSz1
OHMjxvfuRbqsZqKuGlPfv3fvi3v3I9MsMm2MLvJ6U2L0yfH8UbSeib9FslJy
Jh6rXFUyja6WaMtrVeWqFsf5UudKVTpfirk0b8SjoopV9EZtrooqmUViLCAq
fTyp65I+z0qV06O1yhs1iz4SYlkVTTkT3z2mH3bt74rqDU35mJrocSZ1Sl2+
VW9lVqZqEhcZPZdVvJqJFeY2s+k0aJxiOkyt61WzAF6JrCqVWiimIRQj9EoB
n6nRy88T9p7YOSa66I2b3gruZFVn6SiKZFOvioogwBJC6NzMxNFEnPIIfmS1
dMSLhc+Laom5fpI1dDFDQ1wVprisuU1ZJKyEE7v8t5nvwrBEeVFlGLwGvJHO
L4Nf0Xg8FnJh6krGdTRfaSNgLU2m8lok6hKqNELmYoT9iBYhIfFQXMmNqAv0
ilPYg6hXCt+hy0TlscaweiVrGivLMtUxyy5WGImPJ/P5czIDMxEntYhhYBJo
iHglSQwYj6l1jJ6XmKQwW/PqPE6bhIwh1fkbQzKQ8SfKxJUuaRmzJ0ypYn3Z
TqLYjPiHX1tU6scGuzHYV6LEYsPdQmFlnqAT2UIirO6cCkSLYZFPLISZTpJU
RbBAeEJVJE1MjVF00M1nxCUvmdfphubd9JCgbZRVsdaQ5bLJebhMdc0YN0ZV
wOqwgY5p+B7JCswJ91RnmiQsSrdIUQGLtUqLEoNo9AIdF6myyiKQFmoIV9qu
n4R1lxRCvYUq6Ete1FDeWgnTXAJWbXeRKCguxeIBILSMynlBU2TK44+VdYWe
JkZjpQts5+GGVV9JU/sNJQUEcYuyXbGd7kFF8Qq2CNhkwlNfYlmz5+TsNjVo
gqEKeA8QMi4Sgm5RQRa391LGb+RSQbD5Shm3hB1g95OQNau4MBtTq4w3VhQp
GaK3Emw9XqmYmGpPyCThz6ZMsDh6WXsqi4p/QYhQVloVzuft1kLZemALAEwk
VsZYDBjyAG9JzctKZhl7h8yXDTYk5DIvyKFacbs9ALRFo1OABF6FeDsIDoLX
uS8MPGdn8twA+4hXxA9eKWQbmDbklbho0qSTOW+yhaoIztY2QExjseTwUlMX
7EdnMhUGAQb94lTbeRJlVRxDMdgK3IR1IGPCiDfj8FSEvCkahCKDqS2uLDiC
HGa1bkO/l1gRzEa94Ip5rS8tMZi4YAKpRFWkt7BbhthJckAFuTOHwPdaqcjz
QmkgNiF2rpc5Bp3XkIBxAnBzCscInPVqw+Yzx8ymlMQC4kgjEAGU8wYibMTh
ijgU08HtyTI6PW6sUdo9sjUqz5rEpsDXgEPgbEzpRzxMLoq6tRf2ShrsXKRn
IrSi4y2j4qYiypKIQR2mDiy2HpnnMLQY+0w0IF0r4oR1k5KqFxp8p52CApeO
Zdm2kfoh7xuEuWmZNsg1eBVJsaMeLyRZgLXtKEJogdkhAGaF7cVxAP9EjHh0
tSqIgAzANNuqtKojg9pj4JmeMIfyagSKklv6ZB0EGNATsebCbSBlKqzUWqsr
ZoNgNWsLzqBB98C2MrVsHZJYlrd+NWB1pB3mrL4jbvlEDOokX0oyggyklydM
4F3QZGiDeXuwYwYYCRqdOzge2hlj4QQvzNsAlRcCPMQuEfhNT1Zg2pCrtxIt
fM+eEARIj51o9R4YjENF7pVxRkGEnVpvIromb+KUA3ZBugEUujYqZZtqjRf8
fIk0ZCKeFFcIpNUeOjGcZSrJDZkBaCxTGOnSOwq8GM5ZOyOlCSlgsnvG5J7A
hYIeqcIGhD4MjtB17jdZ++gZYjzI8V4CCxq0AKq1DDhkFNYYmJplvhmccSKe
+rl9TGoXsQQezAPraNk6XM9QWqUpIaI56m2zJ3ufCDF/x7Ql51Lbs5I1Albw
ouDEYgmT1vAYkSnQa1KkxVJTegCfx+pqWbn1gGiFfXQ5CCVs52DHTOLbR+IA
Wa4vosT1R2ESf8Mm3e8RRDSXwYZ5ECi02XHWvn6CPHjORJcXOXqmIgMyqWU2
ayO7a2pKC/5xfvZMFIsfFJnrdysFKkH2DCr6ibIVY9t1q3cX0Sgcunz3IhCu
V85cAMtES86bB8J8K8b5k7OXT488AhCJZnzewC8MPPGCFAi6pTTWxgCSei3T
RgUZgpOl9KPE9XX7/eaG3f705fk8WCTYdwup1QAc5idVFaT6jOg6gzgwLkq+
i4y8subSFPUoh0Co86iLk9fXBEEXOLG4XcSQmTpnalXh1u+LlvcgfYaC7sKv
2UFBFK9RCoAXeknGVgTitN9TQLj0hK21RVmcWUmuP+pgs+baQToorLjIWcC+
kjrLsoL71NTuokXa6xEpLbIZ2gXzj+pVq9YFE438oIFdo2MJ49cufd3dNK3P
2WJYcMJ004J0WBdODxcsRVwfU/EbyM/b8+kIkT+1UyZecepVcDbQkI/Varto
6ZvgAPEuFCdD3mytEkgtgQW1mtgypCg6RgbvCtW2t1NKiyCB2tanDgtwu6yW
qt6Js8QgXdzfnfX04Pu+W+qjLtq/rAAbr4C0BhETKZnxXBMkBZ2f+7wefV65
E5vXd/zxCLH7BCrIsYiZQP/TQpqpPUXh04+74aRW6C2B/gVTxwfRDpcDxFhe
egJhbdtDbwhG2zRnt4Z3puvmtCWH6YIlFcQ1YaXtrC0WiQfCz49JbOaceOmb
ehUYXusVdpofGxS7GWu0TTx3tUhFgTtXoCoHxJ96Q/RW4FbzZxVDKyINrSrJ
qafvdwLLvmipy9pp7wDjRShhZ7Pogxbf4EPe7SOdpQ2GP08lDoykv9sBtvN1
i0eQIz28sfY1pNqm6wFYHF62QjxJAry2Wc2xl8+P38XDMMUzQuH+1jEQ6Blm
uVXmUDXnenP8Dkc46SCQO1g1gwKGgQ3xi3NJTgXbHNVQzmLTckowvP67id0m
+/CHCIMIyxTG76duEbe18W2Q70ZIR0H9vEjZ/FrWKMTK2hJvZU9JUMNoUEkg
amgktphrM04nlc/ZpSHWSzpqfGf1PbDLAHnaYFGh0AqR0eSwrqCzfvPCSiDI
pTpPCfzMU3uv47ZjgH+huDnAIAguxKsXjw7//uln915zciMtOhQa+VyTnf/C
5rIXFl82VsP11I7FwgLIhMIjo059W3weMNyggof0exJS7u0de7tlci/TYkNE
8RBluQs4yFADIPy2XCAyRbq2RyX2RE2vA0q2sX2huiZHlcNrOVejMv0whd20
h2rbHkcMQ6bx8gU8uMUWiuAcoaz0WtIJSm+ONinjUwCbF9R0NJPpmkxvTYmz
Z3Fvw1H0888/izhJ0iiCyK23fC2u+SB/K22ciRo+zC0Purxk1n11g/RRWBHP
xPXHPFB8/U2vESkI3xa8rRXlX1RSbyLY7pfixBUFzo0GEp/2OFlMe8ld1KVL
fhN5X/IwTXOPeU0YkjvdtSv2Vwsr/O60Meptp13xgdjJbHrQDaYZuz227Cfo
0GPwMPzNbm/igZ5SZ+LVX0XAGK9v08TzgJ1aRlxs/HlnCJLPKroiqnPF6Fax
AtB8hHQFYdVHhM+4SG77zXHba/FvPKJ+r0ng3g4w9R032j2nXcAIQ3vMN+Im
uhv1Jm1lokpTWDHEl/ykN/JLi9FRdxgm21NUj24UoNzOa3k02F9AQL1d73IF
ELAy8H7hvuB6e6M4s978g6FLHrvOqPWG0cwtzY/JJUZ0QwvlqdFe1xA6B3WQ
1KG9z4SjjbjvjR0y2nL1/iJuVO9hNyp0jlFwrRmsNXXp+4S2FEg5MInzIZpo
f3J/sO+WN9225s5YGO7OFixWW+ZKM9L10rhpdDKmM7+tuex8bGjo+2qnjf52
12lHkjHSGolKFV0JJAPTB8twULh1nZ0B3m4PJi+UTL5DSjck/juHPgyG/uLI
14M9boaXfA9UAib6XXCxm/vN+9p52u+3te+R5+lBOYfRGFlSISweH89vwWAU
EA31pPO1aav63d0N6OP3Wv3hwOq9Jx1i9vkNCJD5DynxcS9yRbedi1Fmu3U6
4tNiexrJcSJB6LrS9YqvS+09ik/QtD/fuOgiSns+oO2taMlZfduf7nRMm1a6
dSjs4IlObHVlJ+Cj38MiXxOjFLm9XDii5JmlMHZfdExI760YMaL0c7RnP8Wz
M/7+4vifL09eHB/R9/MnB0+ftl8i18Mej3bfupGHZ6enx8+O7GA8Fb1H0ej0
4PuRvXsanT2fn5w9O3g62r1L5Tcv+K6KDrqrslL8toKJevevDw+f//c/+5+g
evsTCo/7+/tfIF23Pz7f/+wT/LhCZm5XK/J0434iwUAyUZZKVnxVkKZ0H0OX
jmaPzoLMqrjKBZEv0Pz4FSHzeia+WsTl/iffuAe04d5Dj1nvIWO2+2RnsAVx
4NHAMi2avedbSPflPfi+99vjHjz86kFKN8fj/c8ffBNFfH3ga/JDOthMXB1G
9nN2dNa2cteTg2cHu93679z4L5Va0tFHZX7VMf2cciibg4fpYhSdN4u619ZN
EUUvfK5ZIiUHt2BV9MFCUXRWep/caTrO4yJxJ8LBjtB8Swsbq61a6Y6Dyzfy
1u6O3me1YYCZckISblMAVcUl9Gf7n37xGttudbAjyvzhEdr57TSukV2yeks/
f6Ke9N/DoPaelnTv5YJeSs6njeHFSfgCRXtAtNUP2eRBR3/BKRoaiH1P5VLH
7kWJO+au1wA1PdKp6jJu24jN+HExaKEwK36ZxWbYdOkWzPHc3oX/eeionNNT
3tdlU9ENeE80qwZ7Omj+Ig7sSNCuUf78hHBnhm+MXJLdkd+dPSOLo/Op2NXS
edvOItkp32f+w5XMl8q+RVTQi28Y9AtvIoo7tM+6mCFaLL/Vqr6kTPSue41r
IeM35KkH8Zu8uEpVsrTl3PXMgq+Sr0eXoD81unEOLtueikMK9I0t67fDQzh6
cv7LsLZv8onHlSz5emB43AdVayxJ1ndVGruFRiWv3GuTdKdFwtBbAvRWZvum
Is86zQx/jkE1kuqxaSaJBX11Ml3vT+61pcpGZumvLT94+knv/Ug76Ydfi9C2
9TsLkTiVOjODUvf6mbj8xU7ckRwOu5QEYV016peLlJHNvd4/538Jg7Dp/ntW
QKcw4a74mRyk6W8tFPzfbsHw7pbfXjj9/1TIb6F9eEr8Q9TxgdZ72UBl/vvW
ePzCwPSaPk6Sm2lGb4ouocc/QozfWmH+D0KyS/3VMAAA

-->

</rfc>
